Package test_suite :: Package system_tests :: Module structure
[hide private]
[frames] | no frames]

Source Code for Module test_suite.system_tests.structure

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