/* cn4Dnoesy_pfg_sel_500.c This pulse sequence will allow one to perform the following experiment: 4D 13C, 15N edited NOESY F1 1H F2 13C F3 15N F4(acq) NH Uses three channels 1)1H - carrier (tof) @ 4.7ppm [H2O] 2)13C - carrier (dof) @ 43ppm 3)15N - carrier (dof2) @ 119ppm [centre of amide N] Set dm = 'nnnn', dmm = 'cccc' dm2 = 'nnny' dmm2 = 'cccp' [15N decoupling during acquisition] dseq2 ='waltz16' Must set phase = 1,2, phase2 = 1,2, phase3=1,2 for States-TPPI acquisition in t1[1H], t2[13C] and t3[15N] respectively. [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 purging 1H (H2O) mag before relaxn delay sl_flg 'y' for purging H2O mag in the middle of sequence f1180 'y' for 180deg linear phase correction in F1 otherwise 0deg linear phase correction in F1. f2180 'y' for 180deg linear phase correction in F2 f3180 'y' for 180deg linear phase correction in F3 otherwise 0deg linear phase correction in F3. c180_flg 'y' when recording F1,F4 and F3,F4 2D spectra. Standard Settings: fsat='n', fscuba='n', mess_flg='n', sl_flg='n', f1180='n', f2180='y', f3180='n', c180_flg='n' There is a 45 degree phase shift in F1 (zero order). To test: Run 3 2Ds. 2D #1: F1,F4. set c180_flg='y', f1180=f2180=f3180='n' 2D #2: F2,F4. set c180_flg='n', f1180='n',f2180='y',f3180='n' 2D #3: F3,F4. set c180_flg='y', f1180='n',f2180='n',f3180='n' Note: set c180_flg='n', f1180='n',f2180='y',f3180='n' for the 4D F1,F4 (H,H) F2,F4 (C,H) F3,F4 (N,H) -- use grad_sort_nd.c Written on 04-02-93 , RM REF: D. R. Muhandiram, G. Y. Xu and L. E. Kay J. Biomol. NMR 3,463-470 (1993) Modified to encorporate the minimal water saturation (See Kay et. al. J. Magn. Reson. 109A, 129-133 (1994) Zhang et. al. J. Biomol. NMR 4, 845 (1994) ) -RM Nov. 5, 1994. Modified by L. E. Kay, Aug. 20, 1995 BMRB Pulse Sequence Accession Number: 52 */ #include #define PI 3.1416 static double d2_init = 0.0, d3_init=0.0, d4_init=0.0; static int phi1[1] = {0}, phi2[2] = {0,2}, phi3[1] = {0}, phi4[1] = {0}, rec[2] = {0,2}; pulsesequence() { /* DECLARE VARIABLES */ char fscuba[MAXSTR],f1180[MAXSTR],f2180[MAXSTR],f3180[MAXSTR], fsat[MAXSTR], mess_flg[MAXSTR], sl_flg[MAXSTR], c180_flg[MAXSTR], codecseq[MAXSTR], shp_sl[MAXSTR]; int phase, phase2, phase3, icosel, t1_counter, t2_counter, t3_counter; double hscuba, /* length of 1/2 scuba delay */ pwc, /* PW90 for c */ pwcodec, /* PW90 for CO decoupling @ dpwrco */ pwn, /* PW90 for n */ tofps, /* water frequency */ tofnh, /* center of NHs */ tsatpwr, /* low power level for presat*/ tpwrmess, /* power for Messerlie purge */ dhpwr2, /* power level for N hard pulses */ dhpwr, /* power level for C hard pulses */ dpwrco, /* power level for CO decoupling */ dressed, /* dec resolution for CO decoupling */ jch, /* coupling for CH */ jnh, /* coupling for NH */ tauch, /* delay <= 1/(2jch) */ taunh, /* delay <= 1/(4jnh) */ tauc, /* grad comp. delay for grad coh. seln */ taud, /* grad comp. delay for grad coh. seln */ tau1, /* t1/2 */ tau2, /* t2/2 */ tau3, /* t3/2 */ sw1, /* spectral width in 1H dimension */ sw2, /* spectral width in 13C dimension */ sw3, /* spectral width in 15N dimension */ MIX, /* mixing time */ dly_pg, /* first part of Messerlie purge */ dly_sl, /* purge spinlock */ pw_sl, /* PW90 for water selective pulse */ tpwrsl, /* power for water selective pulse */ dofcaco, /* C carrier at 118.0 ppm */ gt0, gt1, gt2, gt3, gt4, gt5, gt6, gt7, gt8, gzlvl0, gzlvl1, gzlvl2, gzlvl3, gzlvl4, gzlvl5, gzlvl6, gzlvl7, gzlvl8; /* LOAD VARIABLES */ jch = getval("jch"); jnh = getval("jnh"); pwc = getval("pwc"); pwn = getval("pwn"); tsatpwr = getval("tsatpwr"); dhpwr2 = getval("dhpwr2"); dhpwr = getval("dhpwr"); hscuba = getval("hscuba"); phase = (int) (getval("phase") + 0.5); phase2 = (int) (getval("phase2") + 0.5); phase3 = (int) (getval("phase3") + 0.5); sw1 = getval("sw1"); sw2 = getval("sw2"); sw3 = getval("sw3"); MIX = getval("MIX"); tpwrmess = getval("tpwrmess"); dly_pg = getval("dly_pg"); dly_sl = getval("dly_sl"); pw_sl = getval("pw_sl"); tpwrsl = getval("tpwrsl"); tauc = getval("tauc"); taud = getval("taud"); pwcodec = getval("pwcodec"); dpwrco = getval("dpwrco"); dressed = getval("dressed"); tofps = getval("tofps"); tofnh = getval("tofnh"); dofcaco = getval("dofcaco"); 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"); getstr("fscuba",fscuba); getstr("fsat",fsat); getstr("f1180",f1180); getstr("f2180",f2180); getstr("f3180",f3180); getstr("mess_flg",mess_flg); getstr("sl_flg",sl_flg); getstr("c180_flg",c180_flg); getstr("codecseq",codecseq); getstr("shp_sl",shp_sl); /* check validity of parameter range */ if((dm2[A] == 'y' || dm2[B] == 'y' || dm2[C] == 'y')) { printf("incorrect Dec1 decoupler flags! "); abort(1); } if((dmm2[A] == 'y' || dmm2[B] == 'y' || dmm2[C] == 'y')) { printf("incorrect Dec2 decoupler flags! "); abort(1); } if( tsatpwr > 4 ) { printf("tsatpwr too large !!! "); abort(1); } if( tpwrmess > 56 ) { printf("tpwrmess too large !!! "); abort(1); } if( tpwrsl > 22 ) { printf("tpwrsl too large !!! "); abort(1); } if(dly_pg > 0.010 ) { printf("dly_pg too long !! "); abort(1); } if(dly_sl > 0.002 ) { printf("dly_sl too long !! "); abort(1); } if( dpwr > 20 ) { printf("don't fry the probe, dpwr too large! "); abort(1); } if( dpwrco > 45) { printf("don't fry the probe, dpwrco too large! "); abort(1); } if (pwcodec < 300.0e-6) { printf("don't fry the probe, pwcodec too high ! "); abort(1); } if( dpwr2 > 50 ) { printf("don't fry the probe, dpwr2 too large! "); abort(1); } if( gt0 > 0.015 || gt1 > 0.015 || gt2 > 0.015 || gt3 > 0.015 || gt4 > 0.015 || gt5 > 0.015 || gt6 > 0.015 || gt7 > 0.015 || gt8 > 0.015 ) { printf(" gti values should be < 0.015\n"); abort(1); } if (gzlvl4*gzlvl5 > 0.0 ) { printf("gzlvl4 and gzlvl5 must be opposite in sign for max water sup."); abort(1); } /* LOAD VARIABLES */ settable(t1, 1, phi1); settable(t2, 2, phi2); settable(t3, 1, phi3); settable(t4, 1, phi4); settable(t5, 2, rec); /* INITIALIZE VARIABLES */ tauch = 1.0/(2.0*jch); taunh = 1.0/(4.0*jnh); /* Phase incrementation for hypercomplex data */ if ( phase == 2 ) /* Hypercomplex in t1 (H) */ tsadd(t1, 3, 4); if ( phase2 == 2 ) /* Hypercomplex in t2 (C) */ tsadd(t2, 1, 4); if ( phase3 == 2 ) /* Hypercomplex in t3 (N) */ { tsadd(t4, 2, 4); icosel = 1; } else icosel = -1; /* calculate modifications to phases based on current t1/t2 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(t1,2,4); tsadd(t5,2,4); } if(ix==1) d3_init = d3; t2_counter = (int) ( (d3-d3_init)*sw2 + 0.5); if(t2_counter %2) { tsadd(t2,2,4); tsadd(t5,2,4); } if(ix==1) d4_init = d4; t3_counter = (int) ( (d4-d4_init)*sw3 + 0.5); if(t3_counter %2) { tsadd(t3,2,4); tsadd(t5,2,4); } /* set up so that get (-90,180) phase corrects in F1 (H) if f1180 flag is y */ tau1 = d2; if(f1180[A] == 'y') tau1 += ( 1.0/(2.0*sw1) ); tau1 = tau1/2.0; if( tau1 < 0.2e-6) tau1 = 0.2e-6; /* set up so that get (-90,180) phase corrects in F2 (C) if f2180 flag is y */ tau2 = d3; if(f2180[A] == 'y') tau2 += ( 1.0/(2.0*sw2) - 2.0*pw - 4.0/PI*pwc - 2.0*POWER_DELAY - PRG_START_DELAY - PRG_STOP_DELAY - 4.0e-6); tau2 = tau2/2.0; if( tau2 < 0.2e-6) tau2 = 0.2e-6; /* set up so that get (-90,180) phase corrects in F3 (N) if f3180 flag is y */ tau3 = d4; if(f3180[A] == 'y') tau3 += ( 1.0/(2.0*sw3) ); tau3 = tau3/2.0; if( tau3 < 0.2e-6) tau3 = 0.2e-6; /* BEGIN ACTUAL PULSE SEQUENCE */ /* Receiver off time */ 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') { offset(tofps,TODEV); rlpower(tpwrmess,TODEV); txphase(zero); rgpulse(dly_pg,zero,2.0e-6,2.0e-6); txphase(one); rgpulse(dly_pg/1.62,one,2.0e-6,2.0e-6); rlpower(tsatpwr,TODEV); } if(fsat[0] == 'y') { offset(tofps,TODEV); txphase(zero); rgpulse(d1,zero,2.0e-6,2.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); } offset(tof,TODEV); offset(dof,DODEV); status(C); rcvroff(); delay(20.0e-6); decphase(zero); decrgpulse(pwc,zero,2.0e-6,2.0e-6); delay(2.0e-6); rgradient('z',gzlvl0); delay(gt0); rgradient('z',0.0); delay(150.0e-6); initval(7.0,v7); stepsize(45.0,TODEV); xmtrphase(v7); rgpulse(pw,t1,2.0e-6,0.0); /* Proton excitation pulse with 45 deg shift*/ xmtrphase(zero); txphase(zero); decphase(t2); delay(2.0e-6); rgradient('z',gzlvl1); delay(gt1); rgradient('z',0.0); delay(2.0e-6); delay(tauch + 2.0*pwc - gt1 - 4.0e-6); decrgpulse(pwc,t2,0.0,0.0); if(c180_flg[A] == 'n') { delay(2.0e-6); /* CO decoupling on */ rlpower(dpwrco,DODEV); decprgon(codecseq,pwcodec,dressed); decon(); /* CO decoupling on */ delay(tau2); /* t2/2 */ rgpulse(2.0*pw,zero,0.0,0.0); delay(tau2); /* CO decoupling off */ decoff(); decprgoff(); rlpower(dhpwr,DODEV); /* CO decoupling off */ decphase(zero); delay(2.0e-6); } else simpulse(2*pw,2*pwc,zero,zero,2.0e-6,2.0e-6); decrgpulse(pwc,zero,0.0,0.0); delay(tau1); delay(2.0e-6); rgradient('z',gzlvl1); delay(gt1); rgradient('z',0.0); delay(2.0e-6); delay(tauch + SAPS_DELAY - gt1 - 4.0e-6); decrgpulse(2*pwc,zero,0.0,0.0); delay(tau1); rgpulse(pw,zero,0.0,0.0); dec2phase(zero); /* MIXING PERIOD */ delay(MIX - 20.0e-3); dec2rgpulse(pwn,zero,2.0e-6,2.0e-6); delay(2.0e-6); rgradient('z',gzlvl2); delay(gt2); rgradient('z',0.0); delay(2.0e-6); delay(20.0e-3 - gt2 - 4.0e-6); rgpulse(pw,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl3); delay(gt3); rgradient('z',0.0); delay(2.0e-6); delay(taunh - gt3 - 4.0e-6); sim3pulse(2*pw,0.0*pw,2*pwn,zero,zero,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl3); delay(gt3); rgradient('z',0.0); delay(2.0e-6); txphase(one); dec2phase(t3); if(sl_flg[A] == 'y') { delay(taunh - gt3 - 4.0e-6 - POWER_DELAY); rlpower(tpwrmess,TODEV); txphase(zero); rgpulse(dly_sl,zero,2.0e-6,2.0e-6); rlpower(tpwr,TODEV); txphase(one); } else delay(taunh - gt3 - 4.0e-6); rgpulse(pw,one,0.0,0.0); /* shaped water selective pulse */ rlpower(tpwrsl,TODEV); shaped_pulse(shp_sl,pw_sl,two,2.0e-6,0.0); /* MUST BE ON WATER FOR THIS */ delay(2.0e-6); rlpower(tpwr,TODEV); /* shaped pulse */ offset(tofnh,TODEV); offset(dofcaco,DODEV); /* jump carbon to 118 ppm */ txphase(zero); decphase(one); rlpower(dhpwr,DODEV); delay(2.0e-6); rgradient('z',gzlvl4); delay(gt4); rgradient('z',0.0); delay(150.0e-6); dec2rgpulse(pwn,t3,0.0,0.0); delay(tau3); /* t3/2 */ decrgpulse(pwc,one,0.0,0.0); simpulse(2.0*pw,2.0*pwc,zero,zero,2.0e-6,2.0e-6); decrgpulse(pwc,one,0.0,0.0); delay(tau3); dec2phase(zero); delay(tauc); dec2rgpulse(2*pwn,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl5); delay(gt5); rgradient('z',0.0); delay(2.0e-6); txphase(zero); dec2phase(t4); if(pwc >= pw) delay(tauc + pwc + 2.0*pwc + pwc + 4.0e-6 - 2.0*GRADIENT_DELAY - gt5 - 4.0e-6); if(pwc < pw) delay(tauc + pwc + 2.0*pw + pwc + 4.0e-6 - 2.0*GRADIENT_DELAY - gt5 - 4.0e-6); sim3pulse(pw,0.0*pw,pwn,zero,zero,t4,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl6); delay(gt6); rgradient('z',0.0); delay(2.0e-6); dec2phase(zero); delay(taunh - gt6 - 4.0e-6); sim3pulse(2*pw,0.0*pw,2*pwn,zero,zero,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl6); delay(gt6); rgradient('z',0.0); delay(2.0e-6); txphase(one); dec2phase(one); delay(taunh - gt6 - 4.0e-6); sim3pulse(pw,0.0*pw,pwn,one,zero,one,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(2.0e-6); txphase(zero); dec2phase(zero); delay(taunh - gt7 - 4.0e-6); sim3pulse(2*pw,0.0*pw,2*pwn,zero,zero,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(2.0e-6); delay(taunh - gt7 - 4.0e-6); rgpulse(pw,zero,0.0,0.0); delay(taud); rgpulse(2*pw,zero,0.0,0.0); delay(2.0e-6); rgradient('z',icosel*gzlvl8); delay(gt8); rgradient('z',0.0); delay(2.0e-6); delay(taud - 2.0*GRADIENT_DELAY - gt8 - 4.0e-6 - 2.0*POWER_DELAY); rlpower(dpwr2,DO2DEV); /* set power for 15N decoupling */ rlpower(dpwr,DODEV); /* acquire data */ status(D); setreceiver(t5); }