Author: tlinnet Date: Thu May 1 10:47:35 2014 New Revision: 22906 URL: http://svn.gna.org/viewcvs/relax?rev=22906&view=rev Log: Added Baldwin model B14 test data. sr #3154: (https://gna.org/support/?3154) Implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales. Added: trunk/test_suite/shared_data/dispersion/Baldwin_2014/ trunk/test_suite/shared_data/dispersion/Baldwin_2014/Baldwin.py trunk/test_suite/shared_data/dispersion/Baldwin_2014/test.out trunk/test_suite/shared_data/dispersion/Baldwin_2014/test_w_error.out Added: trunk/test_suite/shared_data/dispersion/Baldwin_2014/Baldwin.py URL: http://svn.gna.org/viewcvs/relax/trunk/test_suite/shared_data/dispersion/Baldwin_2014/Baldwin.py?rev=22906&view=auto ============================================================================== --- trunk/test_suite/shared_data/dispersion/Baldwin_2014/Baldwin.py (added) +++ trunk/test_suite/shared_data/dispersion/Baldwin_2014/Baldwin.py Thu May 1 10:47:35 2014 @@ -0,0 +1,85 @@ +#!/usr/bin/python +###################################################################### +# Script to simulate R2eff from a CPMG experiment +# +# Note assumption of only inphase magnetisation and 2 site exchange +# only. +# +# Requires numpy. +# +# +# Do not distribute without permission. +# Copyright (c) +# Andrew Baldwin +# andrew.baldwin@xxxxxxxxxxxxx +# University of Oxford 2014. +# + +import numpy +from math import cos,sin,atan2 + +############################################################################ +#Note dw is in rad s-1. +def BaldDisp(kex,pb,dw,ncyc,Trel,R2g,R2e,outfile): + pa=(1-pb) + keg=kex*(1-pb) + kge=kex*pb + deltaR2=R2e-R2g + nu_cpmg=ncyc/Trel + tcp=Trel/(4.0*ncyc) #time for one free precession element + ######################################################################### + #get the real and imaginary components of the exchange induced shift + g1=2*dw*(deltaR2+keg-kge) #same as carver richards zeta + g2=(deltaR2+keg-kge)**2.0+4*keg*kge-dw**2 #same as carver richards psi + g3=cos(0.5*atan2(g1,g2))*(g1**2.0+g2**2.0)**(1/4.0) #trig faster than square roots + g4=sin(0.5*atan2(g1,g2))*(g1**2.0+g2**2.0)**(1/4.0) #trig faster than square roots + ######################################################################### + #time independent factors + N=complex(kge+g3-kge,g4) #N=oG+oE + NNc=(g3**2.+g4**2.) + f0=(dw**2.+g3**2.)/(NNc) #f0 + f2=(dw**2.-g4**2.)/(NNc) #f2 + #t1=(-dw+g4)*(complex(-dw,-g3))/(NNc) #t1 + t2=(dw+g4)*(complex(dw,-g3))/(NNc) #t2 + t1pt2=complex(2*dw**2.,-g1)/(NNc) #t1+t2 + oGt2=complex((deltaR2+keg-kge-g3),(dw-g4))*t2 #-2*oG*t2 + Rpre=(R2g+R2e+kex)/2.0 #-1/Trel*log(LpreDyn) + E0= 2.0*tcp*g3 #derived from relaxation #E0=-2.0*tcp*(f00R-f11R) + E2= 2.0*tcp*g4 #derived from chemical shifts #E2=complex(0,-2.0*tcp*(f00I-f11I)) + E1=(complex(g3,-g4))*tcp #mixed term (complex) (E0-iE2)/2 + ex0b=(f0*numpy.cosh(E0)-f2*numpy.cos(E2)) #real + ex0c=(f0*numpy.sinh(E0)-f2*numpy.sin(E2)*complex(0,1.)) #complex + ex1c=(numpy.sinh(E1)) #complex + v3=numpy.sqrt(ex0b**2.-1) #exact result for v2v3 + y=numpy.power((ex0b-v3)/(ex0b+v3),ncyc) + v2pPdN=(( complex(deltaR2+kex,dw) )*ex0c+(-oGt2-kge*t1pt2)*2*ex1c) #off diagonal common factor. sinh fuctions + Tog=(((1+y)/2+(1-y)/(2*v3)*(v2pPdN)/N)) + Minty=Rpre-ncyc/(Trel)*numpy.arccosh((ex0b).real)-1/Trel*numpy.log((Tog.real)) #estimate R2eff + + array=[] + for i in range(len(ncyc)): + array.append((nu_cpmg[i],Minty[i])) + if(outfile!='Null'): + outy=open(outfile,'w') + for i in range(len(array)): + outy.write('%f\t%f\n' % (array[i][0],array[i][1])) + outy.close() + return array + + +def ppm_to_rads(ppm,dfrq): + return ppm*2*numpy.pi*dfrq + + +if __name__ == "__main__": #run this if this file is run as standalone + #otherwise use the function form your own code. + outfile='test.out' #set to 'Null' if output is not required + kex=1000. #exchange rate = k+ + k- (s-1) + pb=0.01 #fractional population of excited state k+/kex + dw_ppm=2. #deltaOmega in ppm + dfrq=200. #spectrometer frequency of nucleci (MHz) + ncyc=numpy.array((2,4,8,10,20,40,500,)) #number of cpmg cycles (1 cycle = delay/180/delay/delay/180/delay) + R2g=2. #relaxation rate of ground (s-1) + R2e=100. #relaxation rate of excited (s-1) + Trelax=0.04 #total time of CPMG block + BaldDisp(kex,pb,ppm_to_rads(dw_ppm,dfrq),ncyc,Trelax,R2g,R2e,outfile) Added: trunk/test_suite/shared_data/dispersion/Baldwin_2014/test.out URL: http://svn.gna.org/viewcvs/relax/trunk/test_suite/shared_data/dispersion/Baldwin_2014/test.out?rev=22906&view=auto ============================================================================== --- trunk/test_suite/shared_data/dispersion/Baldwin_2014/test.out (added) +++ trunk/test_suite/shared_data/dispersion/Baldwin_2014/test.out Thu May 1 10:47:35 2014 @@ -0,0 +1,7 @@ +50.000000 10.286255 +100.000000 10.073083 +200.000000 9.692746 +250.000000 9.382441 +500.000000 6.312396 +1000.000000 3.957029 +12500.000000 2.880420 Added: trunk/test_suite/shared_data/dispersion/Baldwin_2014/test_w_error.out URL: http://svn.gna.org/viewcvs/relax/trunk/test_suite/shared_data/dispersion/Baldwin_2014/test_w_error.out?rev=22906&view=auto ============================================================================== --- trunk/test_suite/shared_data/dispersion/Baldwin_2014/test_w_error.out (added) +++ trunk/test_suite/shared_data/dispersion/Baldwin_2014/test_w_error.out Thu May 1 10:47:35 2014 @@ -0,0 +1,7 @@ +50.000000 10.286255 1.0 +100.000000 10.073083 1.0 +200.000000 9.692746 1.0 +250.000000 9.382441 1.0 +500.000000 6.312396 1.0 +1000.000000 3.957029 1.0 +12500.000000 2.880420 1.0