mirror of
https://github.com/schrodinger/pymol-open-source.git
synced 2026-06-04 20:04:21 +08:00
81 lines
3.2 KiB
Python
81 lines
3.2 KiB
Python
'''
|
|
Tests for periodic boundary condition tools
|
|
'''
|
|
|
|
from pymol import cmd, testing
|
|
|
|
filename = "desmond/Bace_mapper_20143_3a51a59_e85111a_solvent_11_replica0-out.idx"
|
|
ligsele = "segi C2"
|
|
|
|
|
|
@testing.requires_version("2.5")
|
|
class TestPBC(testing.PyMOLTestCase):
|
|
def _load_traj(self):
|
|
cmd.load(self.datafile(filename), "m1")
|
|
assert cmd.count_states() == 209
|
|
|
|
def _get_mean(self, sele, state):
|
|
return cmd.get_coords(sele, state).mean(0)
|
|
|
|
def assertMeanEqual(self, sele, state, expected, delta=1e-4):
|
|
self.assertArrayEqual(self._get_mean(sele, state),
|
|
expected,
|
|
delta=delta)
|
|
|
|
def assertMeanEqualAllStates(self, sele, expected, delta=1e-4):
|
|
for state in range(1, cmd.count_states(sele) + 1):
|
|
self.assertMeanEqual(sele, state, expected, delta=delta)
|
|
|
|
def test_pbc_wrap(self):
|
|
self._load_traj()
|
|
self.assertMeanEqual("m1", 1, [0.1931318, 0.02557054, -0.19974825])
|
|
self.assertMeanEqual("m1", 10, [-0.39728516, -0.15377004, 0.3353078])
|
|
cmd.pbc_unwrap("m1", bymol=1)
|
|
self.assertMeanEqual("m1", 1, [0.1931318, 0.02557054, -0.19974825])
|
|
self.assertMeanEqual("m1", 10, [-13.647337, 17.052486, 20.949625])
|
|
self.assertMeanEqual("m1", 100, [-99.25437, 112.844734, 146.75703])
|
|
self.assertMeanEqual(ligsele, 100, [13.758579, 160.77652, 108.984375])
|
|
cmd.pbc_wrap("m1")
|
|
self.assertMeanEqual("m1", 1, [0.35491294, 0.06518874, -0.44330302])
|
|
self.assertMeanEqual("m1", 10, [0.26413238, -0.11394002, -0.41091236])
|
|
self.assertMeanEqual("m1", 100, [-0.21415119, 0.01216528, -0.23332132])
|
|
self.assertMeanEqual(ligsele, 100, [-13.1273365, -3.823541, -6.660239])
|
|
cmd.pbc_wrap("m1", center=[0, 0, 0])
|
|
self.assertMeanEqualAllStates("m1", [0., 0., 0.], delta=0.5)
|
|
cmd.pbc_wrap("m1", center=[10, 20, 30])
|
|
self.assertMeanEqualAllStates("m1", [10., 20., 30.], delta=0.5)
|
|
self.assertMeanEqual(ligsele, 100, [13.758579, 29.096472, 22.250914])
|
|
|
|
@testing.foreach(
|
|
(100, [-13.1273365, -3.8235407, -6.660238], False),
|
|
(200, [12.344244, 12.3195715, -1.104801], True),
|
|
)
|
|
def test_intra_fit(self, state, mean, mix):
|
|
self._load_traj()
|
|
|
|
deltasolvent = 1.0
|
|
self.assertMeanEqualAllStates("solvent", [0, 0, 0], delta=deltasolvent)
|
|
|
|
cmd.intra_fit(ligsele, state, pbc=0, mix=mix)
|
|
self.assertMeanEqualAllStates(ligsele, mean, delta=0.1)
|
|
self.assertMeanEqual("solvent", state, [0, 0, 0], delta=deltasolvent)
|
|
|
|
cmd.intra_fit(ligsele, state, pbc=1, mix=mix)
|
|
self.assertMeanEqualAllStates(ligsele, mean, delta=0.1)
|
|
self.assertMeanEqualAllStates("solvent", mean, delta=deltasolvent)
|
|
|
|
def test_smooth(self):
|
|
self._load_traj()
|
|
|
|
cmd.smooth("m1", 10, pbc=1)
|
|
self.assertArrayEqual(
|
|
cmd.get_extent("m1", state=100),
|
|
[[-14.278, -17.192, -15.273], [14.187, 17.142, 15.317]],
|
|
delta=1.0)
|
|
|
|
cmd.smooth("m1", 10, pbc=0)
|
|
self.assertArrayEqual(
|
|
cmd.get_extent("m1", state=100),
|
|
[[-11.245, -13.397, -12.412], [10.829, 12.899, 12.103]],
|
|
delta=0.5)
|