/* hnco_3c_pfg_lek+_sel11_500.c This pulse sequence will allow one to perform the following experiment: 3D hnco (enhanced sensitivity PFG) with selective pulses to minimize excitation of water F1 CO F2 15N F3(acq) 1H (NH) This sequence uses the standard three channel configuration 1) 1H - carrier (tof) @ 4.7 ppm [H2O] 2) 13C - carrier (dof) @ 176 ppm [CO] 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 and phase2 = 1,2 for States-TPPI acquisition in t1 [CO] and t2 [N]. [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' for apply scuba pulse after presaturation of H2O f1180 'y' for 180 deg linear phase correction in F1 otherwise 0 deg linear phase correction f2180 'y' for 180 deg linear phase coreection in F2 otherwise 0 deg fc180 'y' for C180 at t2/2 when checking 15N/NH 2D Standard Settings fsat='n',fscuba='n',f1180='y',f2180='n',fc180='n' Set f1180 to y for (-90,180) in C' and f2180 to n for (0,0) in N Set the carbon carrier on the C' and use the waveform to pulse the c-alpha Modified from hnco_3c_pfg_laue.c by RM 12/11/92 to use the LEK approach to achieve gd selection of coherences with enhanced sensitivity REF: D. R. Muhandiram and L. E. Kay J. Magn. Reson. B 103, 203-216 (1994). L. E. Kay, P. Keifer and T. Saarinen J. Am. Chem. Soc. 114, 10663-10665 (1992). Non-gradient, unenhanced versions S. Grzesiek and A. Bax J. Magn. Reson. 96, 432 (1992) Kay et. al. J. Magn. Reson. 89, 496 (1990) Modified by LEK Sept. 19, 1993 to encorporate new features Modified by LEK Nov 26, 93 from hnco_3c_pfg_lek+ to include features so as to NOT (minimally) perturb the water Dec. 22,93 includes seduce shape for water Corrected by R. M. Jan 11, 1994 to account for the pwmlev after the WALTZ-16 decoupling during 15N evolution. Minimizes the number of selective pulses according to the suggestion of Toshio Yamazaki. Checked to ensure that there is at least 2us delay between rlpower and rgpulse statements-RM Oct 28, 1995. REF: L. E. Kay, G. Y. Xu and T. Yamazaki J. Magn. Reson. A 109, 129-133 (1994) BMRB Pulse Sequence Accession Number: 35 */ #include #define PI 3.1416 static int phi1[2] = {0,2}, phi2[4] = {0,0,2,2}, phi3[1] = {0}, phi4[8] = {0,0,0,0,2,2,2,2}, phi5[1] = {0}, rec[4] = {0,2,2,0}; static double d2_init=0.0, d3_init=0.0; pulsesequence() { /* DECLARE VARIABLES */ char fsat[MAXSTR], fscuba[MAXSTR], f1180[MAXSTR], /* Flag to start t1 @ halfdwell */ f2180[MAXSTR], /* Flag to start t2 @ halfdwell */ spca180[MAXSTR], /* string for the waveform 180 */ cadecseq[MAXSTR], /* string for decoupling of ca during N evol */ fc180[MAXSTR], shp_sl[MAXSTR]; /* string for seduce shape */ int phase, phase2, ni2, icosel, /* icosel changes sign with gds */ t1_counter, /* used for states tppi in t1 */ t2_counter; /* used for states tppi in t2 */ double tau1, /* t1 delay */ tau2, /* t2 delay */ taua, /* ~ 1/4JNH = 2.25 ms */ zeta, /* time for C'-N to refocuss set to 0.5*24.0 ms */ bigTN, /* nitrogen T period */ BigT1, /* delay to compensate for gradient gt5 */ pwn, /* PW90 for 15N pulse */ pwco90, /* PW90 for co nucleus @ dhpwr */ pwca180h, /* PW180 for ca at dvhpwr */ pwcadec, /* PW90 for seduce decoupling */ pwmlev, /* PW 90 for hard flip back 1H pulses */ tsatpwr, /* low level 1H trans.power for presat */ tpwrml, /* power level for 1H decoupling */ dhpwr, /* power level for 13C pulses on dec1 - 64 us 90 for part a of the sequence */ dvhpwr, /* power level for 180 13C pulses at 54 ppm using a 55.6 us 180 so that get null in co at 178 ppm */ dpwrsed, /* power level for seduce decoupling */ dressed, /* seduce decoupling dres = 2 */ dhpwr2, /* high dec2 pwr for 15N hard pulses */ sw1, /* sweep width in f1 */ sw2, /* sweep width in f2 */ pw_sl, /* pw90 for H selective pulse on water ~ 1ms */ tpwrsl, /* power level for square pw_sl */ gt0, gt1, gt2, gt3, gt4, gt5, gt6, gt7, gt8, gzlvl0, gzlvl1, gzlvl2, gzlvl3, gzlvl4, gzlvl5, gzlvl6, gzlvl7, gzlvl8; /* LOAD VARIABLES */ getstr("fsat",fsat); getstr("f1180",f1180); getstr("f2180",f2180); getstr("fscuba",fscuba); getstr("spca180",spca180); getstr("cadecseq",cadecseq); getstr("fc180",fc180); getstr("shp_sl",shp_sl); taua = getval("taua"); zeta = getval("zeta"); bigTN = getval("bigTN"); BigT1 = getval("BigT1"); pwmlev = getval("pwmlev"); pwca180h = getval("pwca180h"); pwco90 = getval("pwco90"); pwcadec = getval("pwcadec"); pwn = getval("pwn"); tpwr = getval("tpwr"); tsatpwr = getval("tsatpwr"); tpwrml = getval("tpwrml"); dhpwr = getval("dhpwr"); dpwr = getval("dpwr"); dpwrsed = getval("dpwrsed"); dressed = getval("dressed"); dhpwr2 = getval("dhpwr2"); phase = (int) ( getval("phase") + 0.5); phase2 = (int) ( getval("phase2") + 0.5); sw1 = getval("sw1"); sw2 = getval("sw2"); dvhpwr = getval("dvhpwr"); ni2 = getval("ni2"); 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"); gt6 = getval("gt6"); gt7 = getval("gt7"); gt8 = getval("gt8"); gzlvl0 = getval("gzlvl0"); gzlvl1 = getval("gzlvl1"); gzlvl2 = getval("gzlvl2"); gzlvl3 = getval("gzlvl3"); gzlvl4 = getval("gzlvl4"); gzlvl5 = getval("gzlvl5"); gzlvl6 = getval("gzlvl6"); gzlvl7 = getval("gzlvl7"); gzlvl8 = getval("gzlvl8"); /* LOAD PHASE TABLE */ settable(t1,2,phi1); settable(t2,4,phi2); settable(t3,1,phi3); settable(t4,8,phi4); settable(t5,1,phi5); settable(t6,4,rec); /* CHECK VALIDITY OF PARAMETER RANGES */ if( bigTN - (ni2*0.5/sw2) < 0.2e-6 ) { printf(" ni2 is too big\n"); abort(1); } 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! Should be 'nnnn' "); abort(1); } if( tpwrml > 55 ) { printf("tpwrml is too high\n"); abort(1); } if( tsatpwr > 6 ) { printf("TSATPWR too large !!! "); abort(1); } if( dpwr > 46 ) { printf("don't fry the probe, DPWR too large! "); abort(1); } if( dpwr2 > 46 ) { printf("don't fry the probe, DPWR2 too large! "); abort(1); } if( dhpwr > 62 ) { printf("don't fry the probe, DHPWR too large! "); abort(1); } if( dhpwr2 > 62 ) { printf("don't fry the probe, DHPWR2 too large! "); abort(1); } if( pw > 200.0e-6 ) { printf("dont fry the probe, pw too high ! "); abort(1); } if( pwn > 200.0e-6 ) { printf("dont fry the probe, pwn too high ! "); abort(1); } if( pwco90 > 200.0e-6 ) { printf("dont fry the probe, pwco90 too high ! "); abort(1); } if( pwca180h > 200.0e-6 ) { printf("dont fry the probe, pwca180h too high ! "); abort(1); } if( f1180[A] != 'y' && f2180[A] != 'n' ) { printf("flags may be set wrong: set f1180=y and f2180=n for 3d\n"); abort(1); } if( bigTN > 13e-3 ) { printf("BigTN is too long \n"); abort(1); } if( zeta > 13e-3 ) { printf("zeta is too long \n"); abort(1); } if( gt3 > 2.5e-3 ) { printf("gt3 is too long\n"); abort(1); } if( gt0 > 10.0e-3 || gt1 > 10.0e-3 || gt2 > 10.0e-3 || gt4 > 10.0e-3 || gt5 > 10.0e-3 || gt6 > 10.0e-3 || gt7 > 10.0e-3 || gt8 > 10.0e-3) { printf("gt values are too long. Must be < 10.0e-3\n"); abort(1); } /* Phase incrementation for hypercomplex 2D data */ if (phase == 2) tsadd(t2,1,4); if (phase2 == 2) { tsadd(t5, 2, 4); icosel = 1; } /* change sign of gradient */ else icosel = -1; /* Set up f1180 tau1 = t1 */ tau1 = d2; if(f1180[A] == 'y') { tau1 += ( 1.0 / (2.0*sw1) - 2*pwn - 2.0e-6 - pwca180h - 4.0/PI*pwco90 - 2*POWER_DELAY - 2.0e-6 - WFG_START_DELAY - WFG_STOP_DELAY ); if(tau1 < 0.2e-6) tau1 = 0.4e-6; } tau1 = tau1/2.0; /* Set up f2180 tau2 = t2 */ tau2 = d3; if(f2180[A] == 'y') { tau2 += ( 1.0 / (2.0*sw2) ); if(tau2 < 0.2e-6) tau2 = 0.4e-6; } tau2 = tau2/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(t2,2,4); tsadd(t6,2,4); } if( ix == 1) d3_init = d3 ; t2_counter = (int) ( (d3-d3_init)*sw2 + 0.5 ); if(t2_counter % 2) { tsadd(t3,2,4); tsadd(t6,2,4); } /* BEGIN ACTUAL PULSE SEQUENCE */ status(A); offset(tof,TODEV); offset(dof,DODEV); rlpower(tsatpwr,TODEV); /* Set transmitter power for 1H presaturation */ rlpower(dhpwr,DODEV); /* Set Dec1 power for hard 13C pulses */ rlpower(dhpwr2,DO2DEV); /* Set Dec2 power for 15N hard pulses */ /* Presaturation Period */ status(B); if (fsat[0] == 'y') { delay(2.0e-5); rgpulse(d1,zero,2.0e-6,2.0e-6); /* presaturation */ 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); delay(1.0e-5); /* Begin Pulses */ status(C); rcvroff(); delay(20.0e-6); dec2rgpulse(pwn,zero,0.0,0.0); delay(0.2e-6); rgradient('z',gzlvl0); delay(gt0); rgradient('z',0.0); delay(150.0e-6); rgpulse(pw,zero,0.0,0.0); /* 90 deg 1H pulse */ delay(0.2e-6); rgradient('z',gzlvl1); delay(gt1); rgradient('z',0.0); delay(2.0e-6); delay(taua - gt1 - 2.2e-6); /* taua <= 1/4JNH */ sim3pulse(2*pw,0.0e-6,2*pwn,zero,zero,zero,0.0,0.0); txphase(one); dec2phase(t1); decphase(zero); delay(taua - gt1 - 200.2e-6); delay(0.2e-6); rgradient('z',gzlvl1); delay(gt1); rgradient('z',0.0); delay(200.0e-6); rgpulse(pw,one,0.0,0.0); /* shaped pulse */ rlpower(tpwrsl,TODEV); shaped_pulse(shp_sl,pw_sl,zero,2.0e-6,0.0); delay(2.0e-6); rlpower(tpwr,TODEV); /* shaped pulse */ delay(0.2e-6); rgradient('z',gzlvl2); delay(gt2); rgradient('z',0.0); delay(200.0e-6); dec2rgpulse(pwn,t1,0.0,0.0); delay(5.5e-3 - POWER_DELAY - pwmlev - 2.0e-6 - 2.0e-6 - PRG_START_DELAY); rlpower(tpwrml,TODEV); rgpulse(pwmlev,one,2.0e-6,0.0); txphase(zero); delay(2.0e-6); /* H decoupling on */ obsprgon("waltz16",pwmlev,90.0); xmtron(); /* H decoupling on */ delay( zeta - 5.5e-3 + 2*pwco90 ); dec2rgpulse(2*pwn,zero,0.0,0.0); decrgpulse(2*pwco90,zero,0.0,0.0); delay(zeta - 2.0e-6); dec2rgpulse(pwn,zero,2.0e-6,0.0); dec2phase(zero); decphase(t2); /* H decoupling off */ xmtroff(); obsprgoff(); /* H decoupling off */ rgpulse(pwmlev,three,2.0e-6,0.0); delay(0.2e-6); rgradient('z',gzlvl3); delay(gt3); rgradient('z',0.0); delay(200.0e-6); decrgpulse(pwco90,t2,2.0e-6,0.0); if( fc180[A] == 'n' ) { decphase(zero); delay(tau1); dec2rgpulse(2*pwn,zero,0.0,0.0); rlpower(dvhpwr,DODEV); decshaped_pulse(spca180,pwca180h,zero,2.0e-6,0.0); rlpower(dhpwr,DODEV); delay(tau1); } else decrgpulse(2*pwco90,zero,2.0e-6,0.0); decrgpulse(pwco90,zero,2.0e-6,0.0); delay(0.2e-6); rgradient('z',gzlvl4); delay(gt4); rgradient('z',0.0); delay(100.0e-6); rlpower(tpwrml,TODEV); rgpulse(pwmlev,one,2.0e-6,0.0); txphase(zero); delay(2.0e-6); /* H decoupling on */ obsprgon("waltz16",pwmlev,90.0); xmtron(); /* H decoupling on */ dec2rgpulse(pwn,t3,2.0e-6,0.0); /* seduce on */ rlpower(dpwrsed,DODEV); decprgon(cadecseq,pwcadec,dressed); decon(); /* seduce on */ dec2phase(t4); delay(bigTN - tau2 + 2.0*pwco90); /* seduce off */ decoff(); decprgoff(); rlpower(dhpwr,DODEV); /* seduce off */ dec2rgpulse(2*pwn,t4,0.0,0.0); decrgpulse(2*pwco90,zero,0.0,0.0); dec2phase(t5); /* seduce on */ rlpower(dpwrsed,DODEV); decprgon(cadecseq,pwcadec,dressed); decon(); /* seduce on */ delay(bigTN + tau2 - 5.5e-3 - PRG_STOP_DELAY); /* H decoupling off */ xmtroff(); obsprgoff(); /* H decoupling off */ rgpulse(pwmlev,three,2.0e-6,0.0); rlpower(tpwr,TODEV); delay(2.5e-3 - POWER_DELAY - pwmlev - 2.0e-6); /* seduce off */ decoff(); decprgoff(); rlpower(dhpwr,DODEV); /* seduce off */ delay(0.2e-6); rgradient('z',icosel*gzlvl5); delay(gt5); rgradient('z',0.0); delay(2.0e-6); txphase(zero); dec2phase(t5); delay(3.0e-3 - gt5 - 2.2e-6 - 2.0*GRADIENT_DELAY); sim3pulse(pw,0.0e-6,pwn,zero,zero,t5,0.0,0.0); delay(0.2e-6); rgradient('z',gzlvl6); delay(gt6); rgradient('z',0.0); delay(2.0e-6); dec2phase(zero); delay(taua - gt6 - 2.2e-6); sim3pulse(2*pw,0.0e-6,2*pwn,zero,zero,zero,0.0,0.0); delay(taua - gt6 - 200.2e-6); delay(0.2e-6); rgradient('z',gzlvl6); delay(gt6); rgradient('z',0.0); delay(200.0e-6); txphase(one); dec2phase(one); sim3pulse(pw,0.0e-6,pwn,one,zero,one,0.0,0.0); delay(0.2e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(2.0e-6); txphase(zero); dec2phase(zero); delay(taua - gt7 - 2.2e-6); sim3pulse(2*pw,0.0e-6,2*pwn,zero,zero,zero,0.0,0.0); delay(taua - gt7 - 200.2e-6); delay(0.2e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(200.0e-6); rgpulse(pw,zero,0.0,0.0); delay(BigT1); rgpulse(2*pw,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl8); delay(gt8); rgradient('z',0.0); delay(2.0e-6); rlpower(dpwr2,DO2DEV); /* set power for 15N decoupling */ delay(BigT1 - gt8 - POWER_DELAY - 4.0e-6 - 2.0*GRADIENT_DELAY); /* rcvron(); */ /* Turn on receiver to warm up before acq */ /* BEGIN ACQUISITION */ status(D); setreceiver(t6); }