/* pfg_hnco_se5.c triple resonance experiment for H-N-CO out-and-back. based on Muhandiram & Kay JMR B103: 203-216, 1994 Figure 1D; with minor modifications Copyright 1995 Center for Advanced Biotechnology and Medicine, Rutgers Univ. cbr,gvts 1997-06-17 implemented for the 600 MHz cbr, mt, gtm 2.6.95 modified cbr, cb 1995-11-30 to include taua_foc mod. gtm 1995-12-28 to set taua_foc2=taua_foc, better comments and make phase table name consistent H to TODEV, C to DODEV, N to DO2DEV Set dof = CA frequency. Uses fourth synthesizer for CO pulses Set synthesizer to 136202276.9 for CO pulses (or value optimal for your protein) Use pwC90 = pwC180 = 63 microsec (at 125 MHz) for selective pulses Use pwC180lvl = pwC90lvl + 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 = CO, states-tppi for phase=1,2; tppi for phase=3 w2 = 15N, nagayama for phase2=1,2 w3 = HN ni2max is limited by tauf ni2max = 2 * sw2 * tauf; use macro 'ni2maxhnco' for 3D array phase, then phase2 PROCESSING For 2D C'-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 C'-N 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) 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,63 strtext1 = 1,65 sensitivity enhancement verified for se='y' for N-HN planes: Peak S/N se='n' S/N se ='y' 132 55 126 51 138 381 172 53 106 152 62 153 (from cbr.2.158) OTHER PARAMETERS: pwCA90l,pwCO90l:power for selective C13 63usec 90 on DO2DEV/DO3DEV pwCA180l,pwCO180l: power for selective C13 63usec 180 on DO2DEV/DO3DEV pwNlvl: power for N15 pulse on DODEV pwCO90, pwCO180/ pwCA180,pwCA90: C13 pulse width; 63 microsec at 125 MHz pwN: N15 pulse width tauNH: 1/(4*J_NH) < 2.7ms taufocNH: 1/(2*J_NH) 5.56 ms for NH (suppress NH2) tauNCO: 1/(4*J_C'N) 10 - 15 ms taufNCO: N * taub 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. 10.135 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 dseq2_t2: filename of selective Ca decoupling during t2. sinx dpwr2_t2: power level for Ca decoupling during t2. 46 dres2_t2: resolution of dseq2_t2 file. 1.0 dmf2_t2: decoupler modulation frequency (=1/90 deg pulse) corresponding to dpwr2_t2. 800 */ #include #define RG1 2e-6 #define RG2 6e-6 pulsesequence() { double tauNH,tauNH1,tauNH2,taufocNH, tauNCO,tauNCO1,tauNCO2, taue,tauNHb, tauNCO3,tauNCO4, delay_x1, t1evol,t2evol, recover, pwCO90,pwCO180,pwCA90,pwCA180, pwN, pwCO90l,pwCO180l,pwCA90l,pwCA180l, pwNlvl, tres_t1,tmf_t1,tpwr_t1, dmf2_t2,dpwr2_t2,dres2_t2; double zfilt1,zlvl1,dofc; double gzlvl1,gt1,quant1,phase,phase2; char tseq_t1[MAXSTR],dseq2_t2[MAXSTR], se[MAXSTR],ch4[MAXSTR]; /* LOAD VARIABLES */ dofc = getval("dofc"); zfilt1 = getval("zfilt1"); zlvl1 = getval("zlvl1"); tauNH = getval("tauNH"); taufocNH = getval("taufocNH"); tauNCO = getval("tauNCO"); recover = getval("recover"); pwN = getval("pwN"); pwCO90 = getval("pwCO90"); pwCA90 = getval("pwCA90"); pwCO180 = getval("pwCO180"); pwCA180 = getval("pwCA180"); pwCO90l = getval("pwCO90l"); pwCO180l = getval("pwCO180l"); pwCA90l = getval("pwCA90l"); pwCA180l = getval("pwCA180l"); pwNlvl = getval("pwNlvl"); dpwr2_t2 = getval("dpwr2_t2"); dmf2_t2 = getval("dmf2_t2"); dres2_t2 = getval("dres2_t2"); tpwr_t1 = getval("tpwr_t1"); tmf_t1 = getval("tmf_t1"); tres_t1 = getval("tres_t1"); getstr("tseq_t1",tseq_t1); getstr("dseq2_t2",dseq2_t2); getstr("se",se); getstr("ch4",ch4); 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 (( dpwr > 40) || (dpwr2 > 40) || (dpwr3 > 40) || (tpwr_t1 > 40)) { text_error("dpwr, dpwr2, dpwr3, or tpwr_t1 are too high!! \n"); abort(1); } if ( dpwr2_t2 > 50 ) { text_error("dpwr_t2 too high!! \n"); abort(1); } if ( dpwr2_t2 > 50 ) { text_error("dpwr2_t2 too high!! \n"); abort(1); } /* PHASECYCLE */ loadtable("pfg_hnco_se.ph"); /* BEGIN ACTUAL PULSE SEQUENCE CODE */ status(A); obsoffset(tof); decoffset(dof); dec2offset(dof2); dec3offset(dof3); hsdelay(d1); obspower(tpwr); dec3power(pwCO180l); /* C' */ 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); } if ( phase == 3 ) { /* TPPI IN CO DIMENSION (T1 EVOLUTION) */ initval(d2*(getval("sw1")),v2); add(v1,v2,v1); } /* H-N TRANSFER */ rcvroff(); rgpulse(pw,zero,rof1,rof1); delay (tauNH); simpulse(2*pw,2*pwN,one,one,rof2,rof2); delay(tauNH); if ( zfilt1 > 0 ) { rgpulse(pw,one,rof1,rof1); rgradient('z',zlvl1); delay(zfilt1); rgradient('z',0.0); delay(recover); decrgpulse(pwN,zero,rof2,rof2); } else { simpulse(pw,pwN,one,zero,rof2,rof2); } /* H-N antiphase refocusing and N-CO TRANSFER */ delay(taufocNH); if (tpwr_t1 > 0) { obspower(tpwr_t1); obsprgon(tseq_t1,1/tmf_t1,tres_t1); xmtron(); } tauNCO1 = tauNCO - (taufocNH); tauNCO1 = tauNCO1 - POWER_DELAY - PRG_START_DELAY ; delay(tauNCO1); /* nitrogen carbonyl */ if ( ch4[A] == 'y' ) { sim4pulse(0.0,pwN*2.0,0.0,pwCO180,zero,zero,zero,zero,rof2,rof2); } dec3power(pwCO90l); tauNCO2 = (tauNCO); delay(tauNCO2); if (tpwr_t1 > 0) { xmtroff(); obsprgoff(); obspower(tpwr); } if ( ch4[A] == 'y') { sim4pulse(0.0,pwN,0.0,pwCO90,zero,zero,zero,v1,RG1,RG2); } /* T1 EVOLUTION */ delay_x1 = 2*pwN + (2*POWER_DELAY) + RG2; t1evol = d2/2; if (d2 > delay_x1) { dec2power(pwCA180l); t1evol = (d2/2.0); t1evol = t1evol - (0.5*(2.0*POWER_DELAY) + (2.0*pwN)); delay(t1evol); sim3pulse(0.0,pwN*2.0,pwCA180,zero,zero,zero,RG1,RG2); delay(t1evol); } else { delay(d2); } /* CO-N TRANSFER AND T2 EVOLUTION */ dec3power(pwCO90l); if( ch4[A] == 'y' ) { sim4pulse(0.0,pwN,0.0,pwCO90,zero,t2,zero,zero,RG1,RG2); } if (tpwr_t1 > 0) { obspower(tpwr_t1); obsprgon(tseq_t1,1/tmf_t1,tres_t1); xmtron(); } if (dpwr2_t2 > 0) { dec2power(dpwr2_t2); dec2prgon(dseq2_t2,1/dmf2_t2,dres2_t2); dec2on(); } t2evol = d3/2; tauNCO3 = tauNCO - (2.0*POWER_DELAY) - (2.0*PRG_START_DELAY); tauNCO3 = tauNCO3 - RG2; tauNCO3 = tauNCO3 - t2evol; delay(tauNCO3); dec3power(pwCO180l); if ( ch4[A] == 'y' ) { sim4pulse(0.0,pwN*2.0,0.0,pwCO180,zero,zero,zero,zero,RG1,RG2); } tauNCO4 = tauNCO - (2*POWER_DELAY) - PRG_STOP_DELAY; tauNCO4 = tauNCO4 - RG1 ; tauNCO4 = tauNCO4 - (taufocNH); tauNCO4 = tauNCO4 + t2evol; delay(tauNCO4); if (tpwr_t1 > 0) { xmtroff(); obsprgoff(); obspower(tpwr); } tauNH2 = (taufocNH) - (gt1*quant1) - recover - PRG_STOP_DELAY - RG2; tauNH2 = tauNH2 ; if (tauNH2 < 0) { text_error("taufocNH < [(gt1*quant1)+recover+RG2+PRG_STOP_DELAY]\n"); abort(1); } delay(tauNH2); rgradient('z',gzlvl1); delay(gt1*quant1); rgradient('z',0.0); delay(recover); if (dpwr2_t2 > 0) { dec2off(); dec2prgoff(); } if (se[A] == 'y') { if (phase2 == 1 ) { assign(one,v6); } else { assign(three,v6); } simpulse(pw,pwN,zero,zero,RG1,RG2); if ( dpwr2 > 0.0) { dec2power(dpwr2); dec2offset(dofc); dec2prgon(dseq2,1/dmf2,dres2); dec2on(); } tauNHb = tauNH - pwN*1.5 - rof2; delay(tauNH); simpulse(2.0*pw,2.0*pwN,one,one,RG2,RG2); delay(tauNH); if ( dpwr2 > 0.0) { dec2off(); dec2prgoff(); } simpulse(pw,pwN,one,v6,RG2,RG2); delay(tauNH); simpulse(2.0*pw,2.0*pwN,one,one,RG2,RG2); tauNH1 = tauNHb; 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',(gzlvl1)); } delay(gt1); rgradient('z',0.0); delay(recover); } else { if ( zfilt1 > 0.0 ) { decrgpulse(pwN,zero,RG1,RG2); rgradient('z',zlvl1); delay(zfilt1); rgradient('z',0.0); delay(recover); rgpulse(pw,zero,rof1,rof1); } else { simpulse(pw,pwN,zero,zero,RG2,RG2); } delay(tauNH); simpulse(2.0*pw,2.0*pwN,one,zero,RG2,RG2); tauNH1 = tauNH - gt1 - recover- pwN - rof2; delay(tauNH); if (phase2 == 1 ) { rgradient('z',(gzlvl1)); } else { rgradient('z',(-1.0*gzlvl1)); } delay(gt1); rgradient('z',0.0); delay(recover); } sp1off(); decpower(dpwr); dec2power(dpwr2); dec3power(dpwr3); /* DETECTION WITH WALTZ-16 TO N */ status(B); } /* pfg_hnco_se.ph phase table t1 = 0 2 select for CO t2 = 0 0 2 2 select for N15 (inactive) t7 = 0 2 2 0 receiver */