From 6fefc7d193c4dfc862e2586c6e5b28717bae2242 Mon Sep 17 00:00:00 2001 From: VOD555 Date: Wed, 19 Sep 2018 14:46:54 -0700 Subject: [PATCH 1/3] Replace distance array with capped distances --- pmda/rdf.py | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/pmda/rdf.py b/pmda/rdf.py index 4c7a1f3e..21e16bc6 100644 --- a/pmda/rdf.py +++ b/pmda/rdf.py @@ -30,7 +30,7 @@ import numpy as np -from MDAnalysis.lib.distances import distance_array +from MDAnalysis.lib import distances from MDAnalysis.lib.util import blocks_of from .parallel import ParallelAnalysisBase @@ -117,23 +117,22 @@ def _prepare(self): # Need to know average volume self.volume = 0.0 + # Set the max range to filter the search radius + self._maxrange = self.rdf_settings['range'][1] def _single_frame(self, ts, atomgroups): g1, g2 = atomgroups u = g1.universe - d = distance_array(g1.positions, g2.positions, - box=u.dimensions) + pairs, dist = distances.capped_distance(g1.positions, + g2.positions, + self._maxrange, + box=u.dimensions) # If provided exclusions, create a mask of _result which - # lets us take these out - exclusion_mask = None if self._exclusion_block is not None: - exclusion_mask = blocks_of(d, *self._exclusion_block) - maxrange = self.rdf_settings['range'][1] + 1.0 - # Maybe exclude same molecule distances - if exclusion_mask is not None: - exclusion_mask[:] = maxrange - count = [] - count = np.histogram(d, **self.rdf_settings)[0] + idxA, idxB = pairs[:, 0]//self._exclusion_block[0], pairs[:, 1]//self._exclusion_block[1] + mask = np.where(idxA != idxB)[0] + dist = dist[mask] + count = np.histogram(dist, **self.rdf_settings)[0] volume = u.trajectory.ts.volume return np.array([count, np.array(volume, dtype=np.float64)]) From 85cd658ce94c7bad75e59d6da77e11f281f6ffc6 Mon Sep 17 00:00:00 2001 From: VOD555 Date: Wed, 19 Sep 2018 15:12:43 -0700 Subject: [PATCH 2/3] fix pep8 and pylint errors --- pmda/rdf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pmda/rdf.py b/pmda/rdf.py index 21e16bc6..1a0e607d 100644 --- a/pmda/rdf.py +++ b/pmda/rdf.py @@ -31,7 +31,6 @@ import numpy as np from MDAnalysis.lib import distances -from MDAnalysis.lib.util import blocks_of from .parallel import ParallelAnalysisBase @@ -129,7 +128,8 @@ def _single_frame(self, ts, atomgroups): box=u.dimensions) # If provided exclusions, create a mask of _result which if self._exclusion_block is not None: - idxA, idxB = pairs[:, 0]//self._exclusion_block[0], pairs[:, 1]//self._exclusion_block[1] + idxA = pairs[:, 0]//self._exclusion_block[0] + idxB = pairs[:, 1]//self._exclusion_block[1] mask = np.where(idxA != idxB)[0] dist = dist[mask] count = np.histogram(dist, **self.rdf_settings)[0] From 2b28a1217ed8406a0d7a686d1c5269b3b3d81a3e Mon Sep 17 00:00:00 2001 From: VOD555 Date: Wed, 19 Sep 2018 15:45:30 -0700 Subject: [PATCH 3/3] fix documentation error --- pmda/rdf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pmda/rdf.py b/pmda/rdf.py index 1a0e607d..eb26a44a 100644 --- a/pmda/rdf.py +++ b/pmda/rdf.py @@ -127,6 +127,7 @@ def _single_frame(self, ts, atomgroups): self._maxrange, box=u.dimensions) # If provided exclusions, create a mask of _result which + # lets us take these out. if self._exclusion_block is not None: idxA = pairs[:, 0]//self._exclusion_block[0] idxB = pairs[:, 1]//self._exclusion_block[1]