Tutorial for model free SBiNLab
Background
This is a tutorial for Lau and Kaare in SBiNLab, and hopefully others.
To get inspiration of example scripts files and see how the protocol is performed, have a look here:
- nmr-relax-code/test_suite/system_tests/scripts/model_free/dauvergne_protocol.py
- nmr-relax-code/auto_analyses/dauvergne_protocol.py
For references, see relax references:
- d'Auvergne, E. J. and Gooley, P. R. (2008). Optimisation of NMR dynamic models I. Minimisation algorithms and their performance within the model-free and Brownian rotational diffusion spaces. J. Biomol. NMR, 40(2), 107-119.
- d'Auvergne, E. J. and Gooley, P. R. (2008). Optimisation of NMR dynamic models II. A new methodology for the dual optimisation of the model-free parameters and the Brownian rotational diffusion tensor. J. Biomol. NMR, 40(2), 121-133.
Scripts
To get the protocol to work, we need to
- Load a PDB structure
- Assign the "data structure" in relax through spin-assignments
- Assign necessary "information" as isotope information to each spin-assignment
- Read "R1, R2 and NOE" for different magnet field strengths
- Calculate some properties
- Check the data
- Run the protocol
To work most efficiently, it is important to perform each step 1 by 1, and closely inspect the log for any errors.
For similar tutorial, have a look at: Tutorial for model-free analysis sam mahdi
01_read_pdb.py - Test load of PDB
First we just want to test to read the PDB file.
See content of: 01_read_pdb.py
Run with
relax 01_read_pdb.py -t 01_read_pdb.log
Output from logfile |
---|
script = '01_read_pdb.py'
----------------------------------------------------------------------------------------------------
# Python module imports.
from time import asctime, localtime
import os
# relax module imports.
from auto_analyses.dauvergne_protocol import dAuvergne_protocol
# Set up the data pipe.
#######################
# The following sequence of user function calls can be changed as needed.
# Create the data pipe.
bundle_name = "mf (%s)" % asctime(localtime())
name = "origin"
pipe.create(name, 'mf', bundle=bundle_name)
# Load the PDB file.
structure.read_pdb('energy_1.pdb', set_mol_name='TEMP', read_model=1)
# Set up the 15N and 1H spins (both backbone and Trp indole sidechains).
structure.load_spins('@N', ave_pos=True)
structure.load_spins('@NE1', ave_pos=True)
structure.load_spins('@H', ave_pos=True)
structure.load_spins('@HE1', ave_pos=True)
# Assign isotopes
spin.isotope('15N', spin_id='@N*')
spin.isotope('1H', spin_id='@H*')
----------------------------------------------------------------------------------------------------
relax> pipe.create(pipe_name='origin', pipe_type='mf', bundle='mf (Fri Oct 13 17:44:18 2017)')
relax> structure.read_pdb(file='energy_1.pdb', dir=None, read_mol=None, set_mol_name='TEMP', read_model=1, set_model_num=None, alt_loc=None, verbosity=1, merge=False)
Internal relax PDB parser.
Opening the file 'energy_1.pdb' for reading.
RelaxWarning: Cannot determine the element associated with atom 'X'.
RelaxWarning: Cannot determine the element associated with atom 'Z'.
RelaxWarning: Cannot determine the element associated with atom 'OO'.
RelaxWarning: Cannot determine the element associated with atom 'OO2'.
Adding molecule 'TEMP' to model 1 (from the original molecule number 1 of model 1).
relax> structure.load_spins(spin_id='@N', from_mols=None, mol_name_target=None, ave_pos=True, spin_num=True)
Adding the following spins to the relax data store.
# mol_name res_num res_name spin_num spin_name
REMOVED FROM DISPLAY
relax> structure.load_spins(spin_id='@NE1', from_mols=None, mol_name_target=None, ave_pos=True, spin_num=True)
Adding the following spins to the relax data store.
# mol_name res_num res_name spin_num spin_name
REMOVED FROM DISPLAY
relax> structure.load_spins(spin_id='@H', from_mols=None, mol_name_target=None, ave_pos=True, spin_num=True)
Adding the following spins to the relax data store.
# mol_name res_num res_name spin_num spin_name
REMOVED FROM DISPLAY
relax> structure.load_spins(spin_id='@HE1', from_mols=None, mol_name_target=None, ave_pos=True, spin_num=True)
Adding the following spins to the relax data store.
# mol_name res_num res_name spin_num spin_name
REMOVED FROM DISPLAY
relax> spin.isotope(isotope='15N', spin_id='@N*', force=False)
relax> spin.isotope(isotope='1H', spin_id='@H*', force=False)
|
02_read_data.py - Test load of data
That looked to go fine, so let us try to just load data.
See content of: 02_read_data.py
Run with
relax 02_read_data.py -t 02_read_data.log
Output from logfile |
---|
script = '02_read_data.py'
----------------------------------------------------------------------------------------------------
# Python module imports.
from time import asctime, localtime
import os
# relax module imports.
from auto_analyses.dauvergne_protocol import dAuvergne_protocol
# Set up the data pipe.
#######################
# The following sequence of user function calls can be changed as needed.
# Create the data pipe.
bundle_name = "mf (%s)" % asctime(localtime())
name = "origin"
pipe.create(name, 'mf', bundle=bundle_name)
# Load the PDB file.
structure.read_pdb('energy_1.pdb', set_mol_name='TEMP', read_model=1)
# Set up the 15N and 1H spins (both backbone and Trp indole sidechains).
structure.load_spins('@N', ave_pos=True)
structure.load_spins('@NE1', ave_pos=True)
structure.load_spins('@H', ave_pos=True)
structure.load_spins('@HE1', ave_pos=True)
# Assign isotopes
spin.isotope('15N', spin_id='@N*')
spin.isotope('1H', spin_id='@H*')
# Load the relaxation data.
relax_data.read(ri_id='R1_600', ri_type='R1', frq=600.17*1e6, file='R1_600MHz_new_model_free.dat', mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7)
relax_data.read(ri_id='R2_600', ri_type='R2', frq=600.17*1e6, file='R2_600MHz_new_model_free.dat', mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7)
relax_data.read(ri_id='NOE_600', ri_type='NOE', frq=600.17*1e6, file='NOE_600MHz_new.dat', mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7)
relax_data.read(ri_id='R1_750', ri_type='R1', frq=750.06*1e6, file='R1_750MHz_model_free.dat', mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7)
relax_data.read(ri_id='R2_750', ri_type='R2', frq=750.06*1e6, file='R2_750MHz_model_free.dat', mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7)
relax_data.read(ri_id='NOE_750', ri_type='NOE', frq=750.06*1e6, file='NOE_750MHz.dat', mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7)
# Define the magnetic dipole-dipole relaxation interaction.
interatom.define(spin_id1='@N', spin_id2='@H', direct_bond=True)
interatom.define(spin_id1='@NE1', spin_id2='@HE1', direct_bond=True)
interatom.set_dist(spin_id1='@N*', spin_id2='@H*', ave_dist=1.02 * 1e-10)
interatom.unit_vectors()
# Define the chemical shift relaxation interaction.
value.set(-172 * 1e-6, 'csa', spin_id='@N*')
----------------------------------------------------------------------------------------------------
relax> pipe.create(pipe_name='origin', pipe_type='mf', bundle='mf (Fri Oct 13 17:51:28 2017)')
relax> structure.read_pdb(file='energy_1.pdb', dir=None, read_mol=None, set_mol_name='TEMP', read_model=1, set_model_num=None, alt_loc=None, verbosity=1, merge=False)
Internal relax PDB parser.
Opening the file 'energy_1.pdb' for reading.
RelaxWarning: Cannot determine the element associated with atom 'X'.
RelaxWarning: Cannot determine the element associated with atom 'Z'.
RelaxWarning: Cannot determine the element associated with atom 'OO'.
RelaxWarning: Cannot determine the element associated with atom 'OO2'.
Adding molecule 'TEMP' to model 1 (from the original molecule number 1 of model 1).
relax> structure.load_spins(spin_id='@N', from_mols=None, mol_name_target=None, ave_pos=True, spin_num=True)
Adding the following spins to the relax data store.
# mol_name res_num res_name spin_num spin_name
REMOVED FROM DISPLAY
relax> structure.load_spins(spin_id='@NE1', from_mols=None, mol_name_target=None, ave_pos=True, spin_num=True)
Adding the following spins to the relax data store.
# mol_name res_num res_name spin_num spin_name
REMOVED FROM DISPLAY
relax> structure.load_spins(spin_id='@H', from_mols=None, mol_name_target=None, ave_pos=True, spin_num=True)
Adding the following spins to the relax data store.
# mol_name res_num res_name spin_num spin_name
REMOVED FROM DISPLAY
relax> structure.load_spins(spin_id='@HE1', from_mols=None, mol_name_target=None, ave_pos=True, spin_num=True)
Adding the following spins to the relax data store.
# mol_name res_num res_name spin_num spin_name
REMOVED FROM DISPLAY
relax> spin.isotope(isotope='15N', spin_id='@N*', force=False)
relax> spin.isotope(isotope='1H', spin_id='@H*', force=False)
relax> relax_data.read(ri_id='R1_600', ri_type='R1', frq=600170000.0, file='R1_600MHz_new_model_free.dat', dir=None, spin_id_col=None, mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7, sep=None, spin_id=None)
Opening the file 'R1_600MHz_new_model_free.dat' for reading.
The following 600.17 MHz R1 relaxation data with the ID 'R1_600' has been loaded into the relax data store:
# Spin_ID Value Error
REMOVED FROM DISPLAY
relax> relax_data.read(ri_id='R2_600', ri_type='R2', frq=600170000.0, file='R2_600MHz_new_model_free.dat', dir=None, spin_id_col=None, mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7, sep=None, spin_id=None)
Opening the file 'R2_600MHz_new_model_free.dat' for reading.
The following 600.17 MHz R2 relaxation data with the ID 'R2_600' has been loaded into the relax data store:
# Spin_ID Value Error
REMOVED FROM DISPLAY
relax> relax_data.read(ri_id='NOE_600', ri_type='NOE', frq=600170000.0, file='NOE_600MHz_new.dat', dir=None, spin_id_col=None, mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7, sep=None, spin_id=None)
Opening the file 'NOE_600MHz_new.dat' for reading.
The following 600.17 MHz NOE relaxation data with the ID 'NOE_600' has been loaded into the relax data store:
# Spin_ID Value Error
REMOVED FROM DISPLAY
relax> relax_data.read(ri_id='R1_750', ri_type='R1', frq=750060000.0, file='R1_750MHz_model_free.dat', dir=None, spin_id_col=None, mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7, sep=None, spin_id=None)
Opening the file 'R1_750MHz_model_free.dat' for reading.
The following 750.06 MHz R1 relaxation data with the ID 'R1_750' has been loaded into the relax data store:
# Spin_ID Value Error
REMOVED FROM DISPLAY
relax> relax_data.read(ri_id='R2_750', ri_type='R2', frq=750060000.0, file='R2_750MHz_model_free.dat', dir=None, spin_id_col=None, mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7, sep=None, spin_id=None)
Opening the file 'R2_750MHz_model_free.dat' for reading.
The following 750.06 MHz R2 relaxation data with the ID 'R2_750' has been loaded into the relax data store:
# Spin_ID Value Error
REMOVED FROM DISPLAY
relax> relax_data.read(ri_id='NOE_750', ri_type='NOE', frq=750060000.0, file='NOE_750MHz.dat', dir=None, spin_id_col=None, mol_name_col=1, res_num_col=2, res_name_col=3, spin_num_col=4, spin_name_col=5, data_col=6, error_col=7, sep=None, spin_id=None)
Opening the file 'NOE_750MHz.dat' for reading.
The following 750.06 MHz NOE relaxation data with the ID 'NOE_750' has been loaded into the relax data store:
# Spin_ID Value Error
REMOVED FROM DISPLAY
relax> interatom.define(spin_id1='@N', spin_id2='@H', direct_bond=True, spin_selection=True, pipe=None)
Interatomic interactions are now defined for the following spins:
# Spin_ID_1 Spin_ID_2
'#TEMP:3@N' '#TEMP:3@H'
'#TEMP:4@N' '#TEMP:4@H'
'#TEMP:5@N' '#TEMP:5@H'
'#TEMP:6@N' '#TEMP:6@H'
'#TEMP:7@N' '#TEMP:7@H'
'#TEMP:8@N' '#TEMP:8@H'
'#TEMP:9@N' '#TEMP:9@H'
'#TEMP:10@N' '#TEMP:10@H'
'#TEMP:11@N' '#TEMP:11@H'
'#TEMP:13@N' '#TEMP:13@H'
'#TEMP:14@N' '#TEMP:14@H'
'#TEMP:15@N' '#TEMP:15@H'
'#TEMP:16@N' '#TEMP:16@H'
'#TEMP:17@N' '#TEMP:17@H'
'#TEMP:18@N' '#TEMP:18@H'
'#TEMP:19@N' '#TEMP:19@H'
'#TEMP:20@N' '#TEMP:20@H'
'#TEMP:21@N' '#TEMP:21@H'
'#TEMP:22@N' '#TEMP:22@H'
'#TEMP:23@N' '#TEMP:23@H'
'#TEMP:24@N' '#TEMP:24@H'
'#TEMP:25@N' '#TEMP:25@H'
'#TEMP:26@N' '#TEMP:26@H'
'#TEMP:27@N' '#TEMP:27@H'
'#TEMP:28@N' '#TEMP:28@H'
'#TEMP:29@N' '#TEMP:29@H'
'#TEMP:30@N' '#TEMP:30@H'
'#TEMP:31@N' '#TEMP:31@H'
'#TEMP:32@N' '#TEMP:32@H'
'#TEMP:33@N' '#TEMP:33@H'
'#TEMP:34@N' '#TEMP:34@H'
'#TEMP:35@N' '#TEMP:35@H'
'#TEMP:36@N' '#TEMP:36@H'
'#TEMP:37@N' '#TEMP:37@H'
'#TEMP:38@N' '#TEMP:38@H'
'#TEMP:39@N' '#TEMP:39@H'
'#TEMP:40@N' '#TEMP:40@H'
'#TEMP:41@N' '#TEMP:41@H'
'#TEMP:42@N' '#TEMP:42@H'
'#TEMP:43@N' '#TEMP:43@H'
'#TEMP:45@N' '#TEMP:45@H'
'#TEMP:46@N' '#TEMP:46@H'
'#TEMP:47@N' '#TEMP:47@H'
'#TEMP:48@N' '#TEMP:48@H'
'#TEMP:49@N' '#TEMP:49@H'
'#TEMP:50@N' '#TEMP:50@H'
'#TEMP:51@N' '#TEMP:51@H'
'#TEMP:52@N' '#TEMP:52@H'
'#TEMP:53@N' '#TEMP:53@H'
'#TEMP:54@N' '#TEMP:54@H'
'#TEMP:55@N' '#TEMP:55@H'
'#TEMP:56@N' '#TEMP:56@H'
'#TEMP:57@N' '#TEMP:57@H'
'#TEMP:58@N' '#TEMP:58@H'
'#TEMP:59@N' '#TEMP:59@H'
'#TEMP:60@N' '#TEMP:60@H'
'#TEMP:61@N' '#TEMP:61@H'
'#TEMP:62@N' '#TEMP:62@H'
'#TEMP:63@N' '#TEMP:63@H'
'#TEMP:64@N' '#TEMP:64@H'
'#TEMP:65@N' '#TEMP:65@H'
'#TEMP:66@N' '#TEMP:66@H'
'#TEMP:67@N' '#TEMP:67@H'
'#TEMP:68@N' '#TEMP:68@H'
'#TEMP:69@N' '#TEMP:69@H'
'#TEMP:70@N' '#TEMP:70@H'
'#TEMP:71@N' '#TEMP:71@H'
'#TEMP:72@N' '#TEMP:72@H'
'#TEMP:73@N' '#TEMP:73@H'
'#TEMP:74@N' '#TEMP:74@H'
'#TEMP:75@N' '#TEMP:75@H'
'#TEMP:76@N' '#TEMP:76@H'
'#TEMP:77@N' '#TEMP:77@H'
'#TEMP:78@N' '#TEMP:78@H'
'#TEMP:79@N' '#TEMP:79@H'
'#TEMP:80@N' '#TEMP:80@H'
'#TEMP:81@N' '#TEMP:81@H'
'#TEMP:82@N' '#TEMP:82@H'
'#TEMP:83@N' '#TEMP:83@H'
'#TEMP:84@N' '#TEMP:84@H'
'#TEMP:85@N' '#TEMP:85@H'
'#TEMP:87@N' '#TEMP:87@H'
'#TEMP:88@N' '#TEMP:88@H'
'#TEMP:89@N' '#TEMP:89@H'
'#TEMP:90@N' '#TEMP:90@H'
'#TEMP:91@N' '#TEMP:91@H'
'#TEMP:93@N' '#TEMP:93@H'
'#TEMP:94@N' '#TEMP:94@H'
'#TEMP:95@N' '#TEMP:95@H'
'#TEMP:96@N' '#TEMP:96@H'
'#TEMP:97@N' '#TEMP:97@H'
'#TEMP:98@N' '#TEMP:98@H'
'#TEMP:99@N' '#TEMP:99@H'
'#TEMP:100@N' '#TEMP:100@H'
'#TEMP:101@N' '#TEMP:101@H'
'#TEMP:102@N' '#TEMP:102@H'
'#TEMP:103@N' '#TEMP:103@H'
'#TEMP:104@N' '#TEMP:104@H'
'#TEMP:105@N' '#TEMP:105@H'
'#TEMP:106@N' '#TEMP:106@H'
'#TEMP:107@N' '#TEMP:107@H'
'#TEMP:108@N' '#TEMP:108@H'
'#TEMP:109@N' '#TEMP:109@H'
'#TEMP:110@N' '#TEMP:110@H'
'#TEMP:111@N' '#TEMP:111@H'
'#TEMP:112@N' '#TEMP:112@H'
'#TEMP:113@N' '#TEMP:113@H'
'#TEMP:114@N' '#TEMP:114@H'
'#TEMP:115@N' '#TEMP:115@H'
'#TEMP:116@N' '#TEMP:116@H'
'#TEMP:117@N' '#TEMP:117@H'
'#TEMP:118@N' '#TEMP:118@H'
'#TEMP:119@N' '#TEMP:119@H'
'#TEMP:120@N' '#TEMP:120@H'
'#TEMP:121@N' '#TEMP:121@H'
'#TEMP:122@N' '#TEMP:122@H'
'#TEMP:123@N' '#TEMP:123@H'
'#TEMP:124@N' '#TEMP:124@H'
'#TEMP:125@N' '#TEMP:125@H'
'#TEMP:127@N' '#TEMP:127@H'
'#TEMP:128@N' '#TEMP:128@H'
'#TEMP:129@N' '#TEMP:129@H'
'#TEMP:130@N' '#TEMP:130@H'
'#TEMP:131@N' '#TEMP:131@H'
'#TEMP:132@N' '#TEMP:132@H'
'#TEMP:133@N' '#TEMP:133@H'
'#TEMP:134@N' '#TEMP:134@H'
'#TEMP:136@N' '#TEMP:136@H'
'#TEMP:138@N' '#TEMP:138@H'
'#TEMP:139@N' '#TEMP:139@H'
'#TEMP:140@N' '#TEMP:140@H'
'#TEMP:141@N' '#TEMP:141@H'
'#TEMP:142@N' '#TEMP:142@H'
'#TEMP:143@N' '#TEMP:143@H'
'#TEMP:144@N' '#TEMP:144@H'
'#TEMP:145@N' '#TEMP:145@H'
'#TEMP:146@N' '#TEMP:146@H'
'#TEMP:147@N' '#TEMP:147@H'
'#TEMP:148@N' '#TEMP:148@H'
'#TEMP:149@N' '#TEMP:149@H'
'#TEMP:150@N' '#TEMP:150@H'
'#TEMP:151@N' '#TEMP:151@H'
'#TEMP:152@N' '#TEMP:152@H'
'#TEMP:153@N' '#TEMP:153@H'
'#TEMP:154@N' '#TEMP:154@H'
'#TEMP:155@N' '#TEMP:155@H'
'#TEMP:156@N' '#TEMP:156@H'
'#TEMP:157@N' '#TEMP:157@H'
'#TEMP:158@N' '#TEMP:158@H'
'#TEMP:159@N' '#TEMP:159@H'
relax> interatom.define(spin_id1='@NE1', spin_id2='@HE1', direct_bond=True, spin_selection=True, pipe=None)
Interatomic interactions are now defined for the following spins:
# Spin_ID_1 Spin_ID_2
'#TEMP:33@NE1' '#TEMP:33@HE1'
'#TEMP:48@NE1' '#TEMP:48@HE1'
'#TEMP:49@NE1' '#TEMP:49@HE1'
'#TEMP:59@NE1' '#TEMP:59@HE1'
'#TEMP:98@NE1' '#TEMP:98@HE1'
relax> interatom.set_dist(spin_id1='@N*', spin_id2='@H*', ave_dist=1.0200000000000001e-10, unit='meter')
The following averaged distances have been set:
# Spin_ID_1 Spin_ID_2 Ave_distance(meters)
'#TEMP:3@N' '#TEMP:3@H' 1.0200000000000001e-10
'#TEMP:4@N' '#TEMP:4@H' 1.0200000000000001e-10
'#TEMP:5@N' '#TEMP:5@H' 1.0200000000000001e-10
'#TEMP:6@N' '#TEMP:6@H' 1.0200000000000001e-10
'#TEMP:7@N' '#TEMP:7@H' 1.0200000000000001e-10
'#TEMP:8@N' '#TEMP:8@H' 1.0200000000000001e-10
'#TEMP:9@N' '#TEMP:9@H' 1.0200000000000001e-10
'#TEMP:10@N' '#TEMP:10@H' 1.0200000000000001e-10
'#TEMP:11@N' '#TEMP:11@H' 1.0200000000000001e-10
'#TEMP:13@N' '#TEMP:13@H' 1.0200000000000001e-10
'#TEMP:14@N' '#TEMP:14@H' 1.0200000000000001e-10
'#TEMP:15@N' '#TEMP:15@H' 1.0200000000000001e-10
'#TEMP:16@N' '#TEMP:16@H' 1.0200000000000001e-10
'#TEMP:17@N' '#TEMP:17@H' 1.0200000000000001e-10
'#TEMP:18@N' '#TEMP:18@H' 1.0200000000000001e-10
'#TEMP:19@N' '#TEMP:19@H' 1.0200000000000001e-10
'#TEMP:20@N' '#TEMP:20@H' 1.0200000000000001e-10
'#TEMP:21@N' '#TEMP:21@H' 1.0200000000000001e-10
'#TEMP:22@N' '#TEMP:22@H' 1.0200000000000001e-10
'#TEMP:23@N' '#TEMP:23@H' 1.0200000000000001e-10
'#TEMP:24@N' '#TEMP:24@H' 1.0200000000000001e-10
'#TEMP:25@N' '#TEMP:25@H' 1.0200000000000001e-10
'#TEMP:26@N' '#TEMP:26@H' 1.0200000000000001e-10
'#TEMP:27@N' '#TEMP:27@H' 1.0200000000000001e-10
'#TEMP:28@N' '#TEMP:28@H' 1.0200000000000001e-10
'#TEMP:29@N' '#TEMP:29@H' 1.0200000000000001e-10
'#TEMP:30@N' '#TEMP:30@H' 1.0200000000000001e-10
'#TEMP:31@N' '#TEMP:31@H' 1.0200000000000001e-10
'#TEMP:32@N' '#TEMP:32@H' 1.0200000000000001e-10
'#TEMP:33@N' '#TEMP:33@H' 1.0200000000000001e-10
'#TEMP:34@N' '#TEMP:34@H' 1.0200000000000001e-10
'#TEMP:35@N' '#TEMP:35@H' 1.0200000000000001e-10
'#TEMP:36@N' '#TEMP:36@H' 1.0200000000000001e-10
'#TEMP:37@N' '#TEMP:37@H' 1.0200000000000001e-10
'#TEMP:38@N' '#TEMP:38@H' 1.0200000000000001e-10
'#TEMP:39@N' '#TEMP:39@H' 1.0200000000000001e-10
'#TEMP:40@N' '#TEMP:40@H' 1.0200000000000001e-10
'#TEMP:41@N' '#TEMP:41@H' 1.0200000000000001e-10
'#TEMP:42@N' '#TEMP:42@H' 1.0200000000000001e-10
'#TEMP:43@N' '#TEMP:43@H' 1.0200000000000001e-10
'#TEMP:45@N' '#TEMP:45@H' 1.0200000000000001e-10
'#TEMP:46@N' '#TEMP:46@H' 1.0200000000000001e-10
'#TEMP:47@N' '#TEMP:47@H' 1.0200000000000001e-10
'#TEMP:48@N' '#TEMP:48@H' 1.0200000000000001e-10
'#TEMP:49@N' '#TEMP:49@H' 1.0200000000000001e-10
'#TEMP:50@N' '#TEMP:50@H' 1.0200000000000001e-10
'#TEMP:51@N' '#TEMP:51@H' 1.0200000000000001e-10
'#TEMP:52@N' '#TEMP:52@H' 1.0200000000000001e-10
'#TEMP:53@N' '#TEMP:53@H' 1.0200000000000001e-10
'#TEMP:54@N' '#TEMP:54@H' 1.0200000000000001e-10
'#TEMP:55@N' '#TEMP:55@H' 1.0200000000000001e-10
'#TEMP:56@N' '#TEMP:56@H' 1.0200000000000001e-10
'#TEMP:57@N' '#TEMP:57@H' 1.0200000000000001e-10
'#TEMP:58@N' '#TEMP:58@H' 1.0200000000000001e-10
'#TEMP:59@N' '#TEMP:59@H' 1.0200000000000001e-10
'#TEMP:60@N' '#TEMP:60@H' 1.0200000000000001e-10
'#TEMP:61@N' '#TEMP:61@H' 1.0200000000000001e-10
'#TEMP:62@N' '#TEMP:62@H' 1.0200000000000001e-10
'#TEMP:63@N' '#TEMP:63@H' 1.0200000000000001e-10
'#TEMP:64@N' '#TEMP:64@H' 1.0200000000000001e-10
'#TEMP:65@N' '#TEMP:65@H' 1.0200000000000001e-10
'#TEMP:66@N' '#TEMP:66@H' 1.0200000000000001e-10
'#TEMP:67@N' '#TEMP:67@H' 1.0200000000000001e-10
'#TEMP:68@N' '#TEMP:68@H' 1.0200000000000001e-10
'#TEMP:69@N' '#TEMP:69@H' 1.0200000000000001e-10
'#TEMP:70@N' '#TEMP:70@H' 1.0200000000000001e-10
'#TEMP:71@N' '#TEMP:71@H' 1.0200000000000001e-10
'#TEMP:72@N' '#TEMP:72@H' 1.0200000000000001e-10
'#TEMP:73@N' '#TEMP:73@H' 1.0200000000000001e-10
'#TEMP:74@N' '#TEMP:74@H' 1.0200000000000001e-10
'#TEMP:75@N' '#TEMP:75@H' 1.0200000000000001e-10
'#TEMP:76@N' '#TEMP:76@H' 1.0200000000000001e-10
'#TEMP:77@N' '#TEMP:77@H' 1.0200000000000001e-10
'#TEMP:78@N' '#TEMP:78@H' 1.0200000000000001e-10
'#TEMP:79@N' '#TEMP:79@H' 1.0200000000000001e-10
'#TEMP:80@N' '#TEMP:80@H' 1.0200000000000001e-10
'#TEMP:81@N' '#TEMP:81@H' 1.0200000000000001e-10
'#TEMP:82@N' '#TEMP:82@H' 1.0200000000000001e-10
'#TEMP:83@N' '#TEMP:83@H' 1.0200000000000001e-10
'#TEMP:84@N' '#TEMP:84@H' 1.0200000000000001e-10
'#TEMP:85@N' '#TEMP:85@H' 1.0200000000000001e-10
'#TEMP:87@N' '#TEMP:87@H' 1.0200000000000001e-10
'#TEMP:88@N' '#TEMP:88@H' 1.0200000000000001e-10
'#TEMP:89@N' '#TEMP:89@H' 1.0200000000000001e-10
'#TEMP:90@N' '#TEMP:90@H' 1.0200000000000001e-10
'#TEMP:91@N' '#TEMP:91@H' 1.0200000000000001e-10
'#TEMP:93@N' '#TEMP:93@H' 1.0200000000000001e-10
'#TEMP:94@N' '#TEMP:94@H' 1.0200000000000001e-10
'#TEMP:95@N' '#TEMP:95@H' 1.0200000000000001e-10
'#TEMP:96@N' '#TEMP:96@H' 1.0200000000000001e-10
'#TEMP:97@N' '#TEMP:97@H' 1.0200000000000001e-10
'#TEMP:98@N' '#TEMP:98@H' 1.0200000000000001e-10
'#TEMP:99@N' '#TEMP:99@H' 1.0200000000000001e-10
'#TEMP:100@N' '#TEMP:100@H' 1.0200000000000001e-10
'#TEMP:101@N' '#TEMP:101@H' 1.0200000000000001e-10
'#TEMP:102@N' '#TEMP:102@H' 1.0200000000000001e-10
'#TEMP:103@N' '#TEMP:103@H' 1.0200000000000001e-10
'#TEMP:104@N' '#TEMP:104@H' 1.0200000000000001e-10
'#TEMP:105@N' '#TEMP:105@H' 1.0200000000000001e-10
'#TEMP:106@N' '#TEMP:106@H' 1.0200000000000001e-10
'#TEMP:107@N' '#TEMP:107@H' 1.0200000000000001e-10
'#TEMP:108@N' '#TEMP:108@H' 1.0200000000000001e-10
'#TEMP:109@N' '#TEMP:109@H' 1.0200000000000001e-10
'#TEMP:110@N' '#TEMP:110@H' 1.0200000000000001e-10
'#TEMP:111@N' '#TEMP:111@H' 1.0200000000000001e-10
'#TEMP:112@N' '#TEMP:112@H' 1.0200000000000001e-10
'#TEMP:113@N' '#TEMP:113@H' 1.0200000000000001e-10
'#TEMP:114@N' '#TEMP:114@H' 1.0200000000000001e-10
'#TEMP:115@N' '#TEMP:115@H' 1.0200000000000001e-10
'#TEMP:116@N' '#TEMP:116@H' 1.0200000000000001e-10
'#TEMP:117@N' '#TEMP:117@H' 1.0200000000000001e-10
'#TEMP:118@N' '#TEMP:118@H' 1.0200000000000001e-10
'#TEMP:119@N' '#TEMP:119@H' 1.0200000000000001e-10
'#TEMP:120@N' '#TEMP:120@H' 1.0200000000000001e-10
'#TEMP:121@N' '#TEMP:121@H' 1.0200000000000001e-10
'#TEMP:122@N' '#TEMP:122@H' 1.0200000000000001e-10
'#TEMP:123@N' '#TEMP:123@H' 1.0200000000000001e-10
'#TEMP:124@N' '#TEMP:124@H' 1.0200000000000001e-10
'#TEMP:125@N' '#TEMP:125@H' 1.0200000000000001e-10
'#TEMP:127@N' '#TEMP:127@H' 1.0200000000000001e-10
'#TEMP:128@N' '#TEMP:128@H' 1.0200000000000001e-10
'#TEMP:129@N' '#TEMP:129@H' 1.0200000000000001e-10
'#TEMP:130@N' '#TEMP:130@H' 1.0200000000000001e-10
'#TEMP:131@N' '#TEMP:131@H' 1.0200000000000001e-10
'#TEMP:132@N' '#TEMP:132@H' 1.0200000000000001e-10
'#TEMP:133@N' '#TEMP:133@H' 1.0200000000000001e-10
'#TEMP:134@N' '#TEMP:134@H' 1.0200000000000001e-10
'#TEMP:136@N' '#TEMP:136@H' 1.0200000000000001e-10
'#TEMP:138@N' '#TEMP:138@H' 1.0200000000000001e-10
'#TEMP:139@N' '#TEMP:139@H' 1.0200000000000001e-10
'#TEMP:140@N' '#TEMP:140@H' 1.0200000000000001e-10
'#TEMP:141@N' '#TEMP:141@H' 1.0200000000000001e-10
'#TEMP:142@N' '#TEMP:142@H' 1.0200000000000001e-10
'#TEMP:143@N' '#TEMP:143@H' 1.0200000000000001e-10
'#TEMP:144@N' '#TEMP:144@H' 1.0200000000000001e-10
'#TEMP:145@N' '#TEMP:145@H' 1.0200000000000001e-10
'#TEMP:146@N' '#TEMP:146@H' 1.0200000000000001e-10
'#TEMP:147@N' '#TEMP:147@H' 1.0200000000000001e-10
'#TEMP:148@N' '#TEMP:148@H' 1.0200000000000001e-10
'#TEMP:149@N' '#TEMP:149@H' 1.0200000000000001e-10
'#TEMP:150@N' '#TEMP:150@H' 1.0200000000000001e-10
'#TEMP:151@N' '#TEMP:151@H' 1.0200000000000001e-10
'#TEMP:152@N' '#TEMP:152@H' 1.0200000000000001e-10
'#TEMP:153@N' '#TEMP:153@H' 1.0200000000000001e-10
'#TEMP:154@N' '#TEMP:154@H' 1.0200000000000001e-10
'#TEMP:155@N' '#TEMP:155@H' 1.0200000000000001e-10
'#TEMP:156@N' '#TEMP:156@H' 1.0200000000000001e-10
'#TEMP:157@N' '#TEMP:157@H' 1.0200000000000001e-10
'#TEMP:158@N' '#TEMP:158@H' 1.0200000000000001e-10
'#TEMP:159@N' '#TEMP:159@H' 1.0200000000000001e-10
'#TEMP:33@NE1' '#TEMP:33@HE1' 1.0200000000000001e-10
'#TEMP:48@NE1' '#TEMP:48@HE1' 1.0200000000000001e-10
'#TEMP:49@NE1' '#TEMP:49@HE1' 1.0200000000000001e-10
'#TEMP:59@NE1' '#TEMP:59@HE1' 1.0200000000000001e-10
'#TEMP:98@NE1' '#TEMP:98@HE1' 1.0200000000000001e-10
relax> interatom.unit_vectors(ave=True)
Averaging all vectors.
Calculated 1 N-H unit vector between the spins '#TEMP:3@N' and '#TEMP:3@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:4@N' and '#TEMP:4@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:5@N' and '#TEMP:5@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:6@N' and '#TEMP:6@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:7@N' and '#TEMP:7@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:8@N' and '#TEMP:8@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:9@N' and '#TEMP:9@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:10@N' and '#TEMP:10@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:11@N' and '#TEMP:11@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:13@N' and '#TEMP:13@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:14@N' and '#TEMP:14@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:15@N' and '#TEMP:15@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:16@N' and '#TEMP:16@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:17@N' and '#TEMP:17@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:18@N' and '#TEMP:18@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:19@N' and '#TEMP:19@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:20@N' and '#TEMP:20@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:21@N' and '#TEMP:21@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:22@N' and '#TEMP:22@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:23@N' and '#TEMP:23@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:24@N' and '#TEMP:24@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:25@N' and '#TEMP:25@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:26@N' and '#TEMP:26@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:27@N' and '#TEMP:27@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:28@N' and '#TEMP:28@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:29@N' and '#TEMP:29@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:30@N' and '#TEMP:30@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:31@N' and '#TEMP:31@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:32@N' and '#TEMP:32@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:33@N' and '#TEMP:33@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:34@N' and '#TEMP:34@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:35@N' and '#TEMP:35@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:36@N' and '#TEMP:36@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:37@N' and '#TEMP:37@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:38@N' and '#TEMP:38@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:39@N' and '#TEMP:39@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:40@N' and '#TEMP:40@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:41@N' and '#TEMP:41@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:42@N' and '#TEMP:42@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:43@N' and '#TEMP:43@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:45@N' and '#TEMP:45@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:46@N' and '#TEMP:46@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:47@N' and '#TEMP:47@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:48@N' and '#TEMP:48@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:49@N' and '#TEMP:49@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:50@N' and '#TEMP:50@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:51@N' and '#TEMP:51@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:52@N' and '#TEMP:52@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:53@N' and '#TEMP:53@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:54@N' and '#TEMP:54@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:55@N' and '#TEMP:55@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:56@N' and '#TEMP:56@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:57@N' and '#TEMP:57@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:58@N' and '#TEMP:58@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:59@N' and '#TEMP:59@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:60@N' and '#TEMP:60@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:61@N' and '#TEMP:61@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:62@N' and '#TEMP:62@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:63@N' and '#TEMP:63@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:64@N' and '#TEMP:64@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:65@N' and '#TEMP:65@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:66@N' and '#TEMP:66@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:67@N' and '#TEMP:67@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:68@N' and '#TEMP:68@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:69@N' and '#TEMP:69@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:70@N' and '#TEMP:70@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:71@N' and '#TEMP:71@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:72@N' and '#TEMP:72@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:73@N' and '#TEMP:73@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:74@N' and '#TEMP:74@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:75@N' and '#TEMP:75@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:76@N' and '#TEMP:76@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:77@N' and '#TEMP:77@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:78@N' and '#TEMP:78@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:79@N' and '#TEMP:79@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:80@N' and '#TEMP:80@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:81@N' and '#TEMP:81@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:82@N' and '#TEMP:82@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:83@N' and '#TEMP:83@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:84@N' and '#TEMP:84@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:85@N' and '#TEMP:85@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:87@N' and '#TEMP:87@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:88@N' and '#TEMP:88@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:89@N' and '#TEMP:89@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:90@N' and '#TEMP:90@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:91@N' and '#TEMP:91@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:93@N' and '#TEMP:93@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:94@N' and '#TEMP:94@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:95@N' and '#TEMP:95@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:96@N' and '#TEMP:96@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:97@N' and '#TEMP:97@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:98@N' and '#TEMP:98@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:99@N' and '#TEMP:99@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:100@N' and '#TEMP:100@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:101@N' and '#TEMP:101@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:102@N' and '#TEMP:102@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:103@N' and '#TEMP:103@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:104@N' and '#TEMP:104@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:105@N' and '#TEMP:105@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:106@N' and '#TEMP:106@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:107@N' and '#TEMP:107@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:108@N' and '#TEMP:108@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:109@N' and '#TEMP:109@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:110@N' and '#TEMP:110@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:111@N' and '#TEMP:111@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:112@N' and '#TEMP:112@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:113@N' and '#TEMP:113@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:114@N' and '#TEMP:114@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:115@N' and '#TEMP:115@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:116@N' and '#TEMP:116@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:117@N' and '#TEMP:117@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:118@N' and '#TEMP:118@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:119@N' and '#TEMP:119@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:120@N' and '#TEMP:120@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:121@N' and '#TEMP:121@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:122@N' and '#TEMP:122@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:123@N' and '#TEMP:123@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:124@N' and '#TEMP:124@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:125@N' and '#TEMP:125@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:127@N' and '#TEMP:127@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:128@N' and '#TEMP:128@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:129@N' and '#TEMP:129@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:130@N' and '#TEMP:130@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:131@N' and '#TEMP:131@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:132@N' and '#TEMP:132@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:133@N' and '#TEMP:133@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:134@N' and '#TEMP:134@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:136@N' and '#TEMP:136@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:138@N' and '#TEMP:138@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:139@N' and '#TEMP:139@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:140@N' and '#TEMP:140@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:141@N' and '#TEMP:141@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:142@N' and '#TEMP:142@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:143@N' and '#TEMP:143@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:144@N' and '#TEMP:144@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:145@N' and '#TEMP:145@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:146@N' and '#TEMP:146@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:147@N' and '#TEMP:147@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:148@N' and '#TEMP:148@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:149@N' and '#TEMP:149@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:150@N' and '#TEMP:150@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:151@N' and '#TEMP:151@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:152@N' and '#TEMP:152@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:153@N' and '#TEMP:153@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:154@N' and '#TEMP:154@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:155@N' and '#TEMP:155@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:156@N' and '#TEMP:156@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:157@N' and '#TEMP:157@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:158@N' and '#TEMP:158@H'.
Calculated 1 N-H unit vector between the spins '#TEMP:159@N' and '#TEMP:159@H'.
Calculated 1 NE1-HE1 unit vector between the spins '#TEMP:33@NE1' and '#TEMP:33@HE1'.
Calculated 1 NE1-HE1 unit vector between the spins '#TEMP:48@NE1' and '#TEMP:48@HE1'.
Calculated 1 NE1-HE1 unit vector between the spins '#TEMP:49@NE1' and '#TEMP:49@HE1'.
Calculated 1 NE1-HE1 unit vector between the spins '#TEMP:59@NE1' and '#TEMP:59@HE1'.
Calculated 1 NE1-HE1 unit vector between the spins '#TEMP:98@NE1' and '#TEMP:98@HE1'.
relax> value.set(val=-0.00017199999999999998, param='csa', index=0, spin_id='@N*', error=False, force=True)
|
03_save_state_inspect_GUI.py - Inspect data in GUI
The GUI can be a good place to inspect the setup and files.
See content of: 03_save_state_inspect_GUI.py
Run with
relax 03_save_state_inspect_GUI.py -t 03_save_state_inspect_GUI.log
To check in GUI
- relax -g
- File -> Open relax state
- In folder "result_03" open "result_03_ini.bz2"
- View -> Data pipe editor
- Right click on pipe, and select "Associate with a new auto-analysis"
04_run_default_with_tolerance_lim.py - Try fast run
Now we try a fast run, to see if everything is setup
See content of: 04_run_default_with_tolerance_lim.py
Before running, is worth to note, which values are NOT set to default values in the GUI.
- dAuvergne_protocol.opt_func_tol = 1e-10 # Standard: opt_func_tol = 1e-25
- dAuvergne_protocol.opt_max_iterations = int(1e5) # Standard: opt_max_iterations = int(1e7)
These 2 values is used in the minfx python package, and is an instruction to the minimiser function, to continue changing parameter values, UNTIL either the difference in chi2 values between "2 steps" is less than 1e-10, OR if the number all steps is larger than 10^5. It's an instruction not to be tooooo pedantic, here in the exploration phase. When finalising for publication, these values should be set to their standard value.
- MC_NUM = 20
Number of Monte-Carlo simulations. The protocol will find optimum parameter values in this protocol, but error estimation will not be very reliable. Standard is 500.
We use tmux to make a terminal-session, we can get back to, if our own terminal connection get closed.
- start a new session: tmux
- re-attach a detached session: tmux attach
Run with
# Make terminal-session
tmux
relax 04_run_default_with_tolerance_lim.py -t 04_run_default_with_tolerance_lim.log
You can then in another terminal follow the logfile by
less +F 04_run_default_with_tolerance_lim.log
- To scroll up and down, use keyboard: Ctrl+c
- To return to follow mode, use keyboard: Shift+f
- To exit, use keyboard: Ctrl+c and then: q
05_run_def_MC20.py - Try normal run with MC 20
The inspection of the log of the previous run, it seems the prolate
cannot converge. It jumps between 2 chi2 values.
Maybe it is because of the NOT default values of optimization, to let us set
it back to default.
We have 4 CPU on our lab computers.
So let us assign 1 to a run normal settings, and only MC=20.
See content of: 05_run_def_MC20.py
- MC_NUM = 20
Number of Monte-Carlo simulations. The protocol will find optimum parameter values in this protocol, but error estimation will not be very reliable. Standard is 500.
We use tmux to make a terminal-session, we can get back to, if our own terminal connection get closed.
- start a new session: tmux
- re-attach a detached session: tmux attach
Run with
# Make terminal-session
tmux
relax 05_run_def_MC20.py -t 05_run_def_MC20.log
You can then in another terminal follow the logfile by
less +F 05_run_def_MC20.log
- To scroll up and down, use keyboard: Ctrl+c
- To return to follow mode, use keyboard: Shift+f
- To exit, use keyboard: Ctrl+c and then: q
06_run_def_MC20_MAX_ITER20.py - Try normal run with MC 20 and MAX_ITER 20
It looks like the prolate has problem with converging.
So let us try a run, where a maximum of 20 rounds of convergence is accepted.
Normally between 8 to 15 multiple rounds of optimisation of the are required for the proper execution of this script.
This is can also be see here in Figure 2.
- d'Auvergne, E. J. and Gooley, P. R. (2008). Optimisation of NMR dynamic models II. A new methodology for the dual optimisation of the model-free parameters and the Brownian rotational diffusion tensor. J. Biomol. NMR, 40(2), 121-133.
Then hopefully, relax should continue to the other models, if prolate does not converge.
We have 4 CPU on our lab computers.
Let us assign another to a run normal settings, only MC=20 and MAX_ITER=20.
See content of: 06_run_def_MC20_MAX_ITER20.py
We use tmux to make a terminal-session, we can get back to, if our own terminal connection get closed.
- start a new session: tmux new -s relax06
- re-attach a detached session: tmux a -t relax06
Run with
# Make terminal-session
tmux new -s relax06
relax 06_run_def_MC20_MAX_ITER20.py -t 06_run_def_MC20_MAX_ITER20.log
06_check_intermediate.py - Inspection of 06 run
After running around 12H, it is in round 14 in the prolate.
Let's us try finalize on just the current available data!
See content of: 06_check_intermediate.py
We just want to finish, and see some results. Therefore also nr. of Monte-Carlo is set to a minimum.
MC_NUM = 5
Run with. This should take 20-30 min on 1 CPU.
# Make terminal-session
tmux new -s relax06_check
# First delete old data
rm -rf result_06_check_intermediate
relax 06_check_intermediate.py -t 06_check_intermediate.log
06_check_intermediate_spin_info.py - Spin info
We would like to extract more info from the spin_containers in the final run.
See content of: 06_check_intermediate_spin_info.py
Run with relax
relax 06_check_intermediate_spin_info.py
06_check_intermediate_iteration_chi2.py - Per iteration get chi2
Specifically, since we have problems with convergence, we would like to see the chi2 value per iteration for the different models. This is not so easy to get, and we have to make a script, that loads each result file per round folder and extract the chi2 value.
This will also get k The global number parameters and n the global number of data sets.
See content of: 06_check_intermediate_iteration_chi2.py
Run with relax
relax 06_check_intermediate_iteration_chi2.py
You will get at file called results_collected.txt, which look like this:
results_collected.txt |
---|
# pipe_name model round_i cdp_iter chi2 tm k_glob_Num_params n_glob_Num_data_sets chi2_glob
sphere_round_1 sphere 1 22 1183.60277408 1.2974699344e-08 488 852 1183.60277408
sphere_round_2 sphere 2 23 1183.60277408 1.2974699344e-08 487 852 1183.60277408
sphere_round_3 sphere 3 22 1183.60277408 1.2974699344e-08 487 852 1183.60277408
sphere_round_4 sphere 4 22 1183.60277408 1.2974699344e-08 487 852 1183.60277408
prolate_round_1 prolate 1 53 932.899062972 1.2464061259e-08 514 852 932.899062972
prolate_round_2 prolate 2 84 865.016376565 1.26721710049e-08 504 852 865.016376565
prolate_round_3 prolate 3 67 964.845116104 1.24191769798e-08 503 852 964.845116104
prolate_round_4 prolate 4 34 930.752025077 1.26483515558e-08 502 852 930.752025077
prolate_round_5 prolate 5 67 909.856202241 1.28541765906e-08 503 852 909.856202241
prolate_round_6 prolate 6 23 951.710561542 1.26175541503e-08 504 852 951.710561542
prolate_round_7 prolate 7 35 952.107901488 1.26811016067e-08 498 852 952.107901488
prolate_round_8 prolate 8 64 935.134955157 1.28110023551e-08 500 852 935.134955157
prolate_round_9 prolate 9 67 912.686227 1.26319631345e-08 505 852 912.686227
prolate_round_10 prolate 10 52 947.507736287 1.26128571533e-08 496 852 947.507736287
prolate_round_11 prolate 11 23 946.286202493 1.26164667854e-08 501 852 946.286202493
prolate_round_12 prolate 12 78 926.197899702 1.28360618825e-08 501 852 926.197899702
prolate_round_13 prolate 13 30 957.042437647 1.26480640488e-08 501 852 957.042437647
prolate_round_14 prolate 14 81 866.380697777 1.29448205266e-08 501 852 866.380697777
prolate_round_15 prolate 15 43 948.620369901 1.26263659146e-08 505 852 948.620369901
prolate_round_16 prolate 16 25 957.280759677 1.25785850027e-08 498 852 957.280759677
prolate_round_17 prolate 17 40 960.954711859 1.25831186176e-08 496 852 960.954711859
prolate_round_18 prolate 18 22 955.322431013 1.25753030466e-08 497 852 955.322431013
prolate_round_19 prolate 19 30 960.954711852 1.25831186176e-08 496 852 960.954711852
prolate_round_20 prolate 20 25 955.322431009 1.25753030467e-08 497 852 955.322431009
prolate_round_21 prolate 21 38 960.954711873 1.25831186176e-08 496 852 960.954711873
oblate_round_1 oblate 1 63 989.228261962 1.24958484208e-08 498 852 989.228261962
oblate_round_2 oblate 2 34 837.602683824 1.2555394405e-08 492 852 837.602683824
oblate_round_3 oblate 3 62 767.911810314 1.24919596393e-08 501 852 767.911810314
oblate_round_4 oblate 4 26 781.379029783 1.23179418626e-08 502 852 781.379029783
oblate_round_5 oblate 5 27 767.754067371 1.23499989348e-08 499 852 767.754067371
oblate_round_6 oblate 6 77 731.294923045 1.24037683842e-08 503 852 731.294923045
oblate_round_7 oblate 7 40 787.73300852 1.21785942754e-08 507 852 787.73300852
oblate_round_8 oblate 8 25 777.631912798 1.21667590434e-08 500 852 777.631912798
oblate_round_9 oblate 9 55 749.926238347 1.21919347481e-08 502 852 749.926238347
oblate_round_10 oblate 10 19 775.98155116 1.22173212306e-08 504 852 775.98155116
oblate_round_11 oblate 11 76 718.679053292 1.23842181166e-08 503 852 718.679053292
oblate_round_12 oblate 12 38 785.459923735 1.21335398377e-08 505 852 785.459923735
oblate_round_13 oblate 13 54 763.701184096 1.21761223497e-08 502 852 763.701184096
oblate_round_14 oblate 14 23 763.32379836 1.21289393324e-08 506 852 763.32379836
oblate_round_15 oblate 15 46 740.120496648 1.21269517169e-08 509 852 740.120496648
|
06_check_intermediate_pymol.pml - Use pymol commands from inspection of 06 run
From the above run of check_intermediate, we can inspect grace images.
We also get some pymol files.
Let us try to use these, to get a feeling for the data.
See content of: 06_check_intermediate_pymol.pml
Run with pymol.
pymol 06_check_intermediate_pymol.pml
# To bug test
pymol -c 06_check_intermediate_pymol.pml
06_check_intermediate_convert.py - Create input for other programs
Relax can create input files to other program, to help verify the results.
This is mentioned here:
- d'Auvergne, E. J. and Gooley, P. R. (2008). Optimisation of NMR dynamic models I. Minimisation algorithms and their performance within the model-free and Brownian rotational diffusion spaces. J. Biomol. NMR, 40(2), 107-119.
There exist some model-free programs for analysis
- Modelfree (Palmer et al. 1991; Mandel et al. 1995) - most commonly used program in the literature is the Modelfree program
- Dasha (Orekhov et al. 1995a) - two local optimisation algorithms are available.
- DYNAMICS (Fushman et al. 1997)
- Tensor 2 (Blackledge et al. 1998; Cordier et al. 1998; Dosset et al. 2000; Tsan et al. 2000).
Relax can export output to
- Modelfree4 : User function: palmer.create()
- dasha : User function: dasha.create()
See content of: 06_check_intermediate_convert.py
Run with:
relax 06_check_intermediate_convert.py
Scripts - Part 2
We now try to setup things a little more efficient.
Relax is able to read previous results file, so let us divide the task up into:
- 1: Load the data and save as state file. Inspect in GUI before running.
- 2: Run the Model 1: local_tm.
- 3: Here make 4 scripts. Each of them only depends on Model 1:
- Model 2: sphere
- Model 3: prolate
- Model 4: oblate
- Model 5: ellipsoid
- 4: Make a 'final' model script. This will automatically detect files from above.
11_read_data_GUI_inspect.py - Read data GUI inspect
The GUI can be a good place to inspect the setup and files.
See content of: 11_read_data_GUI_inspect.py
Run with
relax 11_read_data_GUI_inspect.py -t 11_read_data_GUI_inspect.log
To check in GUI
- relax -g
- File -> Open relax state
- In folder "result_10" open "result_10_ini.bz2"
- View -> Data pipe editor
- Right click on pipe, and select "Associate with a new auto-analysis"
To run on Haddock
Have a look here, how to get standalone python Anaconda linux. Also have a look here OpenMPI.
# SSH in
ssh haddock
# Test with shell
mpirun -np 6 echo "hello world"
# Test with python
mpirun -np 6 python -m mpi4py helloworld
# Test with relax
mpirun -np 6 relax --multi='mpi4py'
# Look for: Processor fabric: MPI 2.2 running via mpi4py with 5 slave processors & 1 master. Using MPICH2 1.4.1.
Now we run 04_run_default_with_tolerance_lim.py with more power!
We use tmux to make a terminal-session, we can get back to,
if our own terminal connection get closed.
- start a new session: tmux
- re-attach a detached session: tmux attach
# Make terminal-session
tmux
# Start relax
mpirun -np 20 relax --multi='mpi4py' 04_run_default_with_tolerance_lim.py -t 04_run_default_with_tolerance_lim.log
Useful commands to log file
While the analysis is running, these commands could be used to check the logfile for errors
### Check convergence
# For chi2
cat 04_run_default_with_tolerance_lim.log | grep -A 10 "Chi-squared test:"
# For other tests
cat 04_run_default_with_tolerance_lim.log | grep -A 10 "Identical "
cat 04_run_default_with_tolerance_lim.log | grep -A 10 "Identical model-free models test:"
cat 04_run_default_with_tolerance_lim.log | grep -A 10 "Identical diffusion tensor parameter test:"
cat 04_run_default_with_tolerance_lim.log | grep -A 10 "Identical model-free parameter test:"
# To look for not converged errors
# For chi2
cat 04_run_default_with_tolerance_lim.log | grep -B 7 "The chi-squared value has not converged."
# For other tests
cat 04_run_default_with_tolerance_lim.log | grep -B 7 " have not converged."
cat 04_run_default_with_tolerance_lim.log | grep -B 7 "The model-free models have not converged."
cat 04_run_default_with_tolerance_lim.log | grep -B 7 "The diffusion parameters have not converged."
cat 04_run_default_with_tolerance_lim.log | grep -B 7 "The model-free parameters have not converged."
You can then inspect the logfile by less: 10-tips for less
less 04_run_default_with_tolerance_lim.log
To find pattern: We have to escape with \ for special character like: ()[] etc.
# Search forward
/Value \(iter 14\)
/The chi-squared value has not converged
n or N – for next match in forward / previous match in backward
- To return to follow mode, use keyboard: Shift+f
- To exit, use keyboard: Ctrl+c and then: q
rsync files
rsync files after completion to Sauron
When a run is completed, then sync files to Sauron file server.
Make a rsync_to_sbinlab.sh file with content
See file content |
---|
#!/bin/bash
read -p "Username on sauron :" -r
RUSER=$REPLY
SAURON=10.61.4.60
PROJ=`basename "$PWD"`
FROM=${PWD}
TO=${RUSER}@${SAURON}:/data/sbinlab2/${RUSER}/Downloads
# -a: "archive"- archive mode; equals -rlptgoD (no -H,-A,-X). syncs recursively and preserves symbolic links, special and device files, modification times, group, owner, and permissions.
# We want to remove the -o and -g options:
# -o, --owner preserve owner (super-user only)
# -g, --group preserve group
# -rlptD : Instead or
# -a --no-o --no-g
# -z: Compression over network
# -P: It combines the flags --progress and --partial. The first of these gives you a progress bar for the transfers and the second allows you to resume interrupted transfers:
# -h, Output numbers in a more human-readable format.
# Always double-check your arguments before executing an rsync command.
# -n
echo "I will now do a DRY RUN, which does not move files"
read -p "Are you sure? y/n :" -n 1 -r
echo ""
if [[ $REPLY =~ ^[Yy]$ ]]; then
rsync -rlptDPzh -n ${FROM} ${TO}
else
echo "Not doing DRY RUN"
fi
echo ""
echo "I will now do the sync of files"
read -p "Are you sure? y/n :" -n 1 -r
echo ""
if [[ $REPLY =~ ^[Yy]$ ]]; then
rsync -rlptDPzh ${FROM} ${TO}
else
echo "Not doing anything"
fi
Make it executable and run chmod +x rsync_to_sbinlab.sh
#run
./rsync_to_sbinlab2.sh
|
rsync files from BIO to home mac
To inspect from home mac.
Make a rsync_from_bio_to_home.sh file with content
See file content |
---|
#!/bin/bash
read -p "Username on bio:" -r
RUSER=$REPLY
BIO=ssh-bio.science.ku.dk
#PROJ=Desktop/kaare_relax
PROJ=Desktop/kaare_relax/20171010_model_free_HADDOCK
PROJDIR=`basename "$PROJ"`
FROM=${RUSER}@${BIO}:/home/${RUSER}/${PROJ}
TO=${PWD}/${PROJDIR}
# -a: "archive"- archive mode; equals -rlptgoD (no -H,-A,-X). syncs recursively and preserves symbolic links, special and device files, modification times, group, owner, and permissions.
# We want to remove the -o and -g options:
# -o, --owner preserve owner (super-user only)
# -g, --group preserve group
# -rlptD : Instead or
# -a --no-o --no-g
# -z: Compression over network
# -P: It combines the flags --progress and --partial. The first of these gives you a progress bar for the transfers and the second allows you to resume interrupted transfers:
# -h, Output numbers in a more human-readable format.
# Always double-check your arguments before executing an rsync command.
# -n
echo "I will now do a DRY RUN, which does not move files"
read -p "Are you sure? y/n :" -n 1 -r
echo ""
if [[ $REPLY =~ ^[Yy]$ ]]; then
rsync -rlptDPzh -n ${FROM} ${TO}
else
echo "Not doing DRY RUN"
fi
echo ""
echo "I will now do the sync of files"
read -p "Are you sure? y/n :" -n 1 -r
echo ""
if [[ $REPLY =~ ^[Yy]$ ]]; then
rsync -rlptDPzh ${FROM} ${TO}
else
echo "Not doing anything"
fi
Make it executable and run chmod +x rsync_from_bio_to_home.sh
#run
./rsync_from_bio_to_home.sh
|
About the protocol
Model I - 'local_tm'
This will optimise the diffusion model whereby all spin of the molecule have a local tm value, i.e. there is no global diffusion tensor. This model needs to be optimised prior to optimising any of the other diffusion models. Each spin is fitted to the multiple model-free models separately, where the parameter tm is included in each model.
Model II - 'sphere'
This will optimise the isotropic diffusion model. Multiple steps are required, an initial optimisation of the diffusion tensor, followed by a repetitive optimisation until convergence of the diffusion tensor. In the relax script UI each of these steps requires this script to be rerun, unless the conv_loop flag is True. In the GUI (graphical user interface), the procedure is repeated automatically until convergence. For the initial optimisation, which will be placed in the directory './sphere/init/', the following steps are used:
- The model-free models and parameter values for each spin are set to those of diffusion model MI.
- The local tm parameter is removed from the models.
- The model-free parameters are fixed and a global spherical diffusion tensor is minimised
- For the repetitive optimisation, each minimisation is named from 'round_1' onwards. The initial 'round_1' optimisation will extract the diffusion tensor from the results file in './sphere/init/', and the results will be placed in the directory './sphere/round_1/'. Each successive round will take the diffusion tensor from the previous round. The following steps are used:
- The global diffusion tensor is fixed and the multiple model-free models are fitted to each spin.
- AIC model selection is used to select the models for each spin.
- All model-free and diffusion parameters are allowed to vary and a global optimisation of all parameters is carried out.
Model III - 'prolate'
The methods used are identical to those of diffusion model MII, except that an axially symmetric diffusion tensor with Da >= 0 is used. The base directory containing all the results is './prolate/'.
Model IV -'oblate'
The methods used are identical to those of diffusion model MII, except that an axially symmetric diffusion tensor with Da <= 0 is used. The base directory containing all the results is './oblate/'.
Model V - 'ellipsoid'
The methods used are identical to those of diffusion model MII, except that a fully anisotropic diffusion tensor is used (also known as rhombic or asymmetric diffusion). The base directory is './ellipsoid/'
'final'
Once all the diffusion models have converged, the final run can be executed. This is done by setting the variable diff_model to 'final'. This consists of two steps, diffusion tensor model selection, and Monte Carlo simulations. Firstly AIC model selection is used to select between the diffusion tensor models. Monte Carlo simulations are then run solely on this selected diffusion model. Minimisation of the model is bypassed as it is assumed that the model is already fully optimised (if this is not the case the final run is not yet appropriate).
The final black-box model-free results will be placed in the file 'final/results'.