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