/* pfg_hncoca_TROSY_2H.c triple resonance experiment for H-N-CO-CA out-and-back. Copyright 1995 Center for Advanced Biotechnology and Medicine, Rutgers Univ. 3ch5: added dec2phase(zero) before each shifted CO pulse. modified from pfg_hncoca_new3.c to a 3 channel version to allow 2H decoupling in the future. PVS 03-02-99. H to TODEV, N to DODEV, C to DO2DEV & C' to DO3DEV Set dof2 = CA frequency. 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 = CA, 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'-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: pwCA90l: power for selective C13 54usec 90 on DO2DEV/DO3DEV pwCA180l: power for selective C13 54usec 180 on DO2DEV/DO3DEV pwNlvl: power for N15 pulse on DODEV pwCA90, pwCA180: C13 pulse width; 54 microsec at 150 MHz pwCO90, pwCO180: C13 pulse width; 54 microsec at 150 MHz 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. 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 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. 800 */ #include static int phi1[4] = { 0,0,2,2 }, phi2[2] = { 0,2 }, phi3[8] = { 0,0,0,0,2,2,2,2 }, phi4[1] = { 2 }, phi5[1] = { 3 }, phi6[1] = { 0 }, phi7[1] = { 1 }, rec[8] = { 3,1,1,3,1,3,3,1 }; pulsesequence() { double tauNH,taufocNH, tauNCO,tauNCO1,tauCACO,tauCACO1,tauCACO2, taue,tauNHa,tfocNH,tauNHb, tauNCO3,tauNCO4,tauNCO2, delay_x1,t1evol,t2evol,recover,pwN,dofc, pwCA90l,pwCA180l,pwCO90l,pwCO180l, pwNlvl,pwCO90,pwCO180,pwCA90,pwCA180, tres_t1,tmf_t1,tpwr_t1, dmf_t1,dpwr_t1,dres_t1, dmf2_t1,dpwr2_t1,dres2_t1, dmf2_t2,dpwr2_t2,dres2_t2, dmf3_t1,dpwr3_t1,dres3_t1, zfilt1,zlvl1,zlvl2,zfilt2,zfilt3,zlvl3, dmf3_t2,dpwr3_t2,dres3_t2; double gzlvl1,gt1,quant1,phase,phase2; char tseq_t1[MAXSTR],dseq3_t1[MAXSTR],dseq3_t2[MAXSTR], se[MAXSTR],shca90[MAXSTR],shca180[MAXSTR],shco90[MAXSTR], shco180[MAXSTR],dseq2_t1[MAXSTR],dseq2_t2[MAXSTR],dseq_t1[MAXSTR], ch4[MAXSTR]; /* LOAD VARIABLES */ zfilt1 = getval("zfilt1"); zlvl1 = getval("zlvl1"); zfilt2 = getval("zfilt2"); zlvl2 = getval("zlvl2"); zfilt3 = getval("zfilt3"); zlvl3 = getval("zlvl3"); tauNH = getval("tauNH"); taufocNH = getval("taufocNH"); tauNCO = getval("tauNCO"); tauCACO = getval("tauCACO"); recover = getval("recover"); pwN = getval("pwN"); pwCA180 = getval("pwCA180"); pwCA90 = getval("pwCA90"); pwCO90 = getval("pwCO90"); pwCO180 = getval("pwCO180"); pwCA180l = getval("pwCA180l"); pwCA90l = getval("pwCA90l"); pwCO90l = getval("pwCO90l"); pwCO180l = getval("pwCO180l"); pwNlvl = getval("pwNlvl"); tpwr_t1 = getval("tpwr_t1"); tmf_t1 = getval("tmf_t1"); tres_t1 = getval("tres_t1"); dpwr_t1 = getval("dpwr_t1"); dmf_t1 = getval("dmf_t1"); dres_t1 = getval("dres_t1"); dpwr2_t1 = getval("dpwr2_t1"); dmf2_t1 = getval("dmf2_t1"); dres2_t1 = getval("dres2_t1"); dpwr2_t2 = getval("dpwr2_t2"); dmf2_t2 = getval("dmf2_t2"); dres2_t2 = getval("dres2_t2"); 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"); getstr("tseq_t1",tseq_t1); getstr("dseq_t1",dseq_t1); getstr("dseq2_t1",dseq2_t1); getstr("dseq2_t2",dseq2_t2); getstr("dseq3_t1",dseq3_t1); getstr("dseq3_t2",dseq3_t2); getstr("shca90",shca90); getstr("shca180",shca180); getstr("shco90",shco90); getstr("shco180",shco180); 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 (( dpwr3 > 50)|| (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_hncoca_3ch1.ph"); */ settable(t1,4,phi1); settable(t2,2,phi2); settable(t3,8,phi3); settable(t4,1,phi4); settable(t5,1,phi5); settable(t6,1,phi6); settable(t7,1,phi7); settable(t8,8,rec); /* BEGIN ACTUAL PULSE SEQUENCE CODE */ status(A); if ( dm3[B] == 'y' ) { setstatus(DEC3ch, FALSE, 'p', TRUE, dmf3); dec3blank(); } obsoffset(tof); decoffset(dof); dec2offset(dof2); if ( ch4[A] == 'y' ) dec3offset(dof3); hsdelay(d1); obspower(tpwr); decpower(pwNlvl); dec2power(dpwr2_t1); if ( ch4[A] == 'y' ) dec3power(pwCO180l); getelem(t1,ct,v1); getelem(t2,ct,v2); getelem(t3,ct,v3); if ( phase2 == 1) { getelem(t4,ct,v4); getelem(t5,ct,v5); } else { getelem(t6,ct,v4); getelem(t7,ct,v5); } getelem(t8,ct,oph); /* States-TPPI option */ if ( (phase == 1) || (phase == 2) ) { initval(2.0*(double)((int)(d2*getval("sw1")+0.5)%2),v14); add(v2,v14,v2); add(oph,v14,oph); } if ( phase == 2) { decr(v2); } if ( phase == 3 ) { /* TPPI IN CA DIMENSION (T1 EVOLUTION) */ initval(d2*(getval("sw1")),v12); add(v2,v12,v2); } /* H-N TRANSFER */ rcvroff(); rgpulse(pw,zero,rof1,rof2); tauNHa = tauNH - 2*rof2 - pw*0.5 - pwN; delay (tauNHa); simpulse(2*pw,2*pwN,zero,zero,rof2,rof2); tauNHb = tauNH - pwN*1.5 - 2*rof2; delay(tauNHb); if ( zfilt1 > 0.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); } if (dpwr2_t1 > 0) { dec2prgon(dseq2_t1,1/dmf2_t1,dres2_t1); dec2on(); } /* H-N antiphase refocusing and N-CO TRANSFER */ tfocNH = taufocNH - pwN*0.5 - rof2 - PRG_START_DELAY - POWER_DELAY - WFG_START_DELAY; delay(tfocNH); if ( tpwr_t1 > 0 ) { obspower(tpwr_t1); obsprgon(tseq_t1,1/tmf_t1,tres_t1); xmtron(); } tauNCO1 = tauNCO - tfocNH - pwN - 2.0*rof2; tauNCO1 = tauNCO1 - 2.0*POWER_DELAY - 2.0*PRG_START_DELAY - 2.0*WFG_START_DELAY; delay(tauNCO1); if ( ch4[A] == 'y' ) { sim4pulse(0.0,2.0*pwN,0.0,pwCO180,zero,zero,zero,zero,rof2,rof2); } else { if ( dpwr2_t1 > 0 ) { dec2off(); dec2prgoff(); dec2power(pwCO180l); dec2phase(zero); sim3shaped_pulse("","hard",shco180,0.0,2.0*pwN,pwCO180,zero,zero,zero,rof2,rof2); dec2power(dpwr2_t1); dec2prgon(dseq2_t1,1/dmf2_t1,dres2_t1); dec2on(); } else { dec2power(pwCO180); dec2phase(zero); sim3shaped_pulse("","hard",shco180,0.0,2.0*pwN,pwCO180,zero,zero,zero,rof2,rof2); } } tauNCO2 = tauNCO - pwN - 3.0*PRG_STOP_DELAY - 3.0*WFG_STOP_DELAY - 3.0*POWER_DELAY - 2*rof2 - 0.5*pwCO90; delay(tauNCO2); if ( dpwr2_t1 > 0 ) { dec2off(); dec2prgoff(); } if ( tpwr_t1 > 0 ) { xmtroff(); obsprgoff(); obspower(tpwr); } if ( zfilt2 > 0 ) { decrgpulse(pwN,zero,rof2,rof2); rgradient('z',zlvl2); delay(zfilt2); rgradient('z',0.0); delay(recover); if ( ch4[A] == 'y' ) { dec3power(pwCO90l); dec3rgpulse(pwCO90,v3,rof2,rof2); } else { dec2power(pwCO90l); dec2phase(zero); dec2shaped_pulse(shco90,pwCO90,v3,rof2,rof2); } } else { if ( ch4[A] == 'y' ) { sim4pulse(0.0,pwN,0.0,pwCO90,zero,zero,zero,v3,rof2,rof2); } else { dec2power(pwCO90l); dec2phase(zero); sim3shaped_pulse("","hard",shco90,0.0,pwN,pwCO90,zero,zero,v3,rof2,rof2); } } if ( dpwr_t1 > 0 ) { decpower(dpwr_t1); decprgon(dseq_t1,1/dmf_t1,dres_t1); decon(); } tauCACO1 = tauCACO - 1.5*pwCO90 - POWER_DELAY - 2*rof2; delay(tauCACO1); if ( ch4[A] == 'y' ) { dec2power(pwCA180l); dec3power(pwCO180l); dec3shaped_pulse(shco180,pwCO180,zero,rof2,rof2); dec2shaped_pulse(shca180,pwCA180,zero,rof2,rof2); } else { dec2power(pwCO180l); dec2phase(zero); dec2shaped_pulse(shco180,pwCO180,zero,rof2,rof2); dec2power(pwCA180l); dec2shaped_pulse(shca180,pwCA180,zero,rof2,rof2); } if ( zfilt3 > 0 ) { tauCACO2 = tauCACO - zfilt3 - recover ; delay(tauCACO2); } else { delay(tauCACO1); } if ( dpwr_t1 > 0 ) { decoff(); decprgoff(); decpower(pwNlvl); } if ( ch4[A] == 'y' ) { dec3power(pwCO90l); dec3shaped_pulse(shco90,pwCO90,one,rof2,rof2); } else { dec2power(pwCO90l); dec2phase(zero); dec2shaped_pulse(shco90,pwCO90,one,rof2,rof2); if ( dm3[B] == 'y' ) lk_hold(); if ( dm3[B] == 'y' ) { dec3unblank(); setstatus(DEC3ch, TRUE, 'p', TRUE, dmf3); } } if ( zfilt3 > 0 ) { rgradient('z',zlvl3); delay(zfilt3); rgradient('z',0.0); delay(recover); } dec2power(pwCA90l); dec2shaped_pulse(shca90,pwCA90,v2,rof2,rof2); /* T1 EVOLUTION */ delay_x1 = 2*pwN + 4*rof2; t1evol = d2/2; if (d2 > delay_x1) { t1evol = (d2/2.0); t1evol = t1evol - (pwN) - 0.5*pwCO90 - 2*rof2; delay(t1evol); dec2power(pwCO180l); sim3shaped_pulse("hard","hard",shco180,2.0*pw,2.0*pwN,pwCO180,zero,zero,zero,rof2,rof2); delay(t1evol); } else { delay(d2); } /* CA-CO BACK-TRANSFER */ if ( ch4[A] == 'y' ) { dec2shaped_pulse(shca90,pwCA90,zero,rof2,rof2); } else { if ( dm3[B] == 'y' ) { setstatus(DEC3ch, FALSE, 'p', TRUE, dmf3); dec3blank(); } if ( dm3[B] == 'y' ) lk_sample(); dec2power(pwCA90l); dec2shaped_pulse(shca90,pwCA90,zero,rof2,rof2); } if ( zfilt3 > 0 ) { rgradient('z',zlvl3); delay(zfilt3); rgradient('z',0.0); delay(recover); } if ( ch4[A] == 'y' ) { dec3power(pwCO90l); dec3shaped_pulse(shco90,pwCO90,zero,rof2,rof2); } else { dec2power(pwCO90l); dec2phase(zero); dec2shaped_pulse(shco90,pwCO90,zero,rof2,rof2); } if ( dpwr_t1 > 0 ) { decpower(dpwr_t1); decprgon(dseq_t1,1/dmf_t1,dres_t1); decon(); } if ( zfilt3 > 0 ) { tauCACO2 = tauCACO1 - zfilt3 - recover; delay(tauCACO2); } else { delay(tauCACO1); } dec2power(pwCA180l); dec2shaped_pulse(shca180,pwCA180,zero,rof2,rof2); if ( ch4[A] == 'y' ) { dec3power(pwCO180l); dec3shaped_pulse(shco180,pwCO180,zero,rof2,rof2); } else { dec2power(pwCO180l); dec2phase(zero); dec2shaped_pulse(shco180,pwCO180,zero,rof2,rof2); } delay(tauCACO1); if ( dpwr_t1 > 0 ) { decoff(); decprgoff(); decpower(pwNlvl); } /* CO-N TRANSFER AND T2 EVOLUTION */ if ( ch4[A] == 'y' ) { dec3power(pwCO90l); sim4pulse(0.0,pwN,0.0,pwCO90,zero,v1,zero,one,rof2,rof2); } else { dec2power(pwCO90l); dec2phase(zero); sim3shaped_pulse("","hard",shco90,0.0,pwN,pwCO90,zero,v1,one,rof2,rof2); } if (dpwr2_t2 > 0) { dec2power(dpwr2_t2); dec2prgon(dseq2_t2,1/dmf2_t2,dres2_t2); dec2on(); } t2evol = d3/2; tauNCO3 = tauNCO - 2.0*PRG_START_DELAY - 2.0*POWER_DELAY - 2*rof2; tauNCO3 = tauNCO3 - 0.5*pwCO90 - pwN - t2evol ; delay(tauNCO3); if ( ch4[A] == 'y' ) { dec3power(pwCO180l); sim4pulse(0.0,2.0*pwN,0.0,pwCO180,zero,zero,zero,zero,rof2,rof2); } else { if ( dpwr2_t2 > 0 ) { dec2off(); dec2prgoff(); dec2power(pwCO180l); dec2phase(zero); sim3shaped_pulse("","hard",shco180,0.0,2.0*pwN,pwCO180,zero,zero,zero,rof2,rof2); dec2power(dpwr2_t2); dec2prgon(dseq2_t2,1/dmf2_t2,dres2_t2); dec2on(); } else { dec2power(pwCO180l); dec2phase(zero); sim3shaped_pulse("","hard",shco180,0.0,2.0*pwN,pwCO180,zero,zero,zero,rof2,rof2); } } tauNCO4 = tauNCO - pwN - 0.5*pw - 2.0*PRG_STOP_DELAY - 2.0*POWER_DELAY - 2*rof2; tauNCO4 = tauNCO4 + t2evol - gt1*quant1 - recover; delay(tauNCO4); rgradient('z',gzlvl1); delay(gt1*quant1); rgradient('z',0.0); delay(recover); if (dpwr2_t2 > 0) { dec2off(); dec2prgoff(); } rgpulse(pw,v4,rof1,rof2); dec2offset(dofc); if (dpwr2 > 0) { dec2power(dpwr2); dec2prgon(dseq2,1/dmf2,dres2); dec2on(); } delay(tauNH - POWER_DELAY - PRG_START_DELAY - rof2 - pwN ); simpulse(2.0*pw,2.0*pwN,zero,zero,rof2,rof2); delay(tauNH - PRG_STOP_DELAY - rof2*2.0 - pwN*1.5 ); if ( dpwr2 > 0 ) { dec2off(); dec2prgoff(); } simpulse(pw,pwN,one,zero,rof2,rof2); delay(tauNH - pwN*1.5 - rof2*2.0 ); simpulse(2.0*pw,2.0*pwN,zero,zero,rof2,rof2); delay(tauNH - pwN*1.5 - rof2*2.0 ); decrgpulse(pwN,v5,rof2,rof2); taue = gt1 + recover; taue = taue + 2*POWER_DELAY + 5e-6; delay(taue); rgpulse(2.0*pw,zero,rof1,rof1); 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 */ if ( dm3[B] == 'y' ) lk_sample(); status(C); } /* pfg_hncoca_new phase table created using static int structure in the beginning of the pulse sequence. */