1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 from math import sqrt
24 from numpy import array, average, dot, float64, std, zeros
25 from numpy.linalg import norm
26 from os import sep
27 from re import search
28 import sys
29 from tempfile import mkdtemp, mktemp
30
31
32 from data_store import Relax_data_store; ds = Relax_data_store()
33 from pipe_control.mol_res_spin import count_spins, return_spin, spin_loop
34 from lib.errors import RelaxError, RelaxNoPdbError
35 from lib.geometry.rotations import axis_angle_to_R, euler_to_R_zyz
36 from lib.geometry.vectors import vector_angle_acos
37 from lib.io import DummyFileObject
38 from status import Status; status = Status()
39 from test_suite.system_tests.base_classes import SystemTestCase
40
41
43 """Class for testing the structural objects."""
44
46 """Set up for all the functional tests."""
47
48
49 self.interpreter.pipe.create('mf', 'mf')
50
51
52 ds.tmpdir = mkdtemp()
53
54
56 """Strip out all PDB remark lines.
57
58 @param lines: The list of PDB lines.
59 @type lines: list of str
60 """
61
62
63 lines[:] = [x for x in lines if x[:6] != 'REMARK']
64
65
67 """Test the U{structure.superimpose user function<http://www.nmr-relax.com/manual/structure_superimpose.html>}."""
68
69
70 self.interpreter.reset()
71
72
73 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'diffusion_tensor'+sep+'sphere'
74
75
76 self.interpreter.pipe.create('ref', 'N-state')
77 self.interpreter.structure.read_pdb('uniform.pdb', dir=path)
78
79
80 self.interpreter.structure.delete(":8")
81 self.interpreter.structure.delete(":2@N")
82
83
84 self.interpreter.structure.write_pdb(file=sys.stdout)
85
86
87 self.interpreter.pipe.create('align', 'N-state')
88
89
90 self.interpreter.structure.read_pdb('uniform.pdb', dir=path, set_model_num=1)
91 self.interpreter.structure.read_pdb('uniform.pdb', dir=path, set_model_num=2)
92
93
94 self.interpreter.structure.delete(":12")
95 self.interpreter.structure.delete(":20@H")
96
97
98 R = zeros((3, 3), float64)
99 axis_angle_to_R(array([1, 0, 0], float64), 1.0, R)
100 self.interpreter.structure.rotate(R=R, model=1)
101 axis_angle_to_R(array([0, 0, 1], float64), 2.0, R)
102 self.interpreter.structure.rotate(R=R, model=2)
103 self.interpreter.structure.translate(T=[1., 1., 1.], model=1)
104 self.interpreter.structure.translate(T=[0., 0., 1.], model=2)
105
106
107 self.interpreter.structure.add_atom(mol_name='uniform_mol1', atom_name='Ti', res_name='TST', res_num=100, pos=[[1.0, 2.0, 3.0], [1.0, 2.0, 3.0]], element='Ti', pdb_record='HETATM')
108
109
110 self.interpreter.structure.superimpose(pipes=['ref', 'align'], method='fit to first', atom_id='@N,H', displace_id='@N,H')
111
112
113 self.interpreter.structure.write_pdb(file=sys.stdout)
114
115
116 data = [
117 ["N", "PRO", 1, 0.000, 0.000, -10.000],
118 ["H", "PRO", 1, 0.000, 0.000, -11.020],
119 ["N", "PRO", 2, 7.454, 0.000, -6.667],
120 ["H", "PRO", 2, 8.214, 0.000, -7.347],
121 ["N", "ILE", 3, 10.000, 0.000, 0.000],
122 ["H", "ILE", 3, 11.020, 0.000, 0.000],
123 ["N", "VAL", 4, 7.454, 0.000, 6.667],
124 ["H", "VAL", 4, 8.214, 0.000, 7.347],
125 ["N", "VAL", 5, 0.000, 0.000, 10.000],
126 ["H", "VAL", 5, 0.000, 0.000, 11.020],
127 ["N", "ASN", 6, 0.000, 0.000, -10.000],
128 ["H", "ASN", 6, 0.000, 0.000, -11.020],
129 ["N", "SER", 7, 3.727, 6.455, -6.667],
130 ["H", "SER", 7, 4.107, 7.113, -7.347],
131 ["N", "LEU", 8, 5.000, 8.660, 0.000],
132 ["H", "LEU", 8, 5.510, 9.544, 0.000],
133 ["N", "SER", 9, 3.727, 6.455, 6.667],
134 ["H", "SER", 9, 4.107, 7.113, 7.347],
135 ["N", "ASN", 10, 0.000, 0.000, 10.000],
136 ["H", "ASN", 10, 0.000, 0.000, 11.020],
137 ["N", "PHE", 11, -0.000, 0.000, -10.000],
138 ["H", "PHE", 11, -0.000, 0.000, -11.020],
139
140
141 ["N", "ILE", 13, -5.000, 8.660, 0.000],
142 ["H", "ILE", 13, -5.510, 9.544, 0.000],
143 ["N", "GLY", 14, -3.727, 6.455, 6.667],
144 ["H", "GLY", 14, -4.107, 7.113, 7.347],
145 ["N", "SER", 15, -0.000, 0.000, 10.000],
146 ["H", "SER", 15, -0.000, 0.000, 11.020],
147 ["N", "PHE", 16, -0.000, 0.000, -10.000],
148 ["H", "PHE", 16, -0.000, 0.000, -11.020],
149 ["N", "VAL", 17, -7.454, 0.000, -6.667],
150 ["H", "VAL", 17, -8.214, 0.000, -7.347],
151 ["N", "ILE", 18, -10.000, 0.000, 0.000],
152 ["H", "ILE", 18, -11.020, 0.000, 0.000],
153 ["N", "GLN", 19, -7.454, 0.000, 6.667],
154 ["H", "GLN", 19, -8.214, 0.000, 7.347],
155 ["N", "LEU", 20, -0.000, 0.000, 10.000],
156
157 ["N", "LEU", 21, -0.000, -0.000, -10.000],
158 ["H", "LEU", 21, -0.000, -0.000, -11.020],
159 ["N", "GLU", 22, -3.727, -6.455, -6.667],
160 ["H", "GLU", 22, -4.107, -7.113, -7.347],
161 ["N", "TRP", 23, -5.000, -8.660, 0.000],
162 ["H", "TRP", 23, -5.510, -9.544, 0.000],
163 ["N", "TYR", 24, -3.727, -6.455, 6.667],
164 ["H", "TYR", 24, -4.107, -7.113, 7.347],
165 ["N", "SER", 25, -0.000, -0.000, 10.000],
166 ["H", "SER", 25, -0.000, -0.000, 11.020],
167 ["N", "ARG", 26, 0.000, -0.000, -10.000],
168 ["H", "ARG", 26, 0.000, -0.000, -11.020],
169 ["N", "TYR", 27, 3.727, -6.455, -6.667],
170 ["H", "TYR", 27, 4.107, -7.113, -7.347],
171 ["N", "LEU", 28, 5.000, -8.660, 0.000],
172 ["H", "LEU", 28, 5.510, -9.544, 0.000],
173 ["N", "HIS", 29, 3.727, -6.455, 6.667],
174 ["H", "HIS", 29, 4.107, -7.113, 7.347],
175 ["N", "ALA", 30, 0.000, -0.000, 10.000],
176 ["H", "ALA", 30, 0.000, -0.000, 11.020],
177 ["Ti", "TST", 100, 1.000, 2.000, 3.000]
178 ]
179
180
181 selection = cdp.structure.selection()
182
183
184 self.assertEqual(len(data), len(cdp.structure.structural_data[0].mol[0].atom_name))
185 i = 0
186 for res_num, res_name, atom_name, pos in cdp.structure.atom_loop(selection=selection, model_num=1, res_num_flag=True, res_name_flag=True, atom_name_flag=True, pos_flag=True):
187 self.assertEqual(atom_name, data[i][0])
188 self.assertEqual(res_name, data[i][1])
189 self.assertEqual(res_num, data[i][2])
190 self.assertAlmostEqual(pos[0][0], data[i][3])
191 self.assertAlmostEqual(pos[0][1], data[i][4])
192 self.assertAlmostEqual(pos[0][2], data[i][5])
193 i += 1
194
195
196 self.assertEqual(len(data), len(cdp.structure.structural_data[1].mol[0].atom_name))
197 i = 0
198 for res_num, res_name, atom_name, pos in cdp.structure.atom_loop(selection=selection, model_num=2, res_num_flag=True, res_name_flag=True, atom_name_flag=True, pos_flag=True):
199 self.assertEqual(atom_name, data[i][0])
200 self.assertEqual(res_name, data[i][1])
201 self.assertEqual(res_num, data[i][2])
202 self.assertAlmostEqual(pos[0][0], data[i][3])
203 self.assertAlmostEqual(pos[0][1], data[i][4])
204 self.assertAlmostEqual(pos[0][2], data[i][5])
205 i += 1
206
207
209 """Test the alignment of CaM molecules from different species using the BLOSUM62 substitution matrix."""
210
211
212 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'n_state_model'+sep+'structure_align.py')
213
214
216 """Test the U{structure.superimpose user function<http://www.nmr-relax.com/manual/structure_superimpose.html>} for aligning different molecules in one pipe."""
217
218
219 self.interpreter.reset()
220
221
222 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'diffusion_tensor'+sep+'sphere'
223
224
225 self.interpreter.pipe.create('ref', 'N-state')
226 self.interpreter.structure.read_pdb('uniform.pdb', dir=path, set_mol_name='ref')
227
228
229 self.interpreter.structure.delete("#ref:8")
230 self.interpreter.structure.delete("#ref:2@N")
231
232
233 self.interpreter.structure.write_pdb(file=sys.stdout)
234
235
236 self.interpreter.pipe.create('align', 'N-state')
237
238
239 self.interpreter.structure.read_pdb('uniform.pdb', dir=path, set_mol_name='1')
240 self.interpreter.structure.read_pdb('uniform.pdb', dir=path, set_mol_name='2')
241
242
243 self.interpreter.structure.delete("#1,2:12")
244 self.interpreter.structure.delete("#1,2:20@H")
245
246
247 R = zeros((3, 3), float64)
248 axis_angle_to_R(array([1, 0, 0], float64), 1.0, R)
249 self.interpreter.structure.rotate(R=R, atom_id='#1')
250 axis_angle_to_R(array([0, 0, 1], float64), 2.0, R)
251 self.interpreter.structure.rotate(R=R, atom_id='#2')
252 self.interpreter.structure.translate(T=[1., 1., 1.], atom_id='#1')
253 self.interpreter.structure.translate(T=[0., 0., 1.], atom_id='#2')
254
255
256 self.interpreter.structure.add_atom(mol_name='1', atom_name='Ti', res_name='TST', res_num=100, pos=[1.0, 2.0, 3.0], element='Ti', pdb_record='HETATM')
257 self.interpreter.structure.add_atom(mol_name='2', atom_name='Ti', res_name='TST', res_num=100, pos=[1.0, 2.0, 3.0], element='Ti', pdb_record='HETATM')
258
259
260 self.interpreter.structure.superimpose(pipes=['ref', 'align'], molecules=[['ref'], ['1', '2']], method='fit to first', atom_id='@N,H', displace_id='@N,H')
261
262
263 self.interpreter.structure.write_pdb(file=sys.stdout)
264
265
266 data = [
267 ["N", "PRO", 1, 0.000, 0.000, -10.000],
268 ["H", "PRO", 1, 0.000, 0.000, -11.020],
269 ["N", "PRO", 2, 7.454, 0.000, -6.667],
270 ["H", "PRO", 2, 8.214, 0.000, -7.347],
271 ["N", "ILE", 3, 10.000, 0.000, 0.000],
272 ["H", "ILE", 3, 11.020, 0.000, 0.000],
273 ["N", "VAL", 4, 7.454, 0.000, 6.667],
274 ["H", "VAL", 4, 8.214, 0.000, 7.347],
275 ["N", "VAL", 5, 0.000, 0.000, 10.000],
276 ["H", "VAL", 5, 0.000, 0.000, 11.020],
277 ["N", "ASN", 6, 0.000, 0.000, -10.000],
278 ["H", "ASN", 6, 0.000, 0.000, -11.020],
279 ["N", "SER", 7, 3.727, 6.455, -6.667],
280 ["H", "SER", 7, 4.107, 7.113, -7.347],
281 ["N", "LEU", 8, 5.000, 8.660, 0.000],
282 ["H", "LEU", 8, 5.510, 9.544, 0.000],
283 ["N", "SER", 9, 3.727, 6.455, 6.667],
284 ["H", "SER", 9, 4.107, 7.113, 7.347],
285 ["N", "ASN", 10, 0.000, 0.000, 10.000],
286 ["H", "ASN", 10, 0.000, 0.000, 11.020],
287 ["N", "PHE", 11, -0.000, 0.000, -10.000],
288 ["H", "PHE", 11, -0.000, 0.000, -11.020],
289
290
291 ["N", "ILE", 13, -5.000, 8.660, 0.000],
292 ["H", "ILE", 13, -5.510, 9.544, 0.000],
293 ["N", "GLY", 14, -3.727, 6.455, 6.667],
294 ["H", "GLY", 14, -4.107, 7.113, 7.347],
295 ["N", "SER", 15, -0.000, 0.000, 10.000],
296 ["H", "SER", 15, -0.000, 0.000, 11.020],
297 ["N", "PHE", 16, -0.000, 0.000, -10.000],
298 ["H", "PHE", 16, -0.000, 0.000, -11.020],
299 ["N", "VAL", 17, -7.454, 0.000, -6.667],
300 ["H", "VAL", 17, -8.214, 0.000, -7.347],
301 ["N", "ILE", 18, -10.000, 0.000, 0.000],
302 ["H", "ILE", 18, -11.020, 0.000, 0.000],
303 ["N", "GLN", 19, -7.454, 0.000, 6.667],
304 ["H", "GLN", 19, -8.214, 0.000, 7.347],
305 ["N", "LEU", 20, -0.000, 0.000, 10.000],
306
307 ["N", "LEU", 21, -0.000, -0.000, -10.000],
308 ["H", "LEU", 21, -0.000, -0.000, -11.020],
309 ["N", "GLU", 22, -3.727, -6.455, -6.667],
310 ["H", "GLU", 22, -4.107, -7.113, -7.347],
311 ["N", "TRP", 23, -5.000, -8.660, 0.000],
312 ["H", "TRP", 23, -5.510, -9.544, 0.000],
313 ["N", "TYR", 24, -3.727, -6.455, 6.667],
314 ["H", "TYR", 24, -4.107, -7.113, 7.347],
315 ["N", "SER", 25, -0.000, -0.000, 10.000],
316 ["H", "SER", 25, -0.000, -0.000, 11.020],
317 ["N", "ARG", 26, 0.000, -0.000, -10.000],
318 ["H", "ARG", 26, 0.000, -0.000, -11.020],
319 ["N", "TYR", 27, 3.727, -6.455, -6.667],
320 ["H", "TYR", 27, 4.107, -7.113, -7.347],
321 ["N", "LEU", 28, 5.000, -8.660, 0.000],
322 ["H", "LEU", 28, 5.510, -9.544, 0.000],
323 ["N", "HIS", 29, 3.727, -6.455, 6.667],
324 ["H", "HIS", 29, 4.107, -7.113, 7.347],
325 ["N", "ALA", 30, 0.000, -0.000, 10.000],
326 ["H", "ALA", 30, 0.000, -0.000, 11.020],
327 ["Ti", "TST", 100, 1.000, 2.000, 3.000]
328 ]
329
330
331 selection = cdp.structure.selection()
332
333
334 self.assertEqual(len(data), len(cdp.structure.structural_data[0].mol[0].atom_name))
335 self.assertEqual(len(data), len(cdp.structure.structural_data[0].mol[1].atom_name))
336 current_mol = ''
337 for mol_name, res_num, res_name, atom_name, pos in cdp.structure.atom_loop(selection=selection, mol_name_flag=True, res_num_flag=True, res_name_flag=True, atom_name_flag=True, pos_flag=True):
338 print("Molecule '%s', residue '%s %s', atom '%s', position %s" % (mol_name, res_num, res_name, atom_name, pos))
339 if mol_name != current_mol:
340 current_mol = mol_name
341 i = 0
342 self.assertEqual(atom_name, data[i][0])
343 self.assertEqual(res_name, data[i][1])
344 self.assertEqual(res_num, data[i][2])
345 self.assertAlmostEqual(pos[0][0], data[i][3])
346 self.assertAlmostEqual(pos[0][1], data[i][4])
347 self.assertAlmostEqual(pos[0][2], data[i][5])
348 i += 1
349
350
352 """Test of the structure.superimpose user function, fitting to the mean structure."""
353
354
355 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'frame_order'+sep+'cam'
356
357
358 self.interpreter.structure.read_pdb('1J7P_1st_NH.pdb', dir=path, set_model_num=1, set_mol_name='CaM A')
359 self.interpreter.structure.read_pdb('1J7P_1st_NH_rot.pdb', dir=path, set_model_num=1, set_mol_name='CaM B')
360
361
362 self.interpreter.structure.add_atom(mol_name='CaM A', atom_name='Ti', res_name='TST', res_num=1, pos=[1.0, 2.0, 3.0], element='Ti', pdb_record='HETATM')
363 self.interpreter.structure.add_atom(mol_name='CaM B', atom_name='Ti', res_name='TST', res_num=1, pos=[2.0, 3.0, 4.0], element='Ti', pdb_record='HETATM')
364
365
366 self.interpreter.structure.superimpose(method='fit to mean', atom_id='@N,C,CA,O', displace_id=':82-5000')
367
368
369 mol1 = cdp.structure.structural_data[0].mol[0]
370 mol2 = cdp.structure.structural_data[0].mol[1]
371 for i in range(len(mol1.atom_name)):
372 if mol1.res_num[i] == 1:
373 continue
374 self.assertAlmostEqual(mol1.x[i], mol2.x[i], 2)
375 self.assertAlmostEqual(mol1.y[i], mol2.y[i], 2)
376 self.assertAlmostEqual(mol1.z[i], mol2.z[i], 2)
377
378
379 self.assertAlmostEqual(mol1.x[0] - mol2.x[0], -1.0, 2)
380 self.assertAlmostEqual(mol1.y[0] - mol2.y[0], -1.0, 2)
381 self.assertAlmostEqual(mol1.z[0] - mol2.z[0], -1.0, 2)
382
383
385 """Test of the structure.superimpose user function, fitting to the mean structure."""
386
387
388 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
389
390
391 self.interpreter.structure.read_pdb('1J7O.pdb', dir=path, read_model=1, set_model_num=1, set_mol_name='CaM A')
392 self.interpreter.structure.read_pdb('1J7O.pdb', dir=path, read_model=1, set_model_num=1, set_mol_name='CaM B')
393 self.interpreter.structure.read_pdb('1J7O.pdb', dir=path, read_model=1, set_model_num=1, set_mol_name='CaM C')
394
395
396 self.interpreter.structure.delete(atom_id="#CaM A:1-4")
397 self.interpreter.structure.delete(atom_id="#CaM A:60-100")
398 self.interpreter.structure.delete(atom_id="#CaM C:1-3")
399 self.interpreter.structure.delete(atom_id="#CaM C:75-100")
400 self.interpreter.structure.delete(atom_id=":1000-1001")
401
402
403 self.interpreter.pipe.copy('mf', 'comp')
404
405
406 self.interpreter.structure.superimpose(method='fit to mean', atom_id='@N,C,CA,O')
407
408
409 for mol_index in range(3):
410 mol1 = ds['mf'].structure.structural_data[0].mol[mol_index]
411 mol2 = ds['comp'].structure.structural_data[0].mol[mol_index]
412 for i in range(len(mol1.atom_name)):
413 self.assertAlmostEqual(mol1.x[i], mol2.x[i])
414 self.assertAlmostEqual(mol1.y[i], mol2.y[i])
415 self.assertAlmostEqual(mol1.z[i], mol2.z[i])
416
417
419 """Test that a RelaxError occurs when the alternate location indicator is present but not specified."""
420
421
422 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
423
424
425 self.assertRaises(RelaxError, self.interpreter.structure.read_pdb, '1OGT_trunc.pdb', dir=path)
426
427
429 """Check the operation of the structure.atomic_fluctuations user function.
430
431 This checks the interatomic distance fluctuations calculated by the U{structure.atomic_fluctuations user function<http://www.nmr-relax.com/manual/structure_atomic_fluctuations.html>}.
432 """
433
434
435 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
436 self.interpreter.structure.read_pdb('web_of_motion.pdb', dir=path)
437
438
439 file = DummyFileObject()
440 self.interpreter.structure.atomic_fluctuations(atom_id='@N,CA', file=file, format='text')
441
442
443 n = array([[ 9.464, -9.232, 27.573], [ 9.211, -9.425, 26.970], [ 7.761, -6.392, 27.161]], float64)
444 ca = array([[10.302, -8.195, 26.930], [10.077, -8.221, 26.720], [ 9.256, -6.332, 27.183]], float64)
445 sd = std(array([norm(n[0] - ca[0]), norm(n[1] - ca[1]), norm(n[2] - ca[2])], float64), ddof=1)
446 expected = []
447 expected.append("# %18s %20s\n" % (":4@N", ":4@CA"))
448 expected.append("%20.15f %20.15f\n" % (0.0, sd))
449 expected.append("%20.15f %20.15f\n" % (sd, 0.0))
450
451
452 lines = file.readlines()
453 self.assertEqual(len(expected), len(lines))
454 for i in range(len(lines)):
455 self.assertEqual(expected[i], lines[i])
456
457
459 """Check the angular fluctuations calculated by the structure.atomic_fluctuations user function.
460
461 This checks the text file (with the format argument set to text) of interatomic angle fluctuations calculated by the U{structure.atomic_fluctuations user function<http://www.nmr-relax.com/manual/structure_atomic_fluctuations.html>}.
462 """
463
464
465 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
466 self.interpreter.structure.read_pdb('web_of_motion.pdb', dir=path)
467
468
469 file = DummyFileObject()
470 self.interpreter.structure.atomic_fluctuations(measure='angle', atom_id='@N,CA', file=file, format='text')
471
472
473 n = array([[ 9.464, -9.232, 27.573], [ 9.211, -9.425, 26.970], [ 7.761, -6.392, 27.161]], float64)
474 ca = array([[10.302, -8.195, 26.930], [10.077, -8.221, 26.720], [ 9.256, -6.332, 27.183]], float64)
475
476
477 vectors = ca - n
478
479
480 vect_ave = average(vectors, axis=0)
481 angles = [
482 vector_angle_acos(vect_ave, vectors[0]),
483 vector_angle_acos(vect_ave, vectors[1]),
484 vector_angle_acos(vect_ave, vectors[2])
485 ]
486
487
488 sd = std(array(angles, float64), ddof=1)
489 expected = []
490 expected.append("# %18s %20s\n" % (":4@N", ":4@CA"))
491 expected.append("%20.15f %20.15f\n" % (0.0, sd))
492 expected.append("%20.15f %20.15f\n" % (sd, 0.0))
493
494
495 lines = file.readlines()
496 self.assertEqual(len(expected), len(lines))
497 for i in range(len(lines)):
498 self.assertEqual(expected[i], lines[i])
499
500
502 """Check the operation of the structure.atomic_fluctuations user function for creating a gnuplot script.
503
504 This checks the format argument of the U{structure.atomic_fluctuations user function<http://www.nmr-relax.com/manual/structure_atomic_fluctuations.html>} when set to 'gnuplot'.
505 """
506
507
508 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
509 self.interpreter.structure.read_pdb('web_of_motion.pdb', dir=path)
510
511
512 self.interpreter.structure.atomic_fluctuations(atom_id='@N,CA', file='matrix', dir=ds.tmpdir, format='gnuplot')
513
514
515 n = array([[ 9.464, -9.232, 27.573], [ 9.211, -9.425, 26.970], [ 7.761, -6.392, 27.161]], float64)
516 ca = array([[10.302, -8.195, 26.930], [10.077, -8.221, 26.720], [ 9.256, -6.332, 27.183]], float64)
517 sd = std(array([norm(n[0] - ca[0]), norm(n[1] - ca[1]), norm(n[2] - ca[2])], float64), ddof=1)
518 expected = []
519 expected.append("# %18s %20s\n" % (":4@N", ":4@CA"))
520 expected.append("%20.15f %20.15f\n" % (0.0, sd))
521 expected.append("%20.15f %20.15f\n" % (sd, 0.0))
522
523
524 file = open("%s%s%s" % (ds.tmpdir, sep, 'matrix'))
525 lines = file.readlines()
526 self.assertEqual(len(expected), len(lines))
527 for i in range(len(lines)):
528 self.assertEqual(expected[i], lines[i])
529
530
531 script = [
532 "#!/usr/bin/env gnuplot\n",
533 "\n",
534 "# Set up the terminal type and make the plot square.\n",
535 "set terminal postscript eps size 10,10 enhanced color font 'Helvetica,20' linewidth 0.1\n",
536 "set size square\n",
537 "\n",
538 "# Blue-red colour map.\n",
539 "set palette model RGB\n",
540 "set palette defined\n",
541 "\n",
542 "# Labels.\n",
543 "set xtics out rotate font \",8\" (\":4\\\\@N\" 0, \":4\\\\@CA\" 1)\n",
544 "set ytics out font \",8\" (\":4\\\\@N\" 0, \":4\\\\@CA\" 1)\n",
545 "\n",
546 "# Output to EPS.\n",
547 "set output \"matrix.eps\"\n",
548 "\n",
549 "# Load and show the text data\n",
550 "plot \"matrix\" matrix with image\n"
551 ]
552 file = open("%s%s%s" % (ds.tmpdir, sep, 'matrix.gnu'))
553 lines = file.readlines()
554 print("Script:")
555 print("\"\"\"")
556 for line in lines:
557 print(line[:-1])
558 print("\"\"\"")
559 self.assertEqual(len(script), len(lines))
560 for i in range(len(lines)):
561 self.assertEqual(script[i], lines[i])
562
563
565 """Check the operation of the structure.atomic_fluctuations user function when no data matches the atom ID.
566
567 This checks the interatomic distance fluctuations calculated by the U{structure.atomic_fluctuations user function<http://www.nmr-relax.com/manual/structure_atomic_fluctuations.html>}.
568 """
569
570
571 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
572 self.interpreter.structure.read_pdb('web_of_motion.pdb', dir=path)
573
574
575 file = DummyFileObject()
576 self.assertRaises(RelaxError, self.interpreter.structure.atomic_fluctuations, atom_id='@X', file=file, format='text')
577
578
580 """Check the parallax shift fluctuations calculated by the structure.atomic_fluctuations user function.
581
582 This checks the text file (with the format argument set to text) of interatomic parallax shift fluctuations calculated by the U{structure.atomic_fluctuations user function<http://www.nmr-relax.com/manual/structure_atomic_fluctuations.html>}.
583 """
584
585
586 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
587 self.interpreter.structure.read_pdb('web_of_motion.pdb', dir=path)
588
589
590 file = DummyFileObject()
591 self.interpreter.structure.atomic_fluctuations(measure='parallax shift', atom_id='@N,CA', file=file, format='text')
592
593
594 n = array([[ 9.464, -9.232, 27.573], [ 9.211, -9.425, 26.970], [ 7.761, -6.392, 27.161]], float64)
595 ca = array([[10.302, -8.195, 26.930], [10.077, -8.221, 26.720], [ 9.256, -6.332, 27.183]], float64)
596
597
598 vectors = ca - n
599
600
601 vect_ave = average(vectors, axis=0)
602 unit = vect_ave / norm(vect_ave)
603 proj = [
604 dot(vectors[0], unit) * unit,
605 dot(vectors[1], unit) * unit,
606 dot(vectors[2], unit) * unit
607 ]
608 shift = [
609 norm(vectors[0] - proj[0]),
610 norm(vectors[1] - proj[1]),
611 norm(vectors[2] - proj[2])
612 ]
613
614
615 sd = std(array(shift, float64), ddof=1)
616 expected = []
617 expected.append("# %18s %20s\n" % (":4@N", ":4@CA"))
618 expected.append("%20.15f %20.15f\n" % (0.0, sd))
619 expected.append("%20.15f %20.15f\n" % (sd, 0.0))
620
621
622 lines = file.readlines()
623 self.assertEqual(len(expected), len(lines))
624 for i in range(len(lines)):
625 self.assertEqual(expected[i], lines[i])
626
627
638
639
656
657
659 """Catch U{bug #21522<https://web.archive.org/web/https://gna.org/bugs/?21522>}, the structure.write_pdb user function creating an incorrect MASTER record.
660
661 This also triggers U{bug #21520<https://web.archive.org/web/https://gna.org/bugs/?21520>}, the failure of the structure.write_pdb user function when creating the MASTER record due to too many ATOM and HETATM records being present.
662 """
663
664
665 self.interpreter.structure.add_model(model_num=1)
666 self.interpreter.structure.add_model(model_num=2)
667
668
669 self.interpreter.structure.add_atom(atom_name='N', res_name='Pro', res_num=2, pos=[1., 2., 3.], element='N')
670
671
672 file = DummyFileObject()
673 self.interpreter.structure.write_pdb(file=file, force=True)
674
675
676 contents = [
677 "MODEL 1 \n",
678 "ATOM 1 N Pro A 2 1.000 2.000 3.000 1.00 0.00 N \n",
679 "TER 2 Pro A 2 \n",
680 "ENDMDL \n",
681 "MODEL 2 \n",
682 "ATOM 1 N Pro A 2 1.000 2.000 3.000 1.00 0.00 N \n",
683 "TER 2 Pro A 2 \n",
684 "ENDMDL \n",
685 "MASTER 0 0 0 0 0 0 0 0 1 1 0 0 \n",
686 "END \n"
687 ]
688
689
690 lines = file.readlines()
691 self.strip_remarks(lines)
692 self.assertEqual(len(contents), len(lines))
693 for i in range(len(lines)):
694 self.assertEqual(contents[i], lines[i])
695
696
698 """Catch U{bug #21814<https://web.archive.org/web/https://gna.org/bugs/?21814>}, the PDB reading failure when not padded to 80 spaces."""
699
700
701 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
702
703
704 self.interpreter.structure.read_pdb('SpUreE_dimer_H_new', dir=path)
705
706
708 """Catch U{bug #22041<https://web.archive.org/web/https://gna.org/bugs/?22041>}, the atom serial number not being sequential from 1 onwards."""
709
710
711 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
712
713
714 self.interpreter.structure.read_pdb('1RTE_trunc.pdb', dir=path, set_mol_name='N-dom')
715 self.interpreter.structure.read_pdb('1RTE_trunc.pdb', dir=path, set_mol_name='C-dom')
716
717
718 file = DummyFileObject()
719 self.interpreter.structure.write_pdb(file=file, force=True)
720
721
722 contents = [
723 "HET CYN A 445 1 \n",
724 "HET CYN B 445 1 \n",
725 "HETNAM CYN UNKNOWN \n",
726 "FORMUL 1 CYN C1 \n",
727 "ATOM 1 N LEU A 3 49.617 4.693 46.426 1.00 0.00 N \n",
728 "ATOM 2 CA LEU A 3 49.432 5.476 45.190 1.00 0.00 C \n",
729 "ATOM 3 C LEU A 3 50.346 4.980 44.055 1.00 0.00 C \n",
730 "ATOM 4 O LEU A 3 49.924 4.868 42.889 1.00 0.00 O \n",
731 "ATOM 5 CB LEU A 3 49.673 6.968 45.457 1.00 0.00 C \n",
732 "ATOM 6 CG LEU A 3 49.804 7.863 44.222 1.00 0.00 C \n",
733 "ATOM 7 CD1 LEU A 3 48.564 7.837 43.327 1.00 0.00 C \n",
734 "ATOM 8 CD2 LEU A 3 50.075 9.282 44.625 1.00 0.00 C \n",
735 "TER 9 LEU A 3 \n",
736 "HETATM 10 C CYN A 445 29.160 13.127 62.533 1.00 0.00 C \n",
737 "ATOM 11 N LEU B 3 49.617 4.693 46.426 1.00 0.00 N \n",
738 "ATOM 12 CA LEU B 3 49.432 5.476 45.190 1.00 0.00 C \n",
739 "ATOM 13 C LEU B 3 50.346 4.980 44.055 1.00 0.00 C \n",
740 "ATOM 14 O LEU B 3 49.924 4.868 42.889 1.00 0.00 O \n",
741 "ATOM 15 CB LEU B 3 49.673 6.968 45.457 1.00 0.00 C \n",
742 "ATOM 16 CG LEU B 3 49.804 7.863 44.222 1.00 0.00 C \n",
743 "ATOM 17 CD1 LEU B 3 48.564 7.837 43.327 1.00 0.00 C \n",
744 "ATOM 18 CD2 LEU B 3 50.075 9.282 44.625 1.00 0.00 C \n",
745 "TER 19 LEU B 3 \n",
746 "HETATM 20 C CYN B 445 29.160 13.127 62.533 1.00 0.00 C \n",
747 "MASTER 0 0 2 0 0 0 0 0 18 2 0 0 \n",
748 "END \n"
749 ]
750
751
752 lines = file.readlines()
753 self.strip_remarks(lines)
754 self.assertEqual(len(contents), len(lines))
755 for i in range(len(lines)):
756 self.assertEqual(contents[i], lines[i])
757
758
760 """Catch U{bug #22069<https://web.archive.org/web/https://gna.org/bugs/?22069>}, the failure of the structure.delete user function with helix attribute errors."""
761
762
763 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'frame_order'+sep+'cam'
764
765
766 self.interpreter.structure.read_pdb('1J7P_1st_NH_rot.pdb', dir=path)
767
768
769 self.interpreter.structure.delete(atom_id='@CA')
770
771
773 """Catch U{bug #22070<https://web.archive.org/web/https://gna.org/bugs/?22070>}, the failure of the structure.superimpose user function after deleting atoms with structure.delete."""
774
775
776 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'frame_order'+sep+'cam'
777
778
779 self.interpreter.structure.read_pdb('1J7P_1st_NH.pdb', dir=path, set_mol_name='C-dom', set_model_num=1)
780 self.interpreter.structure.read_pdb('1J7P_1st_NH_rot.pdb', dir=path, set_mol_name='C-dom', set_model_num=2)
781
782
783 self.interpreter.structure.delete(atom_id='@CA')
784
785
786 for i in range(2):
787 print("Checking the last atom of model %s." % i)
788 self.assertEqual(cdp.structure.structural_data[i].mol[0].atom_name[-1], 'H')
789
790
791 self.interpreter.structure.superimpose(method='fit to first', centre_type='CoM')
792
793
794 self.interpreter.structure.superimpose(method='fit to first', centre_type='CoM')
795
796
798 """Catch U{bug #22860<https://web.archive.org/web/https://gna.org/bugs/?22860>}, the failure of the structure.com user function after calling structure.delete."""
799
800
801 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'frame_order'+sep+'cam'
802
803
804 self.interpreter.structure.read_pdb('1J7P_1st_NH.pdb', dir=path, set_mol_name='C-dom', set_model_num=1)
805 self.interpreter.structure.delete()
806
807
808 self.assertRaises(RelaxError, self.interpreter.structure.com)
809
810
812 """Catch U{bug #22861<https://web.archive.org/web/https://gna.org/bugs/?22861>}, the chain IDs in the structure.write_pdb user function PDB files are incorrect after calling structure.delete."""
813
814
815 self.interpreter.structure.add_atom(mol_name='A', atom_name='N', res_name='Phe', res_num=1, pos=[1.0, 1.0, 1.0], element='N')
816 self.interpreter.structure.add_atom(mol_name='B', atom_name='N', res_name='Phe', res_num=1, pos=[1.0, 1.0, 1.0], element='N')
817
818
819 cdp.structure.structural_data[0].mol[0].file_name = 'test.pdb'
820 cdp.structure.structural_data[0].mol[1].file_name = 'test2.pdb'
821
822
823 self.interpreter.structure.delete('#A')
824
825
826 file = DummyFileObject()
827 self.interpreter.structure.write_pdb(file=file, force=True)
828
829
830 contents = [
831 "ATOM 1 N Phe A 1 1.000 1.000 1.000 1.00 0.00 N \n",
832 "TER 2 Phe A 1 \n",
833 "MASTER 0 0 0 0 0 0 0 0 1 1 0 0 \n",
834 "END \n"
835 ]
836
837
838 lines = file.readlines()
839 self.strip_remarks(lines)
840 self.assertEqual(len(contents), len(lines))
841 for i in range(len(lines)):
842 self.assertEqual(contents[i], lines[i])
843
844
846 """Catch U{bug #23293<https://web.archive.org/web/https://gna.org/bugs/?23293>}, the PDB HETATM loading error whereby the last HETATM record is sometimes not read from the PDB file."""
847
848
849 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
850
851
852 self.interpreter.structure.read_pdb('bug_23293_missing_hetatm.pdb', dir=path)
853
854
855 file = DummyFileObject()
856 self.interpreter.structure.write_pdb(file=file, force=True)
857
858
859 contents = [
860 "HET CA A 501 1 \n",
861 "HET CA A 502 1 \n",
862 "HET CA B 503 1 \n",
863 "HET CA B 504 1 \n",
864 "HET CA C 505 1 \n",
865 "HET CA C 506 1 \n",
866 "HETNAM CA UNKNOWN \n",
867 "FORMUL 1 CA CA1 \n",
868 "MODEL 1 \n",
869 "ATOM 1 N LEU A 1 1.000 -2.000 20.000 1.00 0.00 N \n",
870 "ATOM 2 H LEU A 1 2.000 -2.000 20.000 1.00 0.00 H \n",
871 "TER 3 LEU A 1 \n",
872 "HETATM 4 CA CA A 501 17.000 12.000 14.000 1.00 0.00 CA \n",
873 "HETATM 5 CA CA A 502 6.000 9.000 14.000 1.00 0.00 CA \n",
874 "ATOM 6 N LEU B 1 9.000 -9.000 27.000 1.00 0.00 N \n",
875 "ATOM 7 H LEU B 1 8.000 -8.000 27.000 1.00 0.00 H \n",
876 "TER 8 LEU B 1 \n",
877 "HETATM 9 CA CA B 503 17.000 12.000 14.000 1.00 0.00 CA \n",
878 "HETATM 10 CA CA B 504 6.000 9.000 14.000 1.00 0.00 CA \n",
879 "ATOM 11 N LEU C 1 12.000 -12.000 7.000 1.00 0.00 N \n",
880 "ATOM 12 H LEU C 1 11.000 -12.000 7.000 1.00 0.00 H \n",
881 "TER 13 LEU C 1 \n",
882 "HETATM 14 CA CA C 505 31.000 -10.000 -0.000 1.00 0.00 CA \n",
883 "HETATM 15 CA CA C 506 31.000 -19.000 6.000 1.00 0.00 CA \n",
884 "ENDMDL \n",
885 "MASTER 0 0 6 0 0 0 0 0 12 3 0 0 \n",
886 "END \n"
887 ]
888
889
890 lines = file.readlines()
891 self.strip_remarks(lines)
892 self.assertEqual(len(contents), len(lines))
893 for i in range(len(lines)):
894 self.assertEqual(contents[i], lines[i])
895
896
898 """Catch U{bug #23294<https://web.archive.org/web/https://gna.org/bugs/?23294>}, the automatic merging of PDB molecules results in an IndexError."""
899
900
901 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
902
903
904 self.interpreter.structure.read_pdb('bug_23294_multi_mol_automerge.pdb', dir=path, read_model=1, set_mol_name='merged mol')
905
906
907 file = DummyFileObject()
908 self.interpreter.structure.write_pdb(file=file, force=True)
909
910
911 contents = [
912 "MODEL 1 \n",
913 "ATOM 1 N LEU A 1 1.000 0.000 0.000 1.00 0.00 N \n",
914 "ATOM 2 H LEU A 1 2.000 0.000 0.000 1.00 0.00 H \n",
915 "ATOM 3 N GLU A 2 3.000 0.000 0.000 1.00 0.00 N \n",
916 "ATOM 4 H GLU A 2 4.000 0.000 0.000 1.00 0.00 H \n",
917 "TER 5 GLU A 2 \n",
918 "ENDMDL \n",
919 "MASTER 0 0 0 0 0 0 0 0 4 1 0 0 \n",
920 "END \n"
921 ]
922
923
924 lines = file.readlines()
925 self.strip_remarks(lines)
926 self.assertEqual(len(contents), len(lines))
927 for i in range(len(lines)):
928 self.assertEqual(contents[i], lines[i])
929
930
1048
1049
1051 """Test the bug reported as the U{support request #2998<https://web.archive.org/web/https://gna.org/support/?2998>}, the broken CONECT records."""
1052
1053
1054 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
1055
1056
1057 self.interpreter.structure.read_pdb('1RTE_trunc.pdb', dir=path)
1058
1059
1061 """Test the collapse_ensemble() method of the internal structural object."""
1062
1063
1064 self.interpreter.structure.add_model(model_num=1)
1065 self.interpreter.structure.add_model(model_num=2)
1066
1067
1068 self.interpreter.structure.add_atom(atom_name='H', res_name='Gly', res_num=1, pos=[[0.0, 1.0, 2.0], [1.0, 2.0, 3.0]], element='H')
1069
1070
1071 for i in range(2):
1072 mol = cdp.structure.structural_data[i].mol[0]
1073 self.assertEqual(len(mol.atom_name), 1)
1074 self.assertEqual(mol.x[0], 0.0+i)
1075 self.assertEqual(mol.y[0], 1.0+i)
1076 self.assertEqual(mol.z[0], 2.0+i)
1077
1078
1079 cdp.structure.collapse_ensemble(model_num=2, model_to=1)
1080
1081
1082 self.assert_(hasattr(cdp, 'structure'))
1083 self.assertEqual(len(cdp.structure.structural_data), 1)
1084 self.assertEqual(cdp.structure.structural_data[0].num, 1)
1085 self.assertEqual(len(cdp.structure.structural_data[0].mol), 1)
1086
1087
1088 mol = cdp.structure.structural_data[0].mol[0]
1089 self.assertEqual(len(mol.atom_name), 1)
1090 self.assertEqual(mol.x[0], 1.0)
1091 self.assertEqual(mol.y[0], 2.0)
1092 self.assertEqual(mol.z[0], 3.0)
1093
1094
1106
1107
1109 """Test the creation of the diffusion tensor PDB representation, after deleting structural data."""
1110
1111
1112 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'+sep+'lactose'
1113
1114
1115 self.interpreter.structure.read_pdb(file='lactose_MCMM4_S1_1.pdb', dir=path, set_mol_name='L1')
1116 self.interpreter.structure.read_pdb(file='lactose_MCMM4_S1_2.pdb', dir=path, set_mol_name='L2')
1117
1118
1119 self.interpreter.structure.delete()
1120
1121
1122 self.interpreter.diffusion_tensor.init((8.5e-9, 1.1, 20.0, 20.0), param_types=2)
1123
1124
1125 self.interpreter.structure.create_diff_tensor_pdb(scale=1.8e-06, file='prolate.pdb', dir=ds.tmpdir, force=True)
1126
1127
1129 """Check that the ellipsoid diffusion tensor optimisation functions correctly."""
1130
1131
1132 self.interpreter.reset()
1133
1134
1135 ds.tmpfile = mktemp()
1136
1137
1138 ds.diff_dir = 'ellipsoid'
1139 ds.diff_type = 'ellipsoid'
1140
1141
1142 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'diff_tensor'+sep+'tensor_opt.py')
1143
1144
1145 self.interpreter.structure.create_diff_tensor_pdb(scale=1.8e-06, file=ds.tmpfile, force=True)
1146
1147
1148 file = open(ds.tmpfile)
1149 lines = file.readlines()
1150 file.close()
1151
1152
1153 real_data = [
1154 "HET COM A 1 1 \n",
1155 "HET TNS A 2 240 \n",
1156 "HET AXS A 3 15 \n",
1157 "HETNAM COM CENTRE OF MASS \n",
1158 "HETNAM TNS TENSOR \n",
1159 "HETNAM AXS TENSOR AXES \n",
1160 "FORMUL 1 COM C1 \n",
1161 "FORMUL 2 TNS H240 \n",
1162 "FORMUL 3 AXS C9N6 \n",
1163 "HETATM 1 R COM A 1 -0.000 0.000 0.000 1.00 0.00 C \n",
1164 "HETATM 2 H2 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1165 "HETATM 3 H3 TNS A 2 34.069 -26.135 24.079 1.00 0.00 H \n",
1166 "HETATM 4 H4 TNS A 2 22.441 -24.585 22.046 1.00 0.00 H \n",
1167 "HETATM 5 H5 TNS A 2 12.181 -21.601 18.895 1.00 0.00 H \n",
1168 "HETATM 6 H6 TNS A 2 2.612 -17.891 15.178 1.00 0.00 H \n",
1169 "HETATM 7 H7 TNS A 2 -6.450 -13.649 11.046 1.00 0.00 H \n",
1170 "HETATM 8 H8 TNS A 2 -15.068 -8.941 6.552 1.00 0.00 H \n",
1171 "HETATM 9 H9 TNS A 2 -23.243 -3.767 1.694 1.00 0.00 H \n",
1172 "HETATM 10 H10 TNS A 2 -30.910 1.939 -3.577 1.00 0.00 H \n",
1173 "HETATM 11 H11 TNS A 2 -37.886 8.372 -9.415 1.00 0.00 H \n",
1174 "HETATM 12 H12 TNS A 2 -43.495 16.239 -16.370 1.00 0.00 H \n",
1175 "HETATM 13 H13 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1176 "HETATM 14 H14 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1177 "HETATM 15 H15 TNS A 2 34.065 -22.779 27.601 1.00 0.00 H \n",
1178 "HETATM 16 H16 TNS A 2 22.436 -19.088 27.815 1.00 0.00 H \n",
1179 "HETATM 17 H17 TNS A 2 12.174 -14.935 25.891 1.00 0.00 H \n",
1180 "HETATM 18 H18 TNS A 2 2.605 -10.548 22.885 1.00 0.00 H \n",
1181 "HETATM 19 H19 TNS A 2 -6.458 -5.990 19.085 1.00 0.00 H \n",
1182 "HETATM 20 H20 TNS A 2 -15.076 -1.281 14.590 1.00 0.00 H \n",
1183 "HETATM 21 H21 TNS A 2 -23.250 3.577 9.401 1.00 0.00 H \n",
1184 "HETATM 22 H22 TNS A 2 -30.917 8.606 3.419 1.00 0.00 H \n",
1185 "HETATM 23 H23 TNS A 2 -37.892 13.869 -3.645 1.00 0.00 H \n",
1186 "HETATM 24 H24 TNS A 2 -43.499 19.594 -12.848 1.00 0.00 H \n",
1187 "HETATM 25 H25 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1188 "HETATM 26 H26 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1189 "HETATM 27 H27 TNS A 2 34.523 -19.268 30.401 1.00 0.00 H \n",
1190 "HETATM 28 H28 TNS A 2 23.187 -13.335 32.402 1.00 0.00 H \n",
1191 "HETATM 29 H29 TNS A 2 13.085 -7.958 31.453 1.00 0.00 H \n",
1192 "HETATM 30 H30 TNS A 2 3.608 -2.863 29.011 1.00 0.00 H \n",
1193 "HETATM 31 H31 TNS A 2 -5.412 2.026 25.475 1.00 0.00 H \n",
1194 "HETATM 32 H32 TNS A 2 -14.030 6.734 20.981 1.00 0.00 H \n",
1195 "HETATM 33 H33 TNS A 2 -22.247 11.261 15.528 1.00 0.00 H \n",
1196 "HETATM 34 H34 TNS A 2 -30.006 15.583 8.982 1.00 0.00 H \n",
1197 "HETATM 35 H35 TNS A 2 -37.141 19.622 0.941 1.00 0.00 H \n",
1198 "HETATM 36 H36 TNS A 2 -43.041 23.105 -10.049 1.00 0.00 H \n",
1199 "HETATM 37 H37 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1200 "HETATM 38 H38 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1201 "HETATM 39 H39 TNS A 2 35.399 -15.944 32.204 1.00 0.00 H \n",
1202 "HETATM 40 H40 TNS A 2 24.621 -7.890 35.357 1.00 0.00 H \n",
1203 "HETATM 41 H41 TNS A 2 14.824 -1.355 35.037 1.00 0.00 H \n",
1204 "HETATM 42 H42 TNS A 2 5.523 4.411 32.958 1.00 0.00 H \n",
1205 "HETATM 43 H43 TNS A 2 -3.414 9.612 29.592 1.00 0.00 H \n",
1206 "HETATM 44 H44 TNS A 2 -12.032 14.321 25.098 1.00 0.00 H \n",
1207 "HETATM 45 H45 TNS A 2 -20.332 18.535 19.475 1.00 0.00 H \n",
1208 "HETATM 46 H46 TNS A 2 -28.268 22.186 12.565 1.00 0.00 H \n",
1209 "HETATM 47 H47 TNS A 2 -35.707 25.067 3.896 1.00 0.00 H \n",
1210 "HETATM 48 H48 TNS A 2 -42.165 26.429 -8.245 1.00 0.00 H \n",
1211 "HETATM 49 H49 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1212 "HETATM 50 H50 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1213 "HETATM 51 H51 TNS A 2 36.605 -13.134 32.835 1.00 0.00 H \n",
1214 "HETATM 52 H52 TNS A 2 26.597 -3.285 36.390 1.00 0.00 H \n",
1215 "HETATM 53 H53 TNS A 2 17.220 4.229 36.290 1.00 0.00 H \n",
1216 "HETATM 54 H54 TNS A 2 8.163 10.561 34.339 1.00 0.00 H \n",
1217 "HETATM 55 H55 TNS A 2 -0.660 16.028 31.032 1.00 0.00 H \n",
1218 "HETATM 56 H56 TNS A 2 -9.278 20.736 26.538 1.00 0.00 H \n",
1219 "HETATM 57 H57 TNS A 2 -17.692 24.686 20.856 1.00 0.00 H \n",
1220 "HETATM 58 H58 TNS A 2 -25.871 27.770 13.818 1.00 0.00 H \n",
1221 "HETATM 59 H59 TNS A 2 -33.730 29.672 4.930 1.00 0.00 H \n",
1222 "HETATM 60 H60 TNS A 2 -40.959 29.239 -7.614 1.00 0.00 H \n",
1223 "HETATM 61 H61 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1224 "HETATM 62 H62 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1225 "HETATM 63 H63 TNS A 2 38.024 -11.112 32.231 1.00 0.00 H \n",
1226 "HETATM 64 H64 TNS A 2 28.923 0.028 35.402 1.00 0.00 H \n",
1227 "HETATM 65 H65 TNS A 2 20.041 8.247 35.091 1.00 0.00 H \n",
1228 "HETATM 66 H66 TNS A 2 11.270 14.987 33.018 1.00 0.00 H \n",
1229 "HETATM 67 H67 TNS A 2 2.580 20.644 29.654 1.00 0.00 H \n",
1230 "HETATM 68 H68 TNS A 2 -6.038 25.352 25.160 1.00 0.00 H \n",
1231 "HETATM 69 H69 TNS A 2 -14.585 29.111 19.535 1.00 0.00 H \n",
1232 "HETATM 70 H70 TNS A 2 -23.051 31.787 12.619 1.00 0.00 H \n",
1233 "HETATM 71 H71 TNS A 2 -31.405 32.985 3.941 1.00 0.00 H \n",
1234 "HETATM 72 H72 TNS A 2 -39.540 31.262 -8.218 1.00 0.00 H \n",
1235 "HETATM 73 H73 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1236 "HETATM 74 H74 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1237 "HETATM 75 H75 TNS A 2 39.518 -10.076 30.453 1.00 0.00 H \n",
1238 "HETATM 76 H76 TNS A 2 31.370 1.725 32.487 1.00 0.00 H \n",
1239 "HETATM 77 H77 TNS A 2 23.008 10.305 31.557 1.00 0.00 H \n",
1240 "HETATM 78 H78 TNS A 2 14.538 17.254 29.125 1.00 0.00 H \n",
1241 "HETATM 79 H79 TNS A 2 5.989 23.008 25.594 1.00 0.00 H \n",
1242 "HETATM 80 H80 TNS A 2 -2.629 27.717 21.100 1.00 0.00 H \n",
1243 "HETATM 81 H81 TNS A 2 -11.316 31.378 15.642 1.00 0.00 H \n",
1244 "HETATM 82 H82 TNS A 2 -20.083 33.846 9.085 1.00 0.00 H \n",
1245 "HETATM 83 H83 TNS A 2 -28.958 34.682 1.027 1.00 0.00 H \n",
1246 "HETATM 84 H84 TNS A 2 -38.046 32.298 -9.997 1.00 0.00 H \n",
1247 "HETATM 85 H85 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1248 "HETATM 86 H86 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1249 "HETATM 87 H87 TNS A 2 40.940 -10.127 27.673 1.00 0.00 H \n",
1250 "HETATM 88 H88 TNS A 2 33.699 1.641 27.933 1.00 0.00 H \n",
1251 "HETATM 89 H89 TNS A 2 25.832 10.202 26.033 1.00 0.00 H \n",
1252 "HETATM 90 H90 TNS A 2 17.649 17.141 23.041 1.00 0.00 H \n",
1253 "HETATM 91 H91 TNS A 2 9.234 22.891 19.248 1.00 0.00 H \n",
1254 "HETATM 92 H92 TNS A 2 0.616 27.599 14.754 1.00 0.00 H \n",
1255 "HETATM 93 H93 TNS A 2 -8.205 31.265 9.558 1.00 0.00 H \n",
1256 "HETATM 94 H94 TNS A 2 -17.259 33.743 3.562 1.00 0.00 H \n",
1257 "HETATM 95 H95 TNS A 2 -26.629 34.598 -3.528 1.00 0.00 H \n",
1258 "HETATM 96 H96 TNS A 2 -36.624 32.246 -12.777 1.00 0.00 H \n",
1259 "HETATM 97 H97 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1260 "HETATM 98 H98 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1261 "HETATM 99 H99 TNS A 2 42.150 -11.262 24.164 1.00 0.00 H \n",
1262 "HETATM 100 H100 TNS A 2 35.682 -0.218 22.184 1.00 0.00 H \n",
1263 "HETATM 101 H101 TNS A 2 28.237 7.949 19.062 1.00 0.00 H \n",
1264 "HETATM 102 H102 TNS A 2 20.298 14.659 15.362 1.00 0.00 H \n",
1265 "HETATM 103 H103 TNS A 2 11.997 20.302 11.238 1.00 0.00 H \n",
1266 "HETATM 104 H104 TNS A 2 3.379 25.010 6.744 1.00 0.00 H \n",
1267 "HETATM 105 H105 TNS A 2 -5.557 28.783 1.879 1.00 0.00 H \n",
1268 "HETATM 106 H106 TNS A 2 -14.854 31.490 -3.410 1.00 0.00 H \n",
1269 "HETATM 107 H107 TNS A 2 -24.646 32.739 -9.277 1.00 0.00 H \n",
1270 "HETATM 108 H108 TNS A 2 -35.414 31.112 -16.286 1.00 0.00 H \n",
1271 "HETATM 109 H109 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1272 "HETATM 110 H110 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1273 "HETATM 111 H111 TNS A 2 43.031 -13.367 20.269 1.00 0.00 H \n",
1274 "HETATM 112 H112 TNS A 2 37.125 -3.668 15.803 1.00 0.00 H \n",
1275 "HETATM 113 H113 TNS A 2 29.987 3.765 11.324 1.00 0.00 H \n",
1276 "HETATM 114 H114 TNS A 2 22.225 10.050 6.838 1.00 0.00 H \n",
1277 "HETATM 115 H115 TNS A 2 14.007 15.495 2.348 1.00 0.00 H \n",
1278 "HETATM 116 H116 TNS A 2 5.389 20.203 -2.146 1.00 0.00 H \n",
1279 "HETATM 117 H117 TNS A 2 -3.629 24.175 -6.645 1.00 0.00 H \n",
1280 "HETATM 118 H118 TNS A 2 -13.104 27.306 -11.148 1.00 0.00 H \n",
1281 "HETATM 119 H119 TNS A 2 -23.203 29.289 -15.658 1.00 0.00 H \n",
1282 "HETATM 120 H120 TNS A 2 -34.533 29.006 -20.181 1.00 0.00 H \n",
1283 "HETATM 121 H121 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1284 "HETATM 122 H122 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1285 "HETATM 123 H123 TNS A 2 43.495 -16.239 16.370 1.00 0.00 H \n",
1286 "HETATM 124 H124 TNS A 2 37.886 -8.372 9.415 1.00 0.00 H \n",
1287 "HETATM 125 H125 TNS A 2 30.910 -1.939 3.577 1.00 0.00 H \n",
1288 "HETATM 126 H126 TNS A 2 23.243 3.767 -1.694 1.00 0.00 H \n",
1289 "HETATM 127 H127 TNS A 2 15.068 8.941 -6.552 1.00 0.00 H \n",
1290 "HETATM 128 H128 TNS A 2 6.450 13.649 -11.046 1.00 0.00 H \n",
1291 "HETATM 129 H129 TNS A 2 -2.612 17.891 -15.178 1.00 0.00 H \n",
1292 "HETATM 130 H130 TNS A 2 -12.181 21.601 -18.895 1.00 0.00 H \n",
1293 "HETATM 131 H131 TNS A 2 -22.441 24.585 -22.046 1.00 0.00 H \n",
1294 "HETATM 132 H132 TNS A 2 -34.069 26.135 -24.079 1.00 0.00 H \n",
1295 "HETATM 133 H133 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1296 "HETATM 134 H134 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1297 "HETATM 135 H135 TNS A 2 43.499 -19.594 12.848 1.00 0.00 H \n",
1298 "HETATM 136 H136 TNS A 2 37.892 -13.869 3.645 1.00 0.00 H \n",
1299 "HETATM 137 H137 TNS A 2 30.917 -8.606 -3.419 1.00 0.00 H \n",
1300 "HETATM 138 H138 TNS A 2 23.250 -3.577 -9.401 1.00 0.00 H \n",
1301 "HETATM 139 H139 TNS A 2 15.076 1.281 -14.590 1.00 0.00 H \n",
1302 "HETATM 140 H140 TNS A 2 6.458 5.990 -19.085 1.00 0.00 H \n",
1303 "HETATM 141 H141 TNS A 2 -2.605 10.548 -22.885 1.00 0.00 H \n",
1304 "HETATM 142 H142 TNS A 2 -12.174 14.935 -25.891 1.00 0.00 H \n",
1305 "HETATM 143 H143 TNS A 2 -22.436 19.088 -27.815 1.00 0.00 H \n",
1306 "HETATM 144 H144 TNS A 2 -34.065 22.779 -27.601 1.00 0.00 H \n",
1307 "HETATM 145 H145 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1308 "HETATM 146 H146 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1309 "HETATM 147 H147 TNS A 2 43.041 -23.105 10.049 1.00 0.00 H \n",
1310 "HETATM 148 H148 TNS A 2 37.141 -19.622 -0.941 1.00 0.00 H \n",
1311 "HETATM 149 H149 TNS A 2 30.006 -15.583 -8.982 1.00 0.00 H \n",
1312 "HETATM 150 H150 TNS A 2 22.247 -11.261 -15.528 1.00 0.00 H \n",
1313 "HETATM 151 H151 TNS A 2 14.030 -6.734 -20.981 1.00 0.00 H \n",
1314 "HETATM 152 H152 TNS A 2 5.412 -2.026 -25.475 1.00 0.00 H \n",
1315 "HETATM 153 H153 TNS A 2 -3.608 2.863 -29.011 1.00 0.00 H \n",
1316 "HETATM 154 H154 TNS A 2 -13.085 7.958 -31.453 1.00 0.00 H \n",
1317 "HETATM 155 H155 TNS A 2 -23.187 13.335 -32.402 1.00 0.00 H \n",
1318 "HETATM 156 H156 TNS A 2 -34.523 19.268 -30.401 1.00 0.00 H \n",
1319 "HETATM 157 H157 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1320 "HETATM 158 H158 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1321 "HETATM 159 H159 TNS A 2 42.165 -26.429 8.245 1.00 0.00 H \n",
1322 "HETATM 160 H160 TNS A 2 35.707 -25.067 -3.896 1.00 0.00 H \n",
1323 "HETATM 161 H161 TNS A 2 28.268 -22.186 -12.565 1.00 0.00 H \n",
1324 "HETATM 162 H162 TNS A 2 20.332 -18.535 -19.475 1.00 0.00 H \n",
1325 "HETATM 163 H163 TNS A 2 12.032 -14.321 -25.098 1.00 0.00 H \n",
1326 "HETATM 164 H164 TNS A 2 3.414 -9.612 -29.592 1.00 0.00 H \n",
1327 "HETATM 165 H165 TNS A 2 -5.523 -4.411 -32.958 1.00 0.00 H \n",
1328 "HETATM 166 H166 TNS A 2 -14.824 1.355 -35.037 1.00 0.00 H \n",
1329 "HETATM 167 H167 TNS A 2 -24.621 7.890 -35.357 1.00 0.00 H \n",
1330 "HETATM 168 H168 TNS A 2 -35.399 15.944 -32.204 1.00 0.00 H \n",
1331 "HETATM 169 H169 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1332 "HETATM 170 H170 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1333 "HETATM 171 H171 TNS A 2 40.959 -29.239 7.614 1.00 0.00 H \n",
1334 "HETATM 172 H172 TNS A 2 33.730 -29.672 -4.930 1.00 0.00 H \n",
1335 "HETATM 173 H173 TNS A 2 25.871 -27.770 -13.818 1.00 0.00 H \n",
1336 "HETATM 174 H174 TNS A 2 17.692 -24.686 -20.856 1.00 0.00 H \n",
1337 "HETATM 175 H175 TNS A 2 9.278 -20.736 -26.538 1.00 0.00 H \n",
1338 "HETATM 176 H176 TNS A 2 0.660 -16.028 -31.032 1.00 0.00 H \n",
1339 "HETATM 177 H177 TNS A 2 -8.163 -10.561 -34.339 1.00 0.00 H \n",
1340 "HETATM 178 H178 TNS A 2 -17.220 -4.229 -36.290 1.00 0.00 H \n",
1341 "HETATM 179 H179 TNS A 2 -26.597 3.285 -36.390 1.00 0.00 H \n",
1342 "HETATM 180 H180 TNS A 2 -36.605 13.134 -32.835 1.00 0.00 H \n",
1343 "HETATM 181 H181 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1344 "HETATM 182 H182 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1345 "HETATM 183 H183 TNS A 2 39.540 -31.262 8.218 1.00 0.00 H \n",
1346 "HETATM 184 H184 TNS A 2 31.405 -32.985 -3.941 1.00 0.00 H \n",
1347 "HETATM 185 H185 TNS A 2 23.051 -31.787 -12.619 1.00 0.00 H \n",
1348 "HETATM 186 H186 TNS A 2 14.585 -29.111 -19.535 1.00 0.00 H \n",
1349 "HETATM 187 H187 TNS A 2 6.038 -25.352 -25.160 1.00 0.00 H \n",
1350 "HETATM 188 H188 TNS A 2 -2.580 -20.644 -29.654 1.00 0.00 H \n",
1351 "HETATM 189 H189 TNS A 2 -11.270 -14.987 -33.018 1.00 0.00 H \n",
1352 "HETATM 190 H190 TNS A 2 -20.041 -8.247 -35.091 1.00 0.00 H \n",
1353 "HETATM 191 H191 TNS A 2 -28.923 -0.028 -35.402 1.00 0.00 H \n",
1354 "HETATM 192 H192 TNS A 2 -38.024 11.112 -32.231 1.00 0.00 H \n",
1355 "HETATM 193 H193 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1356 "HETATM 194 H194 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1357 "HETATM 195 H195 TNS A 2 38.046 -32.298 9.997 1.00 0.00 H \n",
1358 "HETATM 196 H196 TNS A 2 28.958 -34.682 -1.027 1.00 0.00 H \n",
1359 "HETATM 197 H197 TNS A 2 20.083 -33.846 -9.085 1.00 0.00 H \n",
1360 "HETATM 198 H198 TNS A 2 11.316 -31.378 -15.642 1.00 0.00 H \n",
1361 "HETATM 199 H199 TNS A 2 2.629 -27.717 -21.100 1.00 0.00 H \n",
1362 "HETATM 200 H200 TNS A 2 -5.989 -23.008 -25.594 1.00 0.00 H \n",
1363 "HETATM 201 H201 TNS A 2 -14.538 -17.254 -29.125 1.00 0.00 H \n",
1364 "HETATM 202 H202 TNS A 2 -23.008 -10.305 -31.557 1.00 0.00 H \n",
1365 "HETATM 203 H203 TNS A 2 -31.370 -1.725 -32.487 1.00 0.00 H \n",
1366 "HETATM 204 H204 TNS A 2 -39.518 10.076 -30.453 1.00 0.00 H \n",
1367 "HETATM 205 H205 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1368 "HETATM 206 H206 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1369 "HETATM 207 H207 TNS A 2 36.624 -32.246 12.777 1.00 0.00 H \n",
1370 "HETATM 208 H208 TNS A 2 26.629 -34.598 3.528 1.00 0.00 H \n",
1371 "HETATM 209 H209 TNS A 2 17.259 -33.743 -3.562 1.00 0.00 H \n",
1372 "HETATM 210 H210 TNS A 2 8.205 -31.265 -9.558 1.00 0.00 H \n",
1373 "HETATM 211 H211 TNS A 2 -0.616 -27.599 -14.754 1.00 0.00 H \n",
1374 "HETATM 212 H212 TNS A 2 -9.234 -22.891 -19.248 1.00 0.00 H \n",
1375 "HETATM 213 H213 TNS A 2 -17.649 -17.141 -23.041 1.00 0.00 H \n",
1376 "HETATM 214 H214 TNS A 2 -25.832 -10.202 -26.033 1.00 0.00 H \n",
1377 "HETATM 215 H215 TNS A 2 -33.699 -1.641 -27.933 1.00 0.00 H \n",
1378 "HETATM 216 H216 TNS A 2 -40.940 10.127 -27.673 1.00 0.00 H \n",
1379 "HETATM 217 H217 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1380 "HETATM 218 H218 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1381 "HETATM 219 H219 TNS A 2 35.414 -31.112 16.286 1.00 0.00 H \n",
1382 "HETATM 220 H220 TNS A 2 24.646 -32.739 9.277 1.00 0.00 H \n",
1383 "HETATM 221 H221 TNS A 2 14.854 -31.490 3.410 1.00 0.00 H \n",
1384 "HETATM 222 H222 TNS A 2 5.557 -28.783 -1.879 1.00 0.00 H \n",
1385 "HETATM 223 H223 TNS A 2 -3.379 -25.010 -6.744 1.00 0.00 H \n",
1386 "HETATM 224 H224 TNS A 2 -11.997 -20.302 -11.238 1.00 0.00 H \n",
1387 "HETATM 225 H225 TNS A 2 -20.298 -14.659 -15.362 1.00 0.00 H \n",
1388 "HETATM 226 H226 TNS A 2 -28.237 -7.949 -19.062 1.00 0.00 H \n",
1389 "HETATM 227 H227 TNS A 2 -35.682 0.218 -22.184 1.00 0.00 H \n",
1390 "HETATM 228 H228 TNS A 2 -42.150 11.262 -24.164 1.00 0.00 H \n",
1391 "HETATM 229 H229 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1392 "HETATM 230 H230 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
1393 "HETATM 231 H231 TNS A 2 34.533 -29.006 20.181 1.00 0.00 H \n",
1394 "HETATM 232 H232 TNS A 2 23.203 -29.289 15.658 1.00 0.00 H \n",
1395 "HETATM 233 H233 TNS A 2 13.104 -27.306 11.148 1.00 0.00 H \n",
1396 "HETATM 234 H234 TNS A 2 3.629 -24.175 6.645 1.00 0.00 H \n",
1397 "HETATM 235 H235 TNS A 2 -5.389 -20.203 2.146 1.00 0.00 H \n",
1398 "HETATM 236 H236 TNS A 2 -14.007 -15.495 -2.348 1.00 0.00 H \n",
1399 "HETATM 237 H237 TNS A 2 -22.225 -10.050 -6.838 1.00 0.00 H \n",
1400 "HETATM 238 H238 TNS A 2 -29.987 -3.765 -11.324 1.00 0.00 H \n",
1401 "HETATM 239 H239 TNS A 2 -37.125 3.668 -15.803 1.00 0.00 H \n",
1402 "HETATM 240 H240 TNS A 2 -43.031 13.367 -20.269 1.00 0.00 H \n",
1403 "HETATM 241 H241 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
1404 "HETATM 242 R AXS A 3 -0.000 0.000 0.000 1.00 0.00 C \n",
1405 "HETATM 243 Dx AXS A 3 -10.813 -11.352 8.843 1.00 0.00 C \n",
1406 "HETATM 244 Dx AXS A 3 10.813 11.352 -8.843 1.00 0.00 C \n",
1407 "HETATM 245 Dx AXS A 3 -11.895 -12.487 9.728 1.00 0.00 N \n",
1408 "HETATM 246 Dx AXS A 3 11.895 12.487 -9.728 1.00 0.00 N \n",
1409 "HETATM 247 R AXS A 3 -0.000 0.000 0.000 1.00 0.00 C \n",
1410 "HETATM 248 Dy AXS A 3 -1.738 23.114 27.545 1.00 0.00 C \n",
1411 "HETATM 249 Dy AXS A 3 1.738 -23.114 -27.545 1.00 0.00 C \n",
1412 "HETATM 250 Dy AXS A 3 -1.912 25.425 30.300 1.00 0.00 N \n",
1413 "HETATM 251 Dy AXS A 3 1.912 -25.425 -30.300 1.00 0.00 N \n",
1414 "HETATM 252 R AXS A 3 -0.000 0.000 0.000 1.00 0.00 C \n",
1415 "HETATM 253 Dz AXS A 3 -43.091 23.541 -22.472 1.00 0.00 C \n",
1416 "HETATM 254 Dz AXS A 3 43.091 -23.541 22.472 1.00 0.00 C \n",
1417 "HETATM 255 Dz AXS A 3 -47.400 25.895 -24.719 1.00 0.00 N \n",
1418 "HETATM 256 Dz AXS A 3 47.400 -25.895 24.719 1.00 0.00 N \n",
1419 "CONECT 2 3 14 230 \n",
1420 "CONECT 3 2 4 15 231 \n",
1421 "CONECT 4 3 5 16 232 \n",
1422 "CONECT 5 4 6 17 233 \n",
1423 "CONECT 6 5 7 18 234 \n",
1424 "CONECT 7 6 8 19 235 \n",
1425 "CONECT 8 7 9 20 236 \n",
1426 "CONECT 9 8 10 21 237 \n",
1427 "CONECT 10 9 11 22 238 \n",
1428 "CONECT 11 10 12 23 239 \n",
1429 "CONECT 12 11 13 24 240 \n",
1430 "CONECT 13 12 25 241 \n",
1431 "CONECT 14 2 15 26 \n",
1432 "CONECT 15 14 3 16 27 \n",
1433 "CONECT 16 15 4 17 28 \n",
1434 "CONECT 17 16 5 18 29 \n",
1435 "CONECT 18 17 6 19 30 \n",
1436 "CONECT 19 18 7 20 31 \n",
1437 "CONECT 20 19 8 21 32 \n",
1438 "CONECT 21 20 9 22 33 \n",
1439 "CONECT 22 21 10 23 34 \n",
1440 "CONECT 23 22 11 24 35 \n",
1441 "CONECT 24 23 12 25 36 \n",
1442 "CONECT 25 24 13 37 \n",
1443 "CONECT 26 14 27 38 \n",
1444 "CONECT 27 26 15 28 39 \n",
1445 "CONECT 28 27 16 29 40 \n",
1446 "CONECT 29 28 17 30 41 \n",
1447 "CONECT 30 29 18 31 42 \n",
1448 "CONECT 31 30 19 32 43 \n",
1449 "CONECT 32 31 20 33 44 \n",
1450 "CONECT 33 32 21 34 45 \n",
1451 "CONECT 34 33 22 35 46 \n",
1452 "CONECT 35 34 23 36 47 \n",
1453 "CONECT 36 35 24 37 48 \n",
1454 "CONECT 37 36 25 49 \n",
1455 "CONECT 38 26 39 50 \n",
1456 "CONECT 39 38 27 40 51 \n",
1457 "CONECT 40 39 28 41 52 \n",
1458 "CONECT 41 40 29 42 53 \n",
1459 "CONECT 42 41 30 43 54 \n",
1460 "CONECT 43 42 31 44 55 \n",
1461 "CONECT 44 43 32 45 56 \n",
1462 "CONECT 45 44 33 46 57 \n",
1463 "CONECT 46 45 34 47 58 \n",
1464 "CONECT 47 46 35 48 59 \n",
1465 "CONECT 48 47 36 49 60 \n",
1466 "CONECT 49 48 37 61 \n",
1467 "CONECT 50 38 51 62 \n",
1468 "CONECT 51 50 39 52 63 \n",
1469 "CONECT 52 51 40 53 64 \n",
1470 "CONECT 53 52 41 54 65 \n",
1471 "CONECT 54 53 42 55 66 \n",
1472 "CONECT 55 54 43 56 67 \n",
1473 "CONECT 56 55 44 57 68 \n",
1474 "CONECT 57 56 45 58 69 \n",
1475 "CONECT 58 57 46 59 70 \n",
1476 "CONECT 59 58 47 60 71 \n",
1477 "CONECT 60 59 48 61 72 \n",
1478 "CONECT 61 60 49 73 \n",
1479 "CONECT 62 50 63 74 \n",
1480 "CONECT 63 62 51 64 75 \n",
1481 "CONECT 64 63 52 65 76 \n",
1482 "CONECT 65 64 53 66 77 \n",
1483 "CONECT 66 65 54 67 78 \n",
1484 "CONECT 67 66 55 68 79 \n",
1485 "CONECT 68 67 56 69 80 \n",
1486 "CONECT 69 68 57 70 81 \n",
1487 "CONECT 70 69 58 71 82 \n",
1488 "CONECT 71 70 59 72 83 \n",
1489 "CONECT 72 71 60 73 84 \n",
1490 "CONECT 73 72 61 85 \n",
1491 "CONECT 74 62 75 86 \n",
1492 "CONECT 75 74 63 76 87 \n",
1493 "CONECT 76 75 64 77 88 \n",
1494 "CONECT 77 76 65 78 89 \n",
1495 "CONECT 78 77 66 79 90 \n",
1496 "CONECT 79 78 67 80 91 \n",
1497 "CONECT 80 79 68 81 92 \n",
1498 "CONECT 81 80 69 82 93 \n",
1499 "CONECT 82 81 70 83 94 \n",
1500 "CONECT 83 82 71 84 95 \n",
1501 "CONECT 84 83 72 85 96 \n",
1502 "CONECT 85 84 73 97 \n",
1503 "CONECT 86 74 87 98 \n",
1504 "CONECT 87 86 75 88 99 \n",
1505 "CONECT 88 87 76 89 100 \n",
1506 "CONECT 89 88 77 90 101 \n",
1507 "CONECT 90 89 78 91 102 \n",
1508 "CONECT 91 90 79 92 103 \n",
1509 "CONECT 92 91 80 93 104 \n",
1510 "CONECT 93 92 81 94 105 \n",
1511 "CONECT 94 93 82 95 106 \n",
1512 "CONECT 95 94 83 96 107 \n",
1513 "CONECT 96 95 84 97 108 \n",
1514 "CONECT 97 96 85 109 \n",
1515 "CONECT 98 86 99 110 \n",
1516 "CONECT 99 98 87 100 111 \n",
1517 "CONECT 100 99 88 101 112 \n",
1518 "CONECT 101 100 89 102 113 \n",
1519 "CONECT 102 101 90 103 114 \n",
1520 "CONECT 103 102 91 104 115 \n",
1521 "CONECT 104 103 92 105 116 \n",
1522 "CONECT 105 104 93 106 117 \n",
1523 "CONECT 106 105 94 107 118 \n",
1524 "CONECT 107 106 95 108 119 \n",
1525 "CONECT 108 107 96 109 120 \n",
1526 "CONECT 109 108 97 121 \n",
1527 "CONECT 110 98 111 122 \n",
1528 "CONECT 111 110 99 112 123 \n",
1529 "CONECT 112 111 100 113 124 \n",
1530 "CONECT 113 112 101 114 125 \n",
1531 "CONECT 114 113 102 115 126 \n",
1532 "CONECT 115 114 103 116 127 \n",
1533 "CONECT 116 115 104 117 128 \n",
1534 "CONECT 117 116 105 118 129 \n",
1535 "CONECT 118 117 106 119 130 \n",
1536 "CONECT 119 118 107 120 131 \n",
1537 "CONECT 120 119 108 121 132 \n",
1538 "CONECT 121 120 109 133 \n",
1539 "CONECT 122 110 123 134 \n",
1540 "CONECT 123 122 111 124 135 \n",
1541 "CONECT 124 123 112 125 136 \n",
1542 "CONECT 125 124 113 126 137 \n",
1543 "CONECT 126 125 114 127 138 \n",
1544 "CONECT 127 126 115 128 139 \n",
1545 "CONECT 128 127 116 129 140 \n",
1546 "CONECT 129 128 117 130 141 \n",
1547 "CONECT 130 129 118 131 142 \n",
1548 "CONECT 131 130 119 132 143 \n",
1549 "CONECT 132 131 120 133 144 \n",
1550 "CONECT 133 132 121 145 \n",
1551 "CONECT 134 122 135 146 \n",
1552 "CONECT 135 134 123 136 147 \n",
1553 "CONECT 136 135 124 137 148 \n",
1554 "CONECT 137 136 125 138 149 \n",
1555 "CONECT 138 137 126 139 150 \n",
1556 "CONECT 139 138 127 140 151 \n",
1557 "CONECT 140 139 128 141 152 \n",
1558 "CONECT 141 140 129 142 153 \n",
1559 "CONECT 142 141 130 143 154 \n",
1560 "CONECT 143 142 131 144 155 \n",
1561 "CONECT 144 143 132 145 156 \n",
1562 "CONECT 145 144 133 157 \n",
1563 "CONECT 146 134 147 158 \n",
1564 "CONECT 147 146 135 148 159 \n",
1565 "CONECT 148 147 136 149 160 \n",
1566 "CONECT 149 148 137 150 161 \n",
1567 "CONECT 150 149 138 151 162 \n",
1568 "CONECT 151 150 139 152 163 \n",
1569 "CONECT 152 151 140 153 164 \n",
1570 "CONECT 153 152 141 154 165 \n",
1571 "CONECT 154 153 142 155 166 \n",
1572 "CONECT 155 154 143 156 167 \n",
1573 "CONECT 156 155 144 157 168 \n",
1574 "CONECT 157 156 145 169 \n",
1575 "CONECT 158 146 159 170 \n",
1576 "CONECT 159 158 147 160 171 \n",
1577 "CONECT 160 159 148 161 172 \n",
1578 "CONECT 161 160 149 162 173 \n",
1579 "CONECT 162 161 150 163 174 \n",
1580 "CONECT 163 162 151 164 175 \n",
1581 "CONECT 164 163 152 165 176 \n",
1582 "CONECT 165 164 153 166 177 \n",
1583 "CONECT 166 165 154 167 178 \n",
1584 "CONECT 167 166 155 168 179 \n",
1585 "CONECT 168 167 156 169 180 \n",
1586 "CONECT 169 168 157 181 \n",
1587 "CONECT 170 158 171 182 \n",
1588 "CONECT 171 170 159 172 183 \n",
1589 "CONECT 172 171 160 173 184 \n",
1590 "CONECT 173 172 161 174 185 \n",
1591 "CONECT 174 173 162 175 186 \n",
1592 "CONECT 175 174 163 176 187 \n",
1593 "CONECT 176 175 164 177 188 \n",
1594 "CONECT 177 176 165 178 189 \n",
1595 "CONECT 178 177 166 179 190 \n",
1596 "CONECT 179 178 167 180 191 \n",
1597 "CONECT 180 179 168 181 192 \n",
1598 "CONECT 181 180 169 193 \n",
1599 "CONECT 182 170 183 194 \n",
1600 "CONECT 183 182 171 184 195 \n",
1601 "CONECT 184 183 172 185 196 \n",
1602 "CONECT 185 184 173 186 197 \n",
1603 "CONECT 186 185 174 187 198 \n",
1604 "CONECT 187 186 175 188 199 \n",
1605 "CONECT 188 187 176 189 200 \n",
1606 "CONECT 189 188 177 190 201 \n",
1607 "CONECT 190 189 178 191 202 \n",
1608 "CONECT 191 190 179 192 203 \n",
1609 "CONECT 192 191 180 193 204 \n",
1610 "CONECT 193 192 181 205 \n",
1611 "CONECT 194 182 195 206 \n",
1612 "CONECT 195 194 183 196 207 \n",
1613 "CONECT 196 195 184 197 208 \n",
1614 "CONECT 197 196 185 198 209 \n",
1615 "CONECT 198 197 186 199 210 \n",
1616 "CONECT 199 198 187 200 211 \n",
1617 "CONECT 200 199 188 201 212 \n",
1618 "CONECT 201 200 189 202 213 \n",
1619 "CONECT 202 201 190 203 214 \n",
1620 "CONECT 203 202 191 204 215 \n",
1621 "CONECT 204 203 192 205 216 \n",
1622 "CONECT 205 204 193 217 \n",
1623 "CONECT 206 194 207 218 \n",
1624 "CONECT 207 206 195 208 219 \n",
1625 "CONECT 208 207 196 209 220 \n",
1626 "CONECT 209 208 197 210 221 \n",
1627 "CONECT 210 209 198 211 222 \n",
1628 "CONECT 211 210 199 212 223 \n",
1629 "CONECT 212 211 200 213 224 \n",
1630 "CONECT 213 212 201 214 225 \n",
1631 "CONECT 214 213 202 215 226 \n",
1632 "CONECT 215 214 203 216 227 \n",
1633 "CONECT 216 215 204 217 228 \n",
1634 "CONECT 217 216 205 229 \n",
1635 "CONECT 218 206 219 230 \n",
1636 "CONECT 219 218 207 220 231 \n",
1637 "CONECT 220 219 208 221 232 \n",
1638 "CONECT 221 220 209 222 233 \n",
1639 "CONECT 222 221 210 223 234 \n",
1640 "CONECT 223 222 211 224 235 \n",
1641 "CONECT 224 223 212 225 236 \n",
1642 "CONECT 225 224 213 226 237 \n",
1643 "CONECT 226 225 214 227 238 \n",
1644 "CONECT 227 226 215 228 239 \n",
1645 "CONECT 228 227 216 229 240 \n",
1646 "CONECT 229 228 217 241 \n",
1647 "CONECT 230 218 2 231 \n",
1648 "CONECT 231 230 219 3 232 \n",
1649 "CONECT 232 231 220 4 233 \n",
1650 "CONECT 233 232 221 5 234 \n",
1651 "CONECT 234 233 222 6 235 \n",
1652 "CONECT 235 234 223 7 236 \n",
1653 "CONECT 236 235 224 8 237 \n",
1654 "CONECT 237 236 225 9 238 \n",
1655 "CONECT 238 237 226 10 239 \n",
1656 "CONECT 239 238 227 11 240 \n",
1657 "CONECT 240 239 228 12 241 \n",
1658 "CONECT 241 240 229 13 \n",
1659 "CONECT 242 243 244 \n",
1660 "CONECT 243 242 \n",
1661 "CONECT 244 242 \n",
1662 "CONECT 247 248 249 \n",
1663 "CONECT 248 247 \n",
1664 "CONECT 249 247 \n",
1665 "CONECT 252 253 254 \n",
1666 "CONECT 253 252 \n",
1667 "CONECT 254 252 \n",
1668 "MASTER 0 0 3 0 0 0 0 0 256 0 249 0 \n",
1669 "END \n"
1670 ]
1671
1672
1673 self.strip_remarks(lines)
1674 self.assertEqual(len(real_data), len(lines))
1675 for i in range(len(lines)):
1676 self.assertEqual(real_data[i], lines[i])
1677
1678
1680 """Check the 3D coordinates of the PDB representation of the optimised oblate diffusion tensor."""
1681
1682
1683 self.interpreter.reset()
1684
1685
1686 ds.tmpfile = mktemp()
1687
1688
1689 ds.diff_dir = 'spheroid_oblate'
1690 ds.diff_type = 'oblate'
1691
1692
1693 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'diff_tensor'+sep+'tensor_opt.py')
1694
1695
1696 self.interpreter.structure.create_diff_tensor_pdb(scale=1.8e-06, file=ds.tmpfile, force=True)
1697
1698
1699 file = open(ds.tmpfile)
1700 lines = file.readlines()
1701 file.close()
1702
1703
1704 real_data = [
1705 "HET COM A 1 1 \n",
1706 "HET TNS A 2 240 \n",
1707 "HET AXS A 3 5 \n",
1708 "HETNAM COM CENTRE OF MASS \n",
1709 "HETNAM TNS TENSOR \n",
1710 "HETNAM AXS TENSOR AXES \n",
1711 "FORMUL 1 COM C1 \n",
1712 "FORMUL 2 TNS H240 \n",
1713 "FORMUL 3 AXS C3N2 \n",
1714 "HETATM 1 R COM A 1 -0.000 0.000 0.000 1.00 0.00 C \n",
1715 "HETATM 2 H2 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1716 "HETATM 3 H3 TNS A 2 -31.028 -24.990 -4.071 1.00 0.00 H \n",
1717 "HETATM 4 H4 TNS A 2 -34.085 -23.357 -20.368 1.00 0.00 H \n",
1718 "HETATM 5 H5 TNS A 2 -33.789 -20.404 -30.870 1.00 0.00 H \n",
1719 "HETATM 6 H6 TNS A 2 -31.796 -16.782 -38.439 1.00 0.00 H \n",
1720 "HETATM 7 H7 TNS A 2 -28.560 -12.670 -43.859 1.00 0.00 H \n",
1721 "HETATM 8 H8 TNS A 2 -24.234 -8.130 -47.396 1.00 0.00 H \n",
1722 "HETATM 9 H9 TNS A 2 -18.820 -3.160 -49.051 1.00 0.00 H \n",
1723 "HETATM 10 H10 TNS A 2 -12.162 2.300 -48.557 1.00 0.00 H \n",
1724 "HETATM 11 H11 TNS A 2 -3.807 8.428 -45.129 1.00 0.00 H \n",
1725 "HETATM 12 H12 TNS A 2 7.900 15.877 -35.907 1.00 0.00 H \n",
1726 "HETATM 13 H13 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1727 "HETATM 14 H14 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1728 "HETATM 15 H15 TNS A 2 -35.049 -19.300 -1.685 1.00 0.00 H \n",
1729 "HETATM 16 H16 TNS A 2 -40.673 -14.036 -16.459 1.00 0.00 H \n",
1730 "HETATM 17 H17 TNS A 2 -41.778 -9.100 -26.129 1.00 0.00 H \n",
1731 "HETATM 18 H18 TNS A 2 -40.596 -4.331 -33.217 1.00 0.00 H \n",
1732 "HETATM 19 H19 TNS A 2 -37.739 0.317 -38.412 1.00 0.00 H \n",
1733 "HETATM 20 H20 TNS A 2 -33.413 4.857 -41.949 1.00 0.00 H \n",
1734 "HETATM 21 H21 TNS A 2 -27.620 9.291 -43.829 1.00 0.00 H \n",
1735 "HETATM 22 H22 TNS A 2 -20.152 13.604 -43.816 1.00 0.00 H \n",
1736 "HETATM 23 H23 TNS A 2 -10.396 17.749 -41.220 1.00 0.00 H \n",
1737 "HETATM 24 H24 TNS A 2 3.879 21.567 -33.521 1.00 0.00 H \n",
1738 "HETATM 25 H25 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1739 "HETATM 26 H26 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1740 "HETATM 27 H27 TNS A 2 -37.545 -13.722 2.425 1.00 0.00 H \n",
1741 "HETATM 28 H28 TNS A 2 -44.762 -4.897 -9.726 1.00 0.00 H \n",
1742 "HETATM 29 H29 TNS A 2 -46.737 1.983 -17.965 1.00 0.00 H \n",
1743 "HETATM 30 H30 TNS A 2 -46.058 7.877 -24.224 1.00 0.00 H \n",
1744 "HETATM 31 H31 TNS A 2 -43.435 13.050 -29.032 1.00 0.00 H \n",
1745 "HETATM 32 H32 TNS A 2 -39.110 17.591 -32.569 1.00 0.00 H \n",
1746 "HETATM 33 H33 TNS A 2 -33.082 21.500 -34.836 1.00 0.00 H \n",
1747 "HETATM 34 H34 TNS A 2 -25.110 24.687 -35.652 1.00 0.00 H \n",
1748 "HETATM 35 H35 TNS A 2 -14.484 26.889 -34.487 1.00 0.00 H \n",
1749 "HETATM 36 H36 TNS A 2 1.383 27.145 -29.411 1.00 0.00 H \n",
1750 "HETATM 37 H37 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1751 "HETATM 38 H38 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1752 "HETATM 39 H39 TNS A 2 -38.271 -8.800 7.855 1.00 0.00 H \n",
1753 "HETATM 40 H40 TNS A 2 -45.951 3.167 -0.830 1.00 0.00 H \n",
1754 "HETATM 41 H41 TNS A 2 -48.179 11.761 -7.177 1.00 0.00 H \n",
1755 "HETATM 42 H42 TNS A 2 -47.646 18.648 -12.340 1.00 0.00 H \n",
1756 "HETATM 43 H43 TNS A 2 -45.092 24.284 -16.637 1.00 0.00 H \n",
1757 "HETATM 44 H44 TNS A 2 -40.767 28.825 -20.174 1.00 0.00 H \n",
1758 "HETATM 45 H45 TNS A 2 -34.670 32.270 -22.952 1.00 0.00 H \n",
1759 "HETATM 46 H46 TNS A 2 -26.552 34.465 -24.863 1.00 0.00 H \n",
1760 "HETATM 47 H47 TNS A 2 -15.673 34.952 -25.591 1.00 0.00 H \n",
1761 "HETATM 48 H48 TNS A 2 0.657 32.067 -23.981 1.00 0.00 H \n",
1762 "HETATM 49 H49 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1763 "HETATM 50 H50 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1764 "HETATM 51 H51 TNS A 2 -37.156 -5.018 14.074 1.00 0.00 H \n",
1765 "HETATM 52 H52 TNS A 2 -44.124 9.364 9.360 1.00 0.00 H \n",
1766 "HETATM 53 H53 TNS A 2 -45.963 19.276 5.180 1.00 0.00 H \n",
1767 "HETATM 54 H54 TNS A 2 -45.206 26.926 1.271 1.00 0.00 H \n",
1768 "HETATM 55 H55 TNS A 2 -42.546 32.919 -2.440 1.00 0.00 H \n",
1769 "HETATM 56 H56 TNS A 2 -38.221 37.460 -5.977 1.00 0.00 H \n",
1770 "HETATM 57 H57 TNS A 2 -32.230 40.549 -9.341 1.00 0.00 H \n",
1771 "HETATM 58 H58 TNS A 2 -24.336 41.980 -12.507 1.00 0.00 H \n",
1772 "HETATM 59 H59 TNS A 2 -13.846 41.149 -15.401 1.00 0.00 H \n",
1773 "HETATM 60 H60 TNS A 2 1.772 35.849 -17.762 1.00 0.00 H \n",
1774 "HETATM 61 H61 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1775 "HETATM 62 H62 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1776 "HETATM 63 H63 TNS A 2 -34.309 -2.744 20.474 1.00 0.00 H \n",
1777 "HETATM 64 H64 TNS A 2 -39.459 13.089 19.845 1.00 0.00 H \n",
1778 "HETATM 65 H65 TNS A 2 -40.307 23.794 17.895 1.00 0.00 H \n",
1779 "HETATM 66 H66 TNS A 2 -38.975 31.902 15.277 1.00 0.00 H \n",
1780 "HETATM 67 H67 TNS A 2 -36.048 38.109 12.169 1.00 0.00 H \n",
1781 "HETATM 68 H68 TNS A 2 -31.722 42.650 8.631 1.00 0.00 H \n",
1782 "HETATM 69 H69 TNS A 2 -25.999 45.525 4.665 1.00 0.00 H \n",
1783 "HETATM 70 H70 TNS A 2 -18.680 46.498 0.209 1.00 0.00 H \n",
1784 "HETATM 71 H71 TNS A 2 -9.182 44.875 -4.916 1.00 0.00 H \n",
1785 "HETATM 72 H72 TNS A 2 4.619 38.123 -11.362 1.00 0.00 H \n",
1786 "HETATM 73 H73 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1787 "HETATM 74 H74 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1788 "HETATM 75 H75 TNS A 2 -30.009 -2.202 26.428 1.00 0.00 H \n",
1789 "HETATM 76 H76 TNS A 2 -32.414 13.977 29.600 1.00 0.00 H \n",
1790 "HETATM 77 H77 TNS A 2 -31.763 24.871 29.724 1.00 0.00 H \n",
1791 "HETATM 78 H78 TNS A 2 -29.565 33.089 28.307 1.00 0.00 H \n",
1792 "HETATM 79 H79 TNS A 2 -26.232 39.346 25.759 1.00 0.00 H \n",
1793 "HETATM 80 H80 TNS A 2 -21.907 43.887 22.222 1.00 0.00 H \n",
1794 "HETATM 81 H81 TNS A 2 -16.589 46.711 17.695 1.00 0.00 H \n",
1795 "HETATM 82 H82 TNS A 2 -10.136 47.575 12.038 1.00 0.00 H \n",
1796 "HETATM 83 H83 TNS A 2 -2.137 45.763 4.838 1.00 0.00 H \n",
1797 "HETATM 84 H84 TNS A 2 8.920 38.665 -5.408 1.00 0.00 H \n",
1798 "HETATM 85 H85 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1799 "HETATM 86 H86 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1800 "HETATM 87 H87 TNS A 2 -24.676 -3.444 31.353 1.00 0.00 H \n",
1801 "HETATM 88 H88 TNS A 2 -23.678 11.942 37.669 1.00 0.00 H \n",
1802 "HETATM 89 H89 TNS A 2 -21.169 22.402 39.510 1.00 0.00 H \n",
1803 "HETATM 90 H90 TNS A 2 -17.895 30.369 39.085 1.00 0.00 H \n",
1804 "HETATM 91 H91 TNS A 2 -14.061 36.510 37.002 1.00 0.00 H \n",
1805 "HETATM 92 H92 TNS A 2 -9.735 41.051 33.464 1.00 0.00 H \n",
1806 "HETATM 93 H93 TNS A 2 -4.919 43.992 28.473 1.00 0.00 H \n",
1807 "HETATM 94 H94 TNS A 2 0.458 45.106 21.823 1.00 0.00 H \n",
1808 "HETATM 95 H95 TNS A 2 6.599 43.727 12.907 1.00 0.00 H \n",
1809 "HETATM 96 H96 TNS A 2 14.252 37.423 -0.483 1.00 0.00 H \n",
1810 "HETATM 97 H97 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1811 "HETATM 98 H98 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1812 "HETATM 99 H99 TNS A 2 -18.834 -6.350 34.767 1.00 0.00 H \n",
1813 "HETATM 100 H100 TNS A 2 -14.106 7.181 43.262 1.00 0.00 H \n",
1814 "HETATM 101 H101 TNS A 2 -9.561 16.629 46.293 1.00 0.00 H \n",
1815 "HETATM 102 H102 TNS A 2 -5.109 24.011 46.557 1.00 0.00 H \n",
1816 "HETATM 103 H103 TNS A 2 -0.724 29.878 44.795 1.00 0.00 H \n",
1817 "HETATM 104 H104 TNS A 2 3.601 34.418 41.258 1.00 0.00 H \n",
1818 "HETATM 105 H105 TNS A 2 7.867 37.633 35.945 1.00 0.00 H \n",
1819 "HETATM 106 H106 TNS A 2 12.065 39.333 28.606 1.00 0.00 H \n",
1820 "HETATM 107 H107 TNS A 2 16.171 38.967 18.501 1.00 0.00 H \n",
1821 "HETATM 108 H108 TNS A 2 20.094 34.517 2.931 1.00 0.00 H \n",
1822 "HETATM 109 H109 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1823 "HETATM 110 H110 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1824 "HETATM 111 H111 TNS A 2 -13.053 -10.634 36.336 1.00 0.00 H \n",
1825 "HETATM 112 H112 TNS A 2 -4.635 0.162 45.833 1.00 0.00 H \n",
1826 "HETATM 113 H113 TNS A 2 1.924 8.118 49.411 1.00 0.00 H \n",
1827 "HETATM 114 H114 TNS A 2 7.542 14.635 49.991 1.00 0.00 H \n",
1828 "HETATM 115 H115 TNS A 2 12.471 20.098 48.377 1.00 0.00 H \n",
1829 "HETATM 116 H116 TNS A 2 16.797 24.639 44.840 1.00 0.00 H \n",
1830 "HETATM 117 H117 TNS A 2 20.518 28.257 39.379 1.00 0.00 H \n",
1831 "HETATM 118 H118 TNS A 2 23.551 30.821 31.724 1.00 0.00 H \n",
1832 "HETATM 119 H119 TNS A 2 25.642 31.948 21.072 1.00 0.00 H \n",
1833 "HETATM 120 H120 TNS A 2 25.875 30.233 4.500 1.00 0.00 H \n",
1834 "HETATM 121 H121 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1835 "HETATM 122 H122 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1836 "HETATM 123 H123 TNS A 2 -7.900 -15.877 35.907 1.00 0.00 H \n",
1837 "HETATM 124 H124 TNS A 2 3.807 -8.428 45.129 1.00 0.00 H \n",
1838 "HETATM 125 H125 TNS A 2 12.162 -2.300 48.557 1.00 0.00 H \n",
1839 "HETATM 126 H126 TNS A 2 18.820 3.160 49.051 1.00 0.00 H \n",
1840 "HETATM 127 H127 TNS A 2 24.234 8.130 47.396 1.00 0.00 H \n",
1841 "HETATM 128 H128 TNS A 2 28.560 12.670 43.859 1.00 0.00 H \n",
1842 "HETATM 129 H129 TNS A 2 31.796 16.782 38.439 1.00 0.00 H \n",
1843 "HETATM 130 H130 TNS A 2 33.789 20.404 30.870 1.00 0.00 H \n",
1844 "HETATM 131 H131 TNS A 2 34.085 23.357 20.368 1.00 0.00 H \n",
1845 "HETATM 132 H132 TNS A 2 31.028 24.990 4.071 1.00 0.00 H \n",
1846 "HETATM 133 H133 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1847 "HETATM 134 H134 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1848 "HETATM 135 H135 TNS A 2 -3.879 -21.567 33.521 1.00 0.00 H \n",
1849 "HETATM 136 H136 TNS A 2 10.396 -17.749 41.220 1.00 0.00 H \n",
1850 "HETATM 137 H137 TNS A 2 20.152 -13.604 43.816 1.00 0.00 H \n",
1851 "HETATM 138 H138 TNS A 2 27.620 -9.291 43.829 1.00 0.00 H \n",
1852 "HETATM 139 H139 TNS A 2 33.413 -4.857 41.949 1.00 0.00 H \n",
1853 "HETATM 140 H140 TNS A 2 37.739 -0.317 38.412 1.00 0.00 H \n",
1854 "HETATM 141 H141 TNS A 2 40.596 4.331 33.217 1.00 0.00 H \n",
1855 "HETATM 142 H142 TNS A 2 41.778 9.100 26.129 1.00 0.00 H \n",
1856 "HETATM 143 H143 TNS A 2 40.673 14.036 16.459 1.00 0.00 H \n",
1857 "HETATM 144 H144 TNS A 2 35.049 19.300 1.685 1.00 0.00 H \n",
1858 "HETATM 145 H145 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1859 "HETATM 146 H146 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1860 "HETATM 147 H147 TNS A 2 -1.383 -27.145 29.411 1.00 0.00 H \n",
1861 "HETATM 148 H148 TNS A 2 14.484 -26.889 34.487 1.00 0.00 H \n",
1862 "HETATM 149 H149 TNS A 2 25.110 -24.687 35.652 1.00 0.00 H \n",
1863 "HETATM 150 H150 TNS A 2 33.082 -21.500 34.836 1.00 0.00 H \n",
1864 "HETATM 151 H151 TNS A 2 39.110 -17.591 32.569 1.00 0.00 H \n",
1865 "HETATM 152 H152 TNS A 2 43.435 -13.050 29.032 1.00 0.00 H \n",
1866 "HETATM 153 H153 TNS A 2 46.058 -7.877 24.224 1.00 0.00 H \n",
1867 "HETATM 154 H154 TNS A 2 46.737 -1.983 17.965 1.00 0.00 H \n",
1868 "HETATM 155 H155 TNS A 2 44.762 4.897 9.726 1.00 0.00 H \n",
1869 "HETATM 156 H156 TNS A 2 37.545 13.722 -2.425 1.00 0.00 H \n",
1870 "HETATM 157 H157 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1871 "HETATM 158 H158 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1872 "HETATM 159 H159 TNS A 2 -0.657 -32.067 23.981 1.00 0.00 H \n",
1873 "HETATM 160 H160 TNS A 2 15.673 -34.952 25.591 1.00 0.00 H \n",
1874 "HETATM 161 H161 TNS A 2 26.552 -34.465 24.863 1.00 0.00 H \n",
1875 "HETATM 162 H162 TNS A 2 34.670 -32.270 22.952 1.00 0.00 H \n",
1876 "HETATM 163 H163 TNS A 2 40.767 -28.825 20.174 1.00 0.00 H \n",
1877 "HETATM 164 H164 TNS A 2 45.092 -24.284 16.637 1.00 0.00 H \n",
1878 "HETATM 165 H165 TNS A 2 47.646 -18.648 12.340 1.00 0.00 H \n",
1879 "HETATM 166 H166 TNS A 2 48.179 -11.761 7.177 1.00 0.00 H \n",
1880 "HETATM 167 H167 TNS A 2 45.951 -3.167 0.830 1.00 0.00 H \n",
1881 "HETATM 168 H168 TNS A 2 38.271 8.800 -7.855 1.00 0.00 H \n",
1882 "HETATM 169 H169 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1883 "HETATM 170 H170 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1884 "HETATM 171 H171 TNS A 2 -1.772 -35.849 17.762 1.00 0.00 H \n",
1885 "HETATM 172 H172 TNS A 2 13.846 -41.149 15.401 1.00 0.00 H \n",
1886 "HETATM 173 H173 TNS A 2 24.336 -41.980 12.507 1.00 0.00 H \n",
1887 "HETATM 174 H174 TNS A 2 32.230 -40.549 9.341 1.00 0.00 H \n",
1888 "HETATM 175 H175 TNS A 2 38.221 -37.460 5.977 1.00 0.00 H \n",
1889 "HETATM 176 H176 TNS A 2 42.546 -32.919 2.440 1.00 0.00 H \n",
1890 "HETATM 177 H177 TNS A 2 45.206 -26.926 -1.271 1.00 0.00 H \n",
1891 "HETATM 178 H178 TNS A 2 45.963 -19.276 -5.180 1.00 0.00 H \n",
1892 "HETATM 179 H179 TNS A 2 44.124 -9.364 -9.360 1.00 0.00 H \n",
1893 "HETATM 180 H180 TNS A 2 37.156 5.018 -14.074 1.00 0.00 H \n",
1894 "HETATM 181 H181 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1895 "HETATM 182 H182 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1896 "HETATM 183 H183 TNS A 2 -4.619 -38.123 11.362 1.00 0.00 H \n",
1897 "HETATM 184 H184 TNS A 2 9.182 -44.875 4.916 1.00 0.00 H \n",
1898 "HETATM 185 H185 TNS A 2 18.680 -46.498 -0.209 1.00 0.00 H \n",
1899 "HETATM 186 H186 TNS A 2 25.999 -45.525 -4.665 1.00 0.00 H \n",
1900 "HETATM 187 H187 TNS A 2 31.722 -42.650 -8.631 1.00 0.00 H \n",
1901 "HETATM 188 H188 TNS A 2 36.048 -38.109 -12.169 1.00 0.00 H \n",
1902 "HETATM 189 H189 TNS A 2 38.975 -31.902 -15.277 1.00 0.00 H \n",
1903 "HETATM 190 H190 TNS A 2 40.307 -23.794 -17.895 1.00 0.00 H \n",
1904 "HETATM 191 H191 TNS A 2 39.459 -13.089 -19.845 1.00 0.00 H \n",
1905 "HETATM 192 H192 TNS A 2 34.309 2.744 -20.474 1.00 0.00 H \n",
1906 "HETATM 193 H193 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1907 "HETATM 194 H194 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1908 "HETATM 195 H195 TNS A 2 -8.920 -38.665 5.408 1.00 0.00 H \n",
1909 "HETATM 196 H196 TNS A 2 2.137 -45.763 -4.838 1.00 0.00 H \n",
1910 "HETATM 197 H197 TNS A 2 10.136 -47.575 -12.038 1.00 0.00 H \n",
1911 "HETATM 198 H198 TNS A 2 16.589 -46.711 -17.695 1.00 0.00 H \n",
1912 "HETATM 199 H199 TNS A 2 21.907 -43.887 -22.222 1.00 0.00 H \n",
1913 "HETATM 200 H200 TNS A 2 26.232 -39.346 -25.759 1.00 0.00 H \n",
1914 "HETATM 201 H201 TNS A 2 29.565 -33.089 -28.307 1.00 0.00 H \n",
1915 "HETATM 202 H202 TNS A 2 31.763 -24.871 -29.724 1.00 0.00 H \n",
1916 "HETATM 203 H203 TNS A 2 32.414 -13.977 -29.600 1.00 0.00 H \n",
1917 "HETATM 204 H204 TNS A 2 30.009 2.202 -26.428 1.00 0.00 H \n",
1918 "HETATM 205 H205 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1919 "HETATM 206 H206 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1920 "HETATM 207 H207 TNS A 2 -14.252 -37.423 0.483 1.00 0.00 H \n",
1921 "HETATM 208 H208 TNS A 2 -6.599 -43.727 -12.907 1.00 0.00 H \n",
1922 "HETATM 209 H209 TNS A 2 -0.458 -45.106 -21.823 1.00 0.00 H \n",
1923 "HETATM 210 H210 TNS A 2 4.919 -43.992 -28.473 1.00 0.00 H \n",
1924 "HETATM 211 H211 TNS A 2 9.735 -41.051 -33.464 1.00 0.00 H \n",
1925 "HETATM 212 H212 TNS A 2 14.061 -36.510 -37.002 1.00 0.00 H \n",
1926 "HETATM 213 H213 TNS A 2 17.895 -30.369 -39.085 1.00 0.00 H \n",
1927 "HETATM 214 H214 TNS A 2 21.169 -22.402 -39.510 1.00 0.00 H \n",
1928 "HETATM 215 H215 TNS A 2 23.678 -11.942 -37.669 1.00 0.00 H \n",
1929 "HETATM 216 H216 TNS A 2 24.676 3.444 -31.353 1.00 0.00 H \n",
1930 "HETATM 217 H217 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1931 "HETATM 218 H218 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1932 "HETATM 219 H219 TNS A 2 -20.094 -34.517 -2.931 1.00 0.00 H \n",
1933 "HETATM 220 H220 TNS A 2 -16.171 -38.967 -18.501 1.00 0.00 H \n",
1934 "HETATM 221 H221 TNS A 2 -12.065 -39.333 -28.606 1.00 0.00 H \n",
1935 "HETATM 222 H222 TNS A 2 -7.867 -37.633 -35.945 1.00 0.00 H \n",
1936 "HETATM 223 H223 TNS A 2 -3.601 -34.418 -41.258 1.00 0.00 H \n",
1937 "HETATM 224 H224 TNS A 2 0.724 -29.878 -44.795 1.00 0.00 H \n",
1938 "HETATM 225 H225 TNS A 2 5.109 -24.011 -46.557 1.00 0.00 H \n",
1939 "HETATM 226 H226 TNS A 2 9.561 -16.629 -46.293 1.00 0.00 H \n",
1940 "HETATM 227 H227 TNS A 2 14.106 -7.181 -43.262 1.00 0.00 H \n",
1941 "HETATM 228 H228 TNS A 2 18.834 6.350 -34.767 1.00 0.00 H \n",
1942 "HETATM 229 H229 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1943 "HETATM 230 H230 TNS A 2 -21.627 -22.704 17.687 1.00 0.00 H \n",
1944 "HETATM 231 H231 TNS A 2 -25.875 -30.233 -4.500 1.00 0.00 H \n",
1945 "HETATM 232 H232 TNS A 2 -25.642 -31.948 -21.072 1.00 0.00 H \n",
1946 "HETATM 233 H233 TNS A 2 -23.551 -30.821 -31.724 1.00 0.00 H \n",
1947 "HETATM 234 H234 TNS A 2 -20.518 -28.257 -39.379 1.00 0.00 H \n",
1948 "HETATM 235 H235 TNS A 2 -16.797 -24.639 -44.840 1.00 0.00 H \n",
1949 "HETATM 236 H236 TNS A 2 -12.471 -20.098 -48.377 1.00 0.00 H \n",
1950 "HETATM 237 H237 TNS A 2 -7.542 -14.635 -49.991 1.00 0.00 H \n",
1951 "HETATM 238 H238 TNS A 2 -1.924 -8.118 -49.411 1.00 0.00 H \n",
1952 "HETATM 239 H239 TNS A 2 4.635 -0.162 -45.833 1.00 0.00 H \n",
1953 "HETATM 240 H240 TNS A 2 13.053 10.634 -36.336 1.00 0.00 H \n",
1954 "HETATM 241 H241 TNS A 2 21.627 22.704 -17.687 1.00 0.00 H \n",
1955 "HETATM 242 R AXS A 3 -0.000 0.000 0.000 1.00 0.00 C \n",
1956 "HETATM 243 Dpar AXS A 3 21.627 22.704 -17.687 1.00 0.00 C \n",
1957 "HETATM 244 Dpar AXS A 3 -21.627 -22.704 17.687 1.00 0.00 C \n",
1958 "HETATM 245 Dpar AXS A 3 23.789 24.974 -19.455 1.00 0.00 N \n",
1959 "HETATM 246 Dpar AXS A 3 -23.789 -24.974 19.455 1.00 0.00 N \n",
1960 "CONECT 2 3 14 230 \n",
1961 "CONECT 3 2 4 15 231 \n",
1962 "CONECT 4 3 5 16 232 \n",
1963 "CONECT 5 4 6 17 233 \n",
1964 "CONECT 6 5 7 18 234 \n",
1965 "CONECT 7 6 8 19 235 \n",
1966 "CONECT 8 7 9 20 236 \n",
1967 "CONECT 9 8 10 21 237 \n",
1968 "CONECT 10 9 11 22 238 \n",
1969 "CONECT 11 10 12 23 239 \n",
1970 "CONECT 12 11 13 24 240 \n",
1971 "CONECT 13 12 25 241 \n",
1972 "CONECT 14 2 15 26 \n",
1973 "CONECT 15 14 3 16 27 \n",
1974 "CONECT 16 15 4 17 28 \n",
1975 "CONECT 17 16 5 18 29 \n",
1976 "CONECT 18 17 6 19 30 \n",
1977 "CONECT 19 18 7 20 31 \n",
1978 "CONECT 20 19 8 21 32 \n",
1979 "CONECT 21 20 9 22 33 \n",
1980 "CONECT 22 21 10 23 34 \n",
1981 "CONECT 23 22 11 24 35 \n",
1982 "CONECT 24 23 12 25 36 \n",
1983 "CONECT 25 24 13 37 \n",
1984 "CONECT 26 14 27 38 \n",
1985 "CONECT 27 26 15 28 39 \n",
1986 "CONECT 28 27 16 29 40 \n",
1987 "CONECT 29 28 17 30 41 \n",
1988 "CONECT 30 29 18 31 42 \n",
1989 "CONECT 31 30 19 32 43 \n",
1990 "CONECT 32 31 20 33 44 \n",
1991 "CONECT 33 32 21 34 45 \n",
1992 "CONECT 34 33 22 35 46 \n",
1993 "CONECT 35 34 23 36 47 \n",
1994 "CONECT 36 35 24 37 48 \n",
1995 "CONECT 37 36 25 49 \n",
1996 "CONECT 38 26 39 50 \n",
1997 "CONECT 39 38 27 40 51 \n",
1998 "CONECT 40 39 28 41 52 \n",
1999 "CONECT 41 40 29 42 53 \n",
2000 "CONECT 42 41 30 43 54 \n",
2001 "CONECT 43 42 31 44 55 \n",
2002 "CONECT 44 43 32 45 56 \n",
2003 "CONECT 45 44 33 46 57 \n",
2004 "CONECT 46 45 34 47 58 \n",
2005 "CONECT 47 46 35 48 59 \n",
2006 "CONECT 48 47 36 49 60 \n",
2007 "CONECT 49 48 37 61 \n",
2008 "CONECT 50 38 51 62 \n",
2009 "CONECT 51 50 39 52 63 \n",
2010 "CONECT 52 51 40 53 64 \n",
2011 "CONECT 53 52 41 54 65 \n",
2012 "CONECT 54 53 42 55 66 \n",
2013 "CONECT 55 54 43 56 67 \n",
2014 "CONECT 56 55 44 57 68 \n",
2015 "CONECT 57 56 45 58 69 \n",
2016 "CONECT 58 57 46 59 70 \n",
2017 "CONECT 59 58 47 60 71 \n",
2018 "CONECT 60 59 48 61 72 \n",
2019 "CONECT 61 60 49 73 \n",
2020 "CONECT 62 50 63 74 \n",
2021 "CONECT 63 62 51 64 75 \n",
2022 "CONECT 64 63 52 65 76 \n",
2023 "CONECT 65 64 53 66 77 \n",
2024 "CONECT 66 65 54 67 78 \n",
2025 "CONECT 67 66 55 68 79 \n",
2026 "CONECT 68 67 56 69 80 \n",
2027 "CONECT 69 68 57 70 81 \n",
2028 "CONECT 70 69 58 71 82 \n",
2029 "CONECT 71 70 59 72 83 \n",
2030 "CONECT 72 71 60 73 84 \n",
2031 "CONECT 73 72 61 85 \n",
2032 "CONECT 74 62 75 86 \n",
2033 "CONECT 75 74 63 76 87 \n",
2034 "CONECT 76 75 64 77 88 \n",
2035 "CONECT 77 76 65 78 89 \n",
2036 "CONECT 78 77 66 79 90 \n",
2037 "CONECT 79 78 67 80 91 \n",
2038 "CONECT 80 79 68 81 92 \n",
2039 "CONECT 81 80 69 82 93 \n",
2040 "CONECT 82 81 70 83 94 \n",
2041 "CONECT 83 82 71 84 95 \n",
2042 "CONECT 84 83 72 85 96 \n",
2043 "CONECT 85 84 73 97 \n",
2044 "CONECT 86 74 87 98 \n",
2045 "CONECT 87 86 75 88 99 \n",
2046 "CONECT 88 87 76 89 100 \n",
2047 "CONECT 89 88 77 90 101 \n",
2048 "CONECT 90 89 78 91 102 \n",
2049 "CONECT 91 90 79 92 103 \n",
2050 "CONECT 92 91 80 93 104 \n",
2051 "CONECT 93 92 81 94 105 \n",
2052 "CONECT 94 93 82 95 106 \n",
2053 "CONECT 95 94 83 96 107 \n",
2054 "CONECT 96 95 84 97 108 \n",
2055 "CONECT 97 96 85 109 \n",
2056 "CONECT 98 86 99 110 \n",
2057 "CONECT 99 98 87 100 111 \n",
2058 "CONECT 100 99 88 101 112 \n",
2059 "CONECT 101 100 89 102 113 \n",
2060 "CONECT 102 101 90 103 114 \n",
2061 "CONECT 103 102 91 104 115 \n",
2062 "CONECT 104 103 92 105 116 \n",
2063 "CONECT 105 104 93 106 117 \n",
2064 "CONECT 106 105 94 107 118 \n",
2065 "CONECT 107 106 95 108 119 \n",
2066 "CONECT 108 107 96 109 120 \n",
2067 "CONECT 109 108 97 121 \n",
2068 "CONECT 110 98 111 122 \n",
2069 "CONECT 111 110 99 112 123 \n",
2070 "CONECT 112 111 100 113 124 \n",
2071 "CONECT 113 112 101 114 125 \n",
2072 "CONECT 114 113 102 115 126 \n",
2073 "CONECT 115 114 103 116 127 \n",
2074 "CONECT 116 115 104 117 128 \n",
2075 "CONECT 117 116 105 118 129 \n",
2076 "CONECT 118 117 106 119 130 \n",
2077 "CONECT 119 118 107 120 131 \n",
2078 "CONECT 120 119 108 121 132 \n",
2079 "CONECT 121 120 109 133 \n",
2080 "CONECT 122 110 123 134 \n",
2081 "CONECT 123 122 111 124 135 \n",
2082 "CONECT 124 123 112 125 136 \n",
2083 "CONECT 125 124 113 126 137 \n",
2084 "CONECT 126 125 114 127 138 \n",
2085 "CONECT 127 126 115 128 139 \n",
2086 "CONECT 128 127 116 129 140 \n",
2087 "CONECT 129 128 117 130 141 \n",
2088 "CONECT 130 129 118 131 142 \n",
2089 "CONECT 131 130 119 132 143 \n",
2090 "CONECT 132 131 120 133 144 \n",
2091 "CONECT 133 132 121 145 \n",
2092 "CONECT 134 122 135 146 \n",
2093 "CONECT 135 134 123 136 147 \n",
2094 "CONECT 136 135 124 137 148 \n",
2095 "CONECT 137 136 125 138 149 \n",
2096 "CONECT 138 137 126 139 150 \n",
2097 "CONECT 139 138 127 140 151 \n",
2098 "CONECT 140 139 128 141 152 \n",
2099 "CONECT 141 140 129 142 153 \n",
2100 "CONECT 142 141 130 143 154 \n",
2101 "CONECT 143 142 131 144 155 \n",
2102 "CONECT 144 143 132 145 156 \n",
2103 "CONECT 145 144 133 157 \n",
2104 "CONECT 146 134 147 158 \n",
2105 "CONECT 147 146 135 148 159 \n",
2106 "CONECT 148 147 136 149 160 \n",
2107 "CONECT 149 148 137 150 161 \n",
2108 "CONECT 150 149 138 151 162 \n",
2109 "CONECT 151 150 139 152 163 \n",
2110 "CONECT 152 151 140 153 164 \n",
2111 "CONECT 153 152 141 154 165 \n",
2112 "CONECT 154 153 142 155 166 \n",
2113 "CONECT 155 154 143 156 167 \n",
2114 "CONECT 156 155 144 157 168 \n",
2115 "CONECT 157 156 145 169 \n",
2116 "CONECT 158 146 159 170 \n",
2117 "CONECT 159 158 147 160 171 \n",
2118 "CONECT 160 159 148 161 172 \n",
2119 "CONECT 161 160 149 162 173 \n",
2120 "CONECT 162 161 150 163 174 \n",
2121 "CONECT 163 162 151 164 175 \n",
2122 "CONECT 164 163 152 165 176 \n",
2123 "CONECT 165 164 153 166 177 \n",
2124 "CONECT 166 165 154 167 178 \n",
2125 "CONECT 167 166 155 168 179 \n",
2126 "CONECT 168 167 156 169 180 \n",
2127 "CONECT 169 168 157 181 \n",
2128 "CONECT 170 158 171 182 \n",
2129 "CONECT 171 170 159 172 183 \n",
2130 "CONECT 172 171 160 173 184 \n",
2131 "CONECT 173 172 161 174 185 \n",
2132 "CONECT 174 173 162 175 186 \n",
2133 "CONECT 175 174 163 176 187 \n",
2134 "CONECT 176 175 164 177 188 \n",
2135 "CONECT 177 176 165 178 189 \n",
2136 "CONECT 178 177 166 179 190 \n",
2137 "CONECT 179 178 167 180 191 \n",
2138 "CONECT 180 179 168 181 192 \n",
2139 "CONECT 181 180 169 193 \n",
2140 "CONECT 182 170 183 194 \n",
2141 "CONECT 183 182 171 184 195 \n",
2142 "CONECT 184 183 172 185 196 \n",
2143 "CONECT 185 184 173 186 197 \n",
2144 "CONECT 186 185 174 187 198 \n",
2145 "CONECT 187 186 175 188 199 \n",
2146 "CONECT 188 187 176 189 200 \n",
2147 "CONECT 189 188 177 190 201 \n",
2148 "CONECT 190 189 178 191 202 \n",
2149 "CONECT 191 190 179 192 203 \n",
2150 "CONECT 192 191 180 193 204 \n",
2151 "CONECT 193 192 181 205 \n",
2152 "CONECT 194 182 195 206 \n",
2153 "CONECT 195 194 183 196 207 \n",
2154 "CONECT 196 195 184 197 208 \n",
2155 "CONECT 197 196 185 198 209 \n",
2156 "CONECT 198 197 186 199 210 \n",
2157 "CONECT 199 198 187 200 211 \n",
2158 "CONECT 200 199 188 201 212 \n",
2159 "CONECT 201 200 189 202 213 \n",
2160 "CONECT 202 201 190 203 214 \n",
2161 "CONECT 203 202 191 204 215 \n",
2162 "CONECT 204 203 192 205 216 \n",
2163 "CONECT 205 204 193 217 \n",
2164 "CONECT 206 194 207 218 \n",
2165 "CONECT 207 206 195 208 219 \n",
2166 "CONECT 208 207 196 209 220 \n",
2167 "CONECT 209 208 197 210 221 \n",
2168 "CONECT 210 209 198 211 222 \n",
2169 "CONECT 211 210 199 212 223 \n",
2170 "CONECT 212 211 200 213 224 \n",
2171 "CONECT 213 212 201 214 225 \n",
2172 "CONECT 214 213 202 215 226 \n",
2173 "CONECT 215 214 203 216 227 \n",
2174 "CONECT 216 215 204 217 228 \n",
2175 "CONECT 217 216 205 229 \n",
2176 "CONECT 218 206 219 230 \n",
2177 "CONECT 219 218 207 220 231 \n",
2178 "CONECT 220 219 208 221 232 \n",
2179 "CONECT 221 220 209 222 233 \n",
2180 "CONECT 222 221 210 223 234 \n",
2181 "CONECT 223 222 211 224 235 \n",
2182 "CONECT 224 223 212 225 236 \n",
2183 "CONECT 225 224 213 226 237 \n",
2184 "CONECT 226 225 214 227 238 \n",
2185 "CONECT 227 226 215 228 239 \n",
2186 "CONECT 228 227 216 229 240 \n",
2187 "CONECT 229 228 217 241 \n",
2188 "CONECT 230 218 2 231 \n",
2189 "CONECT 231 230 219 3 232 \n",
2190 "CONECT 232 231 220 4 233 \n",
2191 "CONECT 233 232 221 5 234 \n",
2192 "CONECT 234 233 222 6 235 \n",
2193 "CONECT 235 234 223 7 236 \n",
2194 "CONECT 236 235 224 8 237 \n",
2195 "CONECT 237 236 225 9 238 \n",
2196 "CONECT 238 237 226 10 239 \n",
2197 "CONECT 239 238 227 11 240 \n",
2198 "CONECT 240 239 228 12 241 \n",
2199 "CONECT 241 240 229 13 \n",
2200 "CONECT 242 243 244 \n",
2201 "CONECT 243 242 \n",
2202 "CONECT 244 242 \n",
2203 "MASTER 0 0 3 0 0 0 0 0 246 0 243 0 \n",
2204 "END \n"
2205 ]
2206
2207
2208 self.strip_remarks(lines)
2209 self.assertEqual(len(real_data), len(lines))
2210 for i in range(len(lines)):
2211 self.assertEqual(real_data[i], lines[i])
2212
2213
2215 """Check the 3D coordinates of the PDB representation of the optimised prolate diffusion tensor."""
2216
2217
2218 self.interpreter.reset()
2219
2220
2221 ds.tmpfile = mktemp()
2222
2223
2224 ds.diff_dir = 'spheroid_prolate'
2225 ds.diff_type = 'prolate'
2226
2227
2228 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'diff_tensor'+sep+'tensor_opt.py')
2229
2230
2231 self.interpreter.structure.create_diff_tensor_pdb(scale=1.8e-06, file=ds.tmpfile, force=True)
2232
2233
2234 file = open(ds.tmpfile)
2235 lines = file.readlines()
2236 file.close()
2237
2238
2239 real_data = [
2240 "HET COM A 1 1 \n",
2241 "HET TNS A 2 240 \n",
2242 "HET AXS A 3 5 \n",
2243 "HETNAM COM CENTRE OF MASS \n",
2244 "HETNAM TNS TENSOR \n",
2245 "HETNAM AXS TENSOR AXES \n",
2246 "FORMUL 1 COM C1 \n",
2247 "FORMUL 2 TNS H240 \n",
2248 "FORMUL 3 AXS C3N2 \n",
2249 "HETATM 1 R COM A 1 -0.000 0.000 0.000 1.00 0.00 C \n",
2250 "HETATM 2 H2 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2251 "HETATM 3 H3 TNS A 2 48.132 -10.602 13.384 1.00 0.00 H \n",
2252 "HETATM 4 H4 TNS A 2 45.482 0.862 4.523 1.00 0.00 H \n",
2253 "HETATM 5 H5 TNS A 2 40.121 9.258 -2.355 1.00 0.00 H \n",
2254 "HETATM 6 H6 TNS A 2 33.389 16.101 -8.229 1.00 0.00 H \n",
2255 "HETATM 7 H7 TNS A 2 25.651 21.806 -13.368 1.00 0.00 H \n",
2256 "HETATM 8 H8 TNS A 2 17.033 26.514 -17.862 1.00 0.00 H \n",
2257 "HETATM 9 H9 TNS A 2 7.534 30.226 -21.713 1.00 0.00 H \n",
2258 "HETATM 10 H10 TNS A 2 -2.970 32.799 -24.827 1.00 0.00 H \n",
2259 "HETATM 11 H11 TNS A 2 -14.846 33.819 -26.938 1.00 0.00 H \n",
2260 "HETATM 12 H12 TNS A 2 -29.432 31.771 -27.066 1.00 0.00 H \n",
2261 "HETATM 13 H13 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2262 "HETATM 14 H14 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2263 "HETATM 15 H15 TNS A 2 48.114 -14.010 9.849 1.00 0.00 H \n",
2264 "HETATM 16 H16 TNS A 2 45.452 -4.720 -1.268 1.00 0.00 H \n",
2265 "HETATM 17 H17 TNS A 2 40.086 2.489 -9.378 1.00 0.00 H \n",
2266 "HETATM 18 H18 TNS A 2 33.349 8.645 -15.965 1.00 0.00 H \n",
2267 "HETATM 19 H19 TNS A 2 25.610 14.029 -21.436 1.00 0.00 H \n",
2268 "HETATM 20 H20 TNS A 2 16.992 18.737 -25.931 1.00 0.00 H \n",
2269 "HETATM 21 H21 TNS A 2 7.495 22.769 -29.448 1.00 0.00 H \n",
2270 "HETATM 22 H22 TNS A 2 -3.005 26.030 -31.850 1.00 0.00 H \n",
2271 "HETATM 23 H23 TNS A 2 -14.875 28.237 -32.729 1.00 0.00 H \n",
2272 "HETATM 24 H24 TNS A 2 -29.450 28.364 -30.600 1.00 0.00 H \n",
2273 "HETATM 25 H25 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2274 "HETATM 26 H26 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2275 "HETATM 27 H27 TNS A 2 47.182 -18.119 7.330 1.00 0.00 H \n",
2276 "HETATM 28 H28 TNS A 2 43.926 -11.453 -5.396 1.00 0.00 H \n",
2277 "HETATM 29 H29 TNS A 2 38.235 -5.676 -14.383 1.00 0.00 H \n",
2278 "HETATM 30 H30 TNS A 2 31.311 -0.350 -21.478 1.00 0.00 H \n",
2279 "HETATM 31 H31 TNS A 2 23.484 4.647 -27.187 1.00 0.00 H \n",
2280 "HETATM 32 H32 TNS A 2 14.866 9.356 -31.681 1.00 0.00 H \n",
2281 "HETATM 33 H33 TNS A 2 5.456 13.775 -34.961 1.00 0.00 H \n",
2282 "HETATM 34 H34 TNS A 2 -4.856 17.864 -36.855 1.00 0.00 H \n",
2283 "HETATM 35 H35 TNS A 2 -16.401 21.504 -36.856 1.00 0.00 H \n",
2284 "HETATM 36 H36 TNS A 2 -30.382 24.254 -33.119 1.00 0.00 H \n",
2285 "HETATM 37 H37 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2286 "HETATM 38 H38 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2287 "HETATM 39 H39 TNS A 2 45.428 -22.529 6.073 1.00 0.00 H \n",
2288 "HETATM 40 H40 TNS A 2 41.053 -18.678 -7.455 1.00 0.00 H \n",
2289 "HETATM 41 H41 TNS A 2 34.751 -14.438 -16.880 1.00 0.00 H \n",
2290 "HETATM 42 H42 TNS A 2 27.473 -10.001 -24.229 1.00 0.00 H \n",
2291 "HETATM 43 H43 TNS A 2 19.481 -5.419 -30.056 1.00 0.00 H \n",
2292 "HETATM 44 H44 TNS A 2 10.862 -0.711 -34.550 1.00 0.00 H \n",
2293 "HETATM 45 H45 TNS A 2 1.618 4.124 -37.712 1.00 0.00 H \n",
2294 "HETATM 46 H46 TNS A 2 -8.341 9.103 -39.352 1.00 0.00 H \n",
2295 "HETATM 47 H47 TNS A 2 -19.275 14.279 -38.915 1.00 0.00 H \n",
2296 "HETATM 48 H48 TNS A 2 -32.136 19.844 -34.376 1.00 0.00 H \n",
2297 "HETATM 49 H49 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2298 "HETATM 50 H50 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2299 "HETATM 51 H51 TNS A 2 43.024 -26.808 6.202 1.00 0.00 H \n",
2300 "HETATM 52 H52 TNS A 2 37.114 -25.688 -7.244 1.00 0.00 H \n",
2301 "HETATM 53 H53 TNS A 2 29.974 -22.939 -16.625 1.00 0.00 H \n",
2302 "HETATM 54 H54 TNS A 2 22.211 -19.364 -23.948 1.00 0.00 H \n",
2303 "HETATM 55 H55 TNS A 2 13.992 -15.186 -29.763 1.00 0.00 H \n",
2304 "HETATM 56 H56 TNS A 2 5.374 -10.478 -34.257 1.00 0.00 H \n",
2305 "HETATM 57 H57 TNS A 2 -3.644 -5.240 -37.431 1.00 0.00 H \n",
2306 "HETATM 58 H58 TNS A 2 -13.117 0.602 -39.097 1.00 0.00 H \n",
2307 "HETATM 59 H59 TNS A 2 -23.214 7.269 -38.705 1.00 0.00 H \n",
2308 "HETATM 60 H60 TNS A 2 -34.540 15.565 -34.248 1.00 0.00 H \n",
2309 "HETATM 61 H61 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2310 "HETATM 62 H62 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2311 "HETATM 63 H63 TNS A 2 40.204 -30.536 7.703 1.00 0.00 H \n",
2312 "HETATM 64 H64 TNS A 2 32.494 -31.797 -4.785 1.00 0.00 H \n",
2313 "HETATM 65 H65 TNS A 2 24.372 -30.346 -13.643 1.00 0.00 H \n",
2314 "HETATM 66 H66 TNS A 2 16.040 -27.524 -20.663 1.00 0.00 H \n",
2315 "HETATM 67 H67 TNS A 2 7.556 -23.696 -26.336 1.00 0.00 H \n",
2316 "HETATM 68 H68 TNS A 2 -1.062 -18.988 -30.831 1.00 0.00 H \n",
2317 "HETATM 69 H69 TNS A 2 -9.814 -13.399 -34.146 1.00 0.00 H \n",
2318 "HETATM 70 H70 TNS A 2 -18.719 -6.806 -36.115 1.00 0.00 H \n",
2319 "HETATM 71 H71 TNS A 2 -27.833 1.160 -36.246 1.00 0.00 H \n",
2320 "HETATM 72 H72 TNS A 2 -37.360 11.837 -32.747 1.00 0.00 H \n",
2321 "HETATM 73 H73 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2322 "HETATM 74 H74 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2323 "HETATM 75 H75 TNS A 2 37.246 -33.350 10.430 1.00 0.00 H \n",
2324 "HETATM 76 H76 TNS A 2 27.647 -36.406 -0.318 1.00 0.00 H \n",
2325 "HETATM 77 H77 TNS A 2 18.493 -35.935 -8.225 1.00 0.00 H \n",
2326 "HETATM 78 H78 TNS A 2 9.565 -33.680 -14.695 1.00 0.00 H \n",
2327 "HETATM 79 H79 TNS A 2 0.802 -30.118 -20.112 1.00 0.00 H \n",
2328 "HETATM 80 H80 TNS A 2 -7.816 -25.409 -24.606 1.00 0.00 H \n",
2329 "HETATM 81 H81 TNS A 2 -16.290 -19.556 -28.178 1.00 0.00 H \n",
2330 "HETATM 82 H82 TNS A 2 -24.598 -12.395 -30.697 1.00 0.00 H \n",
2331 "HETATM 83 H83 TNS A 2 -32.681 -3.448 -31.778 1.00 0.00 H \n",
2332 "HETATM 84 H84 TNS A 2 -40.318 9.024 -30.020 1.00 0.00 H \n",
2333 "HETATM 85 H85 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2334 "HETATM 86 H86 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2335 "HETATM 87 H87 TNS A 2 34.437 -34.972 14.115 1.00 0.00 H \n",
2336 "HETATM 88 H88 TNS A 2 23.045 -39.064 5.721 1.00 0.00 H \n",
2337 "HETATM 89 H89 TNS A 2 12.913 -39.159 -0.903 1.00 0.00 H \n",
2338 "HETATM 90 H90 TNS A 2 3.419 -37.231 -6.629 1.00 0.00 H \n",
2339 "HETATM 91 H91 TNS A 2 -5.609 -33.821 -11.699 1.00 0.00 H \n",
2340 "HETATM 92 H92 TNS A 2 -14.227 -29.113 -16.193 1.00 0.00 H \n",
2341 "HETATM 93 H93 TNS A 2 -22.436 -23.107 -20.112 1.00 0.00 H \n",
2342 "HETATM 94 H94 TNS A 2 -30.178 -15.618 -23.374 1.00 0.00 H \n",
2343 "HETATM 95 H95 TNS A 2 -37.282 -6.107 -25.740 1.00 0.00 H \n",
2344 "HETATM 96 H96 TNS A 2 -43.127 7.401 -26.334 1.00 0.00 H \n",
2345 "HETATM 97 H97 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2346 "HETATM 98 H98 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2347 "HETATM 99 H99 TNS A 2 32.054 -35.245 18.399 1.00 0.00 H \n",
2348 "HETATM 100 H100 TNS A 2 19.141 -39.511 12.739 1.00 0.00 H \n",
2349 "HETATM 101 H101 TNS A 2 8.178 -39.702 7.608 1.00 0.00 H \n",
2350 "HETATM 102 H102 TNS A 2 -1.797 -37.829 2.746 1.00 0.00 H \n",
2351 "HETATM 103 H103 TNS A 2 -11.049 -34.445 -1.921 1.00 0.00 H \n",
2352 "HETATM 104 H104 TNS A 2 -19.667 -29.737 -6.415 1.00 0.00 H \n",
2353 "HETATM 105 H105 TNS A 2 -27.651 -23.705 -10.738 1.00 0.00 H \n",
2354 "HETATM 106 H106 TNS A 2 -34.913 -16.161 -14.864 1.00 0.00 H \n",
2355 "HETATM 107 H107 TNS A 2 -41.187 -6.554 -18.722 1.00 0.00 H \n",
2356 "HETATM 108 H108 TNS A 2 -45.510 7.128 -22.051 1.00 0.00 H \n",
2357 "HETATM 109 H109 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2358 "HETATM 110 H110 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2359 "HETATM 111 H111 TNS A 2 30.329 -34.142 22.861 1.00 0.00 H \n",
2360 "HETATM 112 H112 TNS A 2 16.316 -37.704 20.050 1.00 0.00 H \n",
2361 "HETATM 113 H113 TNS A 2 4.752 -37.510 16.474 1.00 0.00 H \n",
2362 "HETATM 114 H114 TNS A 2 -5.571 -35.415 12.511 1.00 0.00 H \n",
2363 "HETATM 115 H115 TNS A 2 -14.985 -31.927 8.265 1.00 0.00 H \n",
2364 "HETATM 116 H116 TNS A 2 -23.603 -27.219 3.771 1.00 0.00 H \n",
2365 "HETATM 117 H117 TNS A 2 -31.426 -21.291 -0.972 1.00 0.00 H \n",
2366 "HETATM 118 H118 TNS A 2 -38.339 -13.970 -5.998 1.00 0.00 H \n",
2367 "HETATM 119 H119 TNS A 2 -44.012 -4.747 -11.411 1.00 0.00 H \n",
2368 "HETATM 120 H120 TNS A 2 -47.235 8.231 -17.588 1.00 0.00 H \n",
2369 "HETATM 121 H121 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2370 "HETATM 122 H122 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2371 "HETATM 123 H123 TNS A 2 29.432 -31.771 27.066 1.00 0.00 H \n",
2372 "HETATM 124 H124 TNS A 2 14.846 -33.819 26.938 1.00 0.00 H \n",
2373 "HETATM 125 H125 TNS A 2 2.970 -32.799 24.827 1.00 0.00 H \n",
2374 "HETATM 126 H126 TNS A 2 -7.534 -30.226 21.713 1.00 0.00 H \n",
2375 "HETATM 127 H127 TNS A 2 -17.033 -26.514 17.862 1.00 0.00 H \n",
2376 "HETATM 128 H128 TNS A 2 -25.651 -21.806 13.368 1.00 0.00 H \n",
2377 "HETATM 129 H129 TNS A 2 -33.389 -16.101 8.229 1.00 0.00 H \n",
2378 "HETATM 130 H130 TNS A 2 -40.121 -9.258 2.355 1.00 0.00 H \n",
2379 "HETATM 131 H131 TNS A 2 -45.482 -0.862 -4.523 1.00 0.00 H \n",
2380 "HETATM 132 H132 TNS A 2 -48.132 10.602 -13.384 1.00 0.00 H \n",
2381 "HETATM 133 H133 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2382 "HETATM 134 H134 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2383 "HETATM 135 H135 TNS A 2 29.450 -28.364 30.600 1.00 0.00 H \n",
2384 "HETATM 136 H136 TNS A 2 14.875 -28.237 32.729 1.00 0.00 H \n",
2385 "HETATM 137 H137 TNS A 2 3.005 -26.030 31.850 1.00 0.00 H \n",
2386 "HETATM 138 H138 TNS A 2 -7.495 -22.769 29.448 1.00 0.00 H \n",
2387 "HETATM 139 H139 TNS A 2 -16.992 -18.737 25.931 1.00 0.00 H \n",
2388 "HETATM 140 H140 TNS A 2 -25.610 -14.029 21.436 1.00 0.00 H \n",
2389 "HETATM 141 H141 TNS A 2 -33.349 -8.645 15.965 1.00 0.00 H \n",
2390 "HETATM 142 H142 TNS A 2 -40.086 -2.489 9.378 1.00 0.00 H \n",
2391 "HETATM 143 H143 TNS A 2 -45.452 4.720 1.268 1.00 0.00 H \n",
2392 "HETATM 144 H144 TNS A 2 -48.114 14.010 -9.849 1.00 0.00 H \n",
2393 "HETATM 145 H145 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2394 "HETATM 146 H146 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2395 "HETATM 147 H147 TNS A 2 30.382 -24.254 33.119 1.00 0.00 H \n",
2396 "HETATM 148 H148 TNS A 2 16.401 -21.504 36.856 1.00 0.00 H \n",
2397 "HETATM 149 H149 TNS A 2 4.856 -17.864 36.855 1.00 0.00 H \n",
2398 "HETATM 150 H150 TNS A 2 -5.456 -13.775 34.961 1.00 0.00 H \n",
2399 "HETATM 151 H151 TNS A 2 -14.866 -9.356 31.681 1.00 0.00 H \n",
2400 "HETATM 152 H152 TNS A 2 -23.484 -4.647 27.187 1.00 0.00 H \n",
2401 "HETATM 153 H153 TNS A 2 -31.311 0.350 21.478 1.00 0.00 H \n",
2402 "HETATM 154 H154 TNS A 2 -38.235 5.676 14.383 1.00 0.00 H \n",
2403 "HETATM 155 H155 TNS A 2 -43.926 11.453 5.396 1.00 0.00 H \n",
2404 "HETATM 156 H156 TNS A 2 -47.182 18.119 -7.330 1.00 0.00 H \n",
2405 "HETATM 157 H157 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2406 "HETATM 158 H158 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2407 "HETATM 159 H159 TNS A 2 32.136 -19.844 34.376 1.00 0.00 H \n",
2408 "HETATM 160 H160 TNS A 2 19.275 -14.279 38.915 1.00 0.00 H \n",
2409 "HETATM 161 H161 TNS A 2 8.341 -9.103 39.352 1.00 0.00 H \n",
2410 "HETATM 162 H162 TNS A 2 -1.618 -4.124 37.712 1.00 0.00 H \n",
2411 "HETATM 163 H163 TNS A 2 -10.862 0.711 34.550 1.00 0.00 H \n",
2412 "HETATM 164 H164 TNS A 2 -19.481 5.419 30.056 1.00 0.00 H \n",
2413 "HETATM 165 H165 TNS A 2 -27.473 10.001 24.229 1.00 0.00 H \n",
2414 "HETATM 166 H166 TNS A 2 -34.751 14.438 16.880 1.00 0.00 H \n",
2415 "HETATM 167 H167 TNS A 2 -41.053 18.678 7.455 1.00 0.00 H \n",
2416 "HETATM 168 H168 TNS A 2 -45.428 22.529 -6.073 1.00 0.00 H \n",
2417 "HETATM 169 H169 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2418 "HETATM 170 H170 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2419 "HETATM 171 H171 TNS A 2 34.540 -15.565 34.248 1.00 0.00 H \n",
2420 "HETATM 172 H172 TNS A 2 23.214 -7.269 38.705 1.00 0.00 H \n",
2421 "HETATM 173 H173 TNS A 2 13.117 -0.602 39.097 1.00 0.00 H \n",
2422 "HETATM 174 H174 TNS A 2 3.644 5.240 37.431 1.00 0.00 H \n",
2423 "HETATM 175 H175 TNS A 2 -5.374 10.478 34.257 1.00 0.00 H \n",
2424 "HETATM 176 H176 TNS A 2 -13.992 15.186 29.763 1.00 0.00 H \n",
2425 "HETATM 177 H177 TNS A 2 -22.211 19.364 23.948 1.00 0.00 H \n",
2426 "HETATM 178 H178 TNS A 2 -29.974 22.939 16.625 1.00 0.00 H \n",
2427 "HETATM 179 H179 TNS A 2 -37.114 25.688 7.244 1.00 0.00 H \n",
2428 "HETATM 180 H180 TNS A 2 -43.024 26.808 -6.202 1.00 0.00 H \n",
2429 "HETATM 181 H181 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2430 "HETATM 182 H182 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2431 "HETATM 183 H183 TNS A 2 37.360 -11.837 32.747 1.00 0.00 H \n",
2432 "HETATM 184 H184 TNS A 2 27.833 -1.160 36.246 1.00 0.00 H \n",
2433 "HETATM 185 H185 TNS A 2 18.719 6.806 36.115 1.00 0.00 H \n",
2434 "HETATM 186 H186 TNS A 2 9.814 13.399 34.146 1.00 0.00 H \n",
2435 "HETATM 187 H187 TNS A 2 1.062 18.988 30.831 1.00 0.00 H \n",
2436 "HETATM 188 H188 TNS A 2 -7.556 23.696 26.336 1.00 0.00 H \n",
2437 "HETATM 189 H189 TNS A 2 -16.040 27.524 20.663 1.00 0.00 H \n",
2438 "HETATM 190 H190 TNS A 2 -24.372 30.346 13.643 1.00 0.00 H \n",
2439 "HETATM 191 H191 TNS A 2 -32.494 31.797 4.785 1.00 0.00 H \n",
2440 "HETATM 192 H192 TNS A 2 -40.204 30.536 -7.703 1.00 0.00 H \n",
2441 "HETATM 193 H193 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2442 "HETATM 194 H194 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2443 "HETATM 195 H195 TNS A 2 40.318 -9.024 30.020 1.00 0.00 H \n",
2444 "HETATM 196 H196 TNS A 2 32.681 3.448 31.778 1.00 0.00 H \n",
2445 "HETATM 197 H197 TNS A 2 24.598 12.395 30.697 1.00 0.00 H \n",
2446 "HETATM 198 H198 TNS A 2 16.290 19.556 28.178 1.00 0.00 H \n",
2447 "HETATM 199 H199 TNS A 2 7.816 25.409 24.606 1.00 0.00 H \n",
2448 "HETATM 200 H200 TNS A 2 -0.802 30.118 20.112 1.00 0.00 H \n",
2449 "HETATM 201 H201 TNS A 2 -9.565 33.680 14.695 1.00 0.00 H \n",
2450 "HETATM 202 H202 TNS A 2 -18.493 35.935 8.225 1.00 0.00 H \n",
2451 "HETATM 203 H203 TNS A 2 -27.647 36.406 0.318 1.00 0.00 H \n",
2452 "HETATM 204 H204 TNS A 2 -37.246 33.350 -10.430 1.00 0.00 H \n",
2453 "HETATM 205 H205 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2454 "HETATM 206 H206 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2455 "HETATM 207 H207 TNS A 2 43.127 -7.401 26.334 1.00 0.00 H \n",
2456 "HETATM 208 H208 TNS A 2 37.282 6.107 25.740 1.00 0.00 H \n",
2457 "HETATM 209 H209 TNS A 2 30.178 15.618 23.374 1.00 0.00 H \n",
2458 "HETATM 210 H210 TNS A 2 22.436 23.107 20.112 1.00 0.00 H \n",
2459 "HETATM 211 H211 TNS A 2 14.227 29.113 16.193 1.00 0.00 H \n",
2460 "HETATM 212 H212 TNS A 2 5.609 33.821 11.699 1.00 0.00 H \n",
2461 "HETATM 213 H213 TNS A 2 -3.419 37.231 6.629 1.00 0.00 H \n",
2462 "HETATM 214 H214 TNS A 2 -12.913 39.159 0.903 1.00 0.00 H \n",
2463 "HETATM 215 H215 TNS A 2 -23.045 39.064 -5.721 1.00 0.00 H \n",
2464 "HETATM 216 H216 TNS A 2 -34.437 34.972 -14.115 1.00 0.00 H \n",
2465 "HETATM 217 H217 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2466 "HETATM 218 H218 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2467 "HETATM 219 H219 TNS A 2 45.510 -7.128 22.051 1.00 0.00 H \n",
2468 "HETATM 220 H220 TNS A 2 41.187 6.554 18.722 1.00 0.00 H \n",
2469 "HETATM 221 H221 TNS A 2 34.913 16.161 14.864 1.00 0.00 H \n",
2470 "HETATM 222 H222 TNS A 2 27.651 23.705 10.738 1.00 0.00 H \n",
2471 "HETATM 223 H223 TNS A 2 19.667 29.737 6.415 1.00 0.00 H \n",
2472 "HETATM 224 H224 TNS A 2 11.049 34.445 1.921 1.00 0.00 H \n",
2473 "HETATM 225 H225 TNS A 2 1.797 37.829 -2.746 1.00 0.00 H \n",
2474 "HETATM 226 H226 TNS A 2 -8.178 39.702 -7.608 1.00 0.00 H \n",
2475 "HETATM 227 H227 TNS A 2 -19.141 39.511 -12.739 1.00 0.00 H \n",
2476 "HETATM 228 H228 TNS A 2 -32.054 35.245 -18.399 1.00 0.00 H \n",
2477 "HETATM 229 H229 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2478 "HETATM 230 H230 TNS A 2 43.091 -23.541 22.472 1.00 0.00 H \n",
2479 "HETATM 231 H231 TNS A 2 47.235 -8.231 17.588 1.00 0.00 H \n",
2480 "HETATM 232 H232 TNS A 2 44.012 4.747 11.411 1.00 0.00 H \n",
2481 "HETATM 233 H233 TNS A 2 38.339 13.970 5.998 1.00 0.00 H \n",
2482 "HETATM 234 H234 TNS A 2 31.426 21.291 0.972 1.00 0.00 H \n",
2483 "HETATM 235 H235 TNS A 2 23.603 27.219 -3.771 1.00 0.00 H \n",
2484 "HETATM 236 H236 TNS A 2 14.985 31.927 -8.265 1.00 0.00 H \n",
2485 "HETATM 237 H237 TNS A 2 5.571 35.415 -12.511 1.00 0.00 H \n",
2486 "HETATM 238 H238 TNS A 2 -4.752 37.510 -16.474 1.00 0.00 H \n",
2487 "HETATM 239 H239 TNS A 2 -16.316 37.704 -20.050 1.00 0.00 H \n",
2488 "HETATM 240 H240 TNS A 2 -30.329 34.142 -22.861 1.00 0.00 H \n",
2489 "HETATM 241 H241 TNS A 2 -43.091 23.541 -22.472 1.00 0.00 H \n",
2490 "HETATM 242 R AXS A 3 -0.000 0.000 0.000 1.00 0.00 C \n",
2491 "HETATM 243 Dpar AXS A 3 -43.091 23.541 -22.472 1.00 0.00 C \n",
2492 "HETATM 244 Dpar AXS A 3 43.091 -23.541 22.472 1.00 0.00 C \n",
2493 "HETATM 245 Dpar AXS A 3 -47.400 25.895 -24.719 1.00 0.00 N \n",
2494 "HETATM 246 Dpar AXS A 3 47.400 -25.895 24.719 1.00 0.00 N \n",
2495 "CONECT 2 3 14 230 \n",
2496 "CONECT 3 2 4 15 231 \n",
2497 "CONECT 4 3 5 16 232 \n",
2498 "CONECT 5 4 6 17 233 \n",
2499 "CONECT 6 5 7 18 234 \n",
2500 "CONECT 7 6 8 19 235 \n",
2501 "CONECT 8 7 9 20 236 \n",
2502 "CONECT 9 8 10 21 237 \n",
2503 "CONECT 10 9 11 22 238 \n",
2504 "CONECT 11 10 12 23 239 \n",
2505 "CONECT 12 11 13 24 240 \n",
2506 "CONECT 13 12 25 241 \n",
2507 "CONECT 14 2 15 26 \n",
2508 "CONECT 15 14 3 16 27 \n",
2509 "CONECT 16 15 4 17 28 \n",
2510 "CONECT 17 16 5 18 29 \n",
2511 "CONECT 18 17 6 19 30 \n",
2512 "CONECT 19 18 7 20 31 \n",
2513 "CONECT 20 19 8 21 32 \n",
2514 "CONECT 21 20 9 22 33 \n",
2515 "CONECT 22 21 10 23 34 \n",
2516 "CONECT 23 22 11 24 35 \n",
2517 "CONECT 24 23 12 25 36 \n",
2518 "CONECT 25 24 13 37 \n",
2519 "CONECT 26 14 27 38 \n",
2520 "CONECT 27 26 15 28 39 \n",
2521 "CONECT 28 27 16 29 40 \n",
2522 "CONECT 29 28 17 30 41 \n",
2523 "CONECT 30 29 18 31 42 \n",
2524 "CONECT 31 30 19 32 43 \n",
2525 "CONECT 32 31 20 33 44 \n",
2526 "CONECT 33 32 21 34 45 \n",
2527 "CONECT 34 33 22 35 46 \n",
2528 "CONECT 35 34 23 36 47 \n",
2529 "CONECT 36 35 24 37 48 \n",
2530 "CONECT 37 36 25 49 \n",
2531 "CONECT 38 26 39 50 \n",
2532 "CONECT 39 38 27 40 51 \n",
2533 "CONECT 40 39 28 41 52 \n",
2534 "CONECT 41 40 29 42 53 \n",
2535 "CONECT 42 41 30 43 54 \n",
2536 "CONECT 43 42 31 44 55 \n",
2537 "CONECT 44 43 32 45 56 \n",
2538 "CONECT 45 44 33 46 57 \n",
2539 "CONECT 46 45 34 47 58 \n",
2540 "CONECT 47 46 35 48 59 \n",
2541 "CONECT 48 47 36 49 60 \n",
2542 "CONECT 49 48 37 61 \n",
2543 "CONECT 50 38 51 62 \n",
2544 "CONECT 51 50 39 52 63 \n",
2545 "CONECT 52 51 40 53 64 \n",
2546 "CONECT 53 52 41 54 65 \n",
2547 "CONECT 54 53 42 55 66 \n",
2548 "CONECT 55 54 43 56 67 \n",
2549 "CONECT 56 55 44 57 68 \n",
2550 "CONECT 57 56 45 58 69 \n",
2551 "CONECT 58 57 46 59 70 \n",
2552 "CONECT 59 58 47 60 71 \n",
2553 "CONECT 60 59 48 61 72 \n",
2554 "CONECT 61 60 49 73 \n",
2555 "CONECT 62 50 63 74 \n",
2556 "CONECT 63 62 51 64 75 \n",
2557 "CONECT 64 63 52 65 76 \n",
2558 "CONECT 65 64 53 66 77 \n",
2559 "CONECT 66 65 54 67 78 \n",
2560 "CONECT 67 66 55 68 79 \n",
2561 "CONECT 68 67 56 69 80 \n",
2562 "CONECT 69 68 57 70 81 \n",
2563 "CONECT 70 69 58 71 82 \n",
2564 "CONECT 71 70 59 72 83 \n",
2565 "CONECT 72 71 60 73 84 \n",
2566 "CONECT 73 72 61 85 \n",
2567 "CONECT 74 62 75 86 \n",
2568 "CONECT 75 74 63 76 87 \n",
2569 "CONECT 76 75 64 77 88 \n",
2570 "CONECT 77 76 65 78 89 \n",
2571 "CONECT 78 77 66 79 90 \n",
2572 "CONECT 79 78 67 80 91 \n",
2573 "CONECT 80 79 68 81 92 \n",
2574 "CONECT 81 80 69 82 93 \n",
2575 "CONECT 82 81 70 83 94 \n",
2576 "CONECT 83 82 71 84 95 \n",
2577 "CONECT 84 83 72 85 96 \n",
2578 "CONECT 85 84 73 97 \n",
2579 "CONECT 86 74 87 98 \n",
2580 "CONECT 87 86 75 88 99 \n",
2581 "CONECT 88 87 76 89 100 \n",
2582 "CONECT 89 88 77 90 101 \n",
2583 "CONECT 90 89 78 91 102 \n",
2584 "CONECT 91 90 79 92 103 \n",
2585 "CONECT 92 91 80 93 104 \n",
2586 "CONECT 93 92 81 94 105 \n",
2587 "CONECT 94 93 82 95 106 \n",
2588 "CONECT 95 94 83 96 107 \n",
2589 "CONECT 96 95 84 97 108 \n",
2590 "CONECT 97 96 85 109 \n",
2591 "CONECT 98 86 99 110 \n",
2592 "CONECT 99 98 87 100 111 \n",
2593 "CONECT 100 99 88 101 112 \n",
2594 "CONECT 101 100 89 102 113 \n",
2595 "CONECT 102 101 90 103 114 \n",
2596 "CONECT 103 102 91 104 115 \n",
2597 "CONECT 104 103 92 105 116 \n",
2598 "CONECT 105 104 93 106 117 \n",
2599 "CONECT 106 105 94 107 118 \n",
2600 "CONECT 107 106 95 108 119 \n",
2601 "CONECT 108 107 96 109 120 \n",
2602 "CONECT 109 108 97 121 \n",
2603 "CONECT 110 98 111 122 \n",
2604 "CONECT 111 110 99 112 123 \n",
2605 "CONECT 112 111 100 113 124 \n",
2606 "CONECT 113 112 101 114 125 \n",
2607 "CONECT 114 113 102 115 126 \n",
2608 "CONECT 115 114 103 116 127 \n",
2609 "CONECT 116 115 104 117 128 \n",
2610 "CONECT 117 116 105 118 129 \n",
2611 "CONECT 118 117 106 119 130 \n",
2612 "CONECT 119 118 107 120 131 \n",
2613 "CONECT 120 119 108 121 132 \n",
2614 "CONECT 121 120 109 133 \n",
2615 "CONECT 122 110 123 134 \n",
2616 "CONECT 123 122 111 124 135 \n",
2617 "CONECT 124 123 112 125 136 \n",
2618 "CONECT 125 124 113 126 137 \n",
2619 "CONECT 126 125 114 127 138 \n",
2620 "CONECT 127 126 115 128 139 \n",
2621 "CONECT 128 127 116 129 140 \n",
2622 "CONECT 129 128 117 130 141 \n",
2623 "CONECT 130 129 118 131 142 \n",
2624 "CONECT 131 130 119 132 143 \n",
2625 "CONECT 132 131 120 133 144 \n",
2626 "CONECT 133 132 121 145 \n",
2627 "CONECT 134 122 135 146 \n",
2628 "CONECT 135 134 123 136 147 \n",
2629 "CONECT 136 135 124 137 148 \n",
2630 "CONECT 137 136 125 138 149 \n",
2631 "CONECT 138 137 126 139 150 \n",
2632 "CONECT 139 138 127 140 151 \n",
2633 "CONECT 140 139 128 141 152 \n",
2634 "CONECT 141 140 129 142 153 \n",
2635 "CONECT 142 141 130 143 154 \n",
2636 "CONECT 143 142 131 144 155 \n",
2637 "CONECT 144 143 132 145 156 \n",
2638 "CONECT 145 144 133 157 \n",
2639 "CONECT 146 134 147 158 \n",
2640 "CONECT 147 146 135 148 159 \n",
2641 "CONECT 148 147 136 149 160 \n",
2642 "CONECT 149 148 137 150 161 \n",
2643 "CONECT 150 149 138 151 162 \n",
2644 "CONECT 151 150 139 152 163 \n",
2645 "CONECT 152 151 140 153 164 \n",
2646 "CONECT 153 152 141 154 165 \n",
2647 "CONECT 154 153 142 155 166 \n",
2648 "CONECT 155 154 143 156 167 \n",
2649 "CONECT 156 155 144 157 168 \n",
2650 "CONECT 157 156 145 169 \n",
2651 "CONECT 158 146 159 170 \n",
2652 "CONECT 159 158 147 160 171 \n",
2653 "CONECT 160 159 148 161 172 \n",
2654 "CONECT 161 160 149 162 173 \n",
2655 "CONECT 162 161 150 163 174 \n",
2656 "CONECT 163 162 151 164 175 \n",
2657 "CONECT 164 163 152 165 176 \n",
2658 "CONECT 165 164 153 166 177 \n",
2659 "CONECT 166 165 154 167 178 \n",
2660 "CONECT 167 166 155 168 179 \n",
2661 "CONECT 168 167 156 169 180 \n",
2662 "CONECT 169 168 157 181 \n",
2663 "CONECT 170 158 171 182 \n",
2664 "CONECT 171 170 159 172 183 \n",
2665 "CONECT 172 171 160 173 184 \n",
2666 "CONECT 173 172 161 174 185 \n",
2667 "CONECT 174 173 162 175 186 \n",
2668 "CONECT 175 174 163 176 187 \n",
2669 "CONECT 176 175 164 177 188 \n",
2670 "CONECT 177 176 165 178 189 \n",
2671 "CONECT 178 177 166 179 190 \n",
2672 "CONECT 179 178 167 180 191 \n",
2673 "CONECT 180 179 168 181 192 \n",
2674 "CONECT 181 180 169 193 \n",
2675 "CONECT 182 170 183 194 \n",
2676 "CONECT 183 182 171 184 195 \n",
2677 "CONECT 184 183 172 185 196 \n",
2678 "CONECT 185 184 173 186 197 \n",
2679 "CONECT 186 185 174 187 198 \n",
2680 "CONECT 187 186 175 188 199 \n",
2681 "CONECT 188 187 176 189 200 \n",
2682 "CONECT 189 188 177 190 201 \n",
2683 "CONECT 190 189 178 191 202 \n",
2684 "CONECT 191 190 179 192 203 \n",
2685 "CONECT 192 191 180 193 204 \n",
2686 "CONECT 193 192 181 205 \n",
2687 "CONECT 194 182 195 206 \n",
2688 "CONECT 195 194 183 196 207 \n",
2689 "CONECT 196 195 184 197 208 \n",
2690 "CONECT 197 196 185 198 209 \n",
2691 "CONECT 198 197 186 199 210 \n",
2692 "CONECT 199 198 187 200 211 \n",
2693 "CONECT 200 199 188 201 212 \n",
2694 "CONECT 201 200 189 202 213 \n",
2695 "CONECT 202 201 190 203 214 \n",
2696 "CONECT 203 202 191 204 215 \n",
2697 "CONECT 204 203 192 205 216 \n",
2698 "CONECT 205 204 193 217 \n",
2699 "CONECT 206 194 207 218 \n",
2700 "CONECT 207 206 195 208 219 \n",
2701 "CONECT 208 207 196 209 220 \n",
2702 "CONECT 209 208 197 210 221 \n",
2703 "CONECT 210 209 198 211 222 \n",
2704 "CONECT 211 210 199 212 223 \n",
2705 "CONECT 212 211 200 213 224 \n",
2706 "CONECT 213 212 201 214 225 \n",
2707 "CONECT 214 213 202 215 226 \n",
2708 "CONECT 215 214 203 216 227 \n",
2709 "CONECT 216 215 204 217 228 \n",
2710 "CONECT 217 216 205 229 \n",
2711 "CONECT 218 206 219 230 \n",
2712 "CONECT 219 218 207 220 231 \n",
2713 "CONECT 220 219 208 221 232 \n",
2714 "CONECT 221 220 209 222 233 \n",
2715 "CONECT 222 221 210 223 234 \n",
2716 "CONECT 223 222 211 224 235 \n",
2717 "CONECT 224 223 212 225 236 \n",
2718 "CONECT 225 224 213 226 237 \n",
2719 "CONECT 226 225 214 227 238 \n",
2720 "CONECT 227 226 215 228 239 \n",
2721 "CONECT 228 227 216 229 240 \n",
2722 "CONECT 229 228 217 241 \n",
2723 "CONECT 230 218 2 231 \n",
2724 "CONECT 231 230 219 3 232 \n",
2725 "CONECT 232 231 220 4 233 \n",
2726 "CONECT 233 232 221 5 234 \n",
2727 "CONECT 234 233 222 6 235 \n",
2728 "CONECT 235 234 223 7 236 \n",
2729 "CONECT 236 235 224 8 237 \n",
2730 "CONECT 237 236 225 9 238 \n",
2731 "CONECT 238 237 226 10 239 \n",
2732 "CONECT 239 238 227 11 240 \n",
2733 "CONECT 240 239 228 12 241 \n",
2734 "CONECT 241 240 229 13 \n",
2735 "CONECT 242 243 244 \n",
2736 "CONECT 243 242 \n",
2737 "CONECT 244 242 \n",
2738 "MASTER 0 0 3 0 0 0 0 0 246 0 243 0 \n",
2739 "END \n"
2740 ]
2741
2742
2743 self.strip_remarks(lines)
2744 self.assertEqual(len(real_data), len(lines))
2745 for i in range(len(lines)):
2746 self.assertEqual(real_data[i], lines[i])
2747
2748
2750 """Check that the sphere diffusion tensor optimisation functions correctly."""
2751
2752
2753 self.interpreter.reset()
2754
2755
2756 ds.tmpfile = mktemp()
2757
2758
2759 ds.diff_dir = 'sphere'
2760 ds.diff_type = 'sphere'
2761
2762
2763 self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'diff_tensor'+sep+'tensor_opt.py')
2764
2765
2766 self.interpreter.structure.create_diff_tensor_pdb(scale=1.8e-06, file=ds.tmpfile, force=True)
2767
2768
2769 file = open(ds.tmpfile)
2770 lines = file.readlines()
2771 file.close()
2772
2773
2774 real_data = [
2775 "HET COM A 1 1 \n",
2776 "HET TNS A 2 240 \n",
2777 "HETNAM COM CENTRE OF MASS \n",
2778 "HETNAM TNS TENSOR \n",
2779 "FORMUL 1 COM C1 \n",
2780 "FORMUL 2 TNS H240 \n",
2781 "HETATM 1 R COM A 1 -0.000 0.000 0.000 1.00 0.00 C \n",
2782 "HETATM 2 H2 TNS A 2 0.000 0.000 -36.000 1.00 0.00 H \n",
2783 "HETATM 3 H3 TNS A 2 15.692 0.000 -32.400 1.00 0.00 H \n",
2784 "HETATM 4 H4 TNS A 2 25.709 0.000 -25.200 1.00 0.00 H \n",
2785 "HETATM 5 H5 TNS A 2 31.177 0.000 -18.000 1.00 0.00 H \n",
2786 "HETATM 6 H6 TNS A 2 34.342 0.000 -10.800 1.00 0.00 H \n",
2787 "HETATM 7 H7 TNS A 2 35.820 0.000 -3.600 1.00 0.00 H \n",
2788 "HETATM 8 H8 TNS A 2 35.820 0.000 3.600 1.00 0.00 H \n",
2789 "HETATM 9 H9 TNS A 2 34.342 0.000 10.800 1.00 0.00 H \n",
2790 "HETATM 10 H10 TNS A 2 31.177 0.000 18.000 1.00 0.00 H \n",
2791 "HETATM 11 H11 TNS A 2 25.709 0.000 25.200 1.00 0.00 H \n",
2792 "HETATM 12 H12 TNS A 2 15.692 0.000 32.400 1.00 0.00 H \n",
2793 "HETATM 13 H13 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2794 "HETATM 14 H14 TNS A 2 0.000 0.000 -36.000 1.00 0.00 H \n",
2795 "HETATM 15 H15 TNS A 2 14.924 4.849 -32.400 1.00 0.00 H \n",
2796 "HETATM 16 H16 TNS A 2 24.451 7.945 -25.200 1.00 0.00 H \n",
2797 "HETATM 17 H17 TNS A 2 29.651 9.634 -18.000 1.00 0.00 H \n",
2798 "HETATM 18 H18 TNS A 2 32.661 10.612 -10.800 1.00 0.00 H \n",
2799 "HETATM 19 H19 TNS A 2 34.066 11.069 -3.600 1.00 0.00 H \n",
2800 "HETATM 20 H20 TNS A 2 34.066 11.069 3.600 1.00 0.00 H \n",
2801 "HETATM 21 H21 TNS A 2 32.661 10.612 10.800 1.00 0.00 H \n",
2802 "HETATM 22 H22 TNS A 2 29.651 9.634 18.000 1.00 0.00 H \n",
2803 "HETATM 23 H23 TNS A 2 24.451 7.945 25.200 1.00 0.00 H \n",
2804 "HETATM 24 H24 TNS A 2 14.924 4.849 32.400 1.00 0.00 H \n",
2805 "HETATM 25 H25 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2806 "HETATM 26 H26 TNS A 2 0.000 0.000 -36.000 1.00 0.00 H \n",
2807 "HETATM 27 H27 TNS A 2 12.695 9.224 -32.400 1.00 0.00 H \n",
2808 "HETATM 28 H28 TNS A 2 20.799 15.111 -25.200 1.00 0.00 H \n",
2809 "HETATM 29 H29 TNS A 2 25.223 18.325 -18.000 1.00 0.00 H \n",
2810 "HETATM 30 H30 TNS A 2 27.783 20.186 -10.800 1.00 0.00 H \n",
2811 "HETATM 31 H31 TNS A 2 28.979 21.054 -3.600 1.00 0.00 H \n",
2812 "HETATM 32 H32 TNS A 2 28.979 21.054 3.600 1.00 0.00 H \n",
2813 "HETATM 33 H33 TNS A 2 27.783 20.186 10.800 1.00 0.00 H \n",
2814 "HETATM 34 H34 TNS A 2 25.223 18.325 18.000 1.00 0.00 H \n",
2815 "HETATM 35 H35 TNS A 2 20.799 15.111 25.200 1.00 0.00 H \n",
2816 "HETATM 36 H36 TNS A 2 12.695 9.224 32.400 1.00 0.00 H \n",
2817 "HETATM 37 H37 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2818 "HETATM 38 H38 TNS A 2 0.000 0.000 -36.000 1.00 0.00 H \n",
2819 "HETATM 39 H39 TNS A 2 9.224 12.695 -32.400 1.00 0.00 H \n",
2820 "HETATM 40 H40 TNS A 2 15.111 20.799 -25.200 1.00 0.00 H \n",
2821 "HETATM 41 H41 TNS A 2 18.325 25.223 -18.000 1.00 0.00 H \n",
2822 "HETATM 42 H42 TNS A 2 20.186 27.783 -10.800 1.00 0.00 H \n",
2823 "HETATM 43 H43 TNS A 2 21.054 28.979 -3.600 1.00 0.00 H \n",
2824 "HETATM 44 H44 TNS A 2 21.054 28.979 3.600 1.00 0.00 H \n",
2825 "HETATM 45 H45 TNS A 2 20.186 27.783 10.800 1.00 0.00 H \n",
2826 "HETATM 46 H46 TNS A 2 18.325 25.223 18.000 1.00 0.00 H \n",
2827 "HETATM 47 H47 TNS A 2 15.111 20.799 25.200 1.00 0.00 H \n",
2828 "HETATM 48 H48 TNS A 2 9.224 12.695 32.400 1.00 0.00 H \n",
2829 "HETATM 49 H49 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2830 "HETATM 50 H50 TNS A 2 0.000 0.000 -36.000 1.00 0.00 H \n",
2831 "HETATM 51 H51 TNS A 2 4.849 14.924 -32.400 1.00 0.00 H \n",
2832 "HETATM 52 H52 TNS A 2 7.945 24.451 -25.200 1.00 0.00 H \n",
2833 "HETATM 53 H53 TNS A 2 9.634 29.651 -18.000 1.00 0.00 H \n",
2834 "HETATM 54 H54 TNS A 2 10.612 32.661 -10.800 1.00 0.00 H \n",
2835 "HETATM 55 H55 TNS A 2 11.069 34.066 -3.600 1.00 0.00 H \n",
2836 "HETATM 56 H56 TNS A 2 11.069 34.066 3.600 1.00 0.00 H \n",
2837 "HETATM 57 H57 TNS A 2 10.612 32.661 10.800 1.00 0.00 H \n",
2838 "HETATM 58 H58 TNS A 2 9.634 29.651 18.000 1.00 0.00 H \n",
2839 "HETATM 59 H59 TNS A 2 7.945 24.451 25.200 1.00 0.00 H \n",
2840 "HETATM 60 H60 TNS A 2 4.849 14.924 32.400 1.00 0.00 H \n",
2841 "HETATM 61 H61 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2842 "HETATM 62 H62 TNS A 2 -0.000 0.000 -36.000 1.00 0.00 H \n",
2843 "HETATM 63 H63 TNS A 2 0.000 15.692 -32.400 1.00 0.00 H \n",
2844 "HETATM 64 H64 TNS A 2 0.000 25.709 -25.200 1.00 0.00 H \n",
2845 "HETATM 65 H65 TNS A 2 0.000 31.177 -18.000 1.00 0.00 H \n",
2846 "HETATM 66 H66 TNS A 2 0.000 34.342 -10.800 1.00 0.00 H \n",
2847 "HETATM 67 H67 TNS A 2 0.000 35.820 -3.600 1.00 0.00 H \n",
2848 "HETATM 68 H68 TNS A 2 0.000 35.820 3.600 1.00 0.00 H \n",
2849 "HETATM 69 H69 TNS A 2 0.000 34.342 10.800 1.00 0.00 H \n",
2850 "HETATM 70 H70 TNS A 2 0.000 31.177 18.000 1.00 0.00 H \n",
2851 "HETATM 71 H71 TNS A 2 0.000 25.709 25.200 1.00 0.00 H \n",
2852 "HETATM 72 H72 TNS A 2 0.000 15.692 32.400 1.00 0.00 H \n",
2853 "HETATM 73 H73 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2854 "HETATM 74 H74 TNS A 2 -0.000 0.000 -36.000 1.00 0.00 H \n",
2855 "HETATM 75 H75 TNS A 2 -4.849 14.924 -32.400 1.00 0.00 H \n",
2856 "HETATM 76 H76 TNS A 2 -7.945 24.451 -25.200 1.00 0.00 H \n",
2857 "HETATM 77 H77 TNS A 2 -9.634 29.651 -18.000 1.00 0.00 H \n",
2858 "HETATM 78 H78 TNS A 2 -10.612 32.661 -10.800 1.00 0.00 H \n",
2859 "HETATM 79 H79 TNS A 2 -11.069 34.066 -3.600 1.00 0.00 H \n",
2860 "HETATM 80 H80 TNS A 2 -11.069 34.066 3.600 1.00 0.00 H \n",
2861 "HETATM 81 H81 TNS A 2 -10.612 32.661 10.800 1.00 0.00 H \n",
2862 "HETATM 82 H82 TNS A 2 -9.634 29.651 18.000 1.00 0.00 H \n",
2863 "HETATM 83 H83 TNS A 2 -7.945 24.451 25.200 1.00 0.00 H \n",
2864 "HETATM 84 H84 TNS A 2 -4.849 14.924 32.400 1.00 0.00 H \n",
2865 "HETATM 85 H85 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2866 "HETATM 86 H86 TNS A 2 -0.000 0.000 -36.000 1.00 0.00 H \n",
2867 "HETATM 87 H87 TNS A 2 -9.224 12.695 -32.400 1.00 0.00 H \n",
2868 "HETATM 88 H88 TNS A 2 -15.111 20.799 -25.200 1.00 0.00 H \n",
2869 "HETATM 89 H89 TNS A 2 -18.325 25.223 -18.000 1.00 0.00 H \n",
2870 "HETATM 90 H90 TNS A 2 -20.186 27.783 -10.800 1.00 0.00 H \n",
2871 "HETATM 91 H91 TNS A 2 -21.054 28.979 -3.600 1.00 0.00 H \n",
2872 "HETATM 92 H92 TNS A 2 -21.054 28.979 3.600 1.00 0.00 H \n",
2873 "HETATM 93 H93 TNS A 2 -20.186 27.783 10.800 1.00 0.00 H \n",
2874 "HETATM 94 H94 TNS A 2 -18.325 25.223 18.000 1.00 0.00 H \n",
2875 "HETATM 95 H95 TNS A 2 -15.111 20.799 25.200 1.00 0.00 H \n",
2876 "HETATM 96 H96 TNS A 2 -9.224 12.695 32.400 1.00 0.00 H \n",
2877 "HETATM 97 H97 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2878 "HETATM 98 H98 TNS A 2 -0.000 0.000 -36.000 1.00 0.00 H \n",
2879 "HETATM 99 H99 TNS A 2 -12.695 9.224 -32.400 1.00 0.00 H \n",
2880 "HETATM 100 H100 TNS A 2 -20.799 15.111 -25.200 1.00 0.00 H \n",
2881 "HETATM 101 H101 TNS A 2 -25.223 18.325 -18.000 1.00 0.00 H \n",
2882 "HETATM 102 H102 TNS A 2 -27.783 20.186 -10.800 1.00 0.00 H \n",
2883 "HETATM 103 H103 TNS A 2 -28.979 21.054 -3.600 1.00 0.00 H \n",
2884 "HETATM 104 H104 TNS A 2 -28.979 21.054 3.600 1.00 0.00 H \n",
2885 "HETATM 105 H105 TNS A 2 -27.783 20.186 10.800 1.00 0.00 H \n",
2886 "HETATM 106 H106 TNS A 2 -25.223 18.325 18.000 1.00 0.00 H \n",
2887 "HETATM 107 H107 TNS A 2 -20.799 15.111 25.200 1.00 0.00 H \n",
2888 "HETATM 108 H108 TNS A 2 -12.695 9.224 32.400 1.00 0.00 H \n",
2889 "HETATM 109 H109 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2890 "HETATM 110 H110 TNS A 2 -0.000 0.000 -36.000 1.00 0.00 H \n",
2891 "HETATM 111 H111 TNS A 2 -14.924 4.849 -32.400 1.00 0.00 H \n",
2892 "HETATM 112 H112 TNS A 2 -24.451 7.945 -25.200 1.00 0.00 H \n",
2893 "HETATM 113 H113 TNS A 2 -29.651 9.634 -18.000 1.00 0.00 H \n",
2894 "HETATM 114 H114 TNS A 2 -32.661 10.612 -10.800 1.00 0.00 H \n",
2895 "HETATM 115 H115 TNS A 2 -34.066 11.069 -3.600 1.00 0.00 H \n",
2896 "HETATM 116 H116 TNS A 2 -34.066 11.069 3.600 1.00 0.00 H \n",
2897 "HETATM 117 H117 TNS A 2 -32.661 10.612 10.800 1.00 0.00 H \n",
2898 "HETATM 118 H118 TNS A 2 -29.651 9.634 18.000 1.00 0.00 H \n",
2899 "HETATM 119 H119 TNS A 2 -24.451 7.945 25.200 1.00 0.00 H \n",
2900 "HETATM 120 H120 TNS A 2 -14.924 4.849 32.400 1.00 0.00 H \n",
2901 "HETATM 121 H121 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2902 "HETATM 122 H122 TNS A 2 -0.000 0.000 -36.000 1.00 0.00 H \n",
2903 "HETATM 123 H123 TNS A 2 -15.692 0.000 -32.400 1.00 0.00 H \n",
2904 "HETATM 124 H124 TNS A 2 -25.709 0.000 -25.200 1.00 0.00 H \n",
2905 "HETATM 125 H125 TNS A 2 -31.177 0.000 -18.000 1.00 0.00 H \n",
2906 "HETATM 126 H126 TNS A 2 -34.342 0.000 -10.800 1.00 0.00 H \n",
2907 "HETATM 127 H127 TNS A 2 -35.820 0.000 -3.600 1.00 0.00 H \n",
2908 "HETATM 128 H128 TNS A 2 -35.820 0.000 3.600 1.00 0.00 H \n",
2909 "HETATM 129 H129 TNS A 2 -34.342 0.000 10.800 1.00 0.00 H \n",
2910 "HETATM 130 H130 TNS A 2 -31.177 0.000 18.000 1.00 0.00 H \n",
2911 "HETATM 131 H131 TNS A 2 -25.709 0.000 25.200 1.00 0.00 H \n",
2912 "HETATM 132 H132 TNS A 2 -15.692 0.000 32.400 1.00 0.00 H \n",
2913 "HETATM 133 H133 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2914 "HETATM 134 H134 TNS A 2 -0.000 -0.000 -36.000 1.00 0.00 H \n",
2915 "HETATM 135 H135 TNS A 2 -14.924 -4.849 -32.400 1.00 0.00 H \n",
2916 "HETATM 136 H136 TNS A 2 -24.451 -7.945 -25.200 1.00 0.00 H \n",
2917 "HETATM 137 H137 TNS A 2 -29.651 -9.634 -18.000 1.00 0.00 H \n",
2918 "HETATM 138 H138 TNS A 2 -32.661 -10.612 -10.800 1.00 0.00 H \n",
2919 "HETATM 139 H139 TNS A 2 -34.066 -11.069 -3.600 1.00 0.00 H \n",
2920 "HETATM 140 H140 TNS A 2 -34.066 -11.069 3.600 1.00 0.00 H \n",
2921 "HETATM 141 H141 TNS A 2 -32.661 -10.612 10.800 1.00 0.00 H \n",
2922 "HETATM 142 H142 TNS A 2 -29.651 -9.634 18.000 1.00 0.00 H \n",
2923 "HETATM 143 H143 TNS A 2 -24.451 -7.945 25.200 1.00 0.00 H \n",
2924 "HETATM 144 H144 TNS A 2 -14.924 -4.849 32.400 1.00 0.00 H \n",
2925 "HETATM 145 H145 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2926 "HETATM 146 H146 TNS A 2 -0.000 -0.000 -36.000 1.00 0.00 H \n",
2927 "HETATM 147 H147 TNS A 2 -12.695 -9.224 -32.400 1.00 0.00 H \n",
2928 "HETATM 148 H148 TNS A 2 -20.799 -15.111 -25.200 1.00 0.00 H \n",
2929 "HETATM 149 H149 TNS A 2 -25.223 -18.325 -18.000 1.00 0.00 H \n",
2930 "HETATM 150 H150 TNS A 2 -27.783 -20.186 -10.800 1.00 0.00 H \n",
2931 "HETATM 151 H151 TNS A 2 -28.979 -21.054 -3.600 1.00 0.00 H \n",
2932 "HETATM 152 H152 TNS A 2 -28.979 -21.054 3.600 1.00 0.00 H \n",
2933 "HETATM 153 H153 TNS A 2 -27.783 -20.186 10.800 1.00 0.00 H \n",
2934 "HETATM 154 H154 TNS A 2 -25.223 -18.325 18.000 1.00 0.00 H \n",
2935 "HETATM 155 H155 TNS A 2 -20.799 -15.111 25.200 1.00 0.00 H \n",
2936 "HETATM 156 H156 TNS A 2 -12.695 -9.224 32.400 1.00 0.00 H \n",
2937 "HETATM 157 H157 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2938 "HETATM 158 H158 TNS A 2 -0.000 -0.000 -36.000 1.00 0.00 H \n",
2939 "HETATM 159 H159 TNS A 2 -9.224 -12.695 -32.400 1.00 0.00 H \n",
2940 "HETATM 160 H160 TNS A 2 -15.111 -20.799 -25.200 1.00 0.00 H \n",
2941 "HETATM 161 H161 TNS A 2 -18.325 -25.223 -18.000 1.00 0.00 H \n",
2942 "HETATM 162 H162 TNS A 2 -20.186 -27.783 -10.800 1.00 0.00 H \n",
2943 "HETATM 163 H163 TNS A 2 -21.054 -28.979 -3.600 1.00 0.00 H \n",
2944 "HETATM 164 H164 TNS A 2 -21.054 -28.979 3.600 1.00 0.00 H \n",
2945 "HETATM 165 H165 TNS A 2 -20.186 -27.783 10.800 1.00 0.00 H \n",
2946 "HETATM 166 H166 TNS A 2 -18.325 -25.223 18.000 1.00 0.00 H \n",
2947 "HETATM 167 H167 TNS A 2 -15.111 -20.799 25.200 1.00 0.00 H \n",
2948 "HETATM 168 H168 TNS A 2 -9.224 -12.695 32.400 1.00 0.00 H \n",
2949 "HETATM 169 H169 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2950 "HETATM 170 H170 TNS A 2 -0.000 -0.000 -36.000 1.00 0.00 H \n",
2951 "HETATM 171 H171 TNS A 2 -4.849 -14.924 -32.400 1.00 0.00 H \n",
2952 "HETATM 172 H172 TNS A 2 -7.945 -24.451 -25.200 1.00 0.00 H \n",
2953 "HETATM 173 H173 TNS A 2 -9.634 -29.651 -18.000 1.00 0.00 H \n",
2954 "HETATM 174 H174 TNS A 2 -10.612 -32.661 -10.800 1.00 0.00 H \n",
2955 "HETATM 175 H175 TNS A 2 -11.069 -34.066 -3.600 1.00 0.00 H \n",
2956 "HETATM 176 H176 TNS A 2 -11.069 -34.066 3.600 1.00 0.00 H \n",
2957 "HETATM 177 H177 TNS A 2 -10.612 -32.661 10.800 1.00 0.00 H \n",
2958 "HETATM 178 H178 TNS A 2 -9.634 -29.651 18.000 1.00 0.00 H \n",
2959 "HETATM 179 H179 TNS A 2 -7.945 -24.451 25.200 1.00 0.00 H \n",
2960 "HETATM 180 H180 TNS A 2 -4.849 -14.924 32.400 1.00 0.00 H \n",
2961 "HETATM 181 H181 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2962 "HETATM 182 H182 TNS A 2 -0.000 -0.000 -36.000 1.00 0.00 H \n",
2963 "HETATM 183 H183 TNS A 2 -0.000 -15.692 -32.400 1.00 0.00 H \n",
2964 "HETATM 184 H184 TNS A 2 -0.000 -25.709 -25.200 1.00 0.00 H \n",
2965 "HETATM 185 H185 TNS A 2 -0.000 -31.177 -18.000 1.00 0.00 H \n",
2966 "HETATM 186 H186 TNS A 2 -0.000 -34.342 -10.800 1.00 0.00 H \n",
2967 "HETATM 187 H187 TNS A 2 -0.000 -35.820 -3.600 1.00 0.00 H \n",
2968 "HETATM 188 H188 TNS A 2 -0.000 -35.820 3.600 1.00 0.00 H \n",
2969 "HETATM 189 H189 TNS A 2 -0.000 -34.342 10.800 1.00 0.00 H \n",
2970 "HETATM 190 H190 TNS A 2 -0.000 -31.177 18.000 1.00 0.00 H \n",
2971 "HETATM 191 H191 TNS A 2 -0.000 -25.709 25.200 1.00 0.00 H \n",
2972 "HETATM 192 H192 TNS A 2 -0.000 -15.692 32.400 1.00 0.00 H \n",
2973 "HETATM 193 H193 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2974 "HETATM 194 H194 TNS A 2 0.000 -0.000 -36.000 1.00 0.00 H \n",
2975 "HETATM 195 H195 TNS A 2 4.849 -14.924 -32.400 1.00 0.00 H \n",
2976 "HETATM 196 H196 TNS A 2 7.945 -24.451 -25.200 1.00 0.00 H \n",
2977 "HETATM 197 H197 TNS A 2 9.634 -29.651 -18.000 1.00 0.00 H \n",
2978 "HETATM 198 H198 TNS A 2 10.612 -32.661 -10.800 1.00 0.00 H \n",
2979 "HETATM 199 H199 TNS A 2 11.069 -34.066 -3.600 1.00 0.00 H \n",
2980 "HETATM 200 H200 TNS A 2 11.069 -34.066 3.600 1.00 0.00 H \n",
2981 "HETATM 201 H201 TNS A 2 10.612 -32.661 10.800 1.00 0.00 H \n",
2982 "HETATM 202 H202 TNS A 2 9.634 -29.651 18.000 1.00 0.00 H \n",
2983 "HETATM 203 H203 TNS A 2 7.945 -24.451 25.200 1.00 0.00 H \n",
2984 "HETATM 204 H204 TNS A 2 4.849 -14.924 32.400 1.00 0.00 H \n",
2985 "HETATM 205 H205 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2986 "HETATM 206 H206 TNS A 2 0.000 -0.000 -36.000 1.00 0.00 H \n",
2987 "HETATM 207 H207 TNS A 2 9.224 -12.695 -32.400 1.00 0.00 H \n",
2988 "HETATM 208 H208 TNS A 2 15.111 -20.799 -25.200 1.00 0.00 H \n",
2989 "HETATM 209 H209 TNS A 2 18.325 -25.223 -18.000 1.00 0.00 H \n",
2990 "HETATM 210 H210 TNS A 2 20.186 -27.783 -10.800 1.00 0.00 H \n",
2991 "HETATM 211 H211 TNS A 2 21.054 -28.979 -3.600 1.00 0.00 H \n",
2992 "HETATM 212 H212 TNS A 2 21.054 -28.979 3.600 1.00 0.00 H \n",
2993 "HETATM 213 H213 TNS A 2 20.186 -27.783 10.800 1.00 0.00 H \n",
2994 "HETATM 214 H214 TNS A 2 18.325 -25.223 18.000 1.00 0.00 H \n",
2995 "HETATM 215 H215 TNS A 2 15.111 -20.799 25.200 1.00 0.00 H \n",
2996 "HETATM 216 H216 TNS A 2 9.224 -12.695 32.400 1.00 0.00 H \n",
2997 "HETATM 217 H217 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
2998 "HETATM 218 H218 TNS A 2 0.000 -0.000 -36.000 1.00 0.00 H \n",
2999 "HETATM 219 H219 TNS A 2 12.695 -9.224 -32.400 1.00 0.00 H \n",
3000 "HETATM 220 H220 TNS A 2 20.799 -15.111 -25.200 1.00 0.00 H \n",
3001 "HETATM 221 H221 TNS A 2 25.223 -18.325 -18.000 1.00 0.00 H \n",
3002 "HETATM 222 H222 TNS A 2 27.783 -20.186 -10.800 1.00 0.00 H \n",
3003 "HETATM 223 H223 TNS A 2 28.979 -21.054 -3.600 1.00 0.00 H \n",
3004 "HETATM 224 H224 TNS A 2 28.979 -21.054 3.600 1.00 0.00 H \n",
3005 "HETATM 225 H225 TNS A 2 27.783 -20.186 10.800 1.00 0.00 H \n",
3006 "HETATM 226 H226 TNS A 2 25.223 -18.325 18.000 1.00 0.00 H \n",
3007 "HETATM 227 H227 TNS A 2 20.799 -15.111 25.200 1.00 0.00 H \n",
3008 "HETATM 228 H228 TNS A 2 12.695 -9.224 32.400 1.00 0.00 H \n",
3009 "HETATM 229 H229 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
3010 "HETATM 230 H230 TNS A 2 0.000 -0.000 -36.000 1.00 0.00 H \n",
3011 "HETATM 231 H231 TNS A 2 14.924 -4.849 -32.400 1.00 0.00 H \n",
3012 "HETATM 232 H232 TNS A 2 24.451 -7.945 -25.200 1.00 0.00 H \n",
3013 "HETATM 233 H233 TNS A 2 29.651 -9.634 -18.000 1.00 0.00 H \n",
3014 "HETATM 234 H234 TNS A 2 32.661 -10.612 -10.800 1.00 0.00 H \n",
3015 "HETATM 235 H235 TNS A 2 34.066 -11.069 -3.600 1.00 0.00 H \n",
3016 "HETATM 236 H236 TNS A 2 34.066 -11.069 3.600 1.00 0.00 H \n",
3017 "HETATM 237 H237 TNS A 2 32.661 -10.612 10.800 1.00 0.00 H \n",
3018 "HETATM 238 H238 TNS A 2 29.651 -9.634 18.000 1.00 0.00 H \n",
3019 "HETATM 239 H239 TNS A 2 24.451 -7.945 25.200 1.00 0.00 H \n",
3020 "HETATM 240 H240 TNS A 2 14.924 -4.849 32.400 1.00 0.00 H \n",
3021 "HETATM 241 H241 TNS A 2 -0.000 0.000 36.000 1.00 0.00 H \n",
3022 "CONECT 2 3 14 230 \n",
3023 "CONECT 3 2 4 15 231 \n",
3024 "CONECT 4 3 5 16 232 \n",
3025 "CONECT 5 4 6 17 233 \n",
3026 "CONECT 6 5 7 18 234 \n",
3027 "CONECT 7 6 8 19 235 \n",
3028 "CONECT 8 7 9 20 236 \n",
3029 "CONECT 9 8 10 21 237 \n",
3030 "CONECT 10 9 11 22 238 \n",
3031 "CONECT 11 10 12 23 239 \n",
3032 "CONECT 12 11 13 24 240 \n",
3033 "CONECT 13 12 25 241 \n",
3034 "CONECT 14 2 15 26 \n",
3035 "CONECT 15 14 3 16 27 \n",
3036 "CONECT 16 15 4 17 28 \n",
3037 "CONECT 17 16 5 18 29 \n",
3038 "CONECT 18 17 6 19 30 \n",
3039 "CONECT 19 18 7 20 31 \n",
3040 "CONECT 20 19 8 21 32 \n",
3041 "CONECT 21 20 9 22 33 \n",
3042 "CONECT 22 21 10 23 34 \n",
3043 "CONECT 23 22 11 24 35 \n",
3044 "CONECT 24 23 12 25 36 \n",
3045 "CONECT 25 24 13 37 \n",
3046 "CONECT 26 14 27 38 \n",
3047 "CONECT 27 26 15 28 39 \n",
3048 "CONECT 28 27 16 29 40 \n",
3049 "CONECT 29 28 17 30 41 \n",
3050 "CONECT 30 29 18 31 42 \n",
3051 "CONECT 31 30 19 32 43 \n",
3052 "CONECT 32 31 20 33 44 \n",
3053 "CONECT 33 32 21 34 45 \n",
3054 "CONECT 34 33 22 35 46 \n",
3055 "CONECT 35 34 23 36 47 \n",
3056 "CONECT 36 35 24 37 48 \n",
3057 "CONECT 37 36 25 49 \n",
3058 "CONECT 38 26 39 50 \n",
3059 "CONECT 39 38 27 40 51 \n",
3060 "CONECT 40 39 28 41 52 \n",
3061 "CONECT 41 40 29 42 53 \n",
3062 "CONECT 42 41 30 43 54 \n",
3063 "CONECT 43 42 31 44 55 \n",
3064 "CONECT 44 43 32 45 56 \n",
3065 "CONECT 45 44 33 46 57 \n",
3066 "CONECT 46 45 34 47 58 \n",
3067 "CONECT 47 46 35 48 59 \n",
3068 "CONECT 48 47 36 49 60 \n",
3069 "CONECT 49 48 37 61 \n",
3070 "CONECT 50 38 51 62 \n",
3071 "CONECT 51 50 39 52 63 \n",
3072 "CONECT 52 51 40 53 64 \n",
3073 "CONECT 53 52 41 54 65 \n",
3074 "CONECT 54 53 42 55 66 \n",
3075 "CONECT 55 54 43 56 67 \n",
3076 "CONECT 56 55 44 57 68 \n",
3077 "CONECT 57 56 45 58 69 \n",
3078 "CONECT 58 57 46 59 70 \n",
3079 "CONECT 59 58 47 60 71 \n",
3080 "CONECT 60 59 48 61 72 \n",
3081 "CONECT 61 60 49 73 \n",
3082 "CONECT 62 50 63 74 \n",
3083 "CONECT 63 62 51 64 75 \n",
3084 "CONECT 64 63 52 65 76 \n",
3085 "CONECT 65 64 53 66 77 \n",
3086 "CONECT 66 65 54 67 78 \n",
3087 "CONECT 67 66 55 68 79 \n",
3088 "CONECT 68 67 56 69 80 \n",
3089 "CONECT 69 68 57 70 81 \n",
3090 "CONECT 70 69 58 71 82 \n",
3091 "CONECT 71 70 59 72 83 \n",
3092 "CONECT 72 71 60 73 84 \n",
3093 "CONECT 73 72 61 85 \n",
3094 "CONECT 74 62 75 86 \n",
3095 "CONECT 75 74 63 76 87 \n",
3096 "CONECT 76 75 64 77 88 \n",
3097 "CONECT 77 76 65 78 89 \n",
3098 "CONECT 78 77 66 79 90 \n",
3099 "CONECT 79 78 67 80 91 \n",
3100 "CONECT 80 79 68 81 92 \n",
3101 "CONECT 81 80 69 82 93 \n",
3102 "CONECT 82 81 70 83 94 \n",
3103 "CONECT 83 82 71 84 95 \n",
3104 "CONECT 84 83 72 85 96 \n",
3105 "CONECT 85 84 73 97 \n",
3106 "CONECT 86 74 87 98 \n",
3107 "CONECT 87 86 75 88 99 \n",
3108 "CONECT 88 87 76 89 100 \n",
3109 "CONECT 89 88 77 90 101 \n",
3110 "CONECT 90 89 78 91 102 \n",
3111 "CONECT 91 90 79 92 103 \n",
3112 "CONECT 92 91 80 93 104 \n",
3113 "CONECT 93 92 81 94 105 \n",
3114 "CONECT 94 93 82 95 106 \n",
3115 "CONECT 95 94 83 96 107 \n",
3116 "CONECT 96 95 84 97 108 \n",
3117 "CONECT 97 96 85 109 \n",
3118 "CONECT 98 86 99 110 \n",
3119 "CONECT 99 98 87 100 111 \n",
3120 "CONECT 100 99 88 101 112 \n",
3121 "CONECT 101 100 89 102 113 \n",
3122 "CONECT 102 101 90 103 114 \n",
3123 "CONECT 103 102 91 104 115 \n",
3124 "CONECT 104 103 92 105 116 \n",
3125 "CONECT 105 104 93 106 117 \n",
3126 "CONECT 106 105 94 107 118 \n",
3127 "CONECT 107 106 95 108 119 \n",
3128 "CONECT 108 107 96 109 120 \n",
3129 "CONECT 109 108 97 121 \n",
3130 "CONECT 110 98 111 122 \n",
3131 "CONECT 111 110 99 112 123 \n",
3132 "CONECT 112 111 100 113 124 \n",
3133 "CONECT 113 112 101 114 125 \n",
3134 "CONECT 114 113 102 115 126 \n",
3135 "CONECT 115 114 103 116 127 \n",
3136 "CONECT 116 115 104 117 128 \n",
3137 "CONECT 117 116 105 118 129 \n",
3138 "CONECT 118 117 106 119 130 \n",
3139 "CONECT 119 118 107 120 131 \n",
3140 "CONECT 120 119 108 121 132 \n",
3141 "CONECT 121 120 109 133 \n",
3142 "CONECT 122 110 123 134 \n",
3143 "CONECT 123 122 111 124 135 \n",
3144 "CONECT 124 123 112 125 136 \n",
3145 "CONECT 125 124 113 126 137 \n",
3146 "CONECT 126 125 114 127 138 \n",
3147 "CONECT 127 126 115 128 139 \n",
3148 "CONECT 128 127 116 129 140 \n",
3149 "CONECT 129 128 117 130 141 \n",
3150 "CONECT 130 129 118 131 142 \n",
3151 "CONECT 131 130 119 132 143 \n",
3152 "CONECT 132 131 120 133 144 \n",
3153 "CONECT 133 132 121 145 \n",
3154 "CONECT 134 122 135 146 \n",
3155 "CONECT 135 134 123 136 147 \n",
3156 "CONECT 136 135 124 137 148 \n",
3157 "CONECT 137 136 125 138 149 \n",
3158 "CONECT 138 137 126 139 150 \n",
3159 "CONECT 139 138 127 140 151 \n",
3160 "CONECT 140 139 128 141 152 \n",
3161 "CONECT 141 140 129 142 153 \n",
3162 "CONECT 142 141 130 143 154 \n",
3163 "CONECT 143 142 131 144 155 \n",
3164 "CONECT 144 143 132 145 156 \n",
3165 "CONECT 145 144 133 157 \n",
3166 "CONECT 146 134 147 158 \n",
3167 "CONECT 147 146 135 148 159 \n",
3168 "CONECT 148 147 136 149 160 \n",
3169 "CONECT 149 148 137 150 161 \n",
3170 "CONECT 150 149 138 151 162 \n",
3171 "CONECT 151 150 139 152 163 \n",
3172 "CONECT 152 151 140 153 164 \n",
3173 "CONECT 153 152 141 154 165 \n",
3174 "CONECT 154 153 142 155 166 \n",
3175 "CONECT 155 154 143 156 167 \n",
3176 "CONECT 156 155 144 157 168 \n",
3177 "CONECT 157 156 145 169 \n",
3178 "CONECT 158 146 159 170 \n",
3179 "CONECT 159 158 147 160 171 \n",
3180 "CONECT 160 159 148 161 172 \n",
3181 "CONECT 161 160 149 162 173 \n",
3182 "CONECT 162 161 150 163 174 \n",
3183 "CONECT 163 162 151 164 175 \n",
3184 "CONECT 164 163 152 165 176 \n",
3185 "CONECT 165 164 153 166 177 \n",
3186 "CONECT 166 165 154 167 178 \n",
3187 "CONECT 167 166 155 168 179 \n",
3188 "CONECT 168 167 156 169 180 \n",
3189 "CONECT 169 168 157 181 \n",
3190 "CONECT 170 158 171 182 \n",
3191 "CONECT 171 170 159 172 183 \n",
3192 "CONECT 172 171 160 173 184 \n",
3193 "CONECT 173 172 161 174 185 \n",
3194 "CONECT 174 173 162 175 186 \n",
3195 "CONECT 175 174 163 176 187 \n",
3196 "CONECT 176 175 164 177 188 \n",
3197 "CONECT 177 176 165 178 189 \n",
3198 "CONECT 178 177 166 179 190 \n",
3199 "CONECT 179 178 167 180 191 \n",
3200 "CONECT 180 179 168 181 192 \n",
3201 "CONECT 181 180 169 193 \n",
3202 "CONECT 182 170 183 194 \n",
3203 "CONECT 183 182 171 184 195 \n",
3204 "CONECT 184 183 172 185 196 \n",
3205 "CONECT 185 184 173 186 197 \n",
3206 "CONECT 186 185 174 187 198 \n",
3207 "CONECT 187 186 175 188 199 \n",
3208 "CONECT 188 187 176 189 200 \n",
3209 "CONECT 189 188 177 190 201 \n",
3210 "CONECT 190 189 178 191 202 \n",
3211 "CONECT 191 190 179 192 203 \n",
3212 "CONECT 192 191 180 193 204 \n",
3213 "CONECT 193 192 181 205 \n",
3214 "CONECT 194 182 195 206 \n",
3215 "CONECT 195 194 183 196 207 \n",
3216 "CONECT 196 195 184 197 208 \n",
3217 "CONECT 197 196 185 198 209 \n",
3218 "CONECT 198 197 186 199 210 \n",
3219 "CONECT 199 198 187 200 211 \n",
3220 "CONECT 200 199 188 201 212 \n",
3221 "CONECT 201 200 189 202 213 \n",
3222 "CONECT 202 201 190 203 214 \n",
3223 "CONECT 203 202 191 204 215 \n",
3224 "CONECT 204 203 192 205 216 \n",
3225 "CONECT 205 204 193 217 \n",
3226 "CONECT 206 194 207 218 \n",
3227 "CONECT 207 206 195 208 219 \n",
3228 "CONECT 208 207 196 209 220 \n",
3229 "CONECT 209 208 197 210 221 \n",
3230 "CONECT 210 209 198 211 222 \n",
3231 "CONECT 211 210 199 212 223 \n",
3232 "CONECT 212 211 200 213 224 \n",
3233 "CONECT 213 212 201 214 225 \n",
3234 "CONECT 214 213 202 215 226 \n",
3235 "CONECT 215 214 203 216 227 \n",
3236 "CONECT 216 215 204 217 228 \n",
3237 "CONECT 217 216 205 229 \n",
3238 "CONECT 218 206 219 230 \n",
3239 "CONECT 219 218 207 220 231 \n",
3240 "CONECT 220 219 208 221 232 \n",
3241 "CONECT 221 220 209 222 233 \n",
3242 "CONECT 222 221 210 223 234 \n",
3243 "CONECT 223 222 211 224 235 \n",
3244 "CONECT 224 223 212 225 236 \n",
3245 "CONECT 225 224 213 226 237 \n",
3246 "CONECT 226 225 214 227 238 \n",
3247 "CONECT 227 226 215 228 239 \n",
3248 "CONECT 228 227 216 229 240 \n",
3249 "CONECT 229 228 217 241 \n",
3250 "CONECT 230 218 2 231 \n",
3251 "CONECT 231 230 219 3 232 \n",
3252 "CONECT 232 231 220 4 233 \n",
3253 "CONECT 233 232 221 5 234 \n",
3254 "CONECT 234 233 222 6 235 \n",
3255 "CONECT 235 234 223 7 236 \n",
3256 "CONECT 236 235 224 8 237 \n",
3257 "CONECT 237 236 225 9 238 \n",
3258 "CONECT 238 237 226 10 239 \n",
3259 "CONECT 239 238 227 11 240 \n",
3260 "CONECT 240 239 228 12 241 \n",
3261 "CONECT 241 240 229 13 \n",
3262 "MASTER 0 0 2 0 0 0 0 0 241 0 240 0 \n",
3263 "END \n"
3264 ]
3265
3266
3267 self.strip_remarks(lines)
3268 self.assertEqual(len(real_data), len(lines))
3269 for i in range(len(lines)):
3270 self.assertEqual(real_data[i], lines[i])
3271
3272
3274 """Test the deletion of a single atom using the U{structure.delete user function<http://www.nmr-relax.com/manual/structure_delete.html>}"""
3275
3276
3277 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'diffusion_tensor'+sep+'sphere'
3278 self.interpreter.structure.read_pdb(file='uniform.pdb', dir=path)
3279
3280
3281 self.interpreter.structure.delete(atom_id=':4@N', verbosity=1)
3282 self.interpreter.structure.delete(atom_id=':19', verbosity=1)
3283 self.interpreter.structure.delete(atom_id=':16@H', verbosity=1)
3284 self.interpreter.structure.delete(atom_id=':21-100', verbosity=1)
3285
3286
3287 data = [
3288 ["N", "PRO", 1, 0.000, 0.000, -10.000, 0, [1]],
3289 ["H", "PRO", 1, 0.000, 0.000, -11.020, 1, [0]],
3290 ["N", "PRO", 2, 7.454, 0.000, -6.667, 2, [3]],
3291 ["H", "PRO", 2, 8.214, 0.000, -7.347, 3, [2]],
3292 ["N", "ILE", 3, 10.000, 0.000, 0.000, 4, [5]],
3293 ["H", "ILE", 3, 11.020, 0.000, 0.000, 5, [4]],
3294 ["H", "VAL", 4, 8.214, 0.000, 7.347, 6, []],
3295 ["N", "VAL", 5, 0.000, 0.000, 10.000, 7, [8]],
3296 ["H", "VAL", 5, 0.000, 0.000, 11.020, 8, [7]],
3297 ["N", "ASN", 6, 0.000, 0.000, -10.000, 9, [10]],
3298 ["H", "ASN", 6, 0.000, 0.000, -11.020, 10, [9]],
3299 ["N", "SER", 7, 3.727, 6.455, -6.667, 11, [12]],
3300 ["H", "SER", 7, 4.107, 7.113, -7.347, 12, [11]],
3301 ["N", "LEU", 8, 5.000, 8.660, 0.000, 13, [14]],
3302 ["H", "LEU", 8, 5.510, 9.544, 0.000, 14, [13]],
3303 ["N", "SER", 9, 3.727, 6.455, 6.667, 15, [16]],
3304 ["H", "SER", 9, 4.107, 7.113, 7.347, 16, [15]],
3305 ["N", "ASN", 10, 0.000, 0.000, 10.000, 17, [18]],
3306 ["H", "ASN", 10, 0.000, 0.000, 11.020, 18, [17]],
3307 ["N", "PHE", 11, -0.000, 0.000, -10.000, 19, [20]],
3308 ["H", "PHE", 11, -0.000, 0.000, -11.020, 20, [19]],
3309 ["N", "ALA", 12, -3.727, 6.455, -6.667, 21, [22]],
3310 ["H", "ALA", 12, -4.107, 7.113, -7.347, 22, [21]],
3311 ["N", "ILE", 13, -5.000, 8.660, 0.000, 23, [24]],
3312 ["H", "ILE", 13, -5.510, 9.544, 0.000, 24, [23]],
3313 ["N", "GLY", 14, -3.727, 6.455, 6.667, 25, [26]],
3314 ["H", "GLY", 14, -4.107, 7.113, 7.347, 26, [25]],
3315 ["N", "SER", 15, -0.000, 0.000, 10.000, 27, [28]],
3316 ["H", "SER", 15, -0.000, 0.000, 11.020, 28, [27]],
3317 ["N", "PHE", 16, -0.000, 0.000, -10.000, 29, []],
3318 ["N", "VAL", 17, -7.454, 0.000, -6.667, 30, [31]],
3319 ["H", "VAL", 17, -8.214, 0.000, -7.347, 31, [30]],
3320 ["N", "ILE", 18, -10.000, 0.000, 0.000, 32, [33]],
3321 ["H", "ILE", 18, -11.020, 0.000, 0.000, 33, [32]],
3322 ["N", "LEU", 20, -0.000, 0.000, 10.000, 34, [35]],
3323 ["H", "LEU", 20, -0.000, 0.000, 11.020, 35, [34]]
3324 ]
3325
3326
3327 selection = cdp.structure.selection()
3328
3329
3330 mol = cdp.structure.structural_data[0].mol[0]
3331 self.assertEqual(len(data), len(mol.atom_name))
3332 for i in range(len(mol.atom_name)):
3333 print("Checking :%i@%s" % (data[i][2], data[i][0]))
3334 self.assertEqual(mol.atom_name[i], data[i][0])
3335 self.assertEqual(mol.res_name[i], data[i][1])
3336 self.assertEqual(mol.res_num[i], data[i][2])
3337 self.assertEqual(mol.x[i], data[i][3])
3338 self.assertEqual(mol.y[i], data[i][4])
3339 self.assertEqual(mol.z[i], data[i][5])
3340 self.assertEqual(mol.bonded[i], data[i][7])
3341
3342
3343 self.interpreter.structure.write_pdb(file=sys.stdout)
3344
3345
3346 self.tmpfile = mktemp() + '.pdb'
3347 self.interpreter.structure.write_pdb(self.tmpfile)
3348
3349
3350 file = open(self.tmpfile)
3351 lines = file.readlines()
3352 file.close()
3353
3354
3355 print("\nChecking CONECT records from the structure.write user function:")
3356 connected = [
3357 [ 0, 1],
3358 [ 1, 0],
3359 [ 2, 3],
3360 [ 3, 2],
3361 [ 4, 5],
3362 [ 5, 4],
3363 [ 7, 8],
3364 [ 8, 7],
3365 [ 9, 10],
3366 [10, 9],
3367 [11, 12],
3368 [12, 11],
3369 [13, 14],
3370 [14, 13],
3371 [15, 16],
3372 [16, 15],
3373 [17, 18],
3374 [18, 17],
3375 [19, 20],
3376 [20, 19],
3377 [21, 22],
3378 [22, 21],
3379 [23, 24],
3380 [24, 23],
3381 [25, 26],
3382 [26, 25],
3383 [27, 28],
3384 [28, 27],
3385 [30, 31],
3386 [31, 30],
3387 [32, 33],
3388 [33, 32],
3389 [34, 35],
3390 [35, 34]
3391 ]
3392 i = 0
3393 for line in lines:
3394
3395 if not search('^CONECT', line):
3396 continue
3397
3398
3399 sys.stdout.write(line)
3400
3401
3402 row = line.split()
3403
3404
3405 self.assertEqual(int(row[1]), connected[i][0]+1)
3406 self.assertEqual(int(row[2]), connected[i][1]+1)
3407 i += 1
3408
3409
3415
3416
3418 """Test the deletion of a single structural model."""
3419
3420
3421 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
3422
3423
3424 self.interpreter.structure.read_pdb('Ap4Aase_res1-12.pdb', dir=path, set_model_num=1)
3425 self.interpreter.structure.read_pdb('Ap4Aase_res1-12.pdb', dir=path, set_model_num=2)
3426
3427
3428 self.assert_(hasattr(cdp, 'structure'))
3429 self.assert_(hasattr(cdp.structure, 'structural_data'))
3430 self.assertEqual(len(cdp.structure.structural_data), 2)
3431 self.assertEqual(cdp.structure.structural_data[0].num, 1)
3432 self.assertEqual(cdp.structure.structural_data[1].num, 2)
3433
3434
3435 self.interpreter.structure.delete(model=1)
3436
3437
3438 self.assert_(hasattr(cdp, 'structure'))
3439 self.assert_(hasattr(cdp.structure, 'structural_data'))
3440 self.assertEqual(len(cdp.structure.structural_data), 1)
3441 self.assertEqual(cdp.structure.structural_data[0].num, 2)
3442
3443
3444 self.interpreter.structure.read_pdb('Ap4Aase_res1-12.pdb', dir=path, set_model_num=3)
3445 self.interpreter.structure.delete(model=3)
3446
3447
3448 self.assert_(hasattr(cdp, 'structure'))
3449 self.assert_(hasattr(cdp.structure, 'structural_data'))
3450 self.assertEqual(len(cdp.structure.structural_data), 1)
3451 self.assertEqual(cdp.structure.structural_data[0].num, 2)
3452
3453
3454 self.interpreter.structure.read_pdb('Ap4Aase_res1-12.pdb', dir=path, set_model_num=10)
3455 self.interpreter.structure.delete(model=2)
3456
3457
3458 self.assert_(hasattr(cdp, 'structure'))
3459 self.assert_(hasattr(cdp.structure, 'structural_data'))
3460 self.assertEqual(len(cdp.structure.structural_data), 1)
3461 self.assertEqual(cdp.structure.structural_data[0].num, 10)
3462
3463
3465 """Test the deletion of structural data in only one pipe."""
3466
3467
3468 self.interpreter.structure.add_atom(atom_name='PIV', res_name='M1', res_num=1, pos=[0., 1., 2.], element='S')
3469
3470
3471 self.interpreter.pipe.create('new', 'N-state')
3472
3473
3474 self.interpreter.structure.add_atom(atom_name='PIV', res_name='M1', res_num=2, pos=[4., 5., 6.], element='S')
3475
3476
3477 self.interpreter.structure.delete()
3478
3479
3480 self.assert_(hasattr(cdp, 'structure'))
3481 self.assertEqual(len(cdp.structure.structural_data), 0)
3482 self.interpreter.pipe.switch('mf')
3483 self.assert_(hasattr(cdp, 'structure'))
3484 self.assertEqual(len(cdp.structure.structural_data), 1)
3485
3486
3488 """Test of the structure.displacement user function."""
3489
3490
3491 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
3492
3493
3494 self.interpreter.structure.read_pdb('Ap4Aase_res1-12.pdb', dir=path, set_model_num=1)
3495 self.interpreter.structure.read_pdb('Ap4Aase_res1-12.pdb', dir=path, set_model_num=2)
3496
3497
3498 R = zeros((3, 3), float64)
3499 euler_to_R_zyz(1.3, 0.4, 4.5, R)
3500
3501
3502 self.interpreter.structure.rotate(R, model=2)
3503
3504
3505 self.interpreter.structure.displacement()
3506
3507
3508 self.interpreter.structure.read_pdb('Ap4Aase_res1-12.pdb', dir=path, set_model_num=3)
3509 self.interpreter.structure.rotate(R, model=3)
3510
3511
3512 ids = ['model 1, Ap4Aase_res1-12_mol1', 'model 2, Ap4Aase_res1-12_mol1']
3513 trans_vect = [
3514 [[0.0, 0.0, 0.0],
3515 [ 2.270857972754659, -1.811667138656451, 1.878400649688508]],
3516 [[ -2.270857972754659, 1.811667138656451, -1.878400649688508],
3517 [0.0, 0.0, 0.0]]
3518 ]
3519 dist = [
3520 [0.0000000000000000, 3.4593818457148173],
3521 [3.4593818457148173, 0.0000000000000000]
3522 ]
3523 rot_axis = [
3524 [None,
3525 [ 0.646165066909452, 0.018875759848125, -0.762964227206007]],
3526 [[ -0.646165066909452, -0.018875759848125, 0.762964227206007],
3527 None]
3528 ]
3529 angle = [
3530 [0.0000000000000000, 0.6247677290742989],
3531 [0.6247677290742989, 0.0000000000000000]
3532 ]
3533
3534
3535 self.assert_(hasattr(cdp.structure, 'displacements'))
3536 for i in range(len(ids)):
3537 for j in range(len(ids)):
3538
3539 self.assertAlmostEqual(cdp.structure.displacements._translation_distance[ids[i]][ids[j]], dist[i][j])
3540 for k in range(3):
3541 self.assertAlmostEqual(cdp.structure.displacements._translation_vector[ids[i]][ids[j]][k], trans_vect[i][j][k])
3542
3543
3544 self.assertAlmostEqual(cdp.structure.displacements._rotation_angle[ids[i]][ids[j]], angle[i][j])
3545 if rot_axis[i][j] != None:
3546 for k in range(3):
3547 self.assertAlmostEqual(cdp.structure.displacements._rotation_axis[ids[i]][ids[j]][k], rot_axis[i][j][k])
3548
3549
3550 self.tmpfile = mktemp()
3551 self.interpreter.state.save(self.tmpfile, dir=None, force=True)
3552
3553
3554 self.interpreter.reset()
3555
3556
3557 self.interpreter.state.load(self.tmpfile)
3558
3559
3560 self.assert_(hasattr(cdp.structure, 'displacements'))
3561 for i in range(len(ids)):
3562 for j in range(len(ids)):
3563
3564 self.assertAlmostEqual(cdp.structure.displacements._translation_distance[ids[i]][ids[j]], dist[i][j])
3565 for k in range(3):
3566 self.assertAlmostEqual(cdp.structure.displacements._translation_vector[ids[i]][ids[j]][k], trans_vect[i][j][k])
3567
3568
3569 self.assertAlmostEqual(cdp.structure.displacements._rotation_angle[ids[i]][ids[j]], angle[i][j])
3570 if rot_axis[i][j] != None:
3571 for k in range(3):
3572 self.assertAlmostEqual(cdp.structure.displacements._rotation_axis[ids[i]][ids[j]][k], rot_axis[i][j][k])
3573
3574
3576 """Test of the structure.displacement user function for different molecules in one pipe.
3577
3578 This checks the molecules argument of the U{structure.displacement user function<http://www.nmr-relax.com/manual/structure_displacement.html>}.
3579 """
3580
3581
3582 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
3583
3584
3585 self.interpreter.structure.read_pdb('Ap4Aase_res1-12.pdb', dir=path, set_mol_name='1')
3586 self.interpreter.structure.read_pdb('Ap4Aase_res1-12.pdb', dir=path, set_mol_name='2')
3587
3588
3589 R = zeros((3, 3), float64)
3590 euler_to_R_zyz(1.3, 0.4, 4.5, R)
3591
3592
3593 self.interpreter.structure.rotate(R, atom_id='#2')
3594
3595
3596 self.interpreter.structure.displacement(molecules=[['1', '2']])
3597
3598
3599 self.interpreter.structure.read_pdb('Ap4Aase_res1-12.pdb', dir=path, set_mol_name='3')
3600 self.interpreter.structure.rotate(R, atom_id='#3')
3601
3602
3603 ids = ['1', '2']
3604 trans_vect = [
3605 [[0.0, 0.0, 0.0],
3606 [ 2.270857972754659, -1.811667138656451, 1.878400649688508]],
3607 [[ -2.270857972754659, 1.811667138656451, -1.878400649688508],
3608 [0.0, 0.0, 0.0]]
3609 ]
3610 dist = [
3611 [0.0000000000000000, 3.4593818457148173],
3612 [3.4593818457148173, 0.0000000000000000]
3613 ]
3614 rot_axis = [
3615 [None,
3616 [ 0.646165066909452, 0.018875759848125, -0.762964227206007]],
3617 [[ -0.646165066909452, -0.018875759848125, 0.762964227206007],
3618 None]
3619 ]
3620 angle = [
3621 [0.0000000000000000, 0.6247677290742989],
3622 [0.6247677290742989, 0.0000000000000000]
3623 ]
3624
3625
3626 self.assert_(hasattr(cdp.structure, 'displacements'))
3627 for i in range(len(ids)):
3628 for j in range(len(ids)):
3629
3630 self.assertAlmostEqual(cdp.structure.displacements._translation_distance[ids[i]][ids[j]], dist[i][j])
3631 for k in range(3):
3632 self.assertAlmostEqual(cdp.structure.displacements._translation_vector[ids[i]][ids[j]][k], trans_vect[i][j][k])
3633
3634
3635 self.assertAlmostEqual(cdp.structure.displacements._rotation_angle[ids[i]][ids[j]], angle[i][j])
3636 if rot_axis[i][j] != None:
3637 for k in range(3):
3638 self.assertAlmostEqual(cdp.structure.displacements._rotation_axis[ids[i]][ids[j]][k], rot_axis[i][j][k])
3639
3640
3641 self.tmpfile = mktemp()
3642 self.interpreter.state.save(self.tmpfile, dir=None, force=True)
3643
3644
3645 self.interpreter.reset()
3646
3647
3648 self.interpreter.state.load(self.tmpfile)
3649
3650
3651 self.assert_(hasattr(cdp.structure, 'displacements'))
3652 for i in range(len(ids)):
3653 for j in range(len(ids)):
3654
3655 self.assertAlmostEqual(cdp.structure.displacements._translation_distance[ids[i]][ids[j]], dist[i][j])
3656 for k in range(3):
3657 self.assertAlmostEqual(cdp.structure.displacements._translation_vector[ids[i]][ids[j]][k], trans_vect[i][j][k])
3658
3659
3660 self.assertAlmostEqual(cdp.structure.displacements._rotation_angle[ids[i]][ids[j]], angle[i][j])
3661 if rot_axis[i][j] != None:
3662 for k in range(3):
3663 self.assertAlmostEqual(cdp.structure.displacements._rotation_axis[ids[i]][ids[j]][k], rot_axis[i][j][k])
3664
3665
3667 """Test the structure.find_pivot user function.
3668
3669 This checks the default operation of the U{structure.find_pivot user function<http://www.nmr-relax.com/manual/structure_find_pivot.html>}.
3670 """
3671
3672
3673 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
3674
3675
3676 self.interpreter.structure.read_pdb('Ap4Aase_res1-12.pdb', dir=path, set_model_num=1)
3677 self.interpreter.structure.read_pdb('Ap4Aase_res1-12.pdb', dir=path, set_model_num=2)
3678 self.interpreter.structure.read_pdb('Ap4Aase_res1-12.pdb', dir=path, set_model_num=3)
3679
3680
3681 pivot = [1., 2., 3.]
3682 R = zeros((3, 3), float64)
3683 axis_angle_to_R(array([1, 0, 0], float64), 0.1, R)
3684 self.interpreter.structure.rotate(R=R, model=2, origin=pivot)
3685 axis_angle_to_R(array([0, 1, 0], float64), 0.2, R)
3686 self.interpreter.structure.rotate(R=R, model=3, origin=pivot)
3687
3688
3689 self.interpreter.structure.find_pivot(init_pos=[0.95, 2.05, 3.02])
3690
3691
3692 self.assertAlmostEqual(cdp.structure.pivot[0], pivot[0], 3)
3693 self.assertAlmostEqual(cdp.structure.pivot[1], pivot[1], 3)
3694 self.assertAlmostEqual(cdp.structure.pivot[2], pivot[2], 3)
3695
3696
3698 """Test the structure.find_pivot user function.
3699
3700 This checks the U{structure.find_pivot user function<http://www.nmr-relax.com/manual/structure_find_pivot.html>} when the molecules argument is given.
3701 """
3702
3703
3704 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'diffusion_tensor'+sep+'sphere'
3705
3706
3707 self.interpreter.structure.read_pdb('uniform.pdb', dir=path, set_mol_name='X')
3708 self.interpreter.structure.read_pdb('uniform.pdb', dir=path, set_mol_name='Y')
3709 self.interpreter.structure.read_pdb('uniform.pdb', dir=path, set_mol_name='Z')
3710
3711
3712 self.interpreter.structure.delete("#X:8")
3713 self.interpreter.structure.delete("#X:2@N")
3714 self.interpreter.structure.delete("#Y:12")
3715 self.interpreter.structure.delete("#Y:20@H")
3716
3717
3718 pivot = [1., 2., 3.]
3719 R = zeros((3, 3), float64)
3720 axis_angle_to_R(array([1, 0, 0], float64), 0.1, R)
3721 self.interpreter.structure.rotate(R=R, atom_id='#Y', origin=pivot)
3722 axis_angle_to_R(array([0, 1, 0], float64), 0.2, R)
3723 self.interpreter.structure.rotate(R=R, atom_id='#Z', origin=pivot)
3724
3725
3726 self.interpreter.structure.find_pivot(molecules=[['X', 'Y', 'Z']], init_pos=[0.95, 2.05, 3.02], func_tol=1e-7)
3727
3728
3729 self.assertAlmostEqual(cdp.structure.pivot[0], pivot[0], 3)
3730 self.assertAlmostEqual(cdp.structure.pivot[1], pivot[1], 3)
3731 self.assertAlmostEqual(cdp.structure.pivot[2], pivot[2], 3)
3732
3733
3748
3749
3751 """Load the PDB file using the information in a results file (using the internal structural object)."""
3752
3753
3754 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
3755
3756
3757 self.interpreter.results.read(file='str_internal', dir=path)
3758
3759
3760 self.assert_(hasattr(cdp, 'structure'))
3761 self.assert_(hasattr(cdp.structure, 'structural_data'))
3762 self.assert_(len(cdp.structure.structural_data))
3763 self.assert_(len(cdp.structure.structural_data[0].mol))
3764
3765 mol = cdp.structure.structural_data[0].mol[0]
3766 self.assertEqual(mol.file_name, 'Ap4Aase_res1-12.pdb')
3767 self.assertEqual(mol.file_path, '')
3768 self.assertEqual(mol.file_model, 1)
3769 self.assertEqual(mol.file_mol_num, 1)
3770
3771
3772 atom_name = ['N', 'CA', '1HA', '2HA', 'C', 'O', '1HT', '2HT', '3HT', 'N', 'CD', 'CA', 'HA', 'CB', '1HB', '2HB', 'CG', '1HG', '2HG', '1HD', '2HD', 'C', 'O', 'N', 'H', 'CA', 'HA', 'CB', '1HB', '2HB', 'CG', 'HG', 'CD1', '1HD1', '2HD1', '3HD1', 'CD2', '1HD2', '2HD2', '3HD2', 'C', 'O', 'N', 'H', 'CA', '1HA', '2HA', 'C', 'O', 'N', 'H', 'CA', 'HA', 'CB', '1HB', '2HB', 'OG', 'HG', 'C', 'O', 'N', 'H', 'CA', 'HA', 'CB', '1HB', '2HB', 'CG', '1HG', '2HG', 'SD', 'CE', '1HE', '2HE', '3HE', 'C', 'O', 'N', 'H', 'CA', 'HA', 'CB', '1HB', '2HB', 'CG', 'OD1', 'OD2', 'C', 'O', 'N', 'H', 'CA', 'HA', 'CB', '1HB', '2HB', 'OG', 'HG', 'C', 'O', 'N', 'CD', 'CA', 'HA', 'CB', '1HB', '2HB', 'CG', '1HG', '2HG', '1HD', '2HD', 'C', 'O', 'N', 'CD', 'CA', 'HA', 'CB', '1HB', '2HB', 'CG', '1HG', '2HG', '1HD', '2HD', 'C', 'O', 'N', 'H', 'CA', 'HA', 'CB', '1HB', '2HB', 'CG', '1HG', '2HG', 'CD', 'OE1', 'OE2', 'C', 'O', 'N', 'H', 'CA', '1HA', '2HA', 'C', 'O']
3773 bonded = [[]]*174
3774 chain_id = [None]*174
3775 element = ['N', 'C', 'H', 'H', 'C', 'O', 'H', 'H', 'H', 'N', 'C', 'C', 'H', 'C', 'H', 'H', 'C', 'H', 'H', 'H', 'H', 'C', 'O', 'N', 'H', 'C', 'H', 'C', 'H', 'H', 'C', 'H', 'C', 'H', 'H', 'H', 'C', 'H', 'H', 'H', 'C', 'O', 'N', 'H', 'C', 'H', 'H', 'C', 'O', 'N', 'H', 'C', 'H', 'C', 'H', 'H', 'O', 'H', 'C', 'O', 'N', 'H', 'C', 'H', 'C', 'H', 'H', 'C', 'H', 'H', 'S', 'C', 'H', 'H', 'H', 'C', 'O', 'N', 'H', 'C', 'H', 'C', 'H', 'H', 'C', 'O', 'O', 'C', 'O', 'N', 'H', 'C', 'H', 'C', 'H', 'H', 'O', 'H', 'C', 'O', 'N', 'C', 'C', 'H', 'C', 'H', 'H', 'C', 'H', 'H', 'H', 'H', 'C', 'O', 'N', 'C', 'C', 'H', 'C', 'H', 'H', 'C', 'H', 'H', 'H', 'H', 'C', 'O', 'N', 'H', 'C', 'H', 'C', 'H', 'H', 'C', 'H', 'H', 'C', 'O', 'O', 'C', 'O', 'N', 'H', 'C', 'H', 'H', 'C', 'O']
3776 pdb_record = ['ATOM']*174
3777 res_name = ['GLY', 'GLY', 'GLY', 'GLY', 'GLY', 'GLY', 'GLY', 'GLY', 'GLY', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'LEU', 'LEU', 'LEU', 'LEU', 'LEU', 'LEU', 'LEU', 'LEU', 'LEU', 'LEU', 'LEU', 'LEU', 'LEU', 'LEU', 'LEU', 'LEU', 'LEU', 'LEU', 'LEU', 'GLY', 'GLY', 'GLY', 'GLY', 'GLY', 'GLY', 'GLY', 'SER', 'SER', 'SER', 'SER', 'SER', 'SER', 'SER', 'SER', 'SER', 'SER', 'SER', 'MET', 'MET', 'MET', 'MET', 'MET', 'MET', 'MET', 'MET', 'MET', 'MET', 'MET', 'MET', 'MET', 'MET', 'MET', 'MET', 'MET', 'ASP', 'ASP', 'ASP', 'ASP', 'ASP', 'ASP', 'ASP', 'ASP', 'ASP', 'ASP', 'ASP', 'ASP', 'SER', 'SER', 'SER', 'SER', 'SER', 'SER', 'SER', 'SER', 'SER', 'SER', 'SER', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'PRO', 'GLU', 'GLU', 'GLU', 'GLU', 'GLU', 'GLU', 'GLU', 'GLU', 'GLU', 'GLU', 'GLU', 'GLU', 'GLU', 'GLU', 'GLU', 'GLY', 'GLY', 'GLY', 'GLY', 'GLY', 'GLY', 'GLY']
3778 res_num = [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12]
3779 seg_id = [None]*174
3780 x = [8.442, 7.469, 8.013, 6.825, 6.610, 6.827, 9.398, 8.180, 8.448, 5.613, 5.281, 4.714, 5.222, 3.646, 3.332, 2.800, 4.319, 4.853, 3.587, 6.162, 4.805, 4.075, 3.593, 4.074, 4.475, 3.498, 3.572, 2.025, 1.965, 1.609, 1.176, 1.823, 0.176, 0.096, 0.509, -0.789, 0.474, 0.809, -0.595, 0.707, 4.264, 4.364, 4.809, 4.697, 5.561, 6.220, 6.156, 4.659, 4.746, 3.786, 3.770, 2.851, 2.368, 1.785, 1.177, 1.165, 2.360, 1.690, 3.546, 3.804, 3.814, 3.563, 4.442, 4.984, 5.411, 6.192, 4.872, 6.068, 6.868, 5.332, 6.747, 6.155, 5.409, 6.977, 5.721, 3.369, 2.255, 3.703, 4.604, 2.753, 1.851, 3.329, 4.182, 3.644, 2.319, 1.992, 1.854, 2.419, 1.251, 3.451, 4.359, 3.267, 2.246, 4.223, 4.054, 4.040, 5.573, 6.142, 3.488, 4.276, 2.795, 1.828, 2.929, 2.810, 1.772, 0.912, 2.067, 1.505, 0.464, 2.138, 0.938, 2.273, 4.268, 4.585, 5.076, 4.776, 6.392, 6.925, 7.120, 7.968, 7.464, 6.130, 6.384, 6.135, 4.210, 4.246, 6.325, 5.263, 7.477, 8.281, 7.587, 7.039, 9.047, 9.133, 9.654, 9.590, 10.670, 9.215, 9.190, 10.055, 8.012, 7.007, 7.361, 6.144, 5.925, 5.555, 6.329, 4.814, 4.894, 4.761]
3781 y = [10.188, 9.889, 9.712, 10.745, 8.674, 7.991, 10.291, 11.073, 9.416, 8.385, 9.152, 7.243, 6.302, 7.443, 6.483, 7.963, 8.253, 7.605, 8.842, 9.327, 10.088, 7.251, 8.285, 6.099, 5.309, 5.986, 4.953, 6.396, 7.471, 6.106, 5.775, 5.225, 4.796, 4.954, 3.787, 4.949, 6.853, 7.828, 6.775, 6.720, 6.853, 8.068, 6.222, 5.251, 6.956, 6.273, 7.706, 7.634, 8.841, 6.847, 5.889, 7.360, 6.511, 8.230, 7.620, 8.669, 9.269, 9.652, 8.174, 9.362, 7.546, 6.604, 8.253, 9.095, 7.354, 7.976, 6.886, 6.258, 5.824, 5.499, 6.846, 5.570, 5.985, 5.190, 4.766, 8.771, 8.245, 9.789, 10.161, 10.351, 10.605, 11.610, 11.341, 12.287, 12.322, 11.787, 13.410, 9.322, 9.015, 8.776, 9.052, 7.758, 7.826, 7.990, 8.977, 7.248, 7.894, 8.285, 6.370, 6.214, 5.342, 5.431, 3.973, 3.943, 3.230, 3.234, 2.212, 3.991, 3.892, 3.624, 5.960, 5.908, 3.339, 3.179, 2.980, 3.150, 2.375, 2.876, 2.616, 3.262, 1.675, 3.264, 4.305, 2.758, 4.055, 2.299, 0.876, 0.258, 0.312, 0.871, -1.106, -1.253, -1.489, -2.564, -1.049, -1.041, -1.011, -0.052, -1.970, -2.740, -1.931, -2.037, -1.962, -2.949, -2.983, -3.917, -4.588, -4.488, -3.289, -3.932]
3782 z = [6.302, 7.391, 8.306, 7.526, 7.089, 6.087, 6.697, 5.822, 5.604, 7.943, 9.155, 7.752, 7.908, 8.829, 9.212, 8.407, 9.880, 10.560, 10.415, 9.754, 8.900, 6.374, 5.909, 5.719, 6.139, 4.391, 4.081, 4.415, 4.326, 5.367, 3.307, 2.640, 3.889, 4.956, 3.700, 3.430, 2.493, 2.814, 2.633, 1.449, 3.403, 3.572, 2.369, 2.281, 1.371, 0.855, 1.868, 0.359, 0.149, -0.269, -0.055, -1.268, -1.726, -0.608, 0.037, -1.377, 0.162, 0.731, -2.354, -2.175, -3.496, -3.603, -4.606, -4.199, -5.387, -5.803, -6.196, -4.563, -5.146, -4.350, -3.001, -1.895, -1.241, -1.307, -2.472, -5.551, -5.582, -6.328, -6.269, -7.274, -6.735, -7.913, -8.518, -7.133, -8.791, -9.871, -8.395, -8.346, -8.584, -8.977, -8.732, -10.002, -10.355, -11.174, -11.584, -11.936, -10.759, -11.425, -9.403, -8.469, -9.921, -11.030, -9.410, -8.336, -10.080, -9.428, -10.291, -11.333, -11.606, -12.128, -10.723, -11.893, -9.781, -10.959, -8.768, -7.344, -8.971, -9.765, -7.642, -7.816, -7.251, -6.715, -6.584, -5.765, -7.175, -6.955, -9.288, -9.222, -9.654, -9.696, -10.009, -10.928, -10.249, -10.194, -9.475, -11.596, -11.540, -11.813, -12.724, -13.193, -13.137, -8.947, -7.774, -9.383, -10.338, -8.477, -8.138, -9.017, -7.265, -6.226]
3783
3784
3785 mol = cdp.structure.structural_data[0].mol[0]
3786 for i in range(len(mol.atom_name)):
3787 self.assertEqual(mol.atom_name[i], atom_name[i])
3788 self.assertEqual(mol.bonded[i], bonded[i])
3789 self.assertEqual(mol.chain_id[i], chain_id[i])
3790 self.assertEqual(mol.element[i], element[i])
3791 self.assertEqual(mol.pdb_record[i], pdb_record[i])
3792 self.assertEqual(mol.res_name[i], res_name[i])
3793 self.assertEqual(mol.res_num[i], res_num[i])
3794 self.assertEqual(mol.seg_id[i], seg_id[i])
3795 self.assertEqual(mol.x[i], x[i])
3796 self.assertEqual(mol.y[i], y[i])
3797 self.assertEqual(mol.z[i], z[i])
3798
3799
3801 """Load the PDB file using the information in a results file (using the internal structural object)."""
3802
3803
3804 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
3805
3806
3807 self.interpreter.results.read(file=path+sep+'str_internal')
3808
3809
3811 """Test the loading of spins from different molecules into one molecule container."""
3812
3813
3814 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'+sep+'lactose'
3815
3816
3817 self.interpreter.structure.read_pdb(file='lactose_MCMM4_S1_1.pdb', dir=path, set_mol_name='L1')
3818 self.interpreter.structure.read_pdb(file='lactose_MCMM4_S1_2.pdb', dir=path, set_mol_name='L2')
3819
3820
3821 self.interpreter.structure.load_spins('#L1:900@C1', mol_name_target='Lactose')
3822 self.interpreter.structure.load_spins('#L2:900@C2', mol_name_target='Lactose')
3823
3824
3825 self.assertEqual(len(cdp.mol), 1)
3826 self.assertEqual(cdp.mol[0].name, 'Lactose')
3827 self.assertEqual(len(cdp.mol[0].res), 1)
3828 self.assertEqual(cdp.mol[0].res[0].name, 'UNK')
3829 self.assertEqual(cdp.mol[0].res[0].num, 900)
3830 self.assertEqual(len(cdp.mol[0].res[0].spin), 2)
3831 self.assertEqual(cdp.mol[0].res[0].spin[0].name, 'C1')
3832 self.assertEqual(cdp.mol[0].res[0].spin[0].num, 1)
3833 self.assertEqual(cdp.mol[0].res[0].spin[1].name, 'C2')
3834 self.assertEqual(cdp.mol[0].res[0].spin[1].num, 2)
3835
3836
3838 """Test the structure.load_spins user function for loading the same spins from multiple molecules."""
3839
3840
3841 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'+sep+'lactose'
3842
3843
3844 self.interpreter.structure.read_pdb(file='lactose_MCMM4_S1_1.pdb', dir=path, set_mol_name='L1')
3845 self.interpreter.structure.read_pdb(file='lactose_MCMM4_S1_2.pdb', dir=path, set_mol_name='L2')
3846
3847
3848 self.interpreter.structure.delete(atom_id='#L2:900@C1')
3849 self.interpreter.structure.delete(atom_id='#L1:900@C3')
3850
3851
3852 for i in range(len(cdp.structure.structural_data[0].mol[1].atom_num)):
3853 cdp.structure.structural_data[0].mol[1].atom_num[i] = i + 104
3854
3855
3856 self.interpreter.structure.load_spins(':900@C1,C2,C3', from_mols=['L1', 'L2'], mol_name_target='Lactose')
3857
3858
3859 self.assertEqual(len(cdp.mol), 1)
3860 self.assertEqual(cdp.mol[0].name, 'Lactose')
3861 self.assertEqual(len(cdp.mol[0].res), 1)
3862 self.assertEqual(cdp.mol[0].res[0].name, 'UNK')
3863 self.assertEqual(cdp.mol[0].res[0].num, 900)
3864 self.assertEqual(len(cdp.mol[0].res[0].spin), 3)
3865
3866
3867 self.assertEqual(cdp.mol[0].res[0].spin[0].name, 'C1')
3868 self.assertEqual(cdp.mol[0].res[0].spin[0].num, None)
3869 self.assertEqual(len(cdp.mol[0].res[0].spin[0].pos), 2)
3870 self.assertEqual(cdp.mol[0].res[0].spin[0].pos[0][0], 6.250)
3871 self.assertEqual(cdp.mol[0].res[0].spin[0].pos[0][1], 0.948)
3872 self.assertEqual(cdp.mol[0].res[0].spin[0].pos[0][2], 1.968)
3873 self.assertEqual(cdp.mol[0].res[0].spin[0].pos[1], None)
3874
3875
3876 self.assertEqual(cdp.mol[0].res[0].spin[1].name, 'C2')
3877 self.assertEqual(cdp.mol[0].res[0].spin[1].num, None)
3878 self.assertEqual(len(cdp.mol[0].res[0].spin[1].pos), 2)
3879 self.assertEqual(cdp.mol[0].res[0].spin[1].pos[0][0], 6.250)
3880 self.assertEqual(cdp.mol[0].res[0].spin[1].pos[0][1], 2.488)
3881 self.assertEqual(cdp.mol[0].res[0].spin[1].pos[0][2], 2.102)
3882 self.assertEqual(cdp.mol[0].res[0].spin[1].pos[1][0], 6.824)
3883 self.assertEqual(cdp.mol[0].res[0].spin[1].pos[1][1], 0.916)
3884 self.assertEqual(cdp.mol[0].res[0].spin[1].pos[1][2], 2.283)
3885
3886
3887 self.assertEqual(cdp.mol[0].res[0].spin[2].name, 'C3')
3888 self.assertEqual(cdp.mol[0].res[0].spin[2].num, None)
3889 self.assertEqual(len(cdp.mol[0].res[0].spin[2].pos), 2)
3890 self.assertEqual(cdp.mol[0].res[0].spin[2].pos[0], None)
3891 self.assertEqual(cdp.mol[0].res[0].spin[2].pos[1][0], 8.062)
3892 self.assertEqual(cdp.mol[0].res[0].spin[2].pos[1][1], 0.431)
3893 self.assertEqual(cdp.mol[0].res[0].spin[2].pos[1][2], 3.048)
3894
3895
3897 """Test the U{structure.mean user function<http://www.nmr-relax.com/manual/structure_mean.html>}."""
3898
3899
3900 self.interpreter.structure.add_model(model_num=1)
3901 self.interpreter.structure.add_model(model_num=2)
3902
3903
3904 self.interpreter.structure.add_atom(atom_name='N', res_name='Tyr', res_num=2, pos=[[0., 0., 0.], [1., 2., -2.]], element='N')
3905 self.interpreter.structure.add_atom(atom_name='N', res_name='Phe', res_num=3, pos=[[-1., -2., 2.], [1., 2., -2.]], element='N')
3906
3907
3908 self.interpreter.structure.mean()
3909
3910
3911 self.assertEqual(len(cdp.structure.structural_data), 1)
3912 self.assertEqual(len(cdp.structure.structural_data[0].mol), 1)
3913 self.assertEqual(cdp.structure.structural_data[0].num, None)
3914 mol = cdp.structure.structural_data[0].mol[0]
3915 self.assertEqual(len(mol.atom_name), 2)
3916 self.assertEqual(mol.atom_name, ['N', 'N'])
3917 self.assertEqual(mol.atom_num, [None, None])
3918 self.assertEqual(mol.bonded, [[], []])
3919 self.assertEqual(mol.chain_id, [None, None])
3920 self.assertEqual(mol.element, ['N', 'N'])
3921 self.assertEqual(mol.pdb_record, [None, None])
3922 self.assertEqual(mol.res_name, ['Tyr', 'Phe'])
3923 self.assertEqual(mol.res_num, [2, 3])
3924 self.assertEqual(mol.seg_id, [None, None])
3925 self.assertEqual(mol.x, [0.5, 0.0])
3926 self.assertEqual(mol.y, [1.0, 0.0])
3927 self.assertEqual(mol.z, [-1.0, 0.0])
3928
3929
3931 """Test the structure.mean user function for different models.
3932
3933 This checks the molecules argument of the U{structure.mean user function<http://www.nmr-relax.com/manual/structure_mean.html>}.
3934 """
3935
3936
3937 self.interpreter.structure.add_model(model_num=1)
3938 self.interpreter.structure.add_model(model_num=2)
3939 self.interpreter.structure.add_model(model_num=4)
3940
3941
3942 self.assert_(hasattr(cdp, 'structure'))
3943 self.assert_(hasattr(cdp.structure, 'structural_data'))
3944 self.assertEqual(len(cdp.structure.structural_data), 3)
3945
3946
3947 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=1, pos=[[1., 0., -1.], [0., 0., 0.], [-1., 0., 1.]], element='S')
3948 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=2, pos=[[1., 2., -1.], [0., 2., 0.], [-1., 2., 1.]], element='S')
3949 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=3, pos=[[1., 20., -1.], [0., 20., 0.], [-1., 20., 1.]], element='S')
3950
3951
3952 self.interpreter.structure.mean(models=[[1, 2, 4]], set_model_num=3)
3953
3954
3955 model_num = [1, 2, 4, 3]
3956 x = [
3957 [1., 1., 1.],
3958 [0., 0., 0.],
3959 [-1., -1., -1.],
3960 [0., 0., 0.]
3961 ]
3962 y = [0., 2., 20.]
3963 z = [
3964 [-1., -1., -1.],
3965 [0., 0., 0.],
3966 [1., 1., 1.],
3967 [0., 0., 0.]
3968 ]
3969
3970
3971 self.assertEqual(len(cdp.structure.structural_data), 4)
3972 for i in range(4):
3973 self.assertEqual(len(cdp.structure.structural_data[i].mol), 1)
3974 self.assertEqual(cdp.structure.structural_data[i].num, model_num[i])
3975 self.assertEqual(cdp.structure.structural_data[i].mol[0].atom_num, [None, None, None])
3976 self.assertEqual(cdp.structure.structural_data[i].mol[0].atom_name, ['A', 'A', 'A'])
3977 self.assertEqual(cdp.structure.structural_data[i].mol[0].bonded, [[], [], []])
3978 self.assertEqual(cdp.structure.structural_data[i].mol[0].chain_id, [None, None, None])
3979 self.assertEqual(cdp.structure.structural_data[i].mol[0].element, ['S', 'S', 'S'])
3980 self.assertEqual(cdp.structure.structural_data[i].mol[0].pdb_record, [None, None, None])
3981 self.assertEqual(cdp.structure.structural_data[i].mol[0].res_name, ['UNK', 'UNK', 'UNK'])
3982 self.assertEqual(cdp.structure.structural_data[i].mol[0].res_num, [1, 2, 3])
3983 self.assertEqual(cdp.structure.structural_data[i].mol[0].seg_id, [None, None, None])
3984 self.assertEqual(cdp.structure.structural_data[i].mol[0].x, x[i])
3985 self.assertEqual(cdp.structure.structural_data[i].mol[0].y, y)
3986 self.assertEqual(cdp.structure.structural_data[i].mol[0].z, z[i])
3987
3988
3990 """Test the structure.mean user function for different molecules in one pipe.
3991
3992 This checks the molecules argument of the U{structure.mean user function<http://www.nmr-relax.com/manual/structure_mean.html>}.
3993 """
3994
3995
3996 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=1, mol_name='X', pos=[1., 0., -1.], element='S')
3997 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=1, mol_name='Y', pos=[0., 0., 0.], element='S')
3998 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=1, mol_name='Z', pos=[-1., 0., 1.], element='S')
3999 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=2, mol_name='X', pos=[1., 2., -1.], element='S')
4000 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=2, mol_name='Y', pos=[0., 2., 0.], element='S')
4001 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=2, mol_name='Z', pos=[-1., 2., 1.], element='S')
4002 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=3, mol_name='X', pos=[1., 20., -1.], element='S')
4003 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=3, mol_name='Y', pos=[0., 20., 0.], element='S')
4004 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=3, mol_name='Z', pos=[-1., 20., 1.], element='S')
4005
4006
4007 self.interpreter.structure.mean(molecules=[['X', 'Y', 'Z']], set_mol_name='A')
4008
4009
4010 mol_name = ['X', 'Y', 'Z', 'A']
4011 x = [
4012 [1., 1., 1.],
4013 [0., 0., 0.],
4014 [-1., -1., -1.],
4015 [0., 0., 0.]
4016 ]
4017 y = [0., 2., 20.]
4018 z = [
4019 [-1., -1., -1.],
4020 [0., 0., 0.],
4021 [1., 1., 1.],
4022 [0., 0., 0.]
4023 ]
4024
4025
4026 self.assertEqual(len(cdp.structure.structural_data), 1)
4027 for i in range(4):
4028 self.assertEqual(len(cdp.structure.structural_data[0].mol), 4)
4029 self.assertEqual(cdp.structure.structural_data[0].mol[i].mol_name, mol_name[i])
4030 self.assertEqual(cdp.structure.structural_data[0].mol[i].atom_num, [None, None, None])
4031 self.assertEqual(cdp.structure.structural_data[0].mol[i].atom_name, ['A', 'A', 'A'])
4032 self.assertEqual(cdp.structure.structural_data[0].mol[i].bonded, [[], [], []])
4033 self.assertEqual(cdp.structure.structural_data[0].mol[i].chain_id, [None, None, None])
4034 self.assertEqual(cdp.structure.structural_data[0].mol[i].element, ['S', 'S', 'S'])
4035 self.assertEqual(cdp.structure.structural_data[0].mol[i].pdb_record, [None, None, None])
4036 self.assertEqual(cdp.structure.structural_data[0].mol[i].res_name, ['UNK', 'UNK', 'UNK'])
4037 self.assertEqual(cdp.structure.structural_data[0].mol[i].res_num, [1, 2, 3])
4038 self.assertEqual(cdp.structure.structural_data[0].mol[i].seg_id, [None, None, None])
4039 self.assertEqual(cdp.structure.structural_data[0].mol[i].x, x[i])
4040 self.assertEqual(cdp.structure.structural_data[0].mol[i].y, y)
4041 self.assertEqual(cdp.structure.structural_data[0].mol[i].z, z[i])
4042
4043
4084
4085
4087 """Test the loading and writing of a multi-model and multi-molecule PDB file."""
4088
4089
4090 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
4091
4092
4093 self.interpreter.structure.read_pdb('multi_model_and_mol_test.pdb', dir=path)
4094
4095
4096 cdp.structure.validate_models()
4097
4098
4099 file = DummyFileObject()
4100 self.interpreter.structure.write_pdb(file=file, force=True)
4101
4102
4103 contents = [
4104 "MODEL 1 \n",
4105 "ATOM 1 N LEU A 1 1.000 -2.000 20.000 1.00 0.00 N \n",
4106 "ATOM 2 H LEU A 1 2.000 -2.000 20.000 1.00 0.00 H \n",
4107 "TER 3 LEU A 1 \n",
4108 "ATOM 4 N LEU B 1 9.000 -9.000 27.000 1.00 0.00 N \n",
4109 "ATOM 5 H LEU B 1 8.000 -8.000 27.000 1.00 0.00 H \n",
4110 "TER 6 LEU B 1 \n",
4111 "ATOM 7 N LEU C 1 12.000 -12.000 7.000 1.00 0.00 N \n",
4112 "ATOM 8 H LEU C 1 11.000 -12.000 7.000 1.00 0.00 H \n",
4113 "TER 9 LEU C 1 \n",
4114 "ENDMDL \n",
4115 "MODEL 2 \n",
4116 "ATOM 1 N LEU A 1 1.000 -2.000 20.000 1.00 0.00 N \n",
4117 "ATOM 2 H LEU A 1 2.000 -2.000 20.000 1.00 0.00 H \n",
4118 "TER 3 LEU A 1 \n",
4119 "ATOM 4 N LEU B 1 9.000 -9.000 27.000 1.00 0.00 N \n",
4120 "ATOM 5 H LEU B 1 8.000 -8.000 27.000 1.00 0.00 H \n",
4121 "TER 6 LEU B 1 \n",
4122 "ATOM 7 N LEU C 1 12.000 -12.000 7.000 1.00 0.00 N \n",
4123 "ATOM 8 H LEU C 1 11.000 -12.000 7.000 1.00 0.00 H \n",
4124 "TER 9 LEU C 1 \n",
4125 "ENDMDL \n",
4126 "MASTER 0 0 0 0 0 0 0 0 6 3 0 0 \n",
4127 "END \n"
4128 ]
4129
4130
4131 lines = file.readlines()
4132 self.strip_remarks(lines)
4133 self.assertEqual(len(contents), len(lines))
4134 for i in range(len(lines)):
4135 self.assertEqual(contents[i], lines[i])
4136
4137
4139 """Test the handling of secondary structure metadata when combining multiple PDB structures."""
4140
4141
4142 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
4143
4144
4145 self.interpreter.structure.read_pdb('1J7O.pdb', dir=path, set_mol_name='N-dom', read_model=1, set_model_num=1)
4146 self.interpreter.structure.read_pdb('1J7P.pdb', dir=path, set_mol_name='C-dom', read_model=1, set_model_num=1)
4147
4148
4149 file = DummyFileObject()
4150 self.interpreter.structure.write_pdb(file=file, force=True)
4151
4152
4153 contents = [
4154 "HELIX 1 1 THR A 5 ASP A 20 1 16 \n",
4155 "HELIX 2 2 THR A 28 LEU A 39 1 12 \n",
4156 "HELIX 3 3 THR A 44 GLU A 54 1 11 \n",
4157 "HELIX 4 4 ASP A 64 MET A 76 1 13 \n",
4158 "HELIX 5 1 GLU B 82 ASP B 93 1 12 \n",
4159 "HELIX 6 2 SER B 101 LEU B 112 1 12 \n",
4160 "HELIX 7 3 THR B 117 ASP B 129 1 13 \n",
4161 "HELIX 8 4 TYR B 138 THR B 146 1 9 \n",
4162 "SHEET 1 A 2 TYR B 99 ILE B 100 0 \n",
4163 "SHEET 2 A 2 VAL B 136 ASN B 137 -1 O VAL B 136 N ILE B 100 \n"
4164 ]
4165
4166
4167 lines = file.readlines()
4168 index = 0
4169 print("\n\nChecking the records:\n")
4170 for i in range(len(lines)):
4171
4172 if lines[i][:5] not in ['HELIX', 'SHEET']:
4173 continue
4174
4175
4176 print(lines[i][:-1])
4177 self.assertEqual(contents[index], lines[i])
4178 index += 1
4179
4180
4182 """Load the structure from the 'strychnine_opt_cdcl3_b3lyp_gaussian.log.bz2' compressed Gaussian log file."""
4183
4184
4185 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
4186
4187
4188 self.interpreter.structure.read_gaussian(file='strychnine_opt_cdcl3_b3lyp_gaussian.log.bz2', dir=path, set_mol_name='strychnine')
4189
4190
4191 self.assertEqual(len(cdp.structure.structural_data), 1)
4192 self.assertEqual(len(cdp.structure.structural_data[0].mol), 1)
4193
4194
4195 self.interpreter.structure.load_spins('@C')
4196 self.assertEqual(count_spins(), 21)
4197
4198
4199 self.interpreter.structure.load_spins('@H')
4200 self.assertEqual(count_spins(), 43)
4201
4202
4203 self.interpreter.structure.load_spins()
4204
4205
4206 data = [
4207 [ 5, 'C', -0.258837, -2.073956, -0.558021],
4208 [ 6, 'C', -0.824223, -1.406962, -1.808433],
4209 [ 7, 'C', -1.741283, -0.250780, -1.378644],
4210 [ 8, 'C', -0.819735, 0.828965, -0.783392],
4211 [ 9, 'C', 0.003153, 0.334416, 0.415455],
4212 [10, 'C', 2.358372, 0.448322, 0.162421],
4213 [11, 'C', 3.667689, 0.888405, -0.010558],
4214 [12, 'C', 4.632616, -0.056196, -0.360560],
4215 [13, 'C', 4.303015, -1.398582, -0.525823],
4216 [14, 'C', 2.988069, -1.825141, -0.331972],
4217 [15, 'C', 2.015427, -0.899636, 0.012625],
4218 [16, 'C', 0.561728, -1.122705, 0.360284],
4219 [17, 'C', 0.390886, -1.834862, 1.723978],
4220 [18, 'C', -1.067936, -2.282629, 1.709808],
4221 [19, 'C', -2.708975, -2.252045, -0.131301],
4222 [20, 'C', -2.815469, -0.775379, -0.431910],
4223 [21, 'C', -3.718174, 0.023460, 0.134879],
4224 [22, 'C', -3.726395, 1.516213, -0.058936],
4225 [23, 'C', -1.423939, 2.193179, -0.407936],
4226 [24, 'C', -0.372897, 3.059448, 0.332496],
4227 [25, 'C', 1.064718, 2.558120, 0.325331],
4228 [26, 'H', 0.399932, -2.896344, -0.855386],
4229 [27, 'H', -1.364146, -2.140645, -2.409934],
4230 [28, 'H', -0.007016, -1.035292, -2.430851],
4231 [29, 'H', -2.229948, 0.177326, -2.261725],
4232 [30, 'H', -0.101863, 1.055799, -1.581061],
4233 [31, 'H', -0.582210, 0.470722, 1.326014],
4234 [32, 'H', 3.918694, 1.929549, 0.116264],
4235 [33, 'H', 5.656588, 0.267474, -0.505165],
4236 [34, 'H', 5.068478, -2.115052, -0.797816],
4237 [35, 'H', 2.736463, -2.873299, -0.445917],
4238 [36, 'H', 1.059165, -2.698455, 1.760657],
4239 [37, 'H', 0.631843, -1.189746, 2.570301],
4240 [38, 'H', -1.243126, -3.142405, 2.361743],
4241 [39, 'H', -1.719677, -1.470258, 2.058429],
4242 [40, 'H', -3.410692, -2.541912, 0.651788],
4243 [41, 'H', -2.971493, -2.840572, -1.016009],
4244 [42, 'H', -4.455619, -0.395106, 0.813636],
4245 [43, 'H', -3.834304, 1.785629, -1.118252],
4246 [44, 'H', -4.559845, 1.966160, 0.480526],
4247 [45, 'H', -1.736135, 2.699031, -1.329897],
4248 [46, 'H', -0.354638, 4.078330, -0.048526],
4249 [47, 'H', -0.690723, 3.116119, 1.378208],
4250 [ 1, 'O', -2.547545, 2.139059, 0.472310],
4251 [ 2, 'O', 2.015408, 3.324289, 0.213156],
4252 [ 3, 'N', 1.207610, 1.203922, 0.478894],
4253 [ 4, 'N', -1.350394, -2.624460, 0.301178]
4254 ]
4255
4256
4257 i = 0
4258 for spin in spin_loop():
4259 self.assertEqual(spin.num, data[i][0])
4260 self.assertEqual(spin.name, data[i][1])
4261 self.assertEqual(spin.element, data[i][1])
4262 self.assertEqual(spin.pos[0], data[i][2])
4263 self.assertEqual(spin.pos[1], data[i][3])
4264 self.assertEqual(spin.pos[2], data[i][4])
4265
4266
4267 i += 1
4268
4269
4271 """Test the merging of two molecules into one."""
4272
4273
4274 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
4275
4276
4277 self.interpreter.structure.read_pdb(file='Ap4Aase_res1-6.pdb', dir=path, set_mol_name='Ap4Aase', set_model_num=1)
4278 self.interpreter.structure.read_pdb(file='Ap4Aase_res7-12.pdb', dir=path, set_mol_name='Ap4Aase', set_model_num=1, merge=True)
4279 self.interpreter.structure.read_pdb(file='Ap4Aase_res1-12.pdb', dir=path, set_mol_name='Ap4Aase', set_model_num=2)
4280
4281
4282 cdp.structure.validate_models()
4283
4284
4286 """Test the simultaneous merging of two molecules into one."""
4287
4288
4289 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
4290
4291
4292 self.interpreter.structure.read_pdb(file='2BE6_core_I_IV.pdb', dir=path, read_mol=[1, 3], set_mol_name='CaM A')
4293
4294
4295 cdp.structure.validate_models()
4296
4297
4299 """Test the reading of a file by structure.read_pdb that is not a PDB."""
4300
4301
4302 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'saved_states'
4303
4304
4305 self.interpreter.structure.read_pdb(file='basic_single_pipe.bz2', dir=path)
4306
4307
4309 """Test the reading of the complete 1UBQ PDB file."""
4310
4311
4312 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
4313 self.interpreter.structure.read_pdb('1UBQ.pdb', dir=path)
4314
4315
4316 self.assert_(hasattr(cdp, 'structure'))
4317 self.assert_(hasattr(cdp.structure, 'structural_data'))
4318 self.assertEqual(len(cdp.structure.structural_data), 1)
4319 self.assertEqual(len(cdp.structure.structural_data[0].mol), 1)
4320
4321
4322 self.assertEqual(cdp.structure.structural_data[0].mol[0].atom_num[0], 1)
4323 self.assertEqual(cdp.structure.structural_data[0].mol[0].atom_name[0], 'N')
4324 self.assertEqual(cdp.structure.structural_data[0].mol[0].chain_id[0], 'A')
4325 self.assertEqual(cdp.structure.structural_data[0].mol[0].res_name[0], 'MET')
4326 self.assertEqual(cdp.structure.structural_data[0].mol[0].res_num[0], 1)
4327 self.assertEqual(cdp.structure.structural_data[0].mol[0].x[0], 27.340)
4328 self.assertEqual(cdp.structure.structural_data[0].mol[0].y[0], 24.430)
4329 self.assertEqual(cdp.structure.structural_data[0].mol[0].z[0], 2.614)
4330 self.assertEqual(cdp.structure.structural_data[0].mol[0].element[0], 'N')
4331
4332
4333 self.assertEqual(cdp.structure.structural_data[0].mol[0].atom_num[-1], 602)
4334 self.assertEqual(cdp.structure.structural_data[0].mol[0].atom_name[-1], 'OXT')
4335 self.assertEqual(cdp.structure.structural_data[0].mol[0].chain_id[-1], 'A')
4336 self.assertEqual(cdp.structure.structural_data[0].mol[0].res_name[-1], 'GLY')
4337 self.assertEqual(cdp.structure.structural_data[0].mol[0].res_num[-1], 76)
4338 self.assertEqual(cdp.structure.structural_data[0].mol[0].x[-1], 40.862)
4339 self.assertEqual(cdp.structure.structural_data[0].mol[0].y[-1], 39.575)
4340 self.assertEqual(cdp.structure.structural_data[0].mol[0].z[-1], 36.251)
4341 self.assertEqual(cdp.structure.structural_data[0].mol[0].element[-1], 'O')
4342
4343
4345 """Test the packing of models and molecules using 'gromacs.pdb' and 'lactose_MCMM4_S1_*.pdb' (using the internal structural object PDB reader)."""
4346
4347
4348 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
4349
4350
4351 self.interpreter.structure.read_pdb(file='gromacs.pdb', dir=path+sep+'phthalic_acid')
4352 self.interpreter.structure.read_pdb(file='lactose'+sep+'lactose_MCMM4_S1_1.pdb', dir=path, set_model_num=1, set_mol_name='lactose_MCMM4_S1')
4353 self.interpreter.structure.read_pdb(file='lactose'+sep+'lactose_MCMM4_S1_2.pdb', dir=path, set_model_num=2, set_mol_name='lactose_MCMM4_S1')
4354 self.interpreter.structure.read_pdb(file='lactose'+sep+'lactose_MCMM4_S1_3.pdb', dir=path, set_model_num=1, set_mol_name='lactose_MCMM4_S1b')
4355 self.interpreter.structure.read_pdb(file='lactose'+sep+'lactose_MCMM4_S1_4.pdb', dir=path, set_model_num=2, set_mol_name='lactose_MCMM4_S1b')
4356
4357
4358 self.interpreter.structure.load_spins('@*H*')
4359
4360
4361 self.interpreter.structure.load_spins()
4362
4363
4364 self.assert_(hasattr(cdp, 'structure'))
4365 self.assert_(hasattr(cdp.structure, 'structural_data'))
4366 self.assertEqual(len(cdp.structure.structural_data), 2)
4367 self.assertEqual(len(cdp.structure.structural_data[0].mol), 3)
4368 self.assertEqual(len(cdp.structure.structural_data[1].mol), 3)
4369
4370 files = [['gromacs.pdb', 'lactose_MCMM4_S1_1.pdb', 'lactose_MCMM4_S1_3.pdb'],
4371 ['gromacs.pdb', 'lactose_MCMM4_S1_2.pdb', 'lactose_MCMM4_S1_4.pdb']]
4372 paths = [[path+sep+'phthalic_acid', path+sep+'lactose', path+sep+'lactose'],
4373 [path+sep+'phthalic_acid', path+sep+'lactose', path+sep+'lactose']]
4374 models = [[1, 1, 1], [2, 1, 1]]
4375
4376 for i in range(len(cdp.structure.structural_data)):
4377 for j in range(len(cdp.structure.structural_data[i].mol)):
4378 mol = cdp.structure.structural_data[i].mol[j]
4379 self.assertEqual(mol.file_name, files[i][j])
4380 self.assertEqual(mol.file_path, paths[i][j])
4381 self.assertEqual(mol.file_model, models[i][j])
4382 self.assertEqual(mol.file_mol_num, 1)
4383
4384
4412
4413
4428
4429
4447
4448
4463
4464
4479
4480
4496
4497
4513
4514
4516 """Load the 2 models of the 'gromacs.pdb' PDB file as separate molecules of the same model (using the internal structural object PDB reader)."""
4517
4518
4519 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'+sep+'phthalic_acid'
4520
4521
4522 self.interpreter.structure.read_pdb(file='gromacs.pdb', dir=path, read_model=1, set_model_num=1)
4523 self.interpreter.structure.read_pdb(file='gromacs.pdb', dir=path, read_model=2, set_model_num=1)
4524
4525
4526 self.interpreter.structure.load_spins('@*H*')
4527
4528
4529 self.interpreter.structure.load_spins()
4530
4531
4532 self.assert_(hasattr(cdp, 'structure'))
4533 self.assert_(hasattr(cdp.structure, 'structural_data'))
4534 self.assertEqual(len(cdp.structure.structural_data), 1)
4535 self.assertEqual(len(cdp.structure.structural_data[0].mol), 2)
4536
4537 i = 0
4538 for mol in cdp.structure.structural_data[0].mol:
4539 self.assertEqual(mol.file_name, 'gromacs.pdb')
4540 self.assertEqual(mol.file_path, path)
4541 self.assertEqual(mol.file_model, i+1)
4542 self.assertEqual(mol.file_mol_num, 1)
4543 i = i + 1
4544
4545
4547 """Load a few 'lactose_MCMM4_S1_*.pdb' PDB files as models (using the internal structural object PDB reader)."""
4548
4549
4550 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'+sep+'lactose'
4551
4552
4553 files = ['lactose_MCMM4_S1_1.pdb',
4554 'lactose_MCMM4_S1_2.pdb',
4555 'lactose_MCMM4_S1_3.pdb']
4556
4557
4558 self.interpreter.structure.read_pdb(file=files[0], dir=path, set_model_num=1)
4559 self.interpreter.structure.read_pdb(file=files[1], dir=path, set_model_num=1)
4560 self.interpreter.structure.read_pdb(file=files[2], dir=path, set_model_num=1)
4561
4562
4563 self.interpreter.structure.load_spins('@*H*')
4564
4565
4566 self.interpreter.structure.load_spins()
4567
4568
4569 self.assert_(hasattr(cdp, 'structure'))
4570 self.assert_(hasattr(cdp.structure, 'structural_data'))
4571 self.assertEqual(len(cdp.structure.structural_data), 1)
4572 self.assertEqual(len(cdp.structure.structural_data[0].mol), 3)
4573
4574 i = 0
4575 for mol in cdp.structure.structural_data[0].mol:
4576 self.assertEqual(mol.file_name, files[i])
4577 self.assertEqual(mol.file_path, path)
4578 self.assertEqual(mol.file_model, 1)
4579 self.assertEqual(mol.file_mol_num, 1)
4580 i = i + 1
4581
4582
4584 """Test the reading and writing of the 1UBQ PDB file."""
4585
4586
4587 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
4588 self.interpreter.structure.read_pdb('1UBQ.pdb', dir=path)
4589
4590
4591 self.interpreter.structure.delete(":35-76")
4592
4593
4594 self.interpreter.structure.delete(":HOH")
4595
4596
4597 self.tmpfile = mktemp() + '.pdb'
4598 self.interpreter.structure.write_pdb(self.tmpfile)
4599
4600
4601 file = open(self.tmpfile)
4602 lines = file.readlines()
4603 file.close()
4604
4605
4606 real_data = [
4607 "HELIX 1 H1 ILE A 23 GLU A 34 1 12 \n",
4608 "SHEET 1 BET 5 GLY A 10 VAL A 17 0 \n",
4609 "SHEET 2 BET 5 MET A 1 THR A 7 -1 \n",
4610 "ATOM 1 N MET A 1 27.340 24.430 2.614 1.00 0.00 N \n",
4611 "ATOM 2 CA MET A 1 26.266 25.413 2.842 1.00 0.00 C \n",
4612 "ATOM 3 C MET A 1 26.913 26.639 3.531 1.00 0.00 C \n",
4613 "ATOM 4 O MET A 1 27.886 26.463 4.263 1.00 0.00 O \n",
4614 "ATOM 5 CB MET A 1 25.112 24.880 3.649 1.00 0.00 C \n",
4615 "ATOM 6 CG MET A 1 25.353 24.860 5.134 1.00 0.00 C \n",
4616 "ATOM 7 SD MET A 1 23.930 23.959 5.904 1.00 0.00 S \n",
4617 "ATOM 8 CE MET A 1 24.447 23.984 7.620 1.00 0.00 C \n",
4618 "ATOM 9 N GLN A 2 26.335 27.770 3.258 1.00 0.00 N \n",
4619 "ATOM 10 CA GLN A 2 26.850 29.021 3.898 1.00 0.00 C \n",
4620 "ATOM 11 C GLN A 2 26.100 29.253 5.202 1.00 0.00 C \n",
4621 "ATOM 12 O GLN A 2 24.865 29.024 5.330 1.00 0.00 O \n",
4622 "ATOM 13 CB GLN A 2 26.733 30.148 2.905 1.00 0.00 C \n",
4623 "ATOM 14 CG GLN A 2 26.882 31.546 3.409 1.00 0.00 C \n",
4624 "ATOM 15 CD GLN A 2 26.786 32.562 2.270 1.00 0.00 C \n",
4625 "ATOM 16 OE1 GLN A 2 27.783 33.160 1.870 1.00 0.00 O \n",
4626 "ATOM 17 NE2 GLN A 2 25.562 32.733 1.806 1.00 0.00 N \n",
4627 "ATOM 18 N ILE A 3 26.849 29.656 6.217 1.00 0.00 N \n",
4628 "ATOM 19 CA ILE A 3 26.235 30.058 7.497 1.00 0.00 C \n",
4629 "ATOM 20 C ILE A 3 26.882 31.428 7.862 1.00 0.00 C \n",
4630 "ATOM 21 O ILE A 3 27.906 31.711 7.264 1.00 0.00 O \n",
4631 "ATOM 22 CB ILE A 3 26.344 29.050 8.645 1.00 0.00 C \n",
4632 "ATOM 23 CG1 ILE A 3 27.810 28.748 8.999 1.00 0.00 C \n",
4633 "ATOM 24 CG2 ILE A 3 25.491 27.771 8.287 1.00 0.00 C \n",
4634 "ATOM 25 CD1 ILE A 3 27.967 28.087 10.417 1.00 0.00 C \n",
4635 "ATOM 26 N PHE A 4 26.214 32.097 8.771 1.00 0.00 N \n",
4636 "ATOM 27 CA PHE A 4 26.772 33.436 9.197 1.00 0.00 C \n",
4637 "ATOM 28 C PHE A 4 27.151 33.362 10.650 1.00 0.00 C \n",
4638 "ATOM 29 O PHE A 4 26.350 32.778 11.395 1.00 0.00 O \n",
4639 "ATOM 30 CB PHE A 4 25.695 34.498 8.946 1.00 0.00 C \n",
4640 "ATOM 31 CG PHE A 4 25.288 34.609 7.499 1.00 0.00 C \n",
4641 "ATOM 32 CD1 PHE A 4 24.147 33.966 7.038 1.00 0.00 C \n",
4642 "ATOM 33 CD2 PHE A 4 26.136 35.346 6.640 1.00 0.00 C \n",
4643 "ATOM 34 CE1 PHE A 4 23.812 34.031 5.677 1.00 0.00 C \n",
4644 "ATOM 35 CE2 PHE A 4 25.810 35.392 5.267 1.00 0.00 C \n",
4645 "ATOM 36 CZ PHE A 4 24.620 34.778 4.853 1.00 0.00 C \n",
4646 "ATOM 37 N VAL A 5 28.260 33.943 11.096 1.00 0.00 N \n",
4647 "ATOM 38 CA VAL A 5 28.605 33.965 12.503 1.00 0.00 C \n",
4648 "ATOM 39 C VAL A 5 28.638 35.461 12.900 1.00 0.00 C \n",
4649 "ATOM 40 O VAL A 5 29.522 36.103 12.320 1.00 0.00 O \n",
4650 "ATOM 41 CB VAL A 5 29.963 33.317 12.814 1.00 0.00 C \n",
4651 "ATOM 42 CG1 VAL A 5 30.211 33.394 14.304 1.00 0.00 C \n",
4652 "ATOM 43 CG2 VAL A 5 29.957 31.838 12.352 1.00 0.00 C \n",
4653 "ATOM 44 N LYS A 6 27.751 35.867 13.740 1.00 0.00 N \n",
4654 "ATOM 45 CA LYS A 6 27.691 37.315 14.143 1.00 0.00 C \n",
4655 "ATOM 46 C LYS A 6 28.469 37.475 15.420 1.00 0.00 C \n",
4656 "ATOM 47 O LYS A 6 28.213 36.753 16.411 1.00 0.00 O \n",
4657 "ATOM 48 CB LYS A 6 26.219 37.684 14.307 1.00 0.00 C \n",
4658 "ATOM 49 CG LYS A 6 25.884 39.139 14.615 1.00 0.00 C \n",
4659 "ATOM 50 CD LYS A 6 24.348 39.296 14.642 1.00 0.00 C \n",
4660 "ATOM 51 CE LYS A 6 23.865 40.723 14.749 1.00 0.00 C \n",
4661 "ATOM 52 NZ LYS A 6 22.375 40.720 14.907 1.00 0.00 N \n",
4662 "ATOM 53 N THR A 7 29.426 38.430 15.446 1.00 0.00 N \n",
4663 "ATOM 54 CA THR A 7 30.225 38.643 16.662 1.00 0.00 C \n",
4664 "ATOM 55 C THR A 7 29.664 39.839 17.434 1.00 0.00 C \n",
4665 "ATOM 56 O THR A 7 28.850 40.565 16.859 1.00 0.00 O \n",
4666 "ATOM 57 CB THR A 7 31.744 38.879 16.299 1.00 0.00 C \n",
4667 "ATOM 58 OG1 THR A 7 31.737 40.257 15.824 1.00 0.00 O \n",
4668 "ATOM 59 CG2 THR A 7 32.260 37.969 15.171 1.00 0.00 C \n",
4669 "ATOM 60 N LEU A 8 30.132 40.069 18.642 1.00 0.00 N \n",
4670 "ATOM 61 CA LEU A 8 29.607 41.180 19.467 1.00 0.00 C \n",
4671 "ATOM 62 C LEU A 8 30.075 42.538 18.984 1.00 0.00 C \n",
4672 "ATOM 63 O LEU A 8 29.586 43.570 19.483 1.00 0.00 O \n",
4673 "ATOM 64 CB LEU A 8 29.919 40.890 20.938 1.00 0.00 C \n",
4674 "ATOM 65 CG LEU A 8 29.183 39.722 21.581 1.00 0.00 C \n",
4675 "ATOM 66 CD1 LEU A 8 29.308 39.750 23.095 1.00 0.00 C \n",
4676 "ATOM 67 CD2 LEU A 8 27.700 39.721 21.228 1.00 0.00 C \n",
4677 "ATOM 68 N THR A 9 30.991 42.571 17.998 1.00 0.00 N \n",
4678 "ATOM 69 CA THR A 9 31.422 43.940 17.553 1.00 0.00 C \n",
4679 "ATOM 70 C THR A 9 30.755 44.351 16.277 1.00 0.00 C \n",
4680 "ATOM 71 O THR A 9 31.207 45.268 15.566 1.00 0.00 O \n",
4681 "ATOM 72 CB THR A 9 32.979 43.918 17.445 1.00 0.00 C \n",
4682 "ATOM 73 OG1 THR A 9 33.174 43.067 16.265 1.00 0.00 O \n",
4683 "ATOM 74 CG2 THR A 9 33.657 43.319 18.672 1.00 0.00 C \n",
4684 "ATOM 75 N GLY A 10 29.721 43.673 15.885 1.00 0.00 N \n",
4685 "ATOM 76 CA GLY A 10 28.978 43.960 14.678 1.00 0.00 C \n",
4686 "ATOM 77 C GLY A 10 29.604 43.507 13.393 1.00 0.00 C \n",
4687 "ATOM 78 O GLY A 10 29.219 43.981 12.301 1.00 0.00 O \n",
4688 "ATOM 79 N LYS A 11 30.563 42.623 13.495 1.00 0.00 N \n",
4689 "ATOM 80 CA LYS A 11 31.191 42.012 12.331 1.00 0.00 C \n",
4690 "ATOM 81 C LYS A 11 30.459 40.666 12.130 1.00 0.00 C \n",
4691 "ATOM 82 O LYS A 11 30.253 39.991 13.133 1.00 0.00 O \n",
4692 "ATOM 83 CB LYS A 11 32.672 41.717 12.505 1.00 0.00 C \n",
4693 "ATOM 84 CG LYS A 11 33.280 41.086 11.227 1.00 0.00 C \n",
4694 "ATOM 85 CD LYS A 11 34.762 40.799 11.470 1.00 0.00 C \n",
4695 "ATOM 86 CE LYS A 11 35.614 40.847 10.240 1.00 0.00 C \n",
4696 "ATOM 87 NZ LYS A 11 35.100 40.073 9.101 1.00 0.00 N \n",
4697 "ATOM 88 N THR A 12 30.163 40.338 10.886 1.00 0.00 N \n",
4698 "ATOM 89 CA THR A 12 29.542 39.020 10.653 1.00 0.00 C \n",
4699 "ATOM 90 C THR A 12 30.494 38.261 9.729 1.00 0.00 C \n",
4700 "ATOM 91 O THR A 12 30.849 38.850 8.706 1.00 0.00 O \n",
4701 "ATOM 92 CB THR A 12 28.113 39.049 10.015 1.00 0.00 C \n",
4702 "ATOM 93 OG1 THR A 12 27.280 39.722 10.996 1.00 0.00 O \n",
4703 "ATOM 94 CG2 THR A 12 27.588 37.635 9.715 1.00 0.00 C \n",
4704 "ATOM 95 N ILE A 13 30.795 37.015 10.095 1.00 0.00 N \n",
4705 "ATOM 96 CA ILE A 13 31.720 36.289 9.176 1.00 0.00 C \n",
4706 "ATOM 97 C ILE A 13 30.955 35.211 8.459 1.00 0.00 C \n",
4707 "ATOM 98 O ILE A 13 30.025 34.618 9.040 1.00 0.00 O \n",
4708 "ATOM 99 CB ILE A 13 32.995 35.883 9.934 1.00 0.00 C \n",
4709 "ATOM 100 CG1 ILE A 13 33.306 34.381 9.840 1.00 0.00 C \n",
4710 "ATOM 101 CG2 ILE A 13 33.109 36.381 11.435 1.00 0.00 C \n",
4711 "ATOM 102 CD1 ILE A 13 34.535 34.028 10.720 1.00 0.00 C \n",
4712 "ATOM 103 N THR A 14 31.244 34.986 7.197 1.00 0.00 N \n",
4713 "ATOM 104 CA THR A 14 30.505 33.884 6.512 1.00 0.00 C \n",
4714 "ATOM 105 C THR A 14 31.409 32.680 6.446 1.00 0.00 C \n",
4715 "ATOM 106 O THR A 14 32.619 32.812 6.125 1.00 0.00 O \n",
4716 "ATOM 107 CB THR A 14 30.091 34.393 5.078 1.00 0.00 C \n",
4717 "ATOM 108 OG1 THR A 14 31.440 34.513 4.487 1.00 0.00 O \n",
4718 "ATOM 109 CG2 THR A 14 29.420 35.756 5.119 1.00 0.00 C \n",
4719 "ATOM 110 N LEU A 15 30.884 31.485 6.666 1.00 0.00 N \n",
4720 "ATOM 111 CA LEU A 15 31.677 30.275 6.639 1.00 0.00 C \n",
4721 "ATOM 112 C LEU A 15 31.022 29.288 5.665 1.00 0.00 C \n",
4722 "ATOM 113 O LEU A 15 29.809 29.395 5.545 1.00 0.00 O \n",
4723 "ATOM 114 CB LEU A 15 31.562 29.686 8.045 1.00 0.00 C \n",
4724 "ATOM 115 CG LEU A 15 32.631 29.444 9.060 1.00 0.00 C \n",
4725 "ATOM 116 CD1 LEU A 15 33.814 30.390 9.030 1.00 0.00 C \n",
4726 "ATOM 117 CD2 LEU A 15 31.945 29.449 10.436 1.00 0.00 C \n",
4727 "ATOM 118 N GLU A 16 31.834 28.412 5.125 1.00 0.00 N \n",
4728 "ATOM 119 CA GLU A 16 31.220 27.341 4.275 1.00 0.00 C \n",
4729 "ATOM 120 C GLU A 16 31.440 26.079 5.080 1.00 0.00 C \n",
4730 "ATOM 121 O GLU A 16 32.576 25.802 5.461 1.00 0.00 O \n",
4731 "ATOM 122 CB GLU A 16 31.827 27.262 2.894 1.00 0.00 C \n",
4732 "ATOM 123 CG GLU A 16 31.363 28.410 1.962 1.00 0.00 C \n",
4733 "ATOM 124 CD GLU A 16 31.671 28.291 0.498 1.00 0.00 C \n",
4734 "ATOM 125 OE1 GLU A 16 30.869 28.621 -0.366 1.00 0.00 O \n",
4735 "ATOM 126 OE2 GLU A 16 32.835 27.861 0.278 1.00 0.00 O \n",
4736 "ATOM 127 N VAL A 17 30.310 25.458 5.384 1.00 0.00 N \n",
4737 "ATOM 128 CA VAL A 17 30.288 24.245 6.193 1.00 0.00 C \n",
4738 "ATOM 129 C VAL A 17 29.279 23.227 5.641 1.00 0.00 C \n",
4739 "ATOM 130 O VAL A 17 28.478 23.522 4.725 1.00 0.00 O \n",
4740 "ATOM 131 CB VAL A 17 29.903 24.590 7.665 1.00 0.00 C \n",
4741 "ATOM 132 CG1 VAL A 17 30.862 25.496 8.389 1.00 0.00 C \n",
4742 "ATOM 133 CG2 VAL A 17 28.476 25.135 7.705 1.00 0.00 C \n",
4743 "ATOM 134 N GLU A 18 29.380 22.057 6.232 1.00 0.00 N \n",
4744 "ATOM 135 CA GLU A 18 28.468 20.940 5.980 1.00 0.00 C \n",
4745 "ATOM 136 C GLU A 18 27.819 20.609 7.316 1.00 0.00 C \n",
4746 "ATOM 137 O GLU A 18 28.449 20.674 8.360 1.00 0.00 O \n",
4747 "ATOM 138 CB GLU A 18 29.213 19.697 5.506 1.00 0.00 C \n",
4748 "ATOM 139 CG GLU A 18 29.728 19.755 4.060 1.00 0.00 C \n",
4749 "ATOM 140 CD GLU A 18 28.754 20.061 2.978 1.00 0.00 C \n",
4750 "ATOM 141 OE1 GLU A 18 27.546 19.992 2.985 1.00 0.00 O \n",
4751 "ATOM 142 OE2 GLU A 18 29.336 20.423 1.904 1.00 0.00 O \n",
4752 "ATOM 143 N PRO A 19 26.559 20.220 7.288 1.00 0.00 N \n",
4753 "ATOM 144 CA PRO A 19 25.829 19.825 8.494 1.00 0.00 C \n",
4754 "ATOM 145 C PRO A 19 26.541 18.732 9.251 1.00 0.00 C \n",
4755 "ATOM 146 O PRO A 19 26.333 18.536 10.457 1.00 0.00 O \n",
4756 "ATOM 147 CB PRO A 19 24.469 19.332 7.952 1.00 0.00 C \n",
4757 "ATOM 148 CG PRO A 19 24.299 20.134 6.704 1.00 0.00 C \n",
4758 "ATOM 149 CD PRO A 19 25.714 20.108 6.073 1.00 0.00 C \n",
4759 "ATOM 150 N SER A 20 27.361 17.959 8.559 1.00 0.00 N \n",
4760 "ATOM 151 CA SER A 20 28.054 16.835 9.210 1.00 0.00 C \n",
4761 "ATOM 152 C SER A 20 29.258 17.318 9.984 1.00 0.00 C \n",
4762 "ATOM 153 O SER A 20 29.930 16.477 10.606 1.00 0.00 O \n",
4763 "ATOM 154 CB SER A 20 28.523 15.820 8.182 1.00 0.00 C \n",
4764 "ATOM 155 OG SER A 20 28.946 16.445 6.967 1.00 0.00 O \n",
4765 "ATOM 156 N ASP A 21 29.599 18.599 9.828 1.00 0.00 N \n",
4766 "ATOM 157 CA ASP A 21 30.796 19.083 10.566 1.00 0.00 C \n",
4767 "ATOM 158 C ASP A 21 30.491 19.162 12.040 1.00 0.00 C \n",
4768 "ATOM 159 O ASP A 21 29.367 19.523 12.441 1.00 0.00 O \n",
4769 "ATOM 160 CB ASP A 21 31.155 20.515 10.048 1.00 0.00 C \n",
4770 "ATOM 161 CG ASP A 21 31.923 20.436 8.755 1.00 0.00 C \n",
4771 "ATOM 162 OD1 ASP A 21 32.493 19.374 8.456 1.00 0.00 O \n",
4772 "ATOM 163 OD2 ASP A 21 31.838 21.402 7.968 1.00 0.00 O \n",
4773 "ATOM 164 N THR A 22 31.510 18.936 12.852 1.00 0.00 N \n",
4774 "ATOM 165 CA THR A 22 31.398 19.064 14.286 1.00 0.00 C \n",
4775 "ATOM 166 C THR A 22 31.593 20.553 14.655 1.00 0.00 C \n",
4776 "ATOM 167 O THR A 22 32.159 21.311 13.861 1.00 0.00 O \n",
4777 "ATOM 168 CB THR A 22 32.492 18.193 14.995 1.00 0.00 C \n",
4778 "ATOM 169 OG1 THR A 22 33.778 18.739 14.516 1.00 0.00 O \n",
4779 "ATOM 170 CG2 THR A 22 32.352 16.700 14.630 1.00 0.00 C \n",
4780 "ATOM 171 N ILE A 23 31.113 20.863 15.860 1.00 0.00 N \n",
4781 "ATOM 172 CA ILE A 23 31.288 22.201 16.417 1.00 0.00 C \n",
4782 "ATOM 173 C ILE A 23 32.776 22.519 16.577 1.00 0.00 C \n",
4783 "ATOM 174 O ILE A 23 33.233 23.659 16.384 1.00 0.00 O \n",
4784 "ATOM 175 CB ILE A 23 30.520 22.300 17.764 1.00 0.00 C \n",
4785 "ATOM 176 CG1 ILE A 23 29.006 22.043 17.442 1.00 0.00 C \n",
4786 "ATOM 177 CG2 ILE A 23 30.832 23.699 18.358 1.00 0.00 C \n",
4787 "ATOM 178 CD1 ILE A 23 28.407 22.948 16.366 1.00 0.00 C \n",
4788 "ATOM 179 N GLU A 24 33.548 21.526 16.950 1.00 0.00 N \n",
4789 "ATOM 180 CA GLU A 24 35.031 21.722 17.069 1.00 0.00 C \n",
4790 "ATOM 181 C GLU A 24 35.615 22.190 15.759 1.00 0.00 C \n",
4791 "ATOM 182 O GLU A 24 36.532 23.046 15.724 1.00 0.00 O \n",
4792 "ATOM 183 CB GLU A 24 35.667 20.383 17.447 1.00 0.00 C \n",
4793 "ATOM 184 CG GLU A 24 37.128 20.293 17.872 1.00 0.00 C \n",
4794 "ATOM 185 CD GLU A 24 37.561 18.851 18.082 1.00 0.00 C \n",
4795 "ATOM 186 OE1 GLU A 24 37.758 18.024 17.195 1.00 0.00 O \n",
4796 "ATOM 187 OE2 GLU A 24 37.628 18.599 19.313 1.00 0.00 O \n",
4797 "ATOM 188 N ASN A 25 35.139 21.624 14.662 1.00 0.00 N \n",
4798 "ATOM 189 CA ASN A 25 35.590 21.945 13.302 1.00 0.00 C \n",
4799 "ATOM 190 C ASN A 25 35.238 23.382 12.920 1.00 0.00 C \n",
4800 "ATOM 191 O ASN A 25 36.066 24.109 12.333 1.00 0.00 O \n",
4801 "ATOM 192 CB ASN A 25 35.064 20.957 12.255 1.00 0.00 C \n",
4802 "ATOM 193 CG ASN A 25 35.541 21.418 10.871 1.00 0.00 C \n",
4803 "ATOM 194 OD1 ASN A 25 36.772 21.623 10.676 1.00 0.00 O \n",
4804 "ATOM 195 ND2 ASN A 25 34.628 21.595 9.920 1.00 0.00 N \n",
4805 "ATOM 196 N VAL A 26 34.007 23.745 13.250 1.00 0.00 N \n",
4806 "ATOM 197 CA VAL A 26 33.533 25.097 12.978 1.00 0.00 C \n",
4807 "ATOM 198 C VAL A 26 34.441 26.099 13.684 1.00 0.00 C \n",
4808 "ATOM 199 O VAL A 26 34.883 27.090 13.093 1.00 0.00 O \n",
4809 "ATOM 200 CB VAL A 26 32.060 25.257 13.364 1.00 0.00 C \n",
4810 "ATOM 201 CG1 VAL A 26 31.684 26.749 13.342 1.00 0.00 C \n",
4811 "ATOM 202 CG2 VAL A 26 31.152 24.421 12.477 1.00 0.00 C \n",
4812 "ATOM 203 N LYS A 27 34.734 25.822 14.949 1.00 0.00 N \n",
4813 "ATOM 204 CA LYS A 27 35.596 26.715 15.736 1.00 0.00 C \n",
4814 "ATOM 205 C LYS A 27 36.975 26.826 15.107 1.00 0.00 C \n",
4815 "ATOM 206 O LYS A 27 37.579 27.926 15.159 1.00 0.00 O \n",
4816 "ATOM 207 CB LYS A 27 35.715 26.203 17.172 1.00 0.00 C \n",
4817 "ATOM 208 CG LYS A 27 34.343 26.445 17.898 1.00 0.00 C \n",
4818 "ATOM 209 CD LYS A 27 34.509 26.077 19.360 1.00 0.00 C \n",
4819 "ATOM 210 CE LYS A 27 33.206 26.311 20.122 1.00 0.00 C \n",
4820 "ATOM 211 NZ LYS A 27 33.455 25.910 21.546 1.00 0.00 N \n",
4821 "ATOM 212 N ALA A 28 37.499 25.743 14.571 1.00 0.00 N \n",
4822 "ATOM 213 CA ALA A 28 38.794 25.761 13.880 1.00 0.00 C \n",
4823 "ATOM 214 C ALA A 28 38.728 26.591 12.611 1.00 0.00 C \n",
4824 "ATOM 215 O ALA A 28 39.704 27.346 12.277 1.00 0.00 O \n",
4825 "ATOM 216 CB ALA A 28 39.285 24.336 13.566 1.00 0.00 C \n",
4826 "ATOM 217 N LYS A 29 37.633 26.543 11.867 1.00 0.00 N \n",
4827 "ATOM 218 CA LYS A 29 37.471 27.391 10.668 1.00 0.00 C \n",
4828 "ATOM 219 C LYS A 29 37.441 28.882 11.052 1.00 0.00 C \n",
4829 "ATOM 220 O LYS A 29 38.020 29.772 10.382 1.00 0.00 O \n",
4830 "ATOM 221 CB LYS A 29 36.193 27.058 9.911 1.00 0.00 C \n",
4831 "ATOM 222 CG LYS A 29 36.153 25.620 9.409 1.00 0.00 C \n",
4832 "ATOM 223 CD LYS A 29 34.758 25.280 8.900 1.00 0.00 C \n",
4833 "ATOM 224 CE LYS A 29 34.793 24.264 7.767 1.00 0.00 C \n",
4834 "ATOM 225 NZ LYS A 29 34.914 24.944 6.441 1.00 0.00 N \n",
4835 "ATOM 226 N ILE A 30 36.811 29.170 12.192 1.00 0.00 N \n",
4836 "ATOM 227 CA ILE A 30 36.731 30.570 12.645 1.00 0.00 C \n",
4837 "ATOM 228 C ILE A 30 38.148 30.981 13.069 1.00 0.00 C \n",
4838 "ATOM 229 O ILE A 30 38.544 32.150 12.856 1.00 0.00 O \n",
4839 "ATOM 230 CB ILE A 30 35.708 30.776 13.806 1.00 0.00 C \n",
4840 "ATOM 231 CG1 ILE A 30 34.228 30.630 13.319 1.00 0.00 C \n",
4841 "ATOM 232 CG2 ILE A 30 35.874 32.138 14.512 1.00 0.00 C \n",
4842 "ATOM 233 CD1 ILE A 30 33.284 30.504 14.552 1.00 0.00 C \n",
4843 "ATOM 234 N GLN A 31 38.883 30.110 13.713 1.00 0.00 N \n",
4844 "ATOM 235 CA GLN A 31 40.269 30.508 14.115 1.00 0.00 C \n",
4845 "ATOM 236 C GLN A 31 41.092 30.808 12.851 1.00 0.00 C \n",
4846 "ATOM 237 O GLN A 31 41.828 31.808 12.681 1.00 0.00 O \n",
4847 "ATOM 238 CB GLN A 31 40.996 29.399 14.865 1.00 0.00 C \n",
4848 "ATOM 239 CG GLN A 31 42.445 29.848 15.182 1.00 0.00 C \n",
4849 "ATOM 240 CD GLN A 31 43.090 28.828 16.095 1.00 0.00 C \n",
4850 "ATOM 241 OE1 GLN A 31 42.770 27.655 15.906 1.00 0.00 O \n",
4851 "ATOM 242 NE2 GLN A 31 43.898 29.252 17.050 1.00 0.00 N \n",
4852 "ATOM 243 N ASP A 32 41.001 29.878 11.931 1.00 0.00 N \n",
4853 "ATOM 244 CA ASP A 32 41.718 30.022 10.643 1.00 0.00 C \n",
4854 "ATOM 245 C ASP A 32 41.399 31.338 9.967 1.00 0.00 C \n",
4855 "ATOM 246 O ASP A 32 42.260 32.036 9.381 1.00 0.00 O \n",
4856 "ATOM 247 CB ASP A 32 41.398 28.780 9.810 1.00 0.00 C \n",
4857 "ATOM 248 CG ASP A 32 42.626 28.557 8.928 1.00 0.00 C \n",
4858 "ATOM 249 OD1 ASP A 32 43.666 28.262 9.539 1.00 0.00 O \n",
4859 "ATOM 250 OD2 ASP A 32 42.430 28.812 7.728 1.00 0.00 O \n",
4860 "ATOM 251 N LYS A 33 40.117 31.750 9.988 1.00 0.00 N \n",
4861 "ATOM 252 CA LYS A 33 39.808 32.994 9.233 1.00 0.00 C \n",
4862 "ATOM 253 C LYS A 33 39.837 34.271 9.995 1.00 0.00 C \n",
4863 "ATOM 254 O LYS A 33 40.164 35.323 9.345 1.00 0.00 O \n",
4864 "ATOM 255 CB LYS A 33 38.615 32.801 8.320 1.00 0.00 C \n",
4865 "ATOM 256 CG LYS A 33 37.220 32.822 8.827 1.00 0.00 C \n",
4866 "ATOM 257 CD LYS A 33 36.351 33.613 7.838 1.00 0.00 C \n",
4867 "ATOM 258 CE LYS A 33 36.322 32.944 6.477 1.00 0.00 C \n",
4868 "ATOM 259 NZ LYS A 33 35.768 33.945 5.489 1.00 0.00 N \n",
4869 "ATOM 260 N GLU A 34 39.655 34.335 11.285 1.00 0.00 N \n",
4870 "ATOM 261 CA GLU A 34 39.676 35.547 12.072 1.00 0.00 C \n",
4871 "ATOM 262 C GLU A 34 40.675 35.527 13.200 1.00 0.00 C \n",
4872 "ATOM 263 O GLU A 34 40.814 36.528 13.911 1.00 0.00 O \n",
4873 "ATOM 264 CB GLU A 34 38.290 35.814 12.698 1.00 0.00 C \n",
4874 "ATOM 265 CG GLU A 34 37.156 35.985 11.688 1.00 0.00 C \n",
4875 "ATOM 266 CD GLU A 34 37.192 37.361 11.033 1.00 0.00 C \n",
4876 "ATOM 267 OE1 GLU A 34 37.519 38.360 11.645 1.00 0.00 O \n",
4877 "ATOM 268 OE2 GLU A 34 36.861 37.320 9.822 1.00 0.00 O \n",
4878 "TER 269 GLU A 34 \n",
4879 "MASTER 0 0 0 0 0 0 0 0 268 1 0 0 \n",
4880 "END \n"
4881 ]
4882
4883
4884 self.strip_remarks(lines)
4885 self.assertEqual(len(real_data), len(lines))
4886 for i in range(len(real_data)):
4887 self.assertEqual(real_data[i], lines[i])
4888
4889
4911
4912
4914 """Load the 'SSS-cluster4-new-test.xyz' XYZ file (using the internal structural object XYZ reader)."""
4915
4916
4917 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
4918
4919
4920 self.interpreter.structure.read_xyz(file='SSS-cluster4-new-test.xyz', dir=path, read_model=[1])
4921
4922
4923 self.assertEqual(cdp.structure.structural_data[0].mol[0].mol_name, 'SSS-cluster4-new-test_mol1')
4924
4925
4926 self.interpreter.structure.load_spins('#SSS-cluster4-new-test_mol1@2')
4927 self.assertEqual(count_spins(), 1)
4928
4929
4930 a=return_spin('#SSS-cluster4-new-test_mol1@2')
4931 self.assertAlmostEqual(a.pos[0], -12.398)
4932 self.assertAlmostEqual(a.pos[1], -15.992)
4933 self.assertAlmostEqual(a.pos[2], 11.448)
4934
4935
4936
4937
4938
4939 self.interpreter.structure.load_spins()
4940
4941
4942 self.interpreter.interatom.define(spin_id1='@2', spin_id2='@10')
4943 self.interpreter.interatom.unit_vectors()
4944 self.assertAlmostEqual(cdp.interatomic[0].vector[0], -0.4102707)
4945 self.assertAlmostEqual(cdp.interatomic[0].vector[1], 0.62128879)
4946 self.assertAlmostEqual(cdp.interatomic[0].vector[2], -0.6675913)
4947
4948
4972
4973
4975 """Test the structure.rmsd user function."""
4976
4977
4978 self.interpreter.structure.add_model(model_num=1)
4979 self.interpreter.structure.add_model(model_num=2)
4980 self.interpreter.structure.add_model(model_num=4)
4981
4982
4983 self.assert_(hasattr(cdp, 'structure'))
4984 self.assert_(hasattr(cdp.structure, 'structural_data'))
4985 self.assertEqual(len(cdp.structure.structural_data), 3)
4986
4987
4988 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=1, pos=[[1., 0., -1.], [0., 0., 0.], [-1., 0., 1.]], element='S')
4989 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=2, pos=[[1., 2., -1.], [0., 2., 0.], [-1., 2., 1.]], element='S')
4990 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=3, pos=[[1., 20., -1.], [0., 20., 0.], [-1., 20., 1.]], element='S')
4991
4992
4993 self.assertEqual(cdp.structure.structural_data[0].mol[0].x, [1., 1., 1.])
4994 self.assertEqual(cdp.structure.structural_data[0].mol[0].y, [0., 2., 20.])
4995 self.assertEqual(cdp.structure.structural_data[0].mol[0].z, [-1., -1., -1.])
4996 self.assertEqual(cdp.structure.structural_data[1].mol[0].x, [0., 0., 0.])
4997 self.assertEqual(cdp.structure.structural_data[1].mol[0].y, [0., 2., 20.])
4998 self.assertEqual(cdp.structure.structural_data[1].mol[0].z, [0., 0., 0.])
4999 self.assertEqual(cdp.structure.structural_data[2].mol[0].x, [-1., -1., -1.])
5000 self.assertEqual(cdp.structure.structural_data[2].mol[0].y, [0., 2., 20.])
5001 self.assertEqual(cdp.structure.structural_data[2].mol[0].z, [1., 1., 1.])
5002
5003
5004 self.interpreter.structure.rmsd()
5005
5006
5007 self.assert_(hasattr(cdp.structure, 'rmsd'))
5008 self.assertAlmostEqual(cdp.structure.rmsd, 2./3*sqrt(2))
5009
5010
5012 """Test the structure.rmsd user function for different molecules in one pipe.
5013
5014 This checks the molecules argument of the U{structure.rmsd user function<http://www.nmr-relax.com/manual/structure_rmsd.html>}.
5015 """
5016
5017
5018 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=1, mol_name='X', pos=[1., 0., -1.], element='S')
5019 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=1, mol_name='Y', pos=[0., 0., 0.], element='S')
5020 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=1, mol_name='Z', pos=[-1., 0., 1.], element='S')
5021 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=2, mol_name='X', pos=[1., 2., -1.], element='S')
5022 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=2, mol_name='Y', pos=[0., 2., 0.], element='S')
5023 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=2, mol_name='Z', pos=[-1., 2., 1.], element='S')
5024 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=3, mol_name='X', pos=[1., 20., -1.], element='S')
5025 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=3, mol_name='Y', pos=[0., 20., 0.], element='S')
5026 self.interpreter.structure.add_atom(atom_name='A', res_name='UNK', res_num=3, mol_name='Z', pos=[-1., 20., 1.], element='S')
5027
5028
5029 self.interpreter.structure.rmsd(molecules=[['X', 'Y', 'Z']])
5030
5031
5032 self.assert_(hasattr(cdp.structure, 'rmsd'))
5033 self.assertAlmostEqual(cdp.structure.rmsd, 2./3*sqrt(2))
5034
5035
5037 """Test the structure.rmsd user function on the truncated ubiquitin ensemble."""
5038
5039
5040 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
5041 self.interpreter.structure.read_pdb('trunc_ubi_pcs.pdb', dir=path)
5042
5043
5044 self.interpreter.structure.rmsd()
5045
5046
5047 self.assert_(hasattr(cdp.structure, 'rmsd'))
5048 self.assertAlmostEqual(cdp.structure.rmsd, 0.77282758781333061)
5049
5050
5052 """Test of the structure.sequence_alignment user function using the 'Central Star', 'NW70', and 'BLOSUM62' options."""
5053
5054
5055 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'frame_order'+sep+'cam'
5056
5057
5058 self.interpreter.structure.read_pdb('1J7P_1st_NH.pdb', dir=path, set_model_num=1, set_mol_name='CaM A')
5059 self.interpreter.structure.read_pdb('1J7P_1st_NH_rot.pdb', dir=path, set_model_num=1, set_mol_name='CaM B')
5060
5061
5062 self.interpreter.structure.delete("#CaM B:82")
5063 self.interpreter.structure.delete("#CaM A:100-120")
5064
5065
5066 self.interpreter.structure.sequence_alignment(pipes=['mf'], models=[[1, 1]], molecules=[['CaM A', 'CaM B']], msa_algorithm='Central Star', pairwise_algorithm='NW70', matrix='BLOSUM62', gap_open_penalty=10.0, gap_extend_penalty=1.0, end_gap_open_penalty=0.5, end_gap_extend_penalty=0.1)
5067
5068
5069 self.tmpfile = mktemp()
5070 self.interpreter.state.save(self.tmpfile, dir=None, force=True)
5071
5072
5073 self.interpreter.reset()
5074
5075
5076 self.interpreter.state.load(self.tmpfile)
5077
5078
5079 pipes = ['mf', 'mf']
5080 models = [1, 1]
5081 molecules = ['CaM A', 'CaM B']
5082 ids = ["Object 'mf'; Model 1; Molecule 'CaM A'", "Object 'mf'; Model 1; Molecule 'CaM B'"]
5083 sequences = [
5084 'EEEIREAFRVFDKDGNGYVDEMIREADIDGDGQVNYEEFVQMMTAK**',
5085 'EEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK**'
5086 ]
5087 strings = [
5088 'EEEIREAFRVFDKDGNGY---------------------VDEMIREADIDGDGQVNYEEFVQMMTAK**',
5089 '-EEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK**'
5090 ]
5091 gaps = []
5092 for i in range(len(strings)):
5093 gaps.append([])
5094 for j in range(len(strings[0])):
5095 gaps[i].append(0)
5096 for i in range(18, 39):
5097 gaps[0][i] = 1
5098 gaps[1][0] = 1
5099 msa_algorithm = 'Central Star'
5100 pairwise_algorithm = 'NW70'
5101 matrix = 'BLOSUM62'
5102 gap_open_penalty = 10.0
5103 gap_extend_penalty = 1.0
5104 end_gap_open_penalty = 0.5
5105 end_gap_extend_penalty = 0.1
5106
5107
5108 for i in range(2):
5109 print("Checking \"%s\"" % molecules[i])
5110 self.assertEqual(ds.sequence_alignments[0].ids[i], ids[i])
5111 self.assertEqual(ds.sequence_alignments[0].object_ids[i], pipes[i])
5112 self.assertEqual(ds.sequence_alignments[0].models[i], models[i])
5113 self.assertEqual(ds.sequence_alignments[0].molecules[i], molecules[i])
5114 self.assertEqual(ds.sequence_alignments[0].sequences[i], sequences[i])
5115 self.assertEqual(ds.sequence_alignments[0].strings[i], strings[i])
5116 for j in range(len(strings[0])):
5117 self.assertEqual(ds.sequence_alignments[0].gaps[i, j], gaps[i][j])
5118 self.assertEqual(ds.sequence_alignments[0].msa_algorithm, msa_algorithm)
5119 self.assertEqual(ds.sequence_alignments[0].pairwise_algorithm, pairwise_algorithm)
5120 self.assertEqual(ds.sequence_alignments[0].matrix, matrix)
5121 self.assertEqual(ds.sequence_alignments[0].gap_open_penalty, gap_open_penalty)
5122 self.assertEqual(ds.sequence_alignments[0].gap_extend_penalty, gap_extend_penalty)
5123 self.assertEqual(ds.sequence_alignments[0].end_gap_open_penalty, end_gap_open_penalty)
5124 self.assertEqual(ds.sequence_alignments[0].end_gap_extend_penalty, end_gap_extend_penalty)
5125
5126
5128 """Test of the structure.sequence_alignment user function using the 'residue number' MSA algorithm."""
5129
5130
5131 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'frame_order'+sep+'cam'
5132
5133
5134 self.interpreter.structure.read_pdb('1J7P_1st_NH.pdb', dir=path, set_model_num=1, set_mol_name='CaM A')
5135 self.interpreter.structure.read_pdb('1J7P_1st_NH_rot.pdb', dir=path, set_model_num=1, set_mol_name='CaM B')
5136
5137
5138 self.interpreter.structure.delete("#CaM B:82")
5139 self.interpreter.structure.delete("#CaM A:100-120")
5140 self.interpreter.structure.delete(":CA")
5141
5142
5143 self.interpreter.structure.sequence_alignment(pipes=['mf'], models=[[1, 1]], molecules=[['CaM A', 'CaM B']], msa_algorithm='residue number')
5144
5145
5146 self.tmpfile = mktemp()
5147 self.interpreter.state.save(self.tmpfile, dir=None, force=True)
5148
5149
5150 self.interpreter.reset()
5151
5152
5153 self.interpreter.state.load(self.tmpfile)
5154
5155
5156 pipes = ['mf', 'mf']
5157 models = [1, 1]
5158 molecules = ['CaM A', 'CaM B']
5159 ids = ["Object 'mf'; Model 1; Molecule 'CaM A'", "Object 'mf'; Model 1; Molecule 'CaM B'"]
5160 sequences = [
5161 'EEEIREAFRVFDKDGNGYVDEMIREADIDGDGQVNYEEFVQMMTAK',
5162 'EEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK'
5163 ]
5164 strings = [
5165 'EEEIREAFRVFDKDGNGY---------------------VDEMIREADIDGDGQVNYEEFVQMMTAK',
5166 '-EEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK'
5167 ]
5168 gaps = []
5169 for i in range(len(strings)):
5170 gaps.append([])
5171 for j in range(len(strings[0])):
5172 gaps[i].append(0)
5173 for i in range(18, 39):
5174 gaps[0][i] = 1
5175 gaps[1][0] = 1
5176 msa_algorithm = 'residue number'
5177 pairwise_algorithm = None
5178 matrix = None
5179 gap_open_penalty = None
5180 gap_extend_penalty = None
5181 end_gap_open_penalty = None
5182 end_gap_extend_penalty = None
5183
5184
5185 for i in range(2):
5186 print("Checking \"%s\"" % molecules[i])
5187 self.assertEqual(ds.sequence_alignments[0].ids[i], ids[i])
5188 self.assertEqual(ds.sequence_alignments[0].object_ids[i], pipes[i])
5189 self.assertEqual(ds.sequence_alignments[0].models[i], models[i])
5190 self.assertEqual(ds.sequence_alignments[0].molecules[i], molecules[i])
5191 self.assertEqual(ds.sequence_alignments[0].sequences[i], sequences[i])
5192 self.assertEqual(ds.sequence_alignments[0].strings[i], strings[i])
5193 for j in range(len(strings[0])):
5194 self.assertEqual(ds.sequence_alignments[0].gaps[i, j], gaps[i][j])
5195 self.assertEqual(ds.sequence_alignments[0].msa_algorithm, msa_algorithm)
5196 self.assertEqual(ds.sequence_alignments[0].pairwise_algorithm, pairwise_algorithm)
5197 self.assertEqual(ds.sequence_alignments[0].matrix, matrix)
5198 self.assertEqual(ds.sequence_alignments[0].gap_open_penalty, gap_open_penalty)
5199 self.assertEqual(ds.sequence_alignments[0].gap_extend_penalty, gap_extend_penalty)
5200 self.assertEqual(ds.sequence_alignments[0].end_gap_open_penalty, end_gap_open_penalty)
5201 self.assertEqual(ds.sequence_alignments[0].end_gap_extend_penalty, end_gap_extend_penalty)
5202
5203
5205 """Test of the structure.superimpose user function, fitting to the first structure."""
5206
5207
5208 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'frame_order'+sep+'cam'
5209
5210
5211 self.interpreter.structure.read_pdb('1J7P_1st_NH.pdb', dir=path, set_model_num=1, set_mol_name='CaM')
5212 self.interpreter.structure.read_pdb('1J7P_1st_NH_rot.pdb', dir=path, set_model_num=2, set_mol_name='CaM')
5213 self.interpreter.structure.read_pdb('1J7P_1st_NH.pdb', dir=path, set_model_num=3, set_mol_name='CaM')
5214
5215
5216 self.interpreter.structure.superimpose(method='fit to first', atom_id='@N,C,CA,O')
5217
5218
5219 model1 = cdp.structure.structural_data[0].mol[0]
5220 model2 = cdp.structure.structural_data[1].mol[0]
5221 model3 = cdp.structure.structural_data[2].mol[0]
5222 for i in range(len(model1.atom_name)):
5223
5224 self.assertAlmostEqual(model1.x[i], model2.x[i], 2)
5225 self.assertAlmostEqual(model1.y[i], model2.y[i], 2)
5226 self.assertAlmostEqual(model1.z[i], model2.z[i], 2)
5227
5228
5229 self.assertAlmostEqual(model1.x[i], model3.x[i], 2)
5230 self.assertAlmostEqual(model1.y[i], model3.y[i], 2)
5231 self.assertAlmostEqual(model1.z[i], model3.z[i], 2)
5232
5233
5235 """Test of the structure.superimpose user function, fitting to the mean structure."""
5236
5237
5238 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'frame_order'+sep+'cam'
5239
5240
5241 self.interpreter.structure.read_pdb('1J7P_1st_NH.pdb', dir=path, set_model_num=1, set_mol_name='CaM')
5242 self.interpreter.structure.read_pdb('1J7P_1st_NH_rot.pdb', dir=path, set_model_num=2, set_mol_name='CaM')
5243
5244
5245 self.interpreter.structure.add_atom(mol_name='CaM', atom_name='Ti', res_name='TST', res_num=1, pos=[[1.0, 2.0, 3.0], [2.0, 3.0, 4.0]], element='Ti', pdb_record='HETATM')
5246
5247
5248 self.interpreter.structure.superimpose(method='fit to mean', atom_id='@N,C,CA,O', displace_id=':82-5000')
5249
5250
5251 model1 = cdp.structure.structural_data[0].mol[0]
5252 model2 = cdp.structure.structural_data[1].mol[0]
5253 for i in range(len(model1.atom_name)):
5254 if model1.res_num[i] == 1:
5255 continue
5256 self.assertAlmostEqual(model1.x[i], model2.x[i], 2)
5257 self.assertAlmostEqual(model1.y[i], model2.y[i], 2)
5258 self.assertAlmostEqual(model1.z[i], model2.z[i], 2)
5259
5260
5261 self.assertAlmostEqual(model1.x[0] - model2.x[0], -1.0, 2)
5262 self.assertAlmostEqual(model1.y[0] - model2.y[0], -1.0, 2)
5263 self.assertAlmostEqual(model1.z[0] - model2.z[0], -1.0, 2)
5264
5265
5267 """Second test of the structure.superimpose user function, fitting to the mean structure."""
5268
5269
5270 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'frame_order'+sep+'cam'
5271
5272
5273 self.interpreter.structure.read_pdb('1J7P_1st_NH.pdb', dir=path, set_model_num=1, set_mol_name='CaM')
5274 self.interpreter.structure.read_pdb('1J7P_1st_NH.pdb', dir=path, set_model_num=2, set_mol_name='CaM')
5275 self.interpreter.structure.read_pdb('1J7P_1st_NH.pdb', dir=path, set_model_num=3, set_mol_name='CaM')
5276
5277
5278 self.interpreter.structure.translate([20.0, 0.0, 0.0], model=3)
5279
5280
5281 self.interpreter.structure.superimpose(models=[[2, 3]], method='fit to mean', atom_id='@N,C,CA,O')
5282
5283
5284 model1 = cdp.structure.structural_data[0].mol[0]
5285 model2 = cdp.structure.structural_data[1].mol[0]
5286 model3 = cdp.structure.structural_data[2].mol[0]
5287 for i in range(len(model1.atom_name)):
5288
5289 self.assertAlmostEqual(model1.x[i] + 10, model2.x[i], 2)
5290 self.assertAlmostEqual(model1.y[i], model2.y[i], 2)
5291 self.assertAlmostEqual(model1.z[i], model2.z[i], 2)
5292
5293
5294 self.assertAlmostEqual(model2.x[i], model3.x[i], 2)
5295 self.assertAlmostEqual(model2.y[i], model3.y[i], 2)
5296 self.assertAlmostEqual(model2.z[i], model3.z[i], 2)
5297
5298
5300 """Check the operation of the structure.web_of_motion user function using structural models 1 and 2 (of 3)."""
5301
5302
5303 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
5304 self.interpreter.structure.read_pdb('web_of_motion.pdb', dir=path)
5305
5306
5307 file = DummyFileObject()
5308 self.interpreter.structure.web_of_motion(file=file, models=[[1, 2]])
5309
5310
5311 result = [
5312 "ATOM 1 N LEU A 4 9.464 -9.232 27.573 1.00 0.00 N ",
5313 "ATOM 2 N LEU A 4 9.211 -9.425 26.970 1.00 0.00 N ",
5314 "ATOM 3 H LEU A 4 8.575 -8.953 27.963 1.00 0.00 H ",
5315 "ATOM 4 H LEU A 4 9.085 -9.743 27.919 1.00 0.00 H ",
5316 "ATOM 5 CA LEU A 4 10.302 -8.195 26.930 1.00 0.00 C ",
5317 "ATOM 6 CA LEU A 4 10.077 -8.221 26.720 1.00 0.00 C ",
5318 "ATOM 7 CB LEU A 4 9.494 -7.221 26.051 1.00 0.00 C ",
5319 "ATOM 8 CB LEU A 4 9.297 -7.096 26.024 1.00 0.00 C ",
5320 "ATOM 9 CG LEU A 4 10.107 -5.862 25.665 1.00 0.00 C ",
5321 "ATOM 10 CG LEU A 4 10.061 -5.803 25.679 1.00 0.00 C ",
5322 "ATOM 11 CD1 LEU A 4 11.182 -6.007 24.608 1.00 0.00 C ",
5323 "ATOM 12 CD1 LEU A 4 11.029 -6.002 24.507 1.00 0.00 C ",
5324 "ATOM 13 CD2 LEU A 4 9.036 -4.875 25.171 1.00 0.00 C ",
5325 "ATOM 14 CD2 LEU A 4 9.120 -4.618 25.384 1.00 0.00 C ",
5326 "ATOM 15 C LEU A 4 10.999 -7.436 28.046 1.00 0.00 C ",
5327 "ATOM 16 C LEU A 4 10.625 -7.721 28.047 1.00 0.00 C ",
5328 "TER 17 LEU A 4 ",
5329 "CONECT 1 2 ",
5330 "CONECT 2 1 ",
5331 "CONECT 3 4 ",
5332 "CONECT 4 3 ",
5333 "CONECT 5 6 ",
5334 "CONECT 6 5 ",
5335 "CONECT 7 8 ",
5336 "CONECT 8 7 ",
5337 "CONECT 9 10 ",
5338 "CONECT 10 9 ",
5339 "CONECT 11 12 ",
5340 "CONECT 12 11 ",
5341 "CONECT 13 14 ",
5342 "CONECT 14 13 ",
5343 "CONECT 15 16 ",
5344 "CONECT 16 15 ",
5345 "MASTER 0 0 0 0 0 0 0 0 16 1 16 0 ",
5346 "END "
5347 ]
5348
5349
5350 lines = file.readlines()
5351 self.strip_remarks(lines)
5352 self.assertEqual(len(result), len(lines))
5353 for i in range(len(lines)):
5354 self.assertEqual(result[i]+'\n', lines[i])
5355
5356
5358 """Check the operation of the structure.web_of_motion user function using molecules 1 and 2 (of 3)."""
5359
5360
5361 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
5362 self.interpreter.structure.read_pdb('web_of_motion.pdb', dir=path, read_model=1, set_mol_name='1', set_model_num=1)
5363 self.interpreter.structure.read_pdb('web_of_motion.pdb', dir=path, read_model=2, set_mol_name='2', set_model_num=1)
5364 self.interpreter.structure.read_pdb('web_of_motion.pdb', dir=path, read_model=3, set_mol_name='3', set_model_num=1)
5365
5366
5367 file = DummyFileObject()
5368 self.interpreter.structure.web_of_motion(file=file, molecules=[['1', '2']])
5369
5370
5371 result = [
5372 "ATOM 1 N LEU A 4 9.464 -9.232 27.573 1.00 0.00 N ",
5373 "ATOM 2 N LEU A 4 9.211 -9.425 26.970 1.00 0.00 N ",
5374 "ATOM 3 H LEU A 4 8.575 -8.953 27.963 1.00 0.00 H ",
5375 "ATOM 4 H LEU A 4 9.085 -9.743 27.919 1.00 0.00 H ",
5376 "ATOM 5 CA LEU A 4 10.302 -8.195 26.930 1.00 0.00 C ",
5377 "ATOM 6 CA LEU A 4 10.077 -8.221 26.720 1.00 0.00 C ",
5378 "ATOM 7 CB LEU A 4 9.494 -7.221 26.051 1.00 0.00 C ",
5379 "ATOM 8 CB LEU A 4 9.297 -7.096 26.024 1.00 0.00 C ",
5380 "ATOM 9 CG LEU A 4 10.107 -5.862 25.665 1.00 0.00 C ",
5381 "ATOM 10 CG LEU A 4 10.061 -5.803 25.679 1.00 0.00 C ",
5382 "ATOM 11 CD1 LEU A 4 11.182 -6.007 24.608 1.00 0.00 C ",
5383 "ATOM 12 CD1 LEU A 4 11.029 -6.002 24.507 1.00 0.00 C ",
5384 "ATOM 13 CD2 LEU A 4 9.036 -4.875 25.171 1.00 0.00 C ",
5385 "ATOM 14 CD2 LEU A 4 9.120 -4.618 25.384 1.00 0.00 C ",
5386 "ATOM 15 C LEU A 4 10.999 -7.436 28.046 1.00 0.00 C ",
5387 "ATOM 16 C LEU A 4 10.625 -7.721 28.047 1.00 0.00 C ",
5388 "TER 17 LEU A 4 ",
5389 "CONECT 1 2 ",
5390 "CONECT 2 1 ",
5391 "CONECT 3 4 ",
5392 "CONECT 4 3 ",
5393 "CONECT 5 6 ",
5394 "CONECT 6 5 ",
5395 "CONECT 7 8 ",
5396 "CONECT 8 7 ",
5397 "CONECT 9 10 ",
5398 "CONECT 10 9 ",
5399 "CONECT 11 12 ",
5400 "CONECT 12 11 ",
5401 "CONECT 13 14 ",
5402 "CONECT 14 13 ",
5403 "CONECT 15 16 ",
5404 "CONECT 16 15 ",
5405 "MASTER 0 0 0 0 0 0 0 0 16 1 16 0 ",
5406 "END "
5407 ]
5408
5409
5410 lines = file.readlines()
5411 self.strip_remarks(lines)
5412 self.assertEqual(len(result), len(lines))
5413 for i in range(len(lines)):
5414 self.assertEqual(result[i]+'\n', lines[i])
5415
5416
5418 """Check the operation of the structure.web_of_motion user function using structural models 1 and 3 (of 3)."""
5419
5420
5421 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
5422 self.interpreter.structure.read_pdb('web_of_motion.pdb', dir=path)
5423
5424
5425 file = DummyFileObject()
5426 self.interpreter.structure.web_of_motion(file=file, models=[[1, 3]])
5427
5428
5429 result = [
5430 "ATOM 1 N LEU A 4 9.464 -9.232 27.573 1.00 0.00 N ",
5431 "ATOM 2 N LEU A 4 7.761 -6.392 27.161 1.00 0.00 N ",
5432 "ATOM 3 H LEU A 4 8.575 -8.953 27.963 1.00 0.00 H ",
5433 "ATOM 4 H LEU A 4 7.278 -6.195 28.026 1.00 0.00 H ",
5434 "ATOM 5 CA LEU A 4 10.302 -8.195 26.930 1.00 0.00 C ",
5435 "ATOM 6 CA LEU A 4 9.256 -6.332 27.183 1.00 0.00 C ",
5436 "ATOM 7 CB LEU A 4 9.494 -7.221 26.051 1.00 0.00 C ",
5437 "ATOM 8 CB LEU A 4 9.799 -5.331 26.144 1.00 0.00 C ",
5438 "ATOM 9 CG LEU A 4 10.107 -5.862 25.665 1.00 0.00 C ",
5439 "ATOM 10 CG LEU A 4 10.293 -5.882 24.803 1.00 0.00 C ",
5440 "ATOM 11 CD1 LEU A 4 11.182 -6.007 24.608 1.00 0.00 C ",
5441 "ATOM 12 CD1 LEU A 4 9.404 -6.984 24.274 1.00 0.00 C ",
5442 "ATOM 13 CD2 LEU A 4 9.036 -4.875 25.171 1.00 0.00 C ",
5443 "ATOM 14 CD2 LEU A 4 10.355 -4.772 23.792 1.00 0.00 C ",
5444 "ATOM 15 C LEU A 4 10.999 -7.436 28.046 1.00 0.00 C ",
5445 "ATOM 16 C LEU A 4 9.816 -6.033 28.572 1.00 0.00 C ",
5446 "TER 17 LEU A 4 ",
5447 "CONECT 1 2 ",
5448 "CONECT 2 1 ",
5449 "CONECT 3 4 ",
5450 "CONECT 4 3 ",
5451 "CONECT 5 6 ",
5452 "CONECT 6 5 ",
5453 "CONECT 7 8 ",
5454 "CONECT 8 7 ",
5455 "CONECT 9 10 ",
5456 "CONECT 10 9 ",
5457 "CONECT 11 12 ",
5458 "CONECT 12 11 ",
5459 "CONECT 13 14 ",
5460 "CONECT 14 13 ",
5461 "CONECT 15 16 ",
5462 "CONECT 16 15 ",
5463 "MASTER 0 0 0 0 0 0 0 0 16 1 16 0 ",
5464 "END "
5465 ]
5466
5467
5468 lines = file.readlines()
5469 self.strip_remarks(lines)
5470 self.assertEqual(len(result), len(lines))
5471 for i in range(len(lines)):
5472 self.assertEqual(result[i]+'\n', lines[i])
5473
5474
5476 """Check the operation of the structure.web_of_motion user function using molecules 1 and 3 (of 3)."""
5477
5478
5479 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
5480 self.interpreter.structure.read_pdb('web_of_motion.pdb', dir=path, read_model=1, set_mol_name='1', set_model_num=1)
5481 self.interpreter.structure.read_pdb('web_of_motion.pdb', dir=path, read_model=2, set_mol_name='2', set_model_num=1)
5482 self.interpreter.structure.read_pdb('web_of_motion.pdb', dir=path, read_model=3, set_mol_name='3', set_model_num=1)
5483
5484
5485 file = DummyFileObject()
5486 self.interpreter.structure.web_of_motion(file=file, molecules=[['1', '3']])
5487
5488
5489 result = [
5490 "ATOM 1 N LEU A 4 9.464 -9.232 27.573 1.00 0.00 N ",
5491 "ATOM 2 N LEU A 4 7.761 -6.392 27.161 1.00 0.00 N ",
5492 "ATOM 3 H LEU A 4 8.575 -8.953 27.963 1.00 0.00 H ",
5493 "ATOM 4 H LEU A 4 7.278 -6.195 28.026 1.00 0.00 H ",
5494 "ATOM 5 CA LEU A 4 10.302 -8.195 26.930 1.00 0.00 C ",
5495 "ATOM 6 CA LEU A 4 9.256 -6.332 27.183 1.00 0.00 C ",
5496 "ATOM 7 CB LEU A 4 9.494 -7.221 26.051 1.00 0.00 C ",
5497 "ATOM 8 CB LEU A 4 9.799 -5.331 26.144 1.00 0.00 C ",
5498 "ATOM 9 CG LEU A 4 10.107 -5.862 25.665 1.00 0.00 C ",
5499 "ATOM 10 CG LEU A 4 10.293 -5.882 24.803 1.00 0.00 C ",
5500 "ATOM 11 CD1 LEU A 4 11.182 -6.007 24.608 1.00 0.00 C ",
5501 "ATOM 12 CD1 LEU A 4 9.404 -6.984 24.274 1.00 0.00 C ",
5502 "ATOM 13 CD2 LEU A 4 9.036 -4.875 25.171 1.00 0.00 C ",
5503 "ATOM 14 CD2 LEU A 4 10.355 -4.772 23.792 1.00 0.00 C ",
5504 "ATOM 15 C LEU A 4 10.999 -7.436 28.046 1.00 0.00 C ",
5505 "ATOM 16 C LEU A 4 9.816 -6.033 28.572 1.00 0.00 C ",
5506 "TER 17 LEU A 4 ",
5507 "CONECT 1 2 ",
5508 "CONECT 2 1 ",
5509 "CONECT 3 4 ",
5510 "CONECT 4 3 ",
5511 "CONECT 5 6 ",
5512 "CONECT 6 5 ",
5513 "CONECT 7 8 ",
5514 "CONECT 8 7 ",
5515 "CONECT 9 10 ",
5516 "CONECT 10 9 ",
5517 "CONECT 11 12 ",
5518 "CONECT 12 11 ",
5519 "CONECT 13 14 ",
5520 "CONECT 14 13 ",
5521 "CONECT 15 16 ",
5522 "CONECT 16 15 ",
5523 "MASTER 0 0 0 0 0 0 0 0 16 1 16 0 ",
5524 "END "
5525 ]
5526
5527
5528 lines = file.readlines()
5529 self.strip_remarks(lines)
5530 self.assertEqual(len(result), len(lines))
5531 for i in range(len(lines)):
5532 self.assertEqual(result[i]+'\n', lines[i])
5533
5534
5536 """Check the operation of the structure.web_of_motion user function using all structural models."""
5537
5538
5539 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
5540 self.interpreter.structure.read_pdb('web_of_motion.pdb', dir=path)
5541
5542
5543 file = DummyFileObject()
5544 self.interpreter.structure.web_of_motion(file=file)
5545
5546
5547 result = [
5548 "ATOM 1 N LEU A 4 9.464 -9.232 27.573 1.00 0.00 N ",
5549 "ATOM 2 N LEU A 4 9.211 -9.425 26.970 1.00 0.00 N ",
5550 "ATOM 3 N LEU A 4 7.761 -6.392 27.161 1.00 0.00 N ",
5551 "ATOM 4 H LEU A 4 8.575 -8.953 27.963 1.00 0.00 H ",
5552 "ATOM 5 H LEU A 4 9.085 -9.743 27.919 1.00 0.00 H ",
5553 "ATOM 6 H LEU A 4 7.278 -6.195 28.026 1.00 0.00 H ",
5554 "ATOM 7 CA LEU A 4 10.302 -8.195 26.930 1.00 0.00 C ",
5555 "ATOM 8 CA LEU A 4 10.077 -8.221 26.720 1.00 0.00 C ",
5556 "ATOM 9 CA LEU A 4 9.256 -6.332 27.183 1.00 0.00 C ",
5557 "ATOM 10 CB LEU A 4 9.494 -7.221 26.051 1.00 0.00 C ",
5558 "ATOM 11 CB LEU A 4 9.297 -7.096 26.024 1.00 0.00 C ",
5559 "ATOM 12 CB LEU A 4 9.799 -5.331 26.144 1.00 0.00 C ",
5560 "ATOM 13 CG LEU A 4 10.107 -5.862 25.665 1.00 0.00 C ",
5561 "ATOM 14 CG LEU A 4 10.061 -5.803 25.679 1.00 0.00 C ",
5562 "ATOM 15 CG LEU A 4 10.293 -5.882 24.803 1.00 0.00 C ",
5563 "ATOM 16 CD1 LEU A 4 11.182 -6.007 24.608 1.00 0.00 C ",
5564 "ATOM 17 CD1 LEU A 4 11.029 -6.002 24.507 1.00 0.00 C ",
5565 "ATOM 18 CD1 LEU A 4 9.404 -6.984 24.274 1.00 0.00 C ",
5566 "ATOM 19 CD2 LEU A 4 9.036 -4.875 25.171 1.00 0.00 C ",
5567 "ATOM 20 CD2 LEU A 4 9.120 -4.618 25.384 1.00 0.00 C ",
5568 "ATOM 21 CD2 LEU A 4 10.355 -4.772 23.792 1.00 0.00 C ",
5569 "ATOM 22 C LEU A 4 10.999 -7.436 28.046 1.00 0.00 C ",
5570 "ATOM 23 C LEU A 4 10.625 -7.721 28.047 1.00 0.00 C ",
5571 "ATOM 24 C LEU A 4 9.816 -6.033 28.572 1.00 0.00 C ",
5572 "TER 25 LEU A 4 ",
5573 "CONECT 1 2 3 ",
5574 "CONECT 2 1 3 ",
5575 "CONECT 3 1 2 ",
5576 "CONECT 4 5 6 ",
5577 "CONECT 5 4 6 ",
5578 "CONECT 6 4 5 ",
5579 "CONECT 7 8 9 ",
5580 "CONECT 8 7 9 ",
5581 "CONECT 9 7 8 ",
5582 "CONECT 10 11 12 ",
5583 "CONECT 11 10 12 ",
5584 "CONECT 12 10 11 ",
5585 "CONECT 13 14 15 ",
5586 "CONECT 14 13 15 ",
5587 "CONECT 15 13 14 ",
5588 "CONECT 16 17 18 ",
5589 "CONECT 17 16 18 ",
5590 "CONECT 18 16 17 ",
5591 "CONECT 19 20 21 ",
5592 "CONECT 20 19 21 ",
5593 "CONECT 21 19 20 ",
5594 "CONECT 22 23 24 ",
5595 "CONECT 23 22 24 ",
5596 "CONECT 24 22 23 ",
5597 "MASTER 0 0 0 0 0 0 0 0 24 1 24 0 ",
5598 "END "
5599 ]
5600
5601
5602 lines = file.readlines()
5603 self.strip_remarks(lines)
5604 self.assertEqual(len(result), len(lines))
5605 for i in range(len(lines)):
5606 self.assertEqual(result[i]+'\n', lines[i])
5607
5608
5610 """Check the operation of the structure.web_of_motion user function using all molecules."""
5611
5612
5613 path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'structures'
5614 self.interpreter.structure.read_pdb('web_of_motion.pdb', dir=path, read_model=1, set_mol_name='1', set_model_num=1)
5615 self.interpreter.structure.read_pdb('web_of_motion.pdb', dir=path, read_model=2, set_mol_name='2', set_model_num=1)
5616 self.interpreter.structure.read_pdb('web_of_motion.pdb', dir=path, read_model=3, set_mol_name='3', set_model_num=1)
5617
5618
5619 file = DummyFileObject()
5620 self.interpreter.structure.web_of_motion(file=file, molecules=[['1', '2', '3']])
5621
5622
5623 result = [
5624 "ATOM 1 N LEU A 4 9.464 -9.232 27.573 1.00 0.00 N ",
5625 "ATOM 2 N LEU A 4 9.211 -9.425 26.970 1.00 0.00 N ",
5626 "ATOM 3 N LEU A 4 7.761 -6.392 27.161 1.00 0.00 N ",
5627 "ATOM 4 H LEU A 4 8.575 -8.953 27.963 1.00 0.00 H ",
5628 "ATOM 5 H LEU A 4 9.085 -9.743 27.919 1.00 0.00 H ",
5629 "ATOM 6 H LEU A 4 7.278 -6.195 28.026 1.00 0.00 H ",
5630 "ATOM 7 CA LEU A 4 10.302 -8.195 26.930 1.00 0.00 C ",
5631 "ATOM 8 CA LEU A 4 10.077 -8.221 26.720 1.00 0.00 C ",
5632 "ATOM 9 CA LEU A 4 9.256 -6.332 27.183 1.00 0.00 C ",
5633 "ATOM 10 CB LEU A 4 9.494 -7.221 26.051 1.00 0.00 C ",
5634 "ATOM 11 CB LEU A 4 9.297 -7.096 26.024 1.00 0.00 C ",
5635 "ATOM 12 CB LEU A 4 9.799 -5.331 26.144 1.00 0.00 C ",
5636 "ATOM 13 CG LEU A 4 10.107 -5.862 25.665 1.00 0.00 C ",
5637 "ATOM 14 CG LEU A 4 10.061 -5.803 25.679 1.00 0.00 C ",
5638 "ATOM 15 CG LEU A 4 10.293 -5.882 24.803 1.00 0.00 C ",
5639 "ATOM 16 CD1 LEU A 4 11.182 -6.007 24.608 1.00 0.00 C ",
5640 "ATOM 17 CD1 LEU A 4 11.029 -6.002 24.507 1.00 0.00 C ",
5641 "ATOM 18 CD1 LEU A 4 9.404 -6.984 24.274 1.00 0.00 C ",
5642 "ATOM 19 CD2 LEU A 4 9.036 -4.875 25.171 1.00 0.00 C ",
5643 "ATOM 20 CD2 LEU A 4 9.120 -4.618 25.384 1.00 0.00 C ",
5644 "ATOM 21 CD2 LEU A 4 10.355 -4.772 23.792 1.00 0.00 C ",
5645 "ATOM 22 C LEU A 4 10.999 -7.436 28.046 1.00 0.00 C ",
5646 "ATOM 23 C LEU A 4 10.625 -7.721 28.047 1.00 0.00 C ",
5647 "ATOM 24 C LEU A 4 9.816 -6.033 28.572 1.00 0.00 C ",
5648 "TER 25 LEU A 4 ",
5649 "CONECT 1 2 3 ",
5650 "CONECT 2 1 3 ",
5651 "CONECT 3 1 2 ",
5652 "CONECT 4 5 6 ",
5653 "CONECT 5 4 6 ",
5654 "CONECT 6 4 5 ",
5655 "CONECT 7 8 9 ",
5656 "CONECT 8 7 9 ",
5657 "CONECT 9 7 8 ",
5658 "CONECT 10 11 12 ",
5659 "CONECT 11 10 12 ",
5660 "CONECT 12 10 11 ",
5661 "CONECT 13 14 15 ",
5662 "CONECT 14 13 15 ",
5663 "CONECT 15 13 14 ",
5664 "CONECT 16 17 18 ",
5665 "CONECT 17 16 18 ",
5666 "CONECT 18 16 17 ",
5667 "CONECT 19 20 21 ",
5668 "CONECT 20 19 21 ",
5669 "CONECT 21 19 20 ",
5670 "CONECT 22 23 24 ",
5671 "CONECT 23 22 24 ",
5672 "CONECT 24 22 23 ",
5673 "MASTER 0 0 0 0 0 0 0 0 24 1 24 0 ",
5674 "END "
5675 ]
5676
5677
5678 lines = file.readlines()
5679 self.strip_remarks(lines)
5680 self.assertEqual(len(result), len(lines))
5681 for i in range(len(lines)):
5682 self.assertEqual(result[i]+'\n', lines[i])
5683