From b3cb32f5e69ffa69f4747725516e3832a396600e Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Fri, 7 Feb 2020 14:54:48 +0000 Subject: [PATCH 1/4] add sys --- package/MDAnalysis/analysis/waterdynamics.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/MDAnalysis/analysis/waterdynamics.py b/package/MDAnalysis/analysis/waterdynamics.py index 666d19b5059..e5451e70c8d 100644 --- a/package/MDAnalysis/analysis/waterdynamics.py +++ b/package/MDAnalysis/analysis/waterdynamics.py @@ -455,7 +455,7 @@ import numpy as np import multiprocessing - +import sys import MDAnalysis.analysis.hbonds from MDAnalysis.lib.log import ProgressMeter From 8315378557d446f5439a60ca9fd3c373f8a5f034 Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Fri, 7 Feb 2020 16:00:23 +0000 Subject: [PATCH 2/4] removes nproc --- package/MDAnalysis/analysis/waterdynamics.py | 92 +++----------------- 1 file changed, 12 insertions(+), 80 deletions(-) diff --git a/package/MDAnalysis/analysis/waterdynamics.py b/package/MDAnalysis/analysis/waterdynamics.py index e5451e70c8d..376344f839b 100644 --- a/package/MDAnalysis/analysis/waterdynamics.py +++ b/package/MDAnalysis/analysis/waterdynamics.py @@ -454,8 +454,6 @@ from six.moves import range, zip_longest import numpy as np -import multiprocessing -import sys import MDAnalysis.analysis.hbonds from MDAnalysis.lib.log import ProgressMeter @@ -501,22 +499,21 @@ class HydrogenBondLifetimes(object): frame where analysis ends dtmax : int Maximum dt size, `dtmax` < `tf` or it will crash. - nproc : int - Number of processors to use, by default is 1. .. versionadded:: 0.11.0 + .. versionchanged:: 1.0.0 + The ``nproc`` keyword was removed as it linked to a portion of code that + may have failed in some cases. """ - def __init__(self, universe, selection1, selection2, t0, tf, dtmax, - nproc=1): + def __init__(self, universe, selection1, selection2, t0, tf, dtmax): self.universe = universe self.selection1 = selection1 self.selection2 = selection2 self.t0 = t0 self.tf = tf - 1 self.dtmax = dtmax - self.nproc = nproc self.timeseries = None def _getC_i(self, HBP, t0, t): @@ -633,82 +630,17 @@ def _getGraphics(self, HBP, t0, tf, maxdt): a.append(fix) return a - def _HBA(self, ts, conn, universe, selAtom1, selAtom2, - verbose=False): - """ - Main function for calculate C_i and C_c in parallel. - """ - finalGetResidue1 = selAtom1 - finalGetResidue2 = selAtom2 - frame = ts.frame - h = MDAnalysis.analysis.hbonds.HydrogenBondAnalysis(universe, - finalGetResidue1, - finalGetResidue2, - distance=3.5, - angle=120.0, - start=frame - 1, - stop=frame) - while True: - try: - h.run(verbose=verbose) - break - except: - print("error") - print("trying again") - sys.stdout.flush() - sys.stdout.flush() - conn.send(h.timeseries[0]) - conn.close() def run(self, **kwargs): """Analyze trajectory and produce timeseries""" - h_list = [] - i = 0 - if (self.nproc > 1): - while i < len(self.universe.trajectory): - jobs = [] - k = i - for j in range(self.nproc): - # start - print("ts=", i + 1) - if i >= len(self.universe.trajectory): - break - conn_parent, conn_child = multiprocessing.Pipe(False) - while True: - try: - # new thread - jobs.append( - (multiprocessing.Process( - target=self._HBA, - args=(self.universe.trajectory[i], - conn_child, self.universe, - self.selection1, self.selection2,)), - conn_parent)) - break - except: - print("error in jobs.append") - jobs[j][0].start() - i = i + 1 - - for j in range(self.nproc): - if k >= len(self.universe.trajectory): - break - rec01 = jobs[j][1] - received = rec01.recv() - h_list.append(received) - jobs[j][0].join() - k += 1 - self.timeseries = self._getGraphics( - h_list, 0, self.tf - 1, self.dtmax) - else: - h_list = MDAnalysis.analysis.hbonds.HydrogenBondAnalysis(self.universe, - self.selection1, - self.selection2, - distance=3.5, - angle=120.0) - h_list.run(**kwargs) - self.timeseries = self._getGraphics( - h_list.timeseries, self.t0, self.tf, self.dtmax) + h_list = MDAnalysis.analysis.hbonds.HydrogenBondAnalysis(self.universe, + self.selection1, + self.selection2, + distance=3.5, + angle=120.0) + h_list.run(**kwargs) + self.timeseries = self._getGraphics(h_list.timeseries, self.t0, + self.tf, self.dtmax) class WaterOrientationalRelaxation(object): From 7b606b2a05f75064ac6515e1708f3c55ed1cc348 Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Fri, 7 Feb 2020 16:07:53 +0000 Subject: [PATCH 3/4] Update CHANGELOG --- package/CHANGELOG | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package/CHANGELOG b/package/CHANGELOG index 03315098bcf..9c00d3045ab 100644 --- a/package/CHANGELOG +++ b/package/CHANGELOG @@ -79,6 +79,9 @@ Enhancements convert between a parmed.Structure and MDAnalysis Universe (PR #2404) Changes + * Removes the `nproc` keyword from + :class:`Waterdynamics.HydrogenBondLifetimes` as it did not work in most + cases (Issues #2511). * Removes `save()` function from contacts, diffusionmap, hole, LinearDensity, and rms (Issue #1745). * Removes; `save_table()` from :class:`HydrogenBondAnalysis`, From dbd836f127b2bc92201a9c3e1a12a51a681908cd Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Mon, 10 Feb 2020 08:49:56 +0000 Subject: [PATCH 4/4] Update CHANGELOG --- package/CHANGELOG | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package/CHANGELOG b/package/CHANGELOG index 83b7018860f..a6f39ca8ece 100644 --- a/package/CHANGELOG +++ b/package/CHANGELOG @@ -83,8 +83,8 @@ Enhancements Changes * Removes the `nproc` keyword from - :class:`Waterdynamics.HydrogenBondLifetimes` as it did not work in most - cases (Issues #2511). + :class:`Waterdynamics.HydrogenBondLifetimes` as the multiprocessing functionality + did not work in some cases(Issues #2511). * Removes `save()` function from contacts, diffusionmap, hole, LinearDensity, and rms (Issue #1745). * Removes; `save_table()` from :class:`HydrogenBondAnalysis`,