Open main menu

Changes

→‎Intro: Deleted the out of date svn branch information.
__TOC__
 
= Intro =
This tutorial presently cover the [http://svn.gna.org/svn/relax/branches/ relax_disp branch].<br>
This branch is under development, for testing it out, you need to use the source code. See [[Installation_linux#Checking_out_a_relax_branch]].
 
This tutorial is based on the analysis of NMR data from the paper:
<blockquote>
== Spectral processing ==
# Now we need to spectral process the spectra.# Process one of the files normally and the next script will copy the processing script to the other folder.# [m]->Right-Click Process 2D->Basic 2D# Save->Execute->Done; then; RClick File->Select File->test.ft2->Read/draw->Done# If your spectra look reversed (i.e. if your peaks do not seem to match your reference spectrum) it might This step can be solved done by changing to# following wiki page [m] '| nmrPipe -fn FT -neg \' to the script to the third lowest line.# Save->Execute->Done. Then push [r] to refresh.# Press [h], and find P0 and P1, and push [m], change parameters and update script# The changes to '| nmrPipe -fn PS xxx \' should be the FIRST line (The proton dimension) with PS# save/execute, push [r] (read) and the [e] (erase settings) to see result in NMRdraw# And then run the next CPMG script As suggested in the [[Manual | relax manaul]], section '''5.2.2 Spectral processing''', the spectral processing script could look like:<br> '''NOTE''' only put '''EXT''' in, AFTER you are done with phasing, or you will get problems phasing. File: '''nmrproc.com'''<source lang="bash">#!/bin/csh nmrPipe -in test.fid \| nmrPipe -fn SOL \| nmrPipe -fn GM -g1 5 -g2 10 -c 1.0 \| nmrPipe -fn ZF -auto -size 8000 \| nmrPipe -fn FT -auto \| nmrPipe -fn PS -p0 214.00 -p1 -21.00 -di -verb \| nmrPipe -fn TP \| nmrPipe -fn SP -off 0.5 -end 0.98 -pow 2 -c 0.5 \| nmrPipe -fn ZF -auto -size 8000 \| nmrPipe -fn FT -neg \| nmrPipe -fn PS -p0 0.00 -p1 0.00 -di -verb \| nmrPipe -fn TP \| nmrPipe -fn POLY -auto \| nmrPipe -fn EXT -left -sw \ -ov -out test.ft2</source> === Understand spectral processing ===To understand the NMRPipe functions, you can look them up in the manual page: http://spin.niddk.nih.gov/NMRPipe/ref/nmrpipe/ <br> See also the [http://www.nmr-relax.com/manual/Spectral_processing.html relax online manual for spectral processing]. A good book to loop up in, is '''Keeler, Understanding NMR Spectroscopy, Second edition'''. {| class="wikitable sortable" border="1"|-!nmrPipe!Desc.!Comments|-|nmrPipe -fn [http://spin.niddk.nih.gov/NMRPipe/ref/nmrpipe/sol.html SOL]|Solvent Filter||-|nmrPipe -fn [http://spin.niddk.nih.gov/NMRPipe/ref/nmrpipe/gm.html GM] -g1 5 -g2 10 -c 1.0|Lorentz-to-Gauss Window, here for the measured direct dimension.|'''-c 1.0'''' The constant c is set to '''1.0''', since the phase '''P1''' correction is different from 0.0, here '''-p1 -21.00''', if '''-p1 0.0''' then '''c 0.5'''.|-|nmrPipe -fn [http://spin.niddk.nih.gov/NMRPipe/ref/nmrpipe/zf.html ZF] -auto -size 8000|Zero Fill, here for the measured direct dimension.|The '''-auto''' will auto round to final size to power of 2. So here it is equivalent to: '''nmrPipe -fn -size 8192'''|-|nmrPipe -fn [http://spin.niddk.nih.gov/NMRPipe/ref/nmrpipe/ft.html FT] -auto|Complex Fourier Transform, here for the measured direct dimension.|Do Fourier Transform.|-|nmrPipe -fn [http://spin.niddk.nih.gov/NMRPipe/ref/nmrpipe/ps.html PS] -p0 214.00 -p1 -21.00 -di -verb|Phase Correction, here for the measured direct dimension.||-|nmrPipe -fn TP|2D Transpose XY->YX (YTP)|Transpose matrix to work in in-direct dimension.|-|nmrPipe -fn [http://spin.niddk.nih.gov/NMRPipe/ref/nmrpipe/sp.html SP] -off 0.5 -end 0.98 -pow 2 -c 0.5|Adjustable Sine Bell Window. The '''-pow 2''' means is sinus^2 function. See Keeler p. 93 and p. 98 for the sine window desc|The '''-end 0.98''' means that you cut 2% data. '''-c 0.5''' is set 0.5 since the p1 phasing is 0.0 in the in-direct dimension. |-|-|nmrPipe -fn [http://spin.niddk.nih.gov/NMRPipe/ref/nmrpipe/zf.html ZF] -auto -size 8000|Zero Fill, here for the in-direct dimension.|The '''-auto''' will auto round to final size to power of 2. So here it is equivalent to: '''nmrPipe -fn -size 8192'''|-|nmrPipe -fn [http://spin.niddk.nih.gov/NMRPipe/ref/nmrpipe/ft.html FT] -neg|Complex Fourier Transform, here for the measured direct dimension.|Do Fourier Transform, but here negative, since the CPMG element in the Puls Sequence makes the magnetization end up negative.|-|nmrPipe -fn [http://spin.niddk.nih.gov/NMRPipe/ref/nmrpipe/ps.html PS] -p0 0.00 -p1 0.00 -di -verb |Phase Correction, here for the in-direct dimension. |No-phase correction needed.|-|nmrPipe -fn TP|2D Transpose XY->YX (YTP)|Transpose matrix back to work in direct dimension.|-|nmrPipe -fn [http://spin.niddk.nih.gov/NMRPipe/ref/nmrpipe/poly.html POLY] -auto|Polynomial Subtract for Time-Domain Solvent Correction and Frequency-Domain Baseline Correction. ||-|nmrPipe -fn [http://spin.niddk.nih.gov/NMRPipe/ref/nmrpipe/ext.html EXT] -left -sw |Extract Region. '''NOTE''' only put this in, AFTER you are done with phasing, or you will get problems phasing. |'''-left''' extract left half on the sweep-width which have been centered on water.|}
== Fourier transform all spectra ==
As stated in the [[manual | relax manual]] section '''5.2.1 Temperature control and calibration''', the pulse sequence can put a lot of power into the sample. <br>
You could read these sections in the relax manual:<br>
[http://www.nmr-relax.com/manual/Temperature_control_calibration.html Importance of Temperature control and calibration]<br>
[http://www.nmr-relax.com/manual/relax_data_temp_control.html Temperature control]<br>
= Analyse in relax =
 
== making a spin file from SPARKY list ==
relax does not yet has the possibility to read spins from a sparky file. [https://gna.org/support/?3044 See support request].
 
So we create one.
 
<source lang="bash">
set ATOMS=`tail -n+4 peaks_list.tab | awk '{print $7}'`
set SCRIPT=relax_2_spins.py
 
foreach I (`seq 1 ${#ATOMS}`)
set ATOM=${ATOMS[$I]}; set SPIN=`echo $ATOM | sed -e "s/N-HN//g"`; set RESN=`echo $SPIN | sed -e "s/[0-9]*//g"`; set RESI=`echo $SPIN | sed -e "s/[A-Za-z]//g"`
echo $ATOM $SPIN $RESN $RESI
echo "spin.create(spin_name='N', spin_num=$I, res_name='$RESN', res_num=$RESI, mol_name=None)" >> $SCRIPT
end
 
cat $SCRIPT
</source>
== Extract the spectra settings from Varian procpar file ==
== Measure the backgorund noise "RMSD" in each of the .ft2 files ==
=== RMSD via sparky ===
There exist two ways to get the background RMSD noise
0 0.06 0 599.8908622 2.39e+03
24 0.06 400.00000000000000000000 599.8908622 2.45e+03
</source>
 
=== RMSD via nmrpipe showApod ===
We can also use the showApod rmsd.
<source lang="bash">
set FIDS=`cat ft2_files.ls`
set OUT=${PWD}/apod_rmsd.txt
set CWD=$PWD
rm $OUT
 
foreach I (`seq 1 ${#FIDS}`)
set FID=${FIDS[$I]}; set DIRN=`dirname $FID`
cd $DIRN
set apodrmsd=`showApod *.ft2 | grep "REMARK Automated Noise Std Dev in Processed Data:" | awk '{print $9}'`
echo $apodrmsd $DIRN >> $OUT
cd $CWD
end
cat $OUT
mv ncyc.txt ncyc_or.txt
paste ncyc_or.txt $OUT > ncyc.txt
</source>
cp ncyc.txt ../relax
cp peaks_list* ../relax
cp relax_2_spins.py ../relax
cd ../relax
</source>
# Set the current spectrum id
current_id = "Z_A%s"%(i)
 
# Set the current experiment type.
relax_disp.exp_type(spectrum_id=current_id, exp_type='SQ CPMG')
# Set the peak intensity errors, as defined as the baseplane RMSD.
# Set the NMR field strength of the spectrum.
spectrometer.frequency(id=current_id, frq=set_sfrq, units=‘MHz’'MHz')
# Relaxation dispersion CPMG constant time delay T (in s).
# Set the relaxation dispersion CPMG frequencies.
relax_disp.cpmg_frqcpmg_setup(spectrum_id=current_id, cpmg_frq=vcpmg)
i += 1
# Ctrl+n for new analysis
# Select '''Relaxation dispersion analysis''' button -> Next
# Select '''CPMG, fixed time''' -> Next
# Starting pipe: '''base pipe'''
# Pipe bundle: '''relax_disp''' -> Start
# The file name: '''peaks_list_max_standard.ser'''
# The spectrum ID string: auto
# Leave the rest of the fields as they are, they are not used.
# Push "Apply" and then '''Cancel'''
# We want to change the spectra properties by a script.
# Point '''Results directory''' to '''model_sel_analyt'''.
# Set Monte-Carlo Simulations to '''10'''
# Select models: Lets take '''"R2eff", "No Rex", "TSMFK01", "LM63", "CR72", "CR72 full", "IT99"'''
# Save the state again, so the settings for models, monte-carlo settings and result directory is preserved.
# Shift+Ctrl+s OR File-> Save as... '''ini_run.bz2''' in the '''model_sel_analyt''' directory.
# Now push "Execute"
The analysis will probably take between 4-10 hours.<br>
=== Analyse via script ===
pipe_bundle = 'relax_disp'
pipe.create(pipe_name=pipe_name, bundle=pipe_bundle, pipe_type='relax_disp')
 
# Set the relaxation dispersion experiment type.
relax_disp.exp_type('cpmg fixed')
# Create the spins
scriptspectrum.read_spins(file='relax_2_spins"peaks_list_max_standard.py'ser", dir=None)
# Name the isotope for field strength scaling.
results_directory = os.path.join(os.getcwd(),"model_sel_analyt")
pipe_name = 'base pipe'; pipe_bundle = 'relax_disp'
MODELS = ['R2eff', 'No Rex', 'TSMFK01', 'LM63', 'CR72', 'CR72 full', 'IT99']
GRID_INC = 21; MC_NUM = 10; MODSEL = 'AIC'
relax_disp relax_4_model_sel.py -t log_relax_4_model_sel.log
</source>
The analysis will probably take between 4-10 hours.<br>
== Rerun from a "ini_setup.bz2" file ==
After the analysis, several folders should be available, with data for each fitted model.
<source lang="bash">
R2eff/
No Rex/
TSMFK01/
LM63/
CR72/
CR72 full/
IT99/
final/
IT99/
No Rex/
R2eff/
</source>
You can convert all to PNG images, by:
<source lang="bash">
cd "R2eff"; ./grace2images.py; cd .. ;
cd "No Rex"; ./grace2images.py; cd .. ;
cd "TSMFK01"; ./grace2images.py; cd .. ;
cd "LM63"; ./grace2images.py; cd .. ;
cd "CR72"; ./grace2images.py; cd .. ;
cd "CR72 full"; ./grace2images.py; cd .. ;
cd "IT99"; ./grace2images.py; cd .. ;
cd "final"; ./grace2images.py; cd .. ;
cd "IT99"; ./grace2images.py; cd .. ;cd "No Rex"; ./grace2images.py; cd .. ;cd "R2eff"; ./grace2images.py; cd .. ;
find . -type f -name "*.png"
If you made a logfile, then you can do convert it to the full relax script.<br>
See [[Grep_log_file]] for this.
 
== Compare values ==
For the '''TSMFK01''' and for example the '''CR72''', the '''k_AB''' value can be compare
 
<source lang="bash">
cd model_sel_analyt
paste "TSMFK01/k_AB.out" "CR72/k_AB.out" | awk '{print $2, $3, $6, $13}'
</source>
== Inspect model selection for residues ==
=== With Grep AIC selection from logfile ===
If you have a log file.
<source lang="bash">
set IN=log_relax_4_model_sel.log ;
set OUT=log_relax_4_model_sel_chosen_models.log txt ;
set FROM=`grep -n "AIC model selection" $IN | cut -d":" -f1` ;
</source>
=== In relax prompt get spin.model ===
See [[:Category:List_objects]] to get inspiration how to loop through the data class containers.
Let us select residues based on a criterion where the highest number of residues have been fitted to the same model.
Open the '''final_state.bz2''' in relaxGUI. <br>
You can see the model select for each residue in the '''Spin viewer''' (View -> Spin viewer (Ctrl+T)). Look for the '''Variable''' '''model'''.
<source lang="python">
from pipe_control.mol_res_spin import spin_loop
 
# Open file for writing
cluster_file = "cluster_residues.txt"
f = open(cluster_file, 'w')
# Make a list to count number of models
resi_models = []
 for spin, mol_name, res_num, res_name, spin_id in spin_loop(full_info=True, return_id=True, skip_desel=True): # Write models to file f.write( str(spin_id) + " ; " + str(spin.model) + " ; " + str(mol_name) + " ; " + str(res_num) + " ; " + str(res_name) + "\n" ) # Append models to list
resi_models.append(spin.model)
 print resi_models
# Count resi_models
print c_resi_models = dict((i,resi_models.count(i)) for i in resi_models)</source>print c_resi_models We see that '''CR72''' is most represented. <br>We make a list to cluster these residues, and write them # Write count result to a file '''cluster_residues.txt'''.<source lang="python">model_crit = 'CR72'sel_residues = []for spinkey, spin_id val in spin_loopc_resi_models.items(return_id=True, skip_desel=True): if spinf.model == model_crit: sel_residues.appendwrite( [spin_id, spin.model]) f = open"# ; " + str('cluster_residues.txt', 'w'key)for p in sel_residues: s = + " ; ".join+ str( map(str, p) val) + "\n" print s, f.write( s )
#Close the file
f.close()
</source>
Start relax in GUI mode
<source lang="python">
relax_disp -g -t log_relax_6_clusterlog_relax_5_cluster.log
</source>
# Open the '''relax prompt''' with '''Ctrl+p'''. And paste this is.
<source lang="python">
# Cluster file for selection residues.
cluster_file = "cluster_residues.txt"
# Cluster residues
f = open(cluster_file, 'r')
for line in f:
if line[0] == "#": continue else: spinid = line.split(";")[0].strip() spinmodel = line.split(";")[1].strip()  # Deselect those spins not showing exchange for further analysis. if spinmodel == "No Rex": deselect.spin(spin_id=spinid, change_all=False) else: relax_disp.cluster('model_cluster', "%s"%spinid)
f.close()
# Check which are clustered
print cdp.clustering
 
# Check for selected/deselected spins.
for spin, spin_id in spin_loop(return_id=True, skip_desel=False):
print spin_id, spin.select
</source>
# Before executing, it would be a good idea to save the state after clustering.
# Shift+Ctrl+s OR File-> Save as... '''ini_setup_cluster.bz2'''
# Ctrl+d , right click "base pipe" and "Associate with a new auto-analysis"
# Close pipe viewer
# Make a directory for the output of the results, f.ex: '''model_clustering_analyt'''
# Point '''Results directory''' to '''model_clustering_analyt'''.
# Pint '''Previous run directory''' to previous result directory, where all the models had their folders. Values will be read from here. '''model_sel_analyt'''
# Set Monte-Carlo Simulations to '''1050'''# Select models: Lets take '''"R2eff", "No Rex", "CR72TSMFK01", "IT99"'''# Save the state again, so the settings for models, monte-carlo settings and result directorys is preserved.# Shift+Ctrl+s OR File-> Save as... '''ini_run_cluster.bz2''' in the '''model_clustering_analyt''' directory.
# Now push "Execute"
Add the following python relax script file to the relax directory.
'''relax_5_ini_clusterrelax_5_cluster.py'''
<source lang="python">
"""Taken from the relax disp manual, section 10.6.1 Dispersion script mode - the sample script.
 
To run the script, simply type:
 
$ ../../../../../relax relax_5_cluster.py --tee relax_5_cluster.log
"""
 
import os
from auto_analyses.relax_disp import Relax_disp
from pipe_control.mol_res_spin import spin_loop
 
# Set settings for run.
pre_run_directory = os.path.join(os.getcwd(),"model_sel_analyt")
results_directory = os.path.join(os.getcwd(),"model_clustering_analyt")
cluster_file = "cluster_residues.txt"
 
# Load the previous final state with results.
state.load(state='final_state.bz2', dir=pre_run_directory, force=False)
 
# Open file for writing
f = open(cluster_file, 'w')
# Make a list to count number of models
resi_models = []
 
for spin, mol_name, res_num, res_name, spin_id in spin_loop(full_info=True, return_id=True, skip_desel=True):
# Write models to file
f.write( str(spin_id) + " ; " + str(spin.model) + " ; " + str(mol_name) + " ; " + str(res_num) + " ; " + str(res_name) + "\n" )
# Append models to list
resi_models.append(spin.model)
# Count resi_models
c_resi_models = dict((i,resi_models.count(i)) for i in resi_models)
print c_resi_models
# Write count result to file
for key, val in c_resi_models.items():
f.write( "# ; " + str(key) + " ; " + str(val) + "\n" )
# Load Close the initial state setupfile statef.loadclose(state='ini_setup.bz2')
##################
# Cluster file for selection residues.
cluster_file ################# # Load the initial state setupstate.load(state= "cluster_residues'ini_setup.txt"bz2', force=True)
# Cluster residues
f = open(cluster_file, 'r')
for line in f:
if line[0] == "#": continue else: spinid = line.split(";")[0].strip() spinmodel = line.split(";")[1].strip()  # Deselect those spins not showing exchange for further analysis. if spinmodel == "No Rex": deselect.spin(spin_id=spinid, change_all=False) else: relax_disp.cluster('model_cluster', "%s"%spinid)
f.close()
# Check which are clustered
print cdp.clustering
 
# Check for selected/deselected spins.
for spin, spin_id in spin_loop(return_id=True, skip_desel=False):
print spin_id, spin.select
# Save the program state before run.
state.save('ini_setup_cluster.bz2', force=True)
</source>
'''relax_6_cluster.py'''<source lang="python">import osfrom auto_analyses.relax_disp import Relax_disp################### Run cluster analysis# Load the initial state setupstate.load(state='ini_setup_cluster.bz2')################
# Set settings for run.
results_directory = os.path.join(os.getcwd(),"model_clustering_analyt")
pre_run_directory = os.path.join(os.getcwd(),"model_sel_analyt")
pipe_name = 'base pipe'; pipe_bundle = 'relax_disp'
MODELS = ['R2eff', 'No Rex', 'CR72TSMFK01']GRID_INC = 21; MC_NUM = 1050; MODSEL = 'AIC'
# Execute
And the just start relax with
<source lang="bash">
relax_disp relax_5_ini_clusterrelax_5_cluster.py -t log_relax_5_ini_cluster.logrelax_disp relax_6_cluster.py -t log_relax_6_clusterlog_relax_5_cluster.log
</source>
= See also =
[[Category:Relaxation dispersion analysis]]
[[Category:Tutorials]]
Trusted, Bureaucrats
4,223

edits