Files
pymol-open-source/testing/tests/api/fitting.py
2023-04-14 14:30:28 -04:00

103 lines
3.2 KiB
Python

from pymol import cmd, testing, stored
from chempy import cpv
class TestFitting(testing.PyMOLTestCase):
def testAlign(self):
cmd.load(self.datafile("1oky-frag.pdb"), "m1")
cmd.load(self.datafile("1t46-frag.pdb"), "m2")
cycles = 2
r = cmd.align("m1", "m2", object="aln", cycles=cycles, transform=0)
self.assertAlmostEqual(r[0], 1.52563, delta=1e-4)
self.assertEqual(r[1], 177)
self.assertEqual(r[1], cmd.count_atoms("aln") / 2)
self.assertEqual(r[2], cycles)
def testAlignto(self):
cmd.fragment("gly", "m1")
cmd.copy("m2", "m1")
cmd.alignto(method="fit", mobile_state=1, target_state=1)
def testCealign(self):
cmd.load(self.datafile("1oky-frag.pdb"), "m1")
cmd.load(self.datafile("1t46-frag.pdb"), "m2")
r = cmd.cealign("m2", "m1", object="aln")
self.assertAlmostEqual(r["RMSD"], 1.90375, delta=1e-4)
alen = r["alignment_length"]
self.assertEqual(alen, 40)
self.assertEqual(alen, cmd.count_atoms("aln") / 2)
def testFit(self):
cmd.fragment("gly", "m1")
cmd.create("m2", "m1")
rms = cmd.fit("m1", "m2")
self.assertEqual(rms, 0.0)
rms = cmd.rms("m1", "m2")
self.assertEqual(rms, 0.0)
rms = cmd.rms_cur("m1", "m2")
self.assertEqual(rms, 0.0)
def testIntraFit(self):
cmd.fragment("gly", "m1")
cmd.create("m1", "m1", 1, 2)
rms_list = cmd.intra_fit("m1")
self.assertArrayEqual(rms_list, [-1.0, 0.0])
rms_list = cmd.intra_rms("m1")
self.assertArrayEqual(rms_list, [-1.0, 0.0])
rms_list = cmd.intra_rms_cur("m1")
self.assertArrayEqual(rms_list, [-1.0, 0.0])
def testIntraRms(self):
# see intra_fit
pass
def testIntraRmsCur(self):
# see intra_fit
pass
def testPairFit(self):
cmd.fragment('trp')
cmd.fragment('his')
# 1 atom
sele = ('trp and guide', 'his and guide')
pos = list(map(cmd.get_atom_coords, sele))
vec = cpv.sub(*pos)
mat_ref = [
1.0, 0.0, 0.0, -vec[0],
0.0, 1.0, 0.0, -vec[1],
0.0, 0.0, 1.0, -vec[2],
0.0, 0.0, 0.0, 1.0]
rms = cmd.pair_fit(*sele)
self.assertEqual(rms, 0.0)
mat = cmd.get_object_matrix('trp')
self.assertArrayEqual(mat, mat_ref, 1e-4)
# 2 atoms
sele += ('trp & name CB', 'his & name CB')
rms = cmd.pair_fit(*sele)
self.assertAlmostEqual(rms, 0.0082, delta=1e-4)
# 4 atoms
sele += ('trp & name CG', 'his & name CG',
'trp & name CD1', 'his & name CD2')
rms = cmd.pair_fit(*sele)
self.assertAlmostEqual(rms, 0.0713, delta=1e-4)
def testRms(self):
# see fit
pass
def testRmsCur(self):
# see fit
pass
def testSuper(self):
cmd.load(self.datafile("1oky-frag.pdb"), "m1")
cmd.load(self.datafile("1t46-frag.pdb"), "m2")
r = cmd.super("m1", "m2", object="aln")
self.assertAlmostEqual(r[0], 0.9667, delta=1e-4)
self.assertEqual(r[1], 172)
self.assertEqual(r[1], cmd.count_atoms("aln") / 2)