File: load_mae.py

package info (click to toggle)
pymol 3.1.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 74,084 kB
  • sloc: cpp: 482,660; python: 89,328; ansic: 29,512; javascript: 6,792; sh: 84; makefile: 25
file content (138 lines) | stat: -rw-r--r-- 5,166 bytes parent folder | download
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',
        ])