1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
'''
Test loading MAE files
'''
from pymol import cmd, testing
mae_filenames = [
'data/foo.mae',
'data/foo.mae.gz',
'data/foo.cms',
# 'data/foo.cms.gz',
]
mae_urls = [
'http://thomas-holder.de/tmp/foo.mae',
'http://thomas-holder.de/tmp/foo.mae.gz',
]
@testing.requires('incentive')
class TestLoadMAE(testing.PyMOLTestCase):
@testing.foreach.zip(mae_filenames)
def testLoad(self, filename):
cmd.load(filename)
v = cmd.get_object_list()
self.assertEqual(v, ['foo'])
@testing.foreach.zip(mae_urls)
@testing.requires('network')
def testLoadURL(self, filename):
cmd.load(filename)
v = cmd.get_object_list()
self.assertEqual(v, ['foo'])
@testing.requires_version('2.1.1')
def testLoadCryst1(self):
cmd.load(self.datafile('cryst1.mae'), 'm1')
s = cmd.get_symmetry('m1')
self.assertArrayEqual(s[:6], [50.84, 42.77, 28.95, 90., 90., 90.], delta=0.01)
self.assertEqual(s[6], 'P 21 21 21')
def _assertCountEqual(self, sele1, sele2, delta=0):
self.assertAlmostEqual(
cmd.count_atoms(sele1),
cmd.count_atoms(sele2), delta=delta)
@testing.requires_version('2.2')
def testExportStyle(self):
cmd.fab('ACDEF', 'm1')
cmd.hide()
cmd.show('cartoon', 'resi 1-3')
cmd.show('lines', 'resn CYS')
cmd.show('sticks', 'resn ASP+PHE')
cmd.show('spheres', 'resn GLU')
cmd.set('stick_ball', 1, 'resn PHE')
cmd.set('stick_ball_ratio', 1.5, 'm1')
testlabel = 'Hello "World"'
cmd.label('name SG', repr(testlabel))
with testing.mktemp('.mae') as filename:
cmd.save(filename)
cmd.delete('*')
cmd.load(filename, 'm2')
g_labels = []
cmd.iterate('name SG', 'g_labels.append(label)', space=locals())
cmd.alter('*', 'b = 1 if s.stick_ball else 0')
self._assertCountEqual('rep cartoon & guide', 'resi 1-3 & guide')
self._assertCountEqual('rep lines', 'resn CYS', delta=1)
self._assertCountEqual('rep sticks', 'resn ASP+PHE')
self._assertCountEqual('rep spheres', 'resn GLU')
self._assertCountEqual('b > 0.5', 'resn PHE')
self.assertTrue(cmd.get_setting_float('stick_ball_ratio', 'm2') > 1.1)
self.assertEqual(g_labels[0], testlabel)
@testing.foreach.product((0, 1), (0, 1))
@testing.requires_version('2.3')
def testLoadMae(self, multiplex, discrete):
cmd.load(self.datafile('multimae.maegz'), 'm',
multiplex=multiplex, discrete=discrete)
nstate = 4
natoms = 79
nmodel = 1
ndiscrete = discrete
if multiplex:
natoms *= nstate
ndiscrete *= nstate
nmodel = nstate
nstate = 1
elif discrete:
self.assertEqual(cmd.count_atoms(state=1), natoms)
natoms *= nstate
self.assertEqual(cmd.count_states(), nstate)
self.assertEqual(cmd.count_discrete('*'), ndiscrete)
self.assertEqual(cmd.count_atoms(), natoms)
self.assertEqual(len(cmd.get_object_list()), nmodel)
@testing.requires_version('2.3')
def testLoadMaeUserLabel(self):
from pymol import stored
cmd.load(self.datafile('userlabels2.mae'), 'm')
cmd.iterate('rank 1', 'stored.label = label')
self.assertEqual(stored.label, '1.31 TRP')
@testing.requires_version('2.5')
def testLabel(self):
cmd.load(self.datafile('labels.mae'), 'm')
labels = []
cmd.iterate('all', 'labels.append(label)', space={'labels': labels})
self.assertEqual(labels, [
'N +1 (-1.2, 0.2, -0.2) 0.290 0.75 18.50 GLY 1 D N 1 1',
'C (0.2, 0.3, -0.5) -0.010 0.75 24.17 GLY 1 D CA 2 2',
'C (1.1, -0.4, 0.5) 0.620 0.75 11.07 GLY 1 D C 3 3',
'O (0.5, -1.0, 1.5) -0.570 0.75 31.09 GLY 1 D O 4 4',
'H (0.4, -0.1, -1.5) 0.090 0.75 24.17 GLY 1 D HA 9 16',
'H (0.5, 1.4, -0.5) 0.090 0.75 24.17 GLY 1 D HA3 8 15',
'H (-1.5, 1.0, 0.4) 0.160 0.75 18.50 GLY 1 D H1 7 14',
'H (-1.7, 0.2, -1.1) 0.160 0.75 18.50 GLY 1 D H2 5 12',
'H (-1.4, -0.7, 0.3) 0.160 0.75 18.50 GLY 1 D H3 6 13',
'N (2.3, -0.4, 0.4) -0.380 1.00 48.64 CYS 2 D N 10 5',
'C (3.1, -1.1, 1.4) -0.160 1.00 41.94 CYS 2 D CA 11 6',
'C (4.6, -0.9, 1.1) 0.750 1.00 0.21 CYS 2 D C 12 7',
'O (5.0, -0.3, 0.1) -0.800 1.00 3.55 CYS 2 D O 13 8',
'C (2.7, -2.5, 1.5) -0.200 1.00 38.71 CYS 2 D CB 14 9',
'S (3.5, -3.4, 2.9) -0.310 1.00 18.13 CYS 2 D SG 15 10',
'O -1 (5.6, -1.6, 2.0) -0.800 1.00 0.21 CYS 2 D OXT 16 11',
'H (2.8, 0.1, -0.3) 0.270 1.00 48.64 CYS 2 D H 21 21',
'H (3.0, -0.6, 2.4) 0.140 1.00 41.94 CYS 2 D HA 17 17',
'H (2.9, -3.0, 0.6) 0.140 1.00 38.71 CYS 2 D HB2 18 18',
'H (1.6, -2.6, 1.7) 0.140 1.00 38.71 CYS 2 D HB3 19 19',
'H (3.8, -4.6, 2.5) 0.210 1.00 18.13 CYS 2 D HG 20 20',
])
|