/* pfg_hnn_se1.c triple resonance experiment for H-N-CA-N-H out-and-back. based on Hosur et al J. BioMol NMR 20, 135-147, 2001 Figure 1A Copyright 1995 Center for Advanced Biotechnology and Medicine, Rutgers Univ. H to TODEV, N to DODEV, C to DO2DEV & C' to DO3DEV Set dof2 = CA frequency. Use pwCA180l = pwCA90l + 6 dB Minimum phase cycle = 2 Optimum phase cycle = 4 if se = 'y', it may be advisable to set tof = H2O to suppress H2O echos. No H2O echos with se='n' w1 = Ni, states-tppi for phase=1,2; tppi for phase=3 w2 = 15Ni, 15Ni-1 , nagayama for phase2=1,2 w3 = HN ni2max is limited by Tn ni2max = 2 * sw2 * Tn; use macro 'ni2maxhnca' for 3D array phase, then phase2 PROCESSING For 2D CA-HN plane: phase = 1,2 for State-TPPI use wft2d('ni',1,0,0,0,0,0,1,0) results in best baselines; lp1 = 0 (but requires back prediction of 1st point) phase = 3 for TPPI use wft2d('ni',1,0,0,0) if phase2 = 1 or 2 or wft2d('ni',1,0,1,0,0,0,0,0) in phase2 = 1,2 baselines show "bleed through"; lp1 = 0 For 2D N-HN plane: phase2 = 1,2 for N- P-type selection use wft2d(1,0,1,0,0,-1,0,1) or wft2d(0,1,1,0,1,0,0,1) flat baseline; lp2 = 0 For first N-N-HN plane from 3D phase=1,2; phase2=1,2 (in that order) use wft2d('ni',1,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0) For first N-HN plane from 3D phase=1,2; phase2=1,2 (in that order) use wft2d('ni2',1,1,0,1,0,0,0,0,0,0,-1,0,1,0,0,0,0) when using states-tppi in w1, the t1 ridges must be corrected by back-linear prediction of 1st point typical values for combined backward and forward linear prediction with ni = 64: lpopt1 = 'b','f' lpfilt1 = 4,8 lpnupts1 = 32,64 strtlp1 = 2,64 lpext1 = 1,64 strtext1 = 1,65 OTHER PARAMETERS: C90lvl: power for C13 90/ 180 on DO2DEV pwNlvl: power for N15 pulse on DODEV C90: C13 pulse width; pwN: N15 pulse width tauNH: 1/(4*J_N-H) < 2.7ms taufocNH: 1/(2*J_N-H) 5.56 ms for NH (suppress NH2) tauCAN: 1/(4*J_Ca-N) 10 - 15 ms tauCANn: N * tauCAN N=1,3,5 usually 10 - 15 ms gt1: coherence selection gradient. 400 microsec gzlvl1: gradient power for gt1. 30000 recover: gradient recovery time. 150 microsec quant1: for coherence selection. ~9.9 zfilt1: ZZ-filt after first INEPT, usually not used. When used, zlvl1 = 5000 to 10000. tseq_t1: filename of multipulse 1H decoupling during t1 and t2. garp1 tres_t1: resolution of tseq_dec file. 1.0 tpwr_t1: power level for 1H decoupling during t1 and t2 tmf_t1 : transmitter modulation frequency (=1/90 deg pulse) corresponding to tpwr_dec dofc: decoupler offset (ch3, DO2DEV) center of C(alfa) and C' dseq3_t2: filename of selective C' decoupling during t2. sinx dpwr3_t2: power level for C' decoupling during t2. 46 dres3_t2: resolution of dseq_t2 file. 1.0 dmf3_t2: decoupler modulation frequency (=1/90 deg pulse) corresponding to dpwr_t2. */ #include pulsesequence() { double tauNH,taufocNH,tauNH1,tauNH2, tauCAN,tauCAN1, taue,tauNHa,tauNHb,tfocNH, tauNHc, t1evol,t2evol, recover,Tn,Tn1,Tn2, pwN,dofc, pwNlvl,C90lvl,C90, tres_t1,tmf_t1,tpwr_t1, dmf3_t1,dpwr3_t1,dres3_t1, dmf3_t2,dpwr3_t2,dres3_t2; double zfilt1,zlvl1; double zfilt2,zlvl2; double zfilt3,zlvl3; double zfilt4,zlvl4; double zfilt5,zlvl5, zfilt6,zlvl6,zfilt7,zlvl7,zfilt8,zlvl8; double gzlvl1,gt1,quant1,phase,phase2; char tseq_t1[MAXSTR],dseq3_t1[MAXSTR],dseq3_t2[MAXSTR], se[MAXSTR]; /* LOAD VARIABLES */ zfilt1 = getval("zfilt1"); zlvl1 = getval("zlvl1"); zfilt2 = getval("zfilt2"); zlvl2 = getval("zlvl2"); zfilt3 = getval("zfilt3"); zlvl3 = getval("zlvl3"); zfilt4 = getval("zfilt4"); zlvl4 = getval("zlvl4"); zfilt5 = getval("zfilt5"); zlvl5 = getval("zlvl5"); zfilt6 = getval("zfilt6"); zlvl6 = getval("zlvl6"); zfilt7 = getval("zfilt7"); zlvl7 = getval("zlvl7"); zfilt8 = getval("zfilt8"); zlvl8 = getval("zlvl8"); tauNH = getval("tauNH"); Tn = getval("Tn"); taufocNH = getval("taufocNH"); tauCAN = getval("tauCAN"); recover = getval("recover"); pwN = getval("pwN"); pwNlvl = getval("pwNlvl"); C90lvl = getval("C90lvl"); C90 = getval("C90"); dpwr3_t1 = getval("dpwr3_t1"); dmf3_t1 = getval("dmf3_t1"); dres3_t1 = getval("dres3_t1"); dpwr3_t2 = getval("dpwr3_t2"); dmf3_t2 = getval("dmf3_t2"); dres3_t2 = getval("dres3_t2"); dofc = getval("dofc"); tpwr_t1 = getval("tpwr_t1"); tmf_t1 = getval("tmf_t1"); tres_t1 = getval("tres_t1"); getstr("tseq_t1",tseq_t1); getstr("dseq3_t1",dseq3_t1); getstr("dseq3_t2",dseq3_t2); getstr("se",se); gzlvl1=getval("gzlvl1"); gt1=getval("gt1"); quant1=getval("quant1"); phase=(int) (getval("phase") + 0.5); phase2=(int) (getval("phase2") + 0.5); /* SAFETY CHECKS */ if (gt1 > 0.010) { text_error ("pulsed gradient time too long"); abort(1); } if (( dpwr3 > 5)|| (dpwr > 50) || (tpwr_t1 > 40)) { text_error("dpwr3,dpwr,or tpwr_t1 are too high!! \n"); abort(1); } if ( dpwr3_t2 > 63 ) { text_error("dpwr3_t2 too high!! \n"); abort(1); } /* PHASECYCLE */ loadtable("pfg_hnn_se1.ph"); /* BEGIN ACTUAL PULSE SEQUENCE CODE */ status(A); obsoffset(tof); decoffset(dof); dec2offset(dof2); dec3offset(dof3); hsdelay(d1); obspower(tpwr); dec2power(C90lvl); decpower(pwNlvl); getelem(t1,ct,v1); getelem(t7,ct,oph); /* States-TPPI option */ if ( (phase == 1) || (phase == 2) ) { initval(2.0*(double)((int)(d2*getval("sw1")+0.5)%2),v14); add(v1,v14,v1); add(oph,v14,oph); } if ( phase == 2) { decr(v1); } /* H-N TRANSFER */ rcvroff(); sim3pulse(0.0,pwN,C90,zero,zero,zero,rof1,rof2); if ( zfilt1 > 0.0) { rgradient('z',zlvl1); delay(zfilt1); rgradient('z',0.0); delay(recover); } sim3pulse(0.0,pwN,C90,zero,one,zero,rof1,rof2); if ( zfilt2 > 0.0) { rgradient('z',zlvl2); delay(zfilt2); rgradient('z',0.0); delay(recover); } /* begin actual pulse sequence - first INEPT */ rgpulse(pw,zero,rof1,rof1); tauNHa = tauNH - rof2 - pw*0.5 - pwN - zfilt3 - recover; if ( zfilt3 > 0.0) { rgradient('z',zlvl3); delay(zfilt3); rgradient('z',0.0); delay(recover); delay(tauNHa); } else { delay (tauNH); } simpulse(2*pw,2*pwN,one,one,rof2,rof2); if ( zfilt3 > 0.0) { rgradient('z',zlvl3); delay(zfilt3); rgradient('z',0.0); delay(recover); delay(tauNHa); } else { delay (tauNH); } if ( zfilt4 > 0.0) { rgpulse(pw,one,rof1,rof1); rgradient('z',zlvl4); delay(zfilt4); rgradient('z',0.0); delay(recover); decrgpulse(pwN,v1,rof2,rof2); } else { simpulse(pw,pwN,one,zero,rof2,rof2); } if (dpwr3_t1 > 0) { dec3power(dpwr3_t1); dec3prgon(dseq3_t1,1/dmf3_t1,dres3_t1); dec3on(); } t1evol = d2/2.0; /* H-N antiphase refocusing and N-CA TRANSFER */ tfocNH = taufocNH - pwN*0.5 - rof2 - POWER_DELAY - PRG_START_DELAY; delay(tfocNH); if (tpwr_t1 > 0) { rgpulse(pw,one,rof1,rof1); obspower(tpwr_t1); obsprgon(tseq_t1,1/tmf_t1,tres_t1); xmtron(); } Tn1 = Tn - (taufocNH)- PRG_START_DELAY - POWER_DELAY - pwN; delay(Tn1 + t1evol); sim3pulse(0.0,2.0*pwN,2*C90,zero,one,one,rof1,rof2); Tn2 = Tn - pwN*1.5 - 2*rof2; delay(Tn2 - t1evol); if ( zfilt4 > 0.0) { decrgpulse(pwN,t2,rof1,rof2); rgradient('z',zlvl4); delay(zfilt4); rgradient('z',0.0); delay(recover); dec2rgpulse(C90,t3,rof1,rof2); } else { sim3pulse(0.0,pwN,C90,zero,t2,t3,rof1,rof2); } /* CA-N TRANSFER AND T2 EVOLUTION */ tauCAN1 = tauCAN - rof2*2 - pwN - 0.5*C90; delay(tauCAN1); sim3pulse(0.0,pwN*2.0,C90*2.0,zero,zero,zero,rof2,rof2); delay(tauCAN1); if ( zfilt4 > 0.0) { dec2rgpulse(C90,zero,rof1,rof2); rgradient('z',zlvl4); delay(zfilt4); rgradient('z',0.0); delay(recover); decrgpulse(pwN,zero,rof1,rof2); } else { sim3pulse(0.0,pwN,C90,zero,zero,zero,rof1,rof2); } t2evol = d3/2.0; delay(Tn2 - t2evol); sim3pulse(0.0,pwN*2.0,C90*2.0,zero,zero,zero,rof1,rof2); delay(Tn1 + t2evol); if (tpwr_t1 > 0) { xmtroff(); obsprgoff(); obspower(tpwr); rgpulse(pw,three,rof1,rof1); } tauNH2 = taufocNH - (gt1*quant1) - recover - rof2; tauNH2 = tauNH2 - PRG_STOP_DELAY; if (tauNH2 < 0) { text_error("2*tauNH < [(gt1*quant1) - recover] \n"); abort(1); } delay(tauNH2); rgradient('z',gzlvl1); delay(gt1*quant1); rgradient('z',0.0); delay(recover); if (dpwr3_t2 > 0) { dec3off(); dec3prgoff(); } dec2offset(dofc); if (dpwr2 > 0) { dec2power(dpwr2); dec2prgon(dseq2,1/dmf2,dres2); dec2on(); } if (se[A] == 'y') { if (phase2 == 1 ) { assign(one,v6); } else { assign(three,v6); } simpulse(pw,pwN,zero,zero,rof2,rof2); if ( zfilt7 > 0.0) { rgradient('z',zlvl7); delay(zfilt7); rgradient('z',0.0); delay(recover); tauNHb = tauNH - pwN*1.5 - rof2 - POWER_DELAY - PRG_START_DELAY; tauNHb = tauNHb - zfilt7 - recover; delay(tauNHb); } else { delay(tauNH); } simpulse(2.0*pw,2.0*pwN,one,one,rof2,rof2); if ( zfilt7 > 0.0) { rgradient('z',zlvl7); delay(zfilt7); rgradient('z',0.0); delay(recover); tauNHb = tauNH - pwN*1.5 - rof2 - POWER_DELAY - PRG_START_DELAY; tauNHb = tauNHb - zfilt7 - recover; delay(tauNHb); } else { delay(tauNH); } if (dpwr2 > 0) { dec2off(); dec2prgoff(); } simpulse(pw,pwN,one,v6,rof2,rof2); if ( zfilt8 > 0.0) { rgradient('z',zlvl8); delay(zfilt8); rgradient('z',0.0); delay(recover); tauNHc = tauNH - pwN*1.5 - rof2 - zfilt8 - recover; delay(tauNHc); } else { delay(tauNH); } simpulse(2.0*pw,2.0*pwN,zero,zero,rof2,rof2); if ( zfilt8 > 0.0) { rgradient('z',zlvl8); delay(zfilt8); rgradient('z',0.0); delay(recover); tauNHc = tauNH - pwN*1.5 - rof2 - zfilt8 - recover; delay(tauNHc); } else { delay(tauNH); } rgpulse(pw,zero,rof1,rof1); taue = gt1 + recover; taue = taue + 2*POWER_DELAY + 5e-6; delay(taue); rgpulse(2.0*pw,one,rof1,rof1); if (phase2 == 1 ) { rgradient('z',(1.0*gzlvl1)); } else { rgradient('z',(-1.0*gzlvl1)); } delay(gt1); rgradient('z',0.0); delay(recover); } else { if ( zfilt1 > 0.0 ) { decrgpulse(pwN,zero,rof1,rof1); rgradient('z',zlvl1); delay(zfilt1); rgradient('z',0.0); delay(recover); rgpulse(pw,zero,rof1,rof1); } else { simpulse(pw,pwN,zero,zero,rof2,rof2); } delay(tauNH); simpulse(2.0*pw,2.0*pwN,one,zero,rof2,rof2); tauNH1 = tauNH - gt1 - recover; delay(tauNH1); if (phase2 == 1 ) { rgradient('z',(-1.0*gzlvl1)); } else { rgradient('z',gzlvl1); } delay(gt1); rgradient('z',0.0); delay(recover); } decpower(dpwr);dec2power(dpwr2);dec3power(dpwr3); /* DETECTION WITH WALTZ-16 TO N */ status(B); } /* pfg_hnca_se phase table t1 = 0 2 select for CA t2 = 0 0 2 2 select for N15 (inactive) t7 = 0 2 2 0 receiver */