/* cgh_sed_ctHcCHcosy_0997.c Spin-Echo difference CT-HCCH-COSY H1'-C1'-H2' experiment for determination of C2'-P coupling constants in RNA oligomers Written by Chas. Hoogstraten, University of Colorado Reference: C.G. Hoogstraten and A. Pardi J. Magn. Reson. in press (1998) Pulse sequence developed and tested on Varian UnityPlus and UnityINOVA systems pwxlvl - decoupler#1 power level for hard pulses (13C) pwx - 90 pulse width decoupler#1 hard pulses pwxlvl2, pwx2 - decoupler 2 (31P) satflg - a y/n flag for transmitter presaturation satdly - the presaturation delay used if satflg = y. satpwr - the presaturation power satfrq - the frequency desired for presaturation phase - use phase=1,2 for States -TPPI hypercomplex method. phase2 - use phase2=1,2 for States -TPPI hypercomplex method pcoupflg - 'y' if phosphorus-carbon coupling is active tauxh - 1/4JCH (ca. 1.5 ms) taucc - 1/4JCC (ca. 5.9 ms) shpname,shptpwr,shppwc - parameters for C1' shaped pulse shaped pulse should be generated for desired offset from carrier using Varian "convolute" macro ctdel - precession time on C2', 23.5 ms or 47 ms History: originally Jean-Pierre Simorre jphcchcosy.c mod cgh 11/30/95 mod to 3D epsilon measurement CGH 10/96 mod to C1' evolution cgh modify quad calculation, other details, full documentation CGH 9/25/97 */ #include static int phi1[1] = {0}, phi2[4] = {0,2,0,2}, phi5[8] = {0,0,0,0,2,2,2,2}, phi6[4] = {0,0,2,2}, phi18[1] = {0}, phi19[1] = {2}, rec_1[8] = {0,2,2,0,0,2,2,0}; static double d2_init=0.0, d3_init=0.0; pulsesequence() { /* DECLARE VARIABLES */ char pcoupflg[MAXSTR],shpname[MAXSTR],satflg[MAXSTR]; int ni2,ini,iphase,iphase2,t1_counter,t2_counter; double dx, phase,tauxh, shptpwr,shppwc, del2,taucc,ctdel; /* INITIALIZE VARIABLES */ dx = getval("dx"); at = getval("at"); pwxlvl = getval("pwxlvl"); pwxlvl2 = getval("pwxlvl2"); pwx = getval("pwx"); pwx2 = getval("pwx2"); getstr("satflg",satflg); getstr("shpname",shpname); getstr("pcoupflg",pcoupflg); satdly = getval("satdly"); satpwr = getval("satpwr"); satfrq = getval("satfrq"); phase = getval("phase"); phase2 = getval("phase2"); ni = getval("ni"); ni2 = getval("ni2"); iphase = (int) ( phase + 0.5); iphase2 = (int) ( phase2 + 0.5); ini = (int) (ni + 0.5); ctdel = getval("ctdel"); tauxh = getval("tauxh"); taucc = getval("taucc"); shptpwr = getval("shptpwr"); shppwc = getval("shppwc"); del2 = getval("del2"); sw2 = getval("sw2"); /* check validity of parameter range */ if ( (( dm[C] == 'y' ) || ( dm2[C] == 'y' )) && ( at > 0.500 ) ) { printf(" Check your acquisition time! "); abort(1); } if ( ( dm[C] == 'y' ) && ( dm2[C] == 'y' ) ) { printf(" Do not use both decouplers simultaneously! "); abort(1); } if ( (dm[A] == 'y' ) || ( dm[B] == 'y' ) ) { printf(" Incorrect Dec1 decoupler flags! "); printf(" dm must = nnn !!! "); abort(1); } if ( (dm2[A] == 'y' ) || ( dm2[B] == 'y' ) ) { printf(" Incorrect Dec2 decoupler flags! "); printf(" dm2 must = 'nnn' or 'nny' !!! "); abort(1); } if ( ( dm[C] == 'y') && (dpwr > 43) ) { printf(" Incorrect power for dec1! "); printf(" dpwr must be < 44 !!! "); abort(1); } if ( ( dm2[C] == 'y') && (dpwr2 > 43) ) { printf(" Incorrect power for dec2! "); printf(" dpwr2 must be < 44 !!! "); abort(1); } if ( satpwr > 20 ) { printf(" Satpwr too high !!! "); printf(" satpwr must be < 20. "); abort(1); } if ( satdly > 1 ) { printf(" Satdly too long !!! "); printf(" satdly must be < 1 sec. "); abort(1); } if ( pw > 25 ) { printf(" Your pw is too long !!! "); printf(" pw must be < 25 "); abort(1); } if ( pwx > 80 ) { printf(" Your pwx is too long !!! "); printf(" pwx must be < 80 "); abort(1); } if ( pwx2 > 40 ) { printf(" Your pwx2 is too long !!! "); printf(" pwx2 must be < 40 "); abort(1); } if (del2 < (1/sw2)*0.5*ni2 ) { printf(" Your AT in carbon is too long! "); printf(" Pulses will collide! "); abort(1); } /* SET VARIABLES */ settable(t1, 1, phi1); settable(t2, 4, phi2); settable(t5, 8, phi5); settable(t6, 4, phi6); settable(t18, 1, phi18); settable(t19, 1, phi19); settable(t11,8, rec_1); /* Phase incrementation for States-Tppi data in proton d2 */ /* Syntax borrowed from Lewis Kay */ if (iphase == 2) tsadd(t2,1,4); if(ix == 1) d2_init = d2; t1_counter = (int) ( (d2-d2_init)*sw1 + 0.5); if(t1_counter % 2) { tsadd(t2,2,4); tsadd(t11,2,4); } /* Phase incrementation, States-Tppi, carbon d3 dim */ if (iphase2 == 2) tsadd(t6,1,4); if(ix == 1) d3_init = d3; t2_counter = (int) ( (d3-d3_init)*sw2 + 0.5); if(t2_counter % 2) { tsadd(t6,2,4); tsadd(t11,2,4); } /* BEGIN ACTUAL PULSE SEQUENCE */ status(A); rcvroff(); txphase(zero); decphase(zero); dec2phase(zero); decpower(pwxlvl); dec2power(pwxlvl2); delay(dx); if (satflg[0] == 'y') { obspower(satpwr); obsoffset(satfrq); delay(d1-satdly); rgpulse(satdly,zero,0.0,0.0); /* Presaturation using transmitter */ obspower(tpwr); obsoffset(tof); } else { delay(d1); obsoffset(tof); } status(B); /* INEPT transfer to carbon */ decphase(zero); txphase(t2); rgpulse(pw,t2,rof1,0.0); delay(d2/2.0); decrgpulse(2*pwx,zero,0.0,0.0); delay(d2/2.0); txphase(zero); delay(tauxh); simpulse(2*pw,2*pwx,zero,zero,0.0,0.0); decphase(t6); delay(tauxh); rgpulse(pw*55.5,zero,0.0,0.0); /* Messerle-type pulse for selection */ txphase(one); simpulse(pw,pwx,one,t6,0.0,0.0); /* catenated C-H rephasing, C-C dephasing, CT-C1' evolution */ txphase(zero); delay(d3/2.0 + tauxh); rgpulse(2*pw,zero,0.0,0.0); decphase(zero); delay(del2-tauxh); decrgpulse(2*pwx,zero,0.0,0.0); decphase(t5); delay(del2 - d3/2.0); decrgpulse(pwx,t5,0.0,0.0); /* C-C COSY pulse */ /* Catenated C1'-C2' rephasing, CT C-P oscill., C-H dephasing */ if(pcoupflg[0] == 'y') { decphase(zero); delay(tauxh - pw); rgpulse(2*pw,zero,0.0,0.0); decpower(shptpwr); delay(ctdel/2.0 - taucc - shppwc - tauxh - pw); decshaped_pulse(shpname,shppwc,zero,0.0,0.0); decpower(pwxlvl); delay(taucc - pwx2); dec2rgpulse(pwx2,zero,0.0,0.0); decrgpulse(2*pwx,zero,0.0,0.0); dec2rgpulse(pwx2,zero,0.0,0.0); decpower(shptpwr); delay(ctdel/2.0 - shppwc - pwx2); decshaped_pulse(shpname,shppwc,zero,0.0,0.0); decphase(t1); decpower(pwxlvl); } else { decphase(zero); delay(tauxh - pw); rgpulse(2*pw,zero,0.0,0.0); decpower(shptpwr); delay(ctdel/2.0 - taucc - shppwc - tauxh - pw); decshaped_pulse(shpname,shppwc,zero,0.0,0.0); decpower(pwxlvl); delay(taucc - pwx2); dec2rgpulse(pwx2,zero,0.0,0.0); decrgpulse(2*pwx,zero,0.0,0.0); dec2rgpulse(pwx2,two,0.0,0.0); decpower(shptpwr); delay(ctdel/2.0 - shppwc - pwx2); decshaped_pulse(shpname,shppwc,zero,0.0,0.0); decphase(t1); decpower(pwxlvl); } /* Transfer back to proton */ simpulse(pw,pwx,zero,t1,0.0,0.0); txphase(three); rgpulse(pw*110,three,0.0,0.0); /* Messerle-type pulse */ decphase(zero); delay(tauxh); simpulse(2*pw,2*pwx,zero,zero,0.0,rof2); /* crof2 for baseline adj */ delay(tauxh); decpower(dpwr); decoffset(dof); /* acquire data */ status(C); setreceiver(t11); }