/* noesy3dn_pfg_enhanced_sel+_500.c This pulse sequence will allow one to perform the following experiment: 3D 15N edited NOESY-HSQC F1 1H 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 first @ centre of aliphatics (dof) then jump to middle of Ca and CO (dofcaco) 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[1H] and t2 [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' 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 correction in F2 otherwise 0 deg linear phase correction. C_flg 'y' for samples enriched with 15N & 13C Standard Settings (for 15N labelled samples) fsat='n',fscuba='n',f1180='n',f2180='n', C_flg='n' There is a 45degree phase correction (zero order) in F1. Note: 15N axis will be opposite to the triple res. experiments Written by L.E.K on May 27, 1993 Modified by L.E.K on Sept. 27, 1993 to move rcvroff. Modified by L.E.K on Oct. 19, 1993 to remove seq_test Modified by L.E.K on April 5, 1994 to minimize water saturation Modified by R.M. on Sep. 15, 1995 to use with 15N & 13C enriched samples REF: Zhang et. al. J. Biomol. NMR 4, 845 (1994). BMRB Pulse Sequence Accession Number: 47 */ #include #define PI 3.1416 static double d2_init = 0.0, d3_init=0.0; static int phi1[2] = {0,2}, phi2[4] = {0,0,2,2}, phi3[1] = {0}, phi5[1] = {0}, phi6[1] = {0}, rec[4] = {0,2,2,0}; pulsesequence() { /* DECLARE VARIABLES */ char fscuba[MAXSTR],f1180[MAXSTR],f2180[MAXSTR],fsat[MAXSTR], shp_sl[MAXSTR],C_flg[MAXSTR]; int phase, phase2, t1_counter, t2_counter, icosel; double hscuba, /* length of 1/2 scuba delay */ pwx2, /* PW90 for X-nuc */ tsatpwr, /* low power level for presat*/ dhpwr2, /* power level for X hard pulses */ jxh, /* coupling for XH */ tauxh, /* delay = 1/(2jxh) */ tau1, /* t1/2 */ tau2, /* t2/2 */ sw1, /* spectral width in 1H dimension */ sw2, /* spectral width in 15N dimension */ MIX, /* Total Mixing time for noesy portion */ BigT, /* Time for application of first gradient to select for 15N magnetization */ BigT1, /* Time for application of second gradient to select for 15N magnetization */ pw_sl, tpwrsl, dofcaco, /* 13C carrier position-middle of Ca and CO */ dhpwr, /* power level for 13C pulses */ pwc, /* 13C 90deg pulse width at dhpwr */ gzlvl1, gzlvl2, gzlvl3, gzlvl4, gzlvl5, gzlvl6, gzlvl7, gzlvl8, gt1, gt2, gt3, gt4, gt5, gt6, gt7, gt8; /* LOAD VARIABLES */ jxh = getval("jxh"); dhpwr2 = getval("dhpwr2"); pwx2 = getval("pwx2"); tsatpwr = getval("tsatpwr"); hscuba = getval("hscuba"); phase = (int) (getval("phase") + 0.5); phase2 = (int) (getval("phase2") + 0.5); sw1 = getval("sw1"); sw2 = getval("sw2"); MIX = getval("MIX"); BigT = getval("BigT"); BigT1 = getval("BigT1"); pw_sl = getval("pw_sl"); tpwrsl = getval("tpwrsl"); dofcaco = getval("dofcaco"); dhpwr = getval("dhpwr"); pwc = getval("pwc"); gzlvl1 = getval("gzlvl1"); gzlvl2 = getval("gzlvl2"); gzlvl3 = getval("gzlvl3"); gzlvl4 = getval("gzlvl4"); gzlvl5 = getval("gzlvl5"); gzlvl6 = getval("gzlvl6"); gzlvl7 = getval("gzlvl7"); gzlvl8 = getval("gzlvl8"); gt1 = getval("gt1"); gt2 = getval("gt2"); gt3 = getval("gt3"); gt4 = getval("gt4"); gt5 = getval("gt5"); gt6 = getval("gt6"); gt7 = getval("gt7"); gt8 = getval("gt8"); getstr("fscuba",fscuba); getstr("fsat",fsat); getstr("f1180",f1180); getstr("f2180",f2180); getstr("shp_sl",shp_sl); getstr("C_flg",C_flg); /* 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( dpwr > 10 ) { 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( gt1 > 15e-3 || gt2 > 15e-3 || gt3 > 15e-3 || gt4 > 15e-3 || gt5 > 15e-3 ) { printf("gradients are on for too long !!! "); abort(1); } /* LOAD VARIABLES */ settable(t1, 2, phi1); settable(t2, 4, phi2); settable(t3, 1, phi3); settable(t4, 4, rec); settable(t5, 1, phi5); settable(t6, 1, phi6); /* INITIALIZE VARIABLES */ tauxh = 1/(4*jxh); /* Phase incrementation for hypercomplex data */ if ( phase == 2 ) /* Hypercomplex in t1 */ tsadd(t1, 1, 4); if ( phase2 == 2 ) /* Hypercomplex in t2 */ { tsadd(t3, 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(t4,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(t4,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) - 2.0*pwx2 - (4.0/PI)*pw - SAPS_DELAY ); else tau1 = tau1 - 2.0*pwx2 - (4.0/PI)*pw - SAPS_DELAY; tau1 = tau1/2.0; if( tau1 < 0.2e-6) tau1 = 2.0e-7; /* set up so that get (-90,180) phase corrects in F2 if f2180 flag is y */ tau2 = d3; if(f2180[A] == 'y') tau2 += ( 1.0/(2.0*sw2) ); tau2 = tau2/2.0; if( tau2 < 0.2e-6) tau2 = 2.0e-7; /* 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 */ offset(dof,DODEV); /* Set 13C carrier at centre of aliphatic C */ /* Presaturation Period */ status(B); if(fsat[0] == 'y') { rgpulse(d1,zero,2.0e-6,2.0e-6); /* presat */ 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 from 15N */ dec2rgpulse(pwx2,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl1); delay(gt1); rgradient('z',0.0); delay(150.0e-6); decphase(zero); initval(1.0,v2); stepsize(135.0,TODEV); xmtrphase(v2); rgpulse(pw,t1,1.0e-6,0.0); xmtrphase(zero); txphase(zero); dec2phase(zero); delay(tau1); if (C_flg[A] == 'y') sim3pulse(0.0,2*pwc,2*pwx2,zero,zero,zero,0.0,0.0); else dec2rgpulse(2*pwx2,zero,0.0,0.0); delay(tau1); rgpulse(pw,zero,0.0,0.0); delay(MIX - 10.0e-3); delay(2.0e-6); rgradient('z',gzlvl2); delay(gt2); rgradient('z',0.0); delay(150.0e-6); dec2rgpulse(pwx2,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl3); delay(gt3); rgradient('z',0.0); delay(150.0e-6); txphase(zero); delay(10.0e-3 - gt2 - gt3 - 152.0e-6 - 152.0e-6 - pwx2); rgpulse(pw,zero,1.0e-6,0.0); dec2phase(zero); delay(2.0e-6); rgradient('z',gzlvl4); delay(gt4); rgradient('z',0.0); delay(2.0e-6); delay(tauxh - gt4 - 4.0e-6); /* delay=1/4J(XH) */ sim3pulse(2*pw,0.0e-6,2*pwx2,zero,zero,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl4); delay(gt4); rgradient('z',0.0); delay(2.0e-6); txphase(one); delay(tauxh - gt4 - 4.0e-6); /* delay=1/4J(XH) */ rgpulse(pw,one,0.0,0.0); /* shaped pulse */ rlpower(tpwrsl,TODEV); shaped_pulse(shp_sl,pw_sl,two,2.0e-6,0.0); delay(2.0e-6); rlpower(tpwr,TODEV); /* shaped pulse */ if (C_flg[A] == 'y') offset(dofcaco,DODEV); dec2phase(t2); txphase(zero); delay(2.0e-6); rgradient('z',gzlvl5); delay(gt5); rgradient('z',0.0); delay(100.0e-6); dec2rgpulse(pwx2,t2,0.0,0.0); dec2phase(t6); txphase(t5); delay(tau2); /* delay=t3/2 */ if (C_flg[A] == 'y') simpulse(2*pw,2*pwc,t5,zero,0.0,0.0); else rgpulse(2*pw,t5,0.0,0.0); delay(tau2); delay(BigT); dec2rgpulse(2*pwx2,t6,0.0,0.0); dec2phase(t3); delay(2.0e-6); rgradient('z',gzlvl6); delay(gt6); rgradient('z',0.0); delay(2.0e-6); if (C_flg[A] == 'y' && pw < pwc ) delay(BigT + 2*pwc - gt6 - 4.0e-6 - 2*GRADIENT_DELAY); else delay(BigT + 2*pw - gt6 - 4.0e-6 - 2*GRADIENT_DELAY); sim3pulse(pw,0.0e-6,pwx2,zero,zero,t3,0.0,0.0); /* X read pulse */ txphase(zero); dec2phase(zero); delay(2.0e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(2.0e-6); delay(tauxh - gt7 - 4.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(2.0e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(2.0e-6); delay(tauxh - gt7 - 4.0e-6); /* delay=1/4J (XH) */ sim3pulse(pw,0.0e-6,pwx2,one,zero,one,0.0,0.0); dec2phase(zero); txphase(zero); delay(2.0e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(2.0e-6); delay(tauxh - gt7 - 4.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 */ delay(2.0e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(2.0e-6); delay(tauxh-POWER_DELAY - gt7 - 4.0e-6); /* delay=1/4J(XH) */ rgpulse(pw,zero,0.0,0.0); delay(BigT1); 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(BigT1 - gt8 - 4.0e-6 - 2.0*GRADIENT_DELAY); /* acquire data */ status(D); setreceiver(t4); }