Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 22 additions & 16 deletions package/MDAnalysis/analysis/hydrogenbonds/hbond_autocorrel.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,7 @@
from MDAnalysis.lib.log import ProgressBar
from MDAnalysis.lib.distances import capped_distance, calc_angles, calc_bonds
from MDAnalysis.core.groups import requires
from MDAnalysis.analysis.base import AnalysisBase

from MDAnalysis.due import due, Doi

Expand Down Expand Up @@ -243,7 +244,7 @@ def find_hydrogen_donors(hydrogens):
return sum(h.bonded_atoms[0] for h in hydrogens)


class HydrogenBondAutoCorrel(object):
class HydrogenBondAutoCorrel(AnalysisBase):
"""Perform a time autocorrelation of the hydrogen bonds in the system.

Parameters
Expand Down Expand Up @@ -306,16 +307,8 @@ def __init__(
pbc=True,
):

# warnings.warn("This class is deprecated, use analysis.hbonds.HydrogenBondAnalysis "
# "which has .autocorrelation function",
# category=DeprecationWarning)

super(HydrogenBondAutoCorrel, self).__init__(universe.trajectory)
self.u = universe
# check that slicing is possible
try:
self.u.trajectory[0]
except Exception:
raise ValueError("Trajectory must support slicing") from None

self.h = hydrogens
self.a = acceptors
Expand Down Expand Up @@ -361,6 +354,12 @@ def __init__(
}

def _slice_traj(self, sample_time):

try:
self.u.trajectory[0]
except TypeError:
raise ValueError("Trajectory is unable to be sliced")

"""Set up start and end points in the trajectory for the
different passes
"""
Expand Down Expand Up @@ -400,17 +399,21 @@ def _slice_traj(self, sample_time):
)
self._skip = 1

def run(self, force=False):
def run(self, start=None, stop=None, step=None, verbose=None, **kwargs):
"""Run all the required passes

Parameters
----------
force : bool, optional
Will overwrite previous results if they exist
start : int, optional
start frame of trajectory (ignored, uses nruns logic)
stop : int, optional
end frame of trajectory (ignored, uses nruns logic)
step : int, optional
step size (ignored, uses nruns logic)
verbose : bool, optional
Show the progress bar
"""
# if results exist, don't waste any time
if self.solution["results"] is not None and not force:
return
self._slice_traj(self.sample_time)

main_results = np.zeros_like(
np.arange(self._starts[0], self._stops[0], self._skip),
Expand All @@ -423,6 +426,7 @@ def run(self, force=False):
enumerate(zip(self._starts, self._stops)),
total=self.nruns,
desc="Performing run",
verbose=verbose,
):

# needed else trj seek thinks a np.int64 isn't an int?
Expand All @@ -445,6 +449,8 @@ def run(self, force=False):
)
self.solution["results"] = main_results

return self

def _single_run(self, start, stop):
"""Perform a single pass of the trajectory"""
self.u.trajectory[start]
Expand Down
34 changes: 34 additions & 0 deletions testsuite/MDAnalysisTests/analysis/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import (
HydrogenBondAnalysis,
)
from MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel import (
HydrogenBondAutoCorrel,
)
from MDAnalysis.analysis.nucleicacids import NucPairDist
from MDAnalysis.analysis.contacts import Contacts
from MDAnalysis.analysis.density import DensityAnalysis
Expand Down Expand Up @@ -217,3 +220,34 @@ def client_InterRDF_s(request):
@pytest.fixture(scope="module", params=params_for_cls(DistanceMatrix))
def client_DistanceMatrix(request):
return request.param


# MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel


@pytest.fixture(
scope="module",
params=params_for_cls(HydrogenBondAutoCorrel, exclude=["multiprocessing"]),
)
def client_HydrogenBondAutoCorrel(request):
return request.param


@pytest.fixture(scope="module")
def hbond_autocorrel(trajectory):
"""Fixture for HydrogenBondAutoCorrel analysis"""
u = trajectory
h = u.select_atoms("name H1")
n = u.select_atoms("name N")
o = u.select_atoms("name O")

return HydrogenBondAutoCorrel(
u,
hydrogens=h,
donors=n,
acceptors=o,
bond_type="continuous",
sample_time=10.0,
nruns=2,
nsamples=10,
)
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@ def nitrogens(self, u):
def oxygens(self, u):
return u.atoms.select_atoms("name O")

@pytest.fixture(autouse=True)
def client(self, client_HydrogenBondAutoCorrel):
self.client = client_HydrogenBondAutoCorrel

# regression tests for different conditions
def test_continuous(self, u, hydrogens, oxygens, nitrogens):
hbond = HBAC(
Expand Down
Loading