Difference between revisions of "Tutorial for model free SBiNLab"

From relax wiki
Jump to navigation Jump to search
Line 1,199: Line 1,199:
  
 
if [[ $REPLY =~ ^[Yy]$ ]]; then
 
if [[ $REPLY =~ ^[Yy]$ ]]; then
   rsync -aPzh --no-o --no-g -n ${FROM} ${TO}  
+
   rsync -rlptDPzh -n ${FROM} ${TO}  
 
else
 
else
 
   echo "Not doing DRY RUN"
 
   echo "Not doing DRY RUN"
Line 1,212: Line 1,212:
  
 
if [[ $REPLY =~ ^[Yy]$ ]]; then
 
if [[ $REPLY =~ ^[Yy]$ ]]; then
   rsync -aPzh --no-o --no-g ${FROM} ${TO}
+
   rsync -rlptDPzh ${FROM} ${TO}
 
else
 
else
 
   echo "Not doing anything"
 
   echo "Not doing anything"

Revision as of 09:43, 15 October 2017

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

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

Test load of PDB

First we just want to test to read the PDB file.

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*')

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)

Test load of data

That looked to go fine, so let us try to just load data.

Copy 01_read_pdb.py to 02_read_data.py and add:

# 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*')

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)

Inspect data in GUI

The GUI can be a good place to inspect the setup and files.

Copy 02_read_data.py to 03_save_state_inspect_GUI.py and add:

# Analysis variables.
#####################
# The model-free models.  Do not change these unless absolutely necessary, the protocol is likely to fail if these are changed.
MF_MODELS = ['m0', 'm1', 'm2', 'm3', 'm4', 'm5', 'm6', 'm7', 'm8', 'm9']
#MF_MODELS = ['m1', 'm2']
LOCAL_TM_MODELS = ['tm0', 'tm1', 'tm2', 'tm3', 'tm4', 'tm5', 'tm6', 'tm7', 'tm8', 'tm9']

# The grid search size (the number of increments per dimension).
GRID_INC = 11

# The optimisation technique. Standard is: min_algor='newton' : and cannot be changed in the GUI.
MIN_ALGOR = 'newton'

# The number of Monte Carlo simulations to be used for error analysis at the end of the analysis.
#MC_NUM = 500
MC_NUM = 20

# The diffusion model. Standard is 'Fully automated', which means: DIFF_MODEL=['local_tm', 'sphere', 'prolate', 'oblate', 'ellipsoid', 'final']
# 'local_tm', 'sphere', ''prolate', 'oblate', 'ellipsoid', or 'final'
#DIFF_MODEL = 'local_tm'
DIFF_MODEL = ['local_tm', 'sphere', 'prolate', 'oblate', 'ellipsoid', 'final']

# The maximum number of iterations for the global iteration.  Set to None, then the algorithm iterates until convergence.
MAX_ITER = None

# Automatic looping over all rounds until convergence (must be a boolean value of True or False). Standard is: conv_loop=True : and cannot be changed in the GUI.
CONV_LOOP = True

# Change some minimise opt params. 
# This goes into: minimise.execute(self.min_algor, func_tol=self.opt_func_tol, max_iter=self.opt_max_iterations)
#####################
#dAuvergne_protocol.opt_func_tol = 1e-5 # Standard:  opt_func_tol = 1e-25   
#dAuvergne_protocol.opt_max_iterations = 1000 # Standard: opt_max_iterations = int(1e7)
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)

#####################################

# The results dir.
var = 'result_03'
results_dir = os.getcwd() + os.sep + var

# Save the state before running. Open and check in GUI!
state.save(state=var+'_ini.bz2', dir=results_dir, force=True)

# 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"

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"

Try fast run

Now we try a fast run, to see if everything is setup

Copy 03_save_state_inspect_GUI.py to 04_run_default_with_tolerance_lim.py and modify last lines:

# The results dir.
var = 'result_04'
results_dir = os.getcwd() + os.sep + var

# Save the state before running. Open and check in GUI!
state.save(state=var+'_ini.bz2', dir=results_dir, force=True)

# 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"

dAuvergne_protocol(pipe_name=name, pipe_bundle=bundle_name, results_dir=results_dir, diff_model=DIFF_MODEL, mf_models=MF_MODELS, local_tm_models=LOCAL_TM_MODELS, grid_inc=GRID_INC, min_algor=MIN_ALGOR, mc_sim_num=MC_NUM, max_iter=MAX_ITER, conv_loop=CONV_LOOP)

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

Try normal run with MC 20

We have 4 CPU on our lab computers.
Let us assign 1 to a run normal settings, and only MC=20.

Copy 04_run_default_with_tolerance_lim.py to 05_run_def_MC20.py

cp 04_run_default_with_tolerance_lim.py 05_run_def_MC20.py

and modify last lines:

# The number of Monte Carlo simulations to be used for error analysis at the end of the analysis.
#MC_NUM = 500
MC_NUM = 20

# The diffusion model. Standard is 'Fully automated', which means: DIFF_MODEL=['local_tm', 'sphere', 'prolate', 'oblate', 'ellipsoid', 'final']
# 'local_tm', 'sphere', ''prolate', 'oblate', 'ellipsoid', or 'final'
#DIFF_MODEL = 'local_tm'
DIFF_MODEL = ['local_tm', 'sphere', 'prolate', 'oblate', 'ellipsoid', 'final']

# The maximum number of iterations for the global iteration.  Set to None, then the algorithm iterates until convergence.
MAX_ITER = None

# Automatic looping over all rounds until convergence (must be a boolean value of True or False). Standard is: conv_loop=True : and cannot be changed in the GUI.
CONV_LOOP = True

# Change some minimise opt params. 
# This goes into: minimise.execute(self.min_algor, func_tol=self.opt_func_tol, max_iter=self.opt_max_iterations)
#####################
#dAuvergne_protocol.opt_func_tol = 1e-5 # Standard:  opt_func_tol = 1e-25   
#dAuvergne_protocol.opt_max_iterations = 1000 # Standard: opt_max_iterations = int(1e7)
#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)

#####################################

# The results dir.
var = 'result_05'
results_dir = os.getcwd() + os.sep + var

# Save the state before running. Open and check in GUI!
state.save(state=var+'_ini.bz2', dir=results_dir, force=True)

# 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"

dAuvergne_protocol(pipe_name=name, pipe_bundle=bundle_name, results_dir=results_dir, diff_model=DIFF_MODEL, mf_models=MF_MODELS, local_tm_models=LOCAL_TM_MODELS, grid_inc=GRID_INC, min_algor=MIN_ALGOR, mc_sim_num=MC_NUM, max_iter=MAX_ITER, conv_loop=CONV_LOOP)
  • 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

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.
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.

Copy 05_run_def_MC20.py to 06_run_def_MC20_MAX_ITER20.py

cp 05_run_def_MC20.py 06_run_def_MC20_MAX_ITER20.py

and modify last lines:

# The number of Monte Carlo simulations to be used for error analysis at the end of the analysis.
#MC_NUM = 500
MC_NUM = 20

# The diffusion model. Standard is 'Fully automated', which means: DIFF_MODEL=['local_tm', 'sphere', 'prolate', 'oblate', 'ellipsoid', 'final']
# 'local_tm', 'sphere', ''prolate', 'oblate', 'ellipsoid', or 'final'
#DIFF_MODEL = 'local_tm'
DIFF_MODEL = ['local_tm', 'sphere', 'prolate', 'oblate', 'ellipsoid', 'final']

# The maximum number of iterations for the global iteration.  Set to None, then the algorithm iterates until convergence.
MAX_ITER = 20

# Automatic looping over all rounds until convergence (must be a boolean value of True or False). Standard is: conv_loop=True : and cannot be changed in the GUI.
CONV_LOOP = True

# Change some minimise opt params. 
# This goes into: minimise.execute(self.min_algor, func_tol=self.opt_func_tol, max_iter=self.opt_max_iterations)
#####################
#dAuvergne_protocol.opt_func_tol = 1e-5 # Standard:  opt_func_tol = 1e-25   
#dAuvergne_protocol.opt_max_iterations = 1000 # Standard: opt_max_iterations = int(1e7)
#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)

#####################################

# The results dir.
var = 'result_06'
results_dir = os.getcwd() + os.sep + var

# Save the state before running. Open and check in GUI!
state.save(state=var+'_ini.bz2', dir=results_dir, force=True)

# 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"

dAuvergne_protocol(pipe_name=name, pipe_bundle=bundle_name, results_dir=results_dir, diff_model=DIFF_MODEL, mf_models=MF_MODELS, local_tm_models=LOCAL_TM_MODELS, grid_inc=GRID_INC, min_algor=MIN_ALGOR, mc_sim_num=MC_NUM, max_iter=MAX_ITER, conv_loop=CONV_LOOP)

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

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

#!/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/${PROJ}

# -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

See also