/* hbcbcaconnh_3c_pfg1_sel_500.c This pulse sequence will allow one to perform the following experiment: 3D cbcaconnh (enhanced sensitivity PFG and with minimal perturbation of water) correlating cb(i),ca(i) with n(i+1), nh(i+1). F1 C_beta (i), C_alpha (i) F2 N (i+1) F3(acq) NH (i+1) Uses three channels: 1) 1H - carrier (tof) @ 4.7ppm [H2O] 2) 13C - carrier (dof @ 58ppm [CA] and dofcacb @ 43ppm [CA,CB]) (Note: centre of F1 is 43ppm (dofcacb)) 3) 15N - carrier (dof2)@ 119ppm [centre of amide N] 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 [carbon] and t2 [N]. [The fids must be manipulated (add/subtract) with 'grad_sort_nd' program (or equivalent) before regular processing.] Flags fsat 'y' for presaturation of H2O fscuba 'y' to apply scuba pulse after presaturation of H2O f1180 'y' to get 180deg linear phase correction in F1, otherwise linear phase correction is 0. f2180 'y' to get 180deg linear phase correction in F2, otherwise linear phase correction is 0. Standard Settings: fsat='n', fscuba='n', f1180='n', f2180='n'. The flag f1180/f2180 should be set to 'y' if t1 is to be started at halfdwell time. This will give -90, 180 phasing in f1/f2. If it is set to 'n' the phasing will be 0,0 and will still give a perfect baseline. Set f1180 to n for (0,0) in C and f2180 = n for (0,0) in N Written by Lewis Kay 09/15/92 Modified by L.E.K 11/24/92 to include enhanced pfg and shaped C' pulses Modified by L.E.K. 01/03/93 to reduce phase cycle by adding gradients in the t1 evolution constant time domain. H decoupling now begins in the interval immediately following the t1 evolution domain. Modified by G.G 10/14/93 to permit DPS and remove gate Modified by L. E. K May 25, 94 to minimize water saturation Modified by L. E. Kay, Nov 2, 95 to ensure adequate delays between rlpower statements and pulses (especially for Innova). 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). Original non-gradient, unenhanced version S. Grzesiek and A. Bax, JACS 114 6291, (1992). BMRB Pulse Sequence Accession Number: 36 */ #include #define PI 3.1416 static int phi1[1] = {0}, phi2[1] = {1}, phi3[4] = {0,0,2,2}, phi4[1] = {0}, phi5[2] = {0,2}, phi6[2] = {0,2}, phi7[1] = {0}, phi8[1] = {0}, phi9[4] = {0,0,2,2}, rec[4] = {0,2,2,0}, phi11[1] = {0}, phi12[1] = {1}, phi13[1] = {1}; 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 */ spco180a[MAXSTR], spco90b[MAXSTR], spco180b[MAXSTR], cadecseq[MAXSTR]; int phase, phase2, ni, ni2, icosel, /* used to get n and p type */ 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/4JCH = 1.7 ms */ tauc, /* ~ 1/4JCAC' = 3.6 ms */ taud, /* ~ 1/4JC'CA = 4.3, 4.4 ms */ taue, /* 1/4JC'N = 12.4 ms */ tauf, /* 1/4JNH = 2.25 ms */ BigTC, /* carbon constant time period */ BigTN, /* nitrogen constant time period */ pwn, /* PW90 for 15N pulse */ pwca90a, /* PW90 for 13C at dvhpwr */ pwca180a, /* PW180 for 13C at dvhpwra */ pwco180a, pwca180b, /* PW180 for ca nucleus @ dvhpwrb */ pwco180b, pwco90b, /* PW90 for co nucleus @ dhpwrb */ tsatpwr, /* low level 1H trans.power for presat */ tpwrml, /* power level for h decoupling */ pwmlev, /* h 90 pulse at tpwrml */ dhpwr, /* power level for 13C pulses on dec1 90 for part a of the sequence at 43 ppm */ dvhpwra, /* power level for 180 13C pulses at 43 ppm */ dhpwrb, /* power level for 13C pulses on dec1 - 54 ppm 90 for part b of the sequence*/ dvhpwrb, /* power level for 13C pulses on dec1 - 54 ppm 180 for part b of the sequence */ dhpwr2, /* high dec2 pwr for 15N hard pulses */ sw1, /* sweep width in f1 */ sw2, /* sweep width in f2 */ dofcacb, /* dof for dipsi part, 43 ppm */ pwcadec, /* seduce ca decoupling at dpwrsed */ dpwrsed, /* power level for seduce ca decoupling */ dressed, /* resoln for seduce decoupling = 2 */ dhpwrcoa, /* power level for pwco180a, 180 shaped C' */ BigT1, gt1, gt2, gt4, gt5, gt6, gt7, gt9, gt10, gzlvl1, gzlvl2, gzlvl4, gzlvl5, gzlvl6, gzlvl7, gzlvl9, gzlvl10; /* variables commented out are already defined by the system */ /* LOAD VARIABLES */ getstr("fsat",fsat); getstr("f1180",f1180); getstr("f2180",f2180); getstr("fscuba",fscuba); getstr("spco180a",spco180a); getstr("spco90b",spco90b); getstr("spco180b",spco180b); getstr("cadecseq",cadecseq); taua = getval("taua"); tauc = getval("tauc"); taud = getval("taud"); taue = getval("taue"); tauf = getval("tauf"); BigTC = getval("BigTC"); BigTN = getval("BigTN"); pwca90a = getval("pwca90a"); pwca180a = getval("pwca180a"); pwco180a = getval("pwco180a"); pwca180b = getval("pwca180b"); pwco90b = getval("pwco90b"); pwco180b = getval("pwco180b"); pwn = getval("pwn"); pwmlev = getval("pwmlev"); tpwr = getval("tpwr"); tsatpwr = getval("tsatpwr"); tpwrml = getval("tpwrml"); dhpwr = getval("dhpwr"); dvhpwra = getval("dvhpwra"); dhpwrb = getval("dhpwrb"); dvhpwrb = getval("dvhpwrb"); dpwr = getval("dpwr"); dhpwr2 = getval("dhpwr2"); phase = (int) ( getval("phase") + 0.5); phase2 = (int) ( getval("phase2") + 0.5); sw1 = getval("sw1"); sw2 = getval("sw2"); dofcacb = getval("dofcacb"); ni = getval("ni"); ni2 = getval("ni2"); pwcadec = getval("pwcadec"); dpwrsed = getval("dpwrsed"); dressed = getval("dressed"); dhpwrcoa = getval("dhpwrcoa"); BigT1 = getval("BigT1"); gt1 = getval("gt1"); gt2 = getval("gt2"); gt4 = getval("gt4"); gt5 = getval("gt5"); gt6 = getval("gt6"); gt7 = getval("gt7"); gt9 = getval("gt9"); gt10 = getval("gt10"); gzlvl1 = getval("gzlvl1"); gzlvl2 = getval("gzlvl2"); gzlvl4 = getval("gzlvl4"); gzlvl5 = getval("gzlvl5"); gzlvl6 = getval("gzlvl6"); gzlvl7 = getval("gzlvl7"); gzlvl9 = getval("gzlvl9"); gzlvl10 = getval("gzlvl10"); /* LOAD PHASE TABLE */ settable(t1,1,phi1); settable(t2,1,phi2); settable(t3,4,phi3); settable(t4,1,phi4); settable(t5,2,phi5); settable(t6,2,phi6); settable(t7,1,phi7); settable(t8,1,phi8); settable(t9,4,phi9); settable(t10,4,rec); settable(t11,1,phi11); settable(t12,1,phi12); settable(t13,1,phi13); /* CHECK VALIDITY OF PARAMETER RANGES */ if( 0.5*ni*1/(sw1) > BigTC - gt10 ) { printf(" ni is too big\n"); abort(1); } if( ni2*1/(sw2) > 2.0*BigTN ) { 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 'nnny' "); abort(1); } if( pwmlev < 30.0e-6 ) { printf("too much power during proton mlev sequence\n"); abort(1); } if( tpwrml > 53 ) { printf("tpwrml is too high\n"); abort(1); } if( tsatpwr > 6 ) { printf("TSATPWR too large !!! "); abort(1); } if( dpwr > 47 ) { 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( dhpwrb > 62 ) { printf("don't fry the probe, DHPWRB too large! "); abort(1); } if( dvhpwrb > 62 ) /* pwr level for dipsi */ { printf("don't fry the probe, DVHPWRB 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( pwmlev > 200.0e-6 ) { printf("dont fry the probe, pwmlev too high ! "); abort(1); } if( pwn > 200.0e-6 ) { printf("dont fry the probe, pwn too high ! "); abort(1); } if( pwca90a > 200.0e-6 ) { printf("dont fry the probe, pwca90a too high ! "); abort(1); } if( pwca180a > 200.0e-6 ) { printf("dont fry the probe, pwca180a too high ! "); abort(1); } if( pwca180b > 200.0e-6 ) { printf("dont fry the probe, pwca180b too high ! "); abort(1); } if( pwco90b > 200.0e-6 ) { printf("dont fry the probe, pwco180b too high ! "); abort(1); } if( pwcadec > 500.0e-6 || pwcadec < 200.0e-6 ) { printf("pwcadec outside reasonable limits: < 500e-6 > 200e-6 \n"); abort(1); } if( dpwrsed > 45 ) { printf("dpwrsed is too high\n"); abort(1); } if( gt1 > 15e-3 || gt2 > 15e-3 || gt4 >=15e-3 || gt5 > 15e-3 || gt6 >= 15e-3 || gt7 >= 15e-3 || gt9 >= 15e-3 || gt10 >= 15e-3) { printf("all gti values must be < 15e-3\n"); abort(1); } if(gt10 > 250.0e-6) { printf("gt10 must be 250e-6\n"); abort(1); } /* Phase incrementation for hypercomplex 2D data */ if (phase == 2) tsadd(t3,1,4); if (phase2 == 2) { tsadd(t11,2,4); icosel = 1; } else icosel = -1; /* Set up f1180 tau1 = t1 */ tau1 = d2; if(f1180[A] == 'y') { tau1 += ( 1.0 / (2.0*sw1) ); if(tau1 < 0.2e-6) tau1 = 0.0; } 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.0; } 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(t3,2,4); tsadd(t10,2,4); } if( ix == 1) d3_init = d3 ; t2_counter = (int) ( (d3-d3_init)*sw2 + 0.5 ); if(t2_counter % 2) { tsadd(t8,2,4); tsadd(t10,2,4); } /* BEGIN ACTUAL PULSE SEQUENCE */ status(A); offset(dofcacb,DODEV); /* initially pulse at 43 ppm */ 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[A] == 'y') { rlpower(tsatpwr,TODEV); /* Set transmitter power for 1H presaturation */ delay(2.0e-5); rgpulse(d1,zero,rof1,rof1); rlpower(tpwr,TODEV); /* Set transmitter power for hard 1H pulses */ delay(2.0e-5); if(fscuba[A] == '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 rlpower(tpwr,TODEV); /* Set transmitter power for hard 1H pulses */ delay(d1); txphase(zero); delay(1.0e-5); /* Begin Pulses */ status(C); rcvroff(); delay(20.0e-6); /* ensure that magnetization originates on H and not 13C */ decrgpulse(pwca90a,zero,0.0,0.0); delay(0.2e-6); rgradient('z',gzlvl1); delay(gt1); rgradient('z',0.0); delay(150.0e-6); rgpulse(pw,zero,0.0,0.0); /* 90 deg 1H pulse */ decphase(t1); delay(0.2e-6); rgradient('z',gzlvl2); delay(gt2); rgradient('z',0.0); delay(2.0e-6); rlpower(dvhpwra,DODEV); delay(taua - POWER_DELAY - gt2 - 2.2e-6); /* taua <= 1/4JCH */ simpulse(2*pw,pwca180a,zero,t1,0.0,0.0); rlpower(dhpwr,DODEV); delay(0.2e-6); rgradient('z',gzlvl2); delay(gt2); rgradient('z',0.0); delay(2.0e-6); txphase(t2); decphase(t3); delay(taua - POWER_DELAY - gt2 - 2.2e-6); rgpulse(pw,t2,0.0,0.0); decrgpulse(pwca90a,t3,2.0e-6,0.0); delay(2.0e-6); delay(tau1); rlpower(dhpwrcoa,DODEV); decshaped_pulse(spco180a,pwco180a,zero,4.0e-6,0.0); dec2rgpulse(2*pwn,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl10); delay(gt10); rgradient('z',0.0); delay(2.0e-6); rlpower(dvhpwra,DODEV); delay(0.80e-3 - gt10 - 4.0e-6 - 2*POWER_DELAY); delay(0.2e-6); rgpulse(2*pw,zero,0.0,0.0); decphase(t4); delay(BigTC - 0.80e-3); decrgpulse(pwca180a,t4,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl10); delay(gt10); rgradient('z',0.0); delay(2.0e-6); delay(BigTC - tau1 + 2*pwn + 2*pw - 2*POWER_DELAY - gt10 - 4.0e-6); delay(0.2e-6); rlpower(dhpwrcoa,DODEV); decshaped_pulse(spco180a,pwco180a,zero,4.0e-6,0.0); /* bloch seigert */ rlpower(dhpwr,DODEV); decrgpulse(pwca90a,zero,2.0e-6,0.0); txphase(one); delay(2.0e-6); /* H decoupling on */ rlpower(tpwrml,TODEV); obsprgon("waltz16",pwmlev,90.0); xmtron(); /* TURN ME OFF DONT FORGET */ /* H decoupling on */ rlpower(dhpwrcoa,DODEV); decshaped_pulse(spco180a,pwco180a,zero,4.0e-6,0.0); /* bloch seigert */ decphase(t5); delay(tauc - 3*POWER_DELAY - PRG_START_DELAY); rlpower(dvhpwra,DODEV); decrgpulse(pwca180a,t5,0.0,0.0); rlpower(dhpwrcoa,DODEV); decshaped_pulse(spco180a,pwco180a,zero,4.0e-6,0.0); decphase(zero); rlpower(dhpwr,DODEV); delay(tauc - 2*POWER_DELAY); decrgpulse(pwca90a,zero,0.0,0.0); /* H decoupling off */ xmtroff(); obsprgoff(); /* H decoupling off */ rgpulse(pwmlev,two,2.0e-6,0.0); delay(0.2e-6); offset(dof,DODEV); rlpower(dhpwrb,DODEV); delay(0.2e-6); rgradient('z',gzlvl4); delay(gt4); rgradient('z',0.0); delay(50.0e-6); rgpulse(pwmlev,zero,2.0e-6,0.0); txphase(one); delay(2.0e-6); /* H decoupling on */ rlpower(tpwrml,TODEV); obsprgon("waltz16",pwmlev,90.0); xmtron(); /* H decoupling on */ decphase(t6); delay(2.0e-6); decshaped_pulse(spco90b,pwco90b,t6,0.0,0.0); decphase(zero); delay(taud - POWER_DELAY - 4.0e-6); rlpower(dvhpwrb,DODEV); decrgpulse(pwca180b,zero,4.0e-6,0.0); rlpower(dhpwrb,DODEV); delay(taue - taud - POWER_DELAY + 2*pwn); decshaped_pulse(spco180b,pwco180b,zero,0.0,0.0); dec2rgpulse(2*pwn,zero,0.0,0.0); delay(taue - 2*POWER_DELAY - 4.0e-6 - 4.0e-6); rlpower(dvhpwrb,DODEV); decrgpulse(pwca180b,zero,4.0e-6,0.0); /* bloch seigert */ rlpower(dhpwrb,DODEV); decshaped_pulse(spco90b,pwco90b,t7,4.0e-6,0.0); /* H decoupling off */ xmtroff(); obsprgoff(); /* H decoupling off */ rgpulse(pwmlev,two,2.0e-6,0.0); delay(0.2e-6); rgradient('z',gzlvl5); delay(gt5); rgradient('z',0.0); delay(50.0e-6); rgpulse(pwmlev,zero,2.0e-6,0.0); txphase(one); delay(2.0e-6); /* H decoupling on */ rlpower(tpwrml,TODEV); obsprgon("waltz16",pwmlev,90.0); xmtron(); /* H decoupling on */ dec2rgpulse(pwn,t8,2.0e-6,0.0); dec2phase(t9); decphase(zero); /* seduce on */ rlpower(dpwrsed,DODEV); decprgon(cadecseq,pwcadec,dressed); decon(); /* seduce on */ delay(BigTN - tau2 + WFG_START_DELAY + WFG_STOP_DELAY + pwco180b); /* seduce off */ decoff(); decprgoff(); rlpower(dhpwrb,DODEV); /* seduce off */ dec2rgpulse(2*pwn,t9,0.0,0.0); decshaped_pulse(spco180b,pwco180b,zero,0.0,0.0); dec2phase(t11); /* seduce on */ rlpower(dpwrsed,DODEV); decprgon(cadecseq,pwcadec,dressed); decon(); /* seduce on */ delay(BigTN + tau2 - 5.5e-3 - POWER_DELAY - PRG_STOP_DELAY - pwmlev - 2.0e-6); /* H decoupling off */ xmtroff(); obsprgoff(); /* H decoupling off */ rgpulse(pwmlev,two,2.0e-6,0.0); rlpower(tpwr,TODEV); delay(2.5e-3); /* seduce off */ decoff(); decprgoff(); rlpower(dhpwrb,DODEV); /* seduce off */ delay(0.2e-6); rgradient('z',icosel*gzlvl6); delay(gt6); rgradient('z',0.0); delay(2.0e-6); txphase(zero); dec2phase(t11); delay(3.0e-3 - gt6 - 2.2e-6 - 2.0*GRADIENT_DELAY); sim3pulse(pw,0.0,pwn,zero,zero,t11,0.0,0.0); delay(0.2e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(2.0e-6); dec2phase(zero); delay(tauf - gt7 - 2.2e-6); sim3pulse(2*pw,0.0,2*pwn,zero,zero,zero,0.0,0.0); delay(0.2e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(2.0e-6); txphase(t12); dec2phase(t13); delay(tauf - gt7 - 2.2e-6); sim3pulse(pw,0.0,pwn,t12,zero,t13,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(tauf - gt7 - 2.2e-6); sim3pulse(2*pw,0.0,2*pwn,zero,zero,zero,0.0,0.0); delay(0.2e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(2.0e-6); txphase(zero); delay(tauf - gt7 - 2.2e-6); rgpulse(pw,zero,0.0,0.0); txphase(zero); delay(BigT1); rgpulse(2*pw,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl9); delay(gt9); rgradient('z',0.0); delay(2.0e-6); delay(BigT1 - gt9 - POWER_DELAY - 4.0e-6 - 2*GRADIENT_DELAY); rlpower(dpwr2,DO2DEV); /* set power for 15N decoupling */ /* BEGIN ACQUISITION */ status(D); setreceiver(t10); }