/* dipsi3dn_pfg_enhanced_sel_v1_500 This pulse sequence will allow one to perform the following experiment: 3D 15N edited DIPSI-HSQC F1 1H F2 15N F3(acq) 1H (NH) Uses channels 1 and 3 in the standard three channel configuration 1) 1H - carrier @ 4.7 ppm [H2O] 2) (13C) 3) 15N - carrier @ 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. Standard Settings fsat='n',fscuba='n',f1180='n',f2180='n' Note: 15N axis will be opposite to the triple res. experiments Written by L.E.K June 2, 1993 Modified by L.E.K Oct. 19, 1993 to make unity+ like and remove seq_test Modified by L.E.K April 21, 1994 to minimize water saturation Modified by L.E.K April 23, 1994 to use clean sequence REF: Zhang et. al. J. Biomol. NMR 4, 845 (1994). BMRB Pulse Sequence Accession Number: 42 */ #include #define PI 3.1416 static double d2_init = 0.0, d3_init=0.0; static int phi1[2] = {1,3}, phi2[4] = {0,0,2,2}, phi3[1] = {0}, phi5[1] = {0}, phi6[1] = {0}, phi7[2] = {0,2}, phi8[2] = {3,1}, rec[4] = {0,2,2,0}; pulsesequence() { /* DECLARE VARIABLES */ char fscuba[MAXSTR],f1180[MAXSTR],f2180[MAXSTR],fsat[MAXSTR], shp_sl[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 */ BigT, /* Time for application of first gradient to select for 15N magnetization */ BigT1, /* Time for application of second gradient to select for 15N magnetization */ ttrimpwr, /* power level for dipsi */ pw_d, /* H PW90 at ttrimpwr */ tpwrsl, /* power level for water selective pulse */ pw_sl, p10, /* 180 proton pulse at ttrimpwr */ p11, /* 140 proton pulse at ttrimpwr */ p12, /* 320 proton pulse at ttrimpwr */ p13, /* 90 proton pulse at ttrimpwr */ p14, /* 270 proton pulse at ttrimpwr */ p15, /* 20 proton pulse at ttrimpwr */ p16, /* 200 proton pulse at ttrimpwr */ p17, /* 85 proton pulse at ttrimpwr */ p18, /* 30 proton pulse at ttrimpwr */ p19, /* 125 proton pulse at ttrimpwr */ p20, /* 120 proton pulse at ttrimpwr */ p21, /* 300 proton pulse at ttrimpwr */ p22, /* 75 proton pulse at ttrimpwr */ p23, /* 255 proton pulse at ttrimpwr */ p24, /* 10 proton pulse at ttrimpwr */ p25, /* 190 proton pulse at ttrimpwr */ p26, /* 180 proton pulse at ttrimpwr */ p27, /* 143.89 proton pulse at ttrimpwr */ ncyc, /* number of cycles of dipsi sequence */ gzlvl1, gzlvl4, gzlvl5, gzlvl6, gzlvl7, gzlvl8, gt1, 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"); BigT = getval("BigT"); BigT1 = getval("BigT1"); pw_d = getval("pw_d"); ncyc = getval("ncyc"); ttrimpwr = getval("ttrimpwr"); tpwrsl = getval("tpwrsl"); pw_sl = getval("pw_sl"); gzlvl1 = getval("gzlvl1"); gzlvl4 = getval("gzlvl4"); gzlvl5 = getval("gzlvl5"); gzlvl6 = getval("gzlvl6"); gzlvl7 = getval("gzlvl7"); gzlvl8 = getval("gzlvl8"); gt1 = getval("gt1"); 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); /* 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 > 50 ) { 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 || gt4 > 15e-3 || gt5 > 15e-3 || gt6 > 15e-3 || gt7 > 15e-3 || gt8 > 15e-3 ) { printf("gradients are on for too long !!! "); abort(1); } if(ncyc > 17) { printf("ncyc is too long"); abort(1); } if(ttrimpwr > 57) { printf("ttrimpwr is too high; must be < 57\n"); 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); settable(t7, 2, phi7); settable(t8, 2, phi8); /* INITIALIZE VARIABLES */ tauxh = 1/(4*jxh); initval(ncyc,v8); if(ix == 1) { printf("The mixing time is %f\n",ncyc*pw_d*172.668); } p10 = (180.0/90.0)*pw_d; p11 = (140.0/90.0)*pw_d; p12 = (320.0/90.0)*pw_d; p13 = (90.0/90.0)*pw_d; p14 = (270.0/90.0)*pw_d; p15 = (20.0/90.0)*pw_d; p16 = (200.0/90.0)*pw_d; p17 = (85.0/90.0)*pw_d; p18 = (30.0/90.0)*pw_d; p19 = (125.0/90.0)*pw_d; p20 = (120.0/90.0)*pw_d; p21 = (300.0/90.0)*pw_d; p22 = (75.0/90.0)*pw_d; p23 = (255.0/90.0)*pw_d; p24 = (10.0/90.0)*pw_d; p25 = (190.0/90.0)*pw_d; p26 = (180.0/90.0)*pw_d; p27 = (143.89/90.0)*pw_d; /* 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 */ /* remove in F1 (H) to ensure that water is always along +z */ 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 ); else tau1 = tau1 - 2.0*pwx2 - (4.0/PI)*pw; 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(dpwr,DODEV); /* Set decoupler1 power to dpwr */ rlpower(dhpwr2,DO2DEV); /* Set decoupler2 power to dhpwr2 */ /* Presaturation Period */ status(B); if(fsat[0] == 'y') { txphase(zero); 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); rgpulse(pw,t1,1.0e-6,0.0); dec2phase(zero); txphase(one); delay(tau1); dec2rgpulse(2*pwx2,zero,0.0,0.0); delay(tau1); rgpulse(pw,one,0.0,0.0); /* now adjust the power level for the dipsi portion of the sequence */ rlpower(ttrimpwr,TODEV); if(ncyc > 0.0) { starthardloop(v8); rgpulse(p10,zero,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p11,zero,2.0e-6,0.0); rgpulse(p12,two,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p13,two,2.0e-6,0.0); rgpulse(p14,zero,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p15,zero,2.0e-6,0.0); rgpulse(p16,two,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p17,two,2.0e-6,0.0); rgpulse(p18,zero,0.0,0.0); rgpulse(p19,two,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p20,two,2.0e-6,0.0); rgpulse(p21,zero,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p22,zero,2.0e-6,0.0); rgpulse(p23,two,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p24,two,2.0e-6,0.0); rgpulse(p25,zero,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p26,zero,2.0e-6,0.0); delay(p27); rgpulse(p10,two,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p11,two,2.0e-6,0.0); rgpulse(p12,zero,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p13,zero,2.0e-6,0.0); rgpulse(p14,two,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p15,two,2.0e-6,0.0); rgpulse(p16,zero,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p17,zero,2.0e-6,0.0); rgpulse(p18,two,0.0,0.0); rgpulse(p19,zero,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p20,zero,2.0e-6,0.0); rgpulse(p21,two,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p22,two,2.0e-6,0.0); rgpulse(p23,zero,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p24,zero,2.0e-6,0.0); rgpulse(p25,two,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p26,two,2.0e-6,0.0); delay(p27); rgpulse(p10,two,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p11,two,2.0e-6,0.0); rgpulse(p12,zero,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p13,zero,2.0e-6,0.0); rgpulse(p14,two,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p15,two,2.0e-6,0.0); rgpulse(p16,zero,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p17,zero,2.0e-6,0.0); rgpulse(p18,two,0.0,0.0); rgpulse(p19,zero,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p20,zero,2.0e-6,0.0); rgpulse(p21,two,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p22,two,2.0e-6,0.0); rgpulse(p23,zero,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p24,zero,2.0e-6,0.0); rgpulse(p25,two,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p26,two,2.0e-6,0.0); delay(p27); rgpulse(p10,zero,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p11,zero,2.0e-6,0.0); rgpulse(p12,two,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p13,two,2.0e-6,0.0); rgpulse(p14,zero,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p15,zero,2.0e-6,0.0); rgpulse(p16,two,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p17,two,2.0e-6,0.0); rgpulse(p18,zero,0.0,0.0); rgpulse(p19,two,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p20,two,2.0e-6,0.0); rgpulse(p21,zero,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p22,zero,2.0e-6,0.0); rgpulse(p23,two,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p24,two,2.0e-6,0.0); rgpulse(p25,zero,0.0,0.0); delay(p27 - 2.0e-6); rgpulse(p26,zero,2.0e-6,0.0); delay(p27); endhardloop(); } txphase(zero); rlpower(tpwr,TODEV); /* set power back to high power for pulses */ rgpulse(pw,zero,2.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); txphase(one); delay(tauxh - gt4 - 252.0e-6); /* delay=1/4J(XH) */ delay(2.0e-6); rgradient('z',gzlvl4); delay(gt4); rgradient('z',0.0); delay(250.0e-6); rgpulse(pw,one,0.0,0.0); if(phase == 1) { /* shaped pulse */ rlpower(tpwrsl,TODEV); shaped_pulse(shp_sl,pw_sl,t7,2.0e-6,0.0); delay(2.0e-6); rlpower(tpwr,TODEV); /* shaped pulse */ } if(phase == 2) { /* shaped pulse */ rlpower(tpwrsl,TODEV); shaped_pulse(shp_sl,pw_sl,t8,2.0e-6,0.0); delay(2.0e-6); rlpower(tpwr,TODEV); /* shaped pulse */ } dec2phase(t2); txphase(t5); delay(2.0e-6); rgradient('z',gzlvl5); delay(gt5); rgradient('z',0.0); delay(200.0e-6); dec2rgpulse(pwx2,t2,0.0,0.0); dec2phase(t6); delay(tau2); /* delay=t3/2 */ 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); 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(tauxh - gt7 - 252.0e-6); /* delay=1/4J (XH) */ delay(2.0e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(250.0e-6); 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(tauxh-POWER_DELAY - gt7 - 252.0e-6); /* delay=1/4J(XH) */ delay(2.0e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(250.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',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); }