/* fmcpmghsqc_ref.c from : hsqc_gd_sl_seduce_500.c This pulse sequence will allow one to perform the following experiment: 2D HSQC Heteronuclear Single Quantum Coherence with enhanced sensitivity This sequence serves as a reference exp to the CPMG-HSQC exp, and dephases H2O at the start of the sequence. This is NOT a good sequence to record HSQC spectra at high pH !!! This sequence uses the standard three channel configuration 1) 1H - carrier (tof) @ 7.9 ppm [centre of HN !!!] 2) 13C - carrier (dof) @ 117 ppm [centre of CO and Ca] 3) 15N - carrier (dof2)@ 119 ppm [centre of amide 15N] Set dm = 'nnnn', dmm = 'cccc' Set dm2 = 'nnny', dmm2 = 'cccp' [15N decoupling during acquisition] dseq2 = 'waltz16' Must set phase = 1,2 for States-TPPI acquisition in t1 [15N] with gradient selection of 15N magnetization. [The fids must be manipulated (add/subtract) with 'grad_sort_nd' program (or equivalent) prior to regular processing.] Flags fsat 'y' for presaturation of H2O fscuba 'y' to apply scuba pulse after presaturation of H2O mess_flg 'y' for Messerlie type purging pulse f1180 'y' for 180 deg linear phase correction in F1 otherwise 0 deg linear phase correction c180_flg 'y' for 15N and 13C labelled samples Standard Settings fsat='n',fscuba='n',mess_flg='n',f1180='n',c180_flg='n' Written by L. E. Kay July 7 1992 REF: L. E. Kay, P. Keifer, and T. Saarinen J. Am. Chem. Soc. 114, 10663-10665 (1992). Modified by L. E. Kay Nov. 4 1992 to encorporate 8 step cycle Modified by L. E. Kay Mar. 16 1993 Modified by L. E. Kay April 15 1993 to allow the option of a hard C180 pulse in the middle of the t1 period. Modified by L. E. Kay Dec 15, 1993 to encorporate selective pulses on water Modified by L. E. Kay to remove most of the (unnecessary) selective pulses REF: Zhang et. al. J. Biomol. NMR 4, 845 (1994) Modified by L. E. Kay on May 23, 1998 to split C.H.T gradient on 15N. Modified by FM on April 7, 1999 to include selective dephasing of H2O by off-resonance pulse at start of sequence and removed the flipback pulse NB The 1H carrier is NOT @ 4.7 PPM !!! */ #include static double d2_init = 0.0; static int phi1[1] = {0}, phi2[1] = {1}, phi3[8] = {0,0,1,1,2,2,3,3}, phi4[2] = {0,2}, phi5[1] = {0}, phi7[1] = {0}, rec[4] = {0,0,2,2}; pulsesequence() { /* DECLARE VARIABLES */ char fscuba[MAXSTR],f1180[MAXSTR],fsat[MAXSTR],mess_flg[MAXSTR],c180_flg[MAXSTR],shp_sl[MAXSTR]; int phase,icosel,t1_counter; double hscuba, /* length of 1/2 scuba delay */ tauxh, /* 1 / 4J(XH) */ pwx2, /* PW90 for N-nuc */ pwx1, /* PW90 for C-nuc */ tsatpwr, /* low power level for presat*/ tpwrmess, /* power level for Messerlie purge */ dly_pg, /* Messerlie purge delay */ dhpwr2, /* power level for N hard pulses */ dhpwr, /* power level for C hard pulses */ jxh, /* coupling for XH */ tau1, /* t1/2 */ sw1, pw_sl, /* pw for selective pulse at twprsl */ tpwrsl, gzlvl0, /* level of grad. */ gt0, /* grad time */ gzlvl1, /* level of grad. */ gt1, /* grad time */ gzlvl2, gt2, gzlvl3, gt3, gzlvl4, gt4, gzlvl5, gt5, BigT, /* constant time for N evolution */ BigT1; /* LOAD VARIABLES */ jxh = getval("jxh"); pwx2 = getval("pwx2"); pwx1 = getval("pwx1"); tsatpwr = getval("tsatpwr"); tpwrmess = getval("tpwrmess"); dly_pg = getval("dly_pg"); dhpwr2 = getval("dhpwr2"); dhpwr = getval("dhpwr"); hscuba = getval("hscuba"); phase = (int) (getval("phase") + 0.5); sw1 = getval("sw1"); BigT = getval("BigT"); BigT1 = getval("BigT1"); pw_sl = getval("pw_sl"); tpwrsl = getval("tpwrsl"); gt0 = getval("gt0"); gt1 = getval("gt1"); gt2 = getval("gt2"); gt3 = getval("gt3"); gt4 = getval("gt4"); gt5 = getval("gt5"); gzlvl0 = getval("gzlvl0"); gzlvl1 = getval("gzlvl1"); gzlvl2 = getval("gzlvl2"); gzlvl3 = getval("gzlvl3"); gzlvl4 = getval("gzlvl4"); gzlvl5 = getval("gzlvl5"); getstr("fscuba",fscuba); getstr("fsat",fsat); getstr("f1180",f1180); getstr("mess_flg",mess_flg); getstr("c180_flg",c180_flg); getstr("shp_sl",shp_sl); /* check validity of parameter range */ if((dm[A] == 'y' || dm[B] == 'y' || dm[C] == 'y' || dm[D] == 'y')) { printf("incorrect Dec1 decoupler flags! "); abort(1); } if((dm2[A] == 'y' || dm2[B] == 'y' || dm2[C] == 'y')) { printf("incorrect Dec2 decoupler flags! "); abort(1); } if( tsatpwr > 8 ) { printf("tsatpwr too large !!! "); abort(1); } if ( tpwrmess > 57 ) { printf("tpwrmess too high !!!"); abort(1); } if (dly_pg > 0.010 ) { printf("dly_pg too long !! "); abort(1); } if( dpwr > 50 ) { printf("don't fry the probe, dpwr too large! "); abort(1); } if( dpwr2 > 50 ) { printf("don't fry the probe, dpwr2 too large! "); abort(1); } if(gt0 > 15.0e-3 || gt1 > 15.0e-3 || gt2 > 15.0e-3 || gt3 > 15.0e-3 || gt4 > 15.0e-3 || gt5 > 15.0e-3) { printf("gti must be less than 15 ms \n"); abort(1); } if(mess_flg[A] == 'y') { printf("mess_flg should REALLY be set to n for optimum performance\n"); } /* LOAD VARIABLES */ settable(t1, 1, phi1); settable(t2, 1, phi2); settable(t3, 8, phi3); settable(t4, 2, phi4); settable(t5, 1, phi5); settable(t7, 1, phi7); settable(t6, 4, rec); /* INITIALIZE VARIABLES */ tauxh = ((jxh != 0.0) ? 1/(4*(jxh)) : 2.25e-3); /* Phase incrementation for hypercomplex data */ if ( phase == 1 ) /* Hypercomplex in t1 */ { tsadd(t5, 2, 4); icosel = 1; /* and reverse the sign of the gradient */ } else icosel = -1; /* calculate modification to phases based on current t1 values to achieve States-TPPI acquisition */ if(ix == 1) d2_init = d2; t1_counter = (int) ( (d2-d2_init)*sw1 + 0.5); if(t1_counter %2) { tsadd(t7,2,4); tsadd(t6,2,4); } /* set up so that get (-90,180) phase corrects in F1 if f1180 flag is y */ tau1 = d2; if(f1180[A] == 'y') tau1 += ( 1.0/(2.0*sw1) ); tau1 = tau1/2.0; /* BEGIN ACTUAL PULSE SEQUENCE */ status(A); rlpower(tsatpwr,TODEV); /* Set power for presaturation */ rlpower(dhpwr,DODEV); /* Set decoupler1 power to dhpwr */ rlpower(dhpwr2,DO2DEV); /* Set decoupler2 power to dhpwr2 */ /* Presaturation Period */ status(B); /* option for Messerlie purge */ if(mess_flg[A] == 'y') { rlpower(tpwrmess,TODEV); rgpulse(dly_pg,zero,20.0e-6,20.0e-6); rgpulse(dly_pg/1.62,one,20.0e-6,20.0e-6); rlpower(tsatpwr,TODEV); } if(fsat[0] == 'y') { txphase(zero); rgpulse(d1,zero,20.0e-6,20.0e-6); rlpower(tpwr,TODEV); /* Set power for hard pulses */ if (fscuba[0] == 'y') /* Scuba pulse sequence */ { hsdelay(hscuba); rgpulse(pw,zero,1.0e-6,0.0); /* 90x180y90x */ rgpulse(2*pw,one,1.0e-6,0.0); rgpulse(pw,zero,1.0e-6,0.0); txphase(zero); delay(hscuba); } } else { rlpower(tpwr,TODEV); /* Set power for hard pulses */ delay(d1); } status(C); rcvroff(); delay(20.0e-6); /* eliminate all magnetization originating on 15N */ dec2rgpulse(pwx2,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl0); delay(gt0); rgradient('z',0.0); delay(150.0e-6); /* shaped pulse applied off-resonance to dephase water*/ rlpower(tpwrsl,TODEV); shaped_pulse(shp_sl,pw_sl,two,2.0e-6,0.0); delay(2.0e-6); rlpower(tpwr,TODEV); /* end of shaped pulse */ delay(2.0e-6); rgradient('z',gzlvl0); delay(gt0); rgradient('z',0.0); delay(150.0e-6); rgpulse(pw,zero,1.0e-6,0.0); txphase(zero); dec2phase(zero); delay(2.0e-6); rgradient('z',gzlvl1); delay(gt1); rgradient('z',0.0); delay(2.0e-6); delay(tauxh - gt1 - 4.0e-6); /* delay=1/4J(XH) */ sim3pulse(2*pw,0.0e-6,2*pwx2,zero,zero,zero,0.0,0.0); txphase(t2); dec2phase(t7); delay(tauxh - gt1 - 202.0e-6); /* delay=1/4J(XH) */ delay(2.0e-6); rgradient('z',gzlvl1); delay(gt1); rgradient('z',0.0); delay(200.0e-6); rgpulse(pw,t2,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl2); delay(gt2); rgradient('z',0.0); delay(150.0e-6); dec2rgpulse(pwx2,t7,0.0,0.0); txphase(t4); dec2phase(t3); delay(tau1); /* delay=t2/2 */ if(c180_flg[A] == 'y') { decrgpulse(pwx1,one,0.0,0.0); simpulse(2*pw,2*pwx1,t4,zero,2.0e-6,0.0); decrgpulse(pwx1,one,2.0e-6,0.0); } else rgpulse(2*pw,t4,0.0,0.0); txphase(zero); delay(tau1); delay(2.0e-6); rgradient('z',-1.0*gzlvl3); delay(gt3); rgradient('z',0.0); delay(2.0e-6); delay(BigT - gt3 - 2.0*GRADIENT_DELAY); dec2rgpulse(2*pwx2,t3,0.0,0.0); dec2phase(t5); delay(2.0e-6); rgradient('z',gzlvl3); delay(gt3); rgradient('z',0.0); delay(2.0e-6); if(c180_flg[A] == 'y') { if(pwx1 > pw) delay(BigT + 4*pwx1 - gt3 - 2*GRADIENT_DELAY - 4.0e-6); else delay(BigT + 2*pwx1 + 2*pw - gt3 - 2*GRADIENT_DELAY - 4.0e-6); } else delay(BigT + 2*pw - gt3 - 2*GRADIENT_DELAY - 4.0e-6); sim3pulse(pw,0.0e-6,pwx2,zero,zero,t5,0.0,0.0); /* X read pulse */ txphase(zero); dec2phase(zero); delay(2.0e-6); rgradient('z',gzlvl5); delay(gt5); rgradient('z',0.0); delay(200.0e-6); delay(tauxh - gt5 - 202.0e-6); /* delay=1/4J (XH) */ sim3pulse(2*pw,0.0e-6,2*pwx2,zero,zero,zero,0.0,0.0); txphase(one); dec2phase(one); delay(tauxh - gt5 - 202.0e-6); /* delay=1/4J (XH) */ delay(2.0e-6); rgradient('z',gzlvl5); delay(gt5); rgradient('z',0.0); delay(200.0e-6); sim3pulse(pw,0.0e-6,pwx2,one,zero,one,0.0,0.0); dec2phase(zero); txphase(zero); delay(2.0e-6); rgradient('z',gzlvl5); delay(gt5); rgradient('z',0.0); delay(200.0e-6); delay(tauxh - gt5 - 202.0e-6); /* delay=1/4J (XH) */ sim3pulse(2*pw,0.0e-6,2*pwx2,zero,zero,zero,0.0,0.0); rlpower(dpwr2,DO2DEV); /* lower decoupler power for decoupling on decouper channel 2 */ rlpower(dpwr,DODEV); delay(tauxh - 2.0*POWER_DELAY - gt5 - 202.0e-6); /* delay=1/4J(XH) */ delay(2.0e-6); rgradient('z',gzlvl5); delay(gt5); rgradient('z',0.0); delay(200.0e-6); rgpulse(pw,zero,0.0,0.0); delay(BigT1 - 2.0/PI*pw); rgpulse(2*pw,zero,0.0,rof2); delay(2.0e-6); rgradient('z',icosel*gzlvl4); delay(gt4); rgradient('z',0.0); delay(2.0e-6); delay(BigT1 - gt4 - 4.0e-6 - 2.0*GRADIENT_DELAY); /* acquire data */ status(D); setreceiver(t6); }