Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added regression tests for hydrogenbondautocorrel #917

Merged
merged 4 commits into from
Aug 1, 2016
Merged
Changes from 1 commit
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
194 changes: 194 additions & 0 deletions testsuite/MDAnalysisTests/analysis/test_hydrogenbondautocorrel.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
# -*- Mode: python; tab-width: 4; indent-tabs-mode:nil; coding:utf-8 -*-
# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 fileencoding=utf-8
#
# MDAnalysis --- http://www.MDAnalysis.org
# Copyright (c) 2006-2015 Naveen Michaud-Agrawal, Elizabeth J. Denning, Oliver
# Beckstein and contributors (see AUTHORS for the full list)
#
# Released under the GNU Public Licence, v2 or any higher version
#
# Please cite your use of MDAnalysis in published work:
#
# N. Michaud-Agrawal, E. J. Denning, T. B. Woolf, and O. Beckstein.
# MDAnalysis: A Toolkit for the Analysis of Molecular Dynamics Simulations.
# J. Comput. Chem. 32 (2011), 2319--2327, doi:10.1002/jcc.21787
#
from six.moves import zip, range
from MDAnalysisTests.datafiles import TRZ, TRZ_psf
from MDAnalysisTests import module_not_found
from numpy.testing import assert_array_almost_equal, assert_raises, dec
import numpy as np

import MDAnalysis as mda
from MDAnalysis.analysis.hbonds import HydrogenBondAutoCorrel as HBAC


class TestHydrogenBondAutocorrel(object):
def setUp(self):
u = self.u = mda.Universe(TRZ_psf, TRZ)
self.H = u.atoms.Hn
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wouldn't rely on the quick selectors and rather do explicit select_atoms.

self.N = u.atoms.N
self.O = u.atoms.O
self.excl_list = (np.array(range(len(self.H))),
np.array(range(len(self.O))))

def tearDown(self):
del self.H
del self.N
del self.O
del self.u

# regression tests for different conditions
def test_continuous(self):
hbond = HBAC(self.u,
hydrogens=self.H,
acceptors=self.O,
donors=self.N,
bond_type='continuous',
sample_time=0.06,
)
hbond.run()

assert_array_almost_equal(
hbond.solution['results'],
np.array([ 1. , 0.92668623, 0.83137828,
0.74486804, 0.67741936, 0.60263932],
dtype=np.float32)
)


def test_continuous_excl(self):
hbond = HBAC(self.u,
hydrogens=self.H,
acceptors=self.O,
donors=self.N,
bond_type='continuous',
exclusions=self.excl_list,
sample_time=0.06,
)
hbond.run()

assert_array_almost_equal(
hbond.solution['results'],
np.array([ 1. , 0.92668623, 0.83137828,
0.74486804, 0.67741936, 0.60263932],
dtype=np.float32)
)


def test_intermittent(self):
hbond = HBAC(self.u,
hydrogens=self.H,
acceptors=self.O,
donors=self.N,
bond_type='intermittent',
sample_time=0.06,
)
hbond.run()

assert_array_almost_equal(
hbond.solution['results'],
np.array([ 1. , 0.92668623, 0.84310848,
0.79325515, 0.76392961, 0.72287393],
dtype=np.float32)
)


def test_intermittent_excl(self):
hbond = HBAC(self.u,
hydrogens=self.H,
acceptors=self.O,
donors=self.N,
bond_type='intermittent',
exclusions=self.excl_list,
sample_time=0.06,
)
hbond.run()

assert_array_almost_equal(
hbond.solution['results'],
np.array([ 1. , 0.92668623, 0.84310848,
0.79325515, 0.76392961, 0.72287393],
dtype=np.float32)
)

@dec.skipif(module_not_found('scipy'))
def test_solve_continuous(self):
hbond = HBAC(self.u,
hydrogens=self.H,
acceptors=self.O,
donors=self.N,
bond_type='continuous',
sample_time=0.06,
)
hbond.run()
hbond.solve()

assert_array_almost_equal(
hbond.solution['fit'],
np.array([ 0.52727374, 0.10231721, 0.10231605])
)

@dec.skipif(module_not_found('scipy'))
def test_solve_intermittent(self):
hbond = HBAC(self.u,
hydrogens=self.H,
acceptors=self.O,
donors=self.N,
bond_type='intermittent',
sample_time=0.06,
)
hbond.run()
hbond.solve()

assert_array_almost_equal(
hbond.solution['fit'],
np.array([ 6.13695140e-01, 3.30614269e-06, 5.90645176e+00,
2.00072251e-01, 4.15492813e-02])
)

# setup errors
def test_wronglength_DA(self):
assert_raises(ValueError,
HBAC, self.u,
hydrogens=self.H[:-1],
acceptors=self.O,
donors=self.N,
bond_type='intermittent',
exclusions=self.excl_list,
sample_time=0.06,
)

def test_exclusions(self):
excl_list2 = self.excl_list[0], self.excl_list[1][:-1]
assert_raises(ValueError,
HBAC, self.u,
hydrogens=self.H,
acceptors=self.O,
donors=self.N,
bond_type='intermittent',
exclusions=excl_list2,
sample_time=0.06,
)

def test_bond_type_VE(self):
assert_raises(ValueError,
HBAC, self.u,
hydrogens=self.H,
acceptors=self.O,
donors=self.N,
bond_type='marzipan',
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

haha

exclusions=self.excl_list,
sample_time=0.06,
)

@dec.skipif(module_not_found('scipy'))
def test_solve_before_run_VE(self):
hbond = HBAC(self.u,
hydrogens=self.H,
acceptors=self.O,
donors=self.N,
bond_type='continuous',
sample_time=0.06,
)
assert_raises(ValueError, hbond.solve)