/* CT_cpmghsqc_fm_500.c This pulse sequence will allow one to perform the following experiment: 2D 13C CT CPMG-HSQC Used for high resolution high sensitivity 13C spectrum. Uses three channels: 1) 1H - 4.73 ppm 2) 13C - 43.0 ppm 3) 15N - 119.0 ppm Set dm = 'nnny', dmm = 'cccp' [13C decoupling during acquisition]. Set dm2 = 'nnnn', dmm2 = 'cccp'. Must set phase = 1,2 for States-TPPI acquisition in t1 [13C]. The flag f1180 should be set to 'y' if t1 is to be started at halfdwell time. This will give -90, 180 phasing in f1. If it is set to 'n' the phasing will be 0,0 and will still give a perfect baseline. If n_dec[A] == y : 15N decoupling during CT 13C evolution (t1) use for observing Ca If co_dec[A] == y : 13C decoupling during CT 13C evolution (t1) use for observing Ca Written by L. E. Kay, March 9, 1995 Adaptation by FM, April 8, 1999; Included CPMG-INEPT periods for enhanced sensitivity of exchange-broadened signals */ #include static int phi1[1] = {0}, phi2[4] = {0,1,2,3}, phi3[8] = {0,0,0,0,2,2,2,2}, rec[2] = {0,2}; static double d2_init=0.0; cpmg() { double pwc,taua,tau16; pwc=getval("pwc"); taua = getval("taua"); if(pw < pwc) tau16 = taua/16.0 - pwc; else tau16 = taua/16.0 - pw; initval(0.0,v1); initval(5.0,v3); initval(4.0,v5); loop(v5,v6); mod4(v1,v2); mod4(v3,v4); delay(tau16); simpulse(2*pw,2*pwc,v2,v2,0.0,0.0); delay(tau16); delay(tau16); simpulse(2*pw,2*pwc,v4,v4,0.0,0.0); delay(tau16); delay(tau16); simpulse(2*pw,2*pwc,v2,v2,0.0,0.0); delay(tau16); delay(tau16); simpulse(2*pw,2*pwc,v4,v4,0.0,0.0); delay(tau16); incr(v1); decr(v3); endloop(v6); } pulsesequence() { /* DECLARE VARIABLES */ char fsat[MAXSTR], fscuba[MAXSTR], f1180[MAXSTR], /* Flag to start t1 @ halfdwell */ fcpmg[MAXSTR], f_shp[MAXSTR], shp_sl[MAXSTR], codecseq[MAXSTR], co_dec[MAXSTR], n_dec[MAXSTR]; int phase, ni, t1_counter; /* used for states tppi in t1 */ double tau1, /* t1 delay */ taua, /* ~ 1/4JCH = 1.7 ms */ TC, /* carbon constant time period 1/2JCC */ pwc, /* 90 c pulse at dhpwr */ tsatpwr, /* low level 1H trans.power for presat */ tpwrsl, /* low level 1H trans.power for selective pulse */ pw_sl, dhpwr, /* power level for high power 13C pulses on dec1 */ sw1, /* sweep width in f1 */ pwcodec, /* pw90 for C' decoupling */ dressed, /* = 2 for seduce-1 decoupling */ dpwrsed, gt0, gt1, gt2, gt3, gt4, gt5, gzlvl0, gzlvl1, gzlvl2, gzlvl3, gzlvl4, gzlvl5; /* variables commented out are already defined by the system */ /* LOAD VARIABLES */ getstr("fsat",fsat); getstr("f1180",f1180); getstr("fscuba",fscuba); getstr("fcpmg",fcpmg); getstr("f_shp",f_shp); getstr("codecseq",codecseq); getstr("co_dec",co_dec); getstr("n_dec",n_dec); getstr("shp_sl",shp_sl); taua = getval("taua"); TC = getval("TC"); pwc = getval("pwc"); tpwr = getval("tpwr"); tsatpwr = getval("tsatpwr"); tpwrsl = getval("tpwrsl"); pw_sl = getval("pw_sl"); dhpwr = getval("dhpwr"); dpwr = getval("dpwr"); phase = (int) ( getval("phase") + 0.5); sw1 = getval("sw1"); ni = getval("ni"); pwcodec = getval("pwcodec"); dressed = getval("dressed"); dpwrsed = getval("dpwrsed"); 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"); /* LOAD PHASE TABLE */ settable(t1,1,phi1); settable(t2,4,phi2); settable(t3,8,phi3); settable(t5,2,rec); /* CHECK VALIDITY OF PARAMETER RANGES */ if( TC - 0.5*(ni-1)*1/(sw1) - 2.0*POWER_DELAY - PRG_START_DELAY - PRG_STOP_DELAY - 2.0e-6 < 0.2e-6 ) { printf(" ni is too big\n"); abort(1); } if((dm[A] == 'y' || dm[B] == 'y' || dm[C] == 'y' )) { printf("incorrect dec1 decoupler flags! "); abort(1); } if((dm2[A] == 'y' || dm2[B] == 'y' || dm2[C] == 'y' || dm2[D] == 'y')) { printf("incorrect dec2 decoupler flags! "); abort(1); } if( tpwrsl > 26 ) { printf("TPWRSL too large !!! "); abort(1); } if( tsatpwr > 6 ) { printf("TSATPWR too large !!! "); abort(1); } if( dpwr > 48 ) { printf("don't fry the probe, DPWR too large! "); abort(1); } if( dpwr2 > 49 ) { printf("don't fry the probe, DPWR2 too large! "); abort(1); } if( dhpwr > 63 ) { printf("don't fry the probe, DHPWR too large! "); abort(1); } if( pw > 200.0e-6 ) { printf("dont fry the probe, pw too high ! "); abort(1); } if(gt0 > 15e-3 || gt1 > 15e-3 || gt2 > 15e-3 || gt3 > 15e-3 || gt4 > 15e-3 || gt5 > 15e-3 ) { printf("gradients on for too long. Must be < 15e-3 \n"); abort(1); } if( taua < 0.0015 ) { printf("dont fry the probe, taua too short ! "); abort(1); } if( pwc > taua/16.0 ) { printf("pwc too long, or taua too short ! "); abort(1); } /* Phase incrementation for hypercomplex 2D data */ if (phase == 2) tsadd(t1,1,4); /* Set up f1180 tau1 = t1 */ tau1 = d2; if(f1180[A] == 'y') { tau1 += ( 1.0 / (2.0*sw1) ); } if(tau1 < 0.4e-6) tau1 = 0.4e-6; tau1 = tau1/2.0; /* Calculate modifications to phases for States-TPPI acquisition */ if( ix == 1) d2_init = d2 ; t1_counter = (int) ( (d2-d2_init)*sw1 + 0.5 ); if(t1_counter % 2) { tsadd(t1,2,4); tsadd(t5,2,4); } /* BEGIN ACTUAL PULSE SEQUENCE */ status(A); offset(dof,DODEV); rlpower(tsatpwr,TODEV); /* Set transmitter power for 1H presaturation */ rlpower(dhpwr,DODEV); /* Set Dec1 power for hard 13C pulses */ rlpower(dpwr2,DO2DEV); /* Set Dec2 power for 15N decoupling */ /* Presaturation Period */ status(B); if (fsat[0] == 'y') { delay(2.0e-5); rgpulse(d1,zero,2.0e-6,2.0e-6); /* presat */ rlpower(tpwr,TODEV); /* Set transmitter power for hard 1H pulses */ delay(2.0e-5); if(fscuba[0] == 'y') { delay(2.2e-2); rgpulse(pw,zero,2.0e-6,0.0); rgpulse(2*pw,one,2.0e-6,0.0); rgpulse(pw,zero,2.0e-6,0.0); delay(2.2e-2); } } else { delay(d1); } rlpower(tpwr,TODEV); /* Set transmitter power for hard 1H pulses */ txphase(zero); dec2phase(zero); decphase(zero); delay(1.0e-5); /* Begin Pulses */ status(C); rcvroff(); delay(20.0e-6); /* dephase water by shaped pulse (on- or off-resonance) */ if(f_shp[A] == 'y') { rlpower(tpwrsl,TODEV); shaped_pulse(shp_sl,pw_sl,zero,2.0e-6,0.0); delay(2.0e-6); rlpower(tpwr,TODEV); delay(2.0e-6); rgradient('z',gzlvl0); delay(gt0); rgradient('z',0.0); delay(150.0e-6); } /* first ensure that magnetization does infact start on H and not C */ decrgpulse(pwc,zero,2.0e-6,2.0e-6); delay(2.0e-6); rgradient('z',gzlvl1); delay(gt1); rgradient('z',0.0); delay(150.0e-6); /* this is the real start */ rgpulse(pw,zero,0.0,0.0); /* 90 deg 1H pulse */ txphase(zero); decphase(zero); if(fcpmg[0] == 'y') { cpmg(); txphase(one); decphase(t1); } else { delay(2.0e-6); rgradient('z',gzlvl2); delay(gt2); rgradient('z',0.0); delay(2.0e-6); delay(taua - gt2 - 4.0e-6 -2.0*GRADIENT_DELAY); simpulse(2*pw,2*pwc,zero,zero,0.0,0.0); txphase(one); decphase(t1); delay(2.0e-6); rgradient('z',gzlvl2); delay(gt2); rgradient('z',0.0); delay(2.0e-6); delay(taua - gt2 - 4.0e-6 -2.0*GRADIENT_DELAY); } rgpulse(pw,one,0.0,0.0); txphase(zero); delay(2.0e-6); rgradient('z',gzlvl3); delay(gt3); rgradient('z',0.0); delay(150.0e-6); if(n_dec[A] == 'y') { /* 15N decoupling on */ rlpower(dpwr2,DO2DEV); /* keep power down */ dec2prgon(dseq2,1.0/dmf2,dres2); dec2on(); /* 15N decoupling on */ } else delay(POWER_DELAY + PRG_START_DELAY); decrgpulse(pwc,t1,0.0,0.0); if(co_dec[A] == 'y') { /* C' decoupling on */ rlpower(dpwrsed,DODEV); decprgon(codecseq,pwcodec,dressed); decon(); /* C' decoupling on */ delay(tau1); rgpulse(2.0*pw,zero,0.0,0.0); delay(TC - POWER_DELAY - PRG_START_DELAY - 2.0*pw - PRG_STOP_DELAY - POWER_DELAY - 2.0e-6); /* C' decoupling off */ decoff(); decprgoff(); rlpower(dhpwr,DODEV); /* C' decoupling off */ } else { delay(tau1); rgpulse(2.0*pw,zero,0.0,0.0); delay(TC - 2.0*pw - 2.0e-6); } decrgpulse(2*pwc,t2,2.0e-6,0.0); if(co_dec[A] == 'y') { /* C' decoupling on */ rlpower(dpwrsed,DODEV); decprgon(codecseq,pwcodec,dressed); decon(); /* C' decoupling on */ delay(TC - tau1 - POWER_DELAY - PRG_START_DELAY - POWER_DELAY - PRG_STOP_DELAY - 2.0e-6); /* C' decoupling off */ decoff(); decprgoff(); rlpower(dhpwr,DODEV); /* C' decoupling off */ } else delay(TC - tau1 - 2.0e-6); decrgpulse(pwc,zero,2.0e-6,0.0); if(n_dec[A] == 'y') { /* N15 decoupling off */ dec2off(); dec2prgoff(); /* N15 decoupling off */ } else delay(PRG_STOP_DELAY); delay(2.0e-6); rgradient('z',gzlvl4); delay(gt4); rgradient('z',0.0); delay(150.0e-6); rgpulse(pw,zero,0.0,0.0); txphase(zero); decphase(zero); delay(2.0*pwc + 2*2.0e-6 + 2.0*POWER_DELAY); if(fcpmg[0] == 'y') { cpmg(); } else { delay(2.0e-6); rgradient('z',gzlvl5); delay(gt5); rgradient('z',0.0); delay(2.0e-6); delay(taua - gt5 - 4.0e-6 -2.0*GRADIENT_DELAY); simpulse(2*pw,2*pwc,zero,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl5); delay(gt5); rgradient('z',0.0); delay(2.0e-6); delay(taua - gt5 - 4.0e-6 -2.0*GRADIENT_DELAY); } decrgpulse(pwc,zero,2.0e-6,0.0); simpulse(pw,pwc,zero,t3,2.0e-6,0.0); rlpower(dpwr,DODEV); /* Set power for decoupling */ rlpower(dpwr2,DO2DEV); /* Set power for decoupling */ /* BEGIN ACQUISITION */ status(D); setreceiver(t5); }