/* HNHA-3D This pulse sequence will allow one to perform the double-resonance experiment HNHA dm2 = 'nnny' Note: 15N axis will be on the third channel you just see the NH-NH diagonal peak & the NH-Ha cross-peak with opposite signs Written by Sonja Dames Modified by Ronald Wiltscheck to apply on a double 13C, 15N labeled sample Original pulse sequence: 15N gradient enhanced NOESY-HSQC Lit.: Vuister, G. W. & Bax, A.; J. Am. Chem. Soc. 1993, 115, 7772-7777 */ #include static double d2_init = 0.0, d3_init=0.0; /* Bax's ans Vuisters's phase cycling */ static int phi1[1] = {0}, phi2[16] = {0,0,0,0,2,2,2,2,1,1,1,1,3,3,3,3,}, phi3[2] = {0,2}, phi4[4] = {0,0,2,2}, phi5[16] = {0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3}, phi6[2] = {3,3}, phi7[1] = {0}, phi8[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, rec[32] = {0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2}; pulsesequence() { /* DECLARE VARIABLES */ char f1180[MAXSTR],f2180[MAXSTR],fsat[MAXSTR],f13C[MAXSTR]; int phase, t1_counter, t2_counter; double pwx2, /* PW90 for Y-nuc */ pwx, /* PW90 for X-nuc */ satfrq, /* offset for presat */ tsatpwr, /* low power level for presat*/ dhpwr, /* power level for X hard pulses */ dhpwr2, /* power level for Y hard pulses */ jxh, /* J NH */ delt1, /* delay delta1 */ chi, /* delay chi */ tau1, /* t1, incremented */ tau2, /* t2, constant time */ BigT, /* delay = 1/(4*jhh) */ jhh, /* 3J - HN - HA - coupling */ tpwrmess, /* power level for purges */ dly_pg1; /* purge delay applied before d1 to suppress any residual magnetization from previous scans and aid in the elimination of h2o */ /* LOAD VARIABLES */ jxh = getval("jxh"); delt1 = getval("delt1"); chi = getval("chi"); dhpwr2 = getval("dhpwr2"); dhpwr = getval("dhpwr"); pwx2 = getval("pwx2"); pwx = getval("pwx"); tsatpwr = getval("tsatpwr"); satfrq = getval("satfrq"); phase2 = (int) (getval("phase2") + 0.5); phase = (int) (getval("phase") + 0.5); dly_pg1 = getval("dly_pg1"); BigT = getval("BigT"); jhh = getval("jhh"); tpwrmess = getval("tpwrmess"); getstr("fsat",fsat); getstr("f1180",f1180); getstr("f2180",f2180); getstr("f13C",f13C); /* check validity of parameter range */ if((dm[A] == 'y' || dm[B] == 'y' || dm[C] == '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 > 10 ) { printf("tsatpwr too large !!! "); abort(1); } if( dpwr > 48 ) { printf("don't fry the probe, dpwr too large! "); abort(1); } if( dpwr2 > 48 ) { printf("don't fry the probe, dpwr2 too large! "); abort(1); } if(dly_pg1 > 10.0e-3) { printf("dly_pg1 is too long"); abort(1); } if(tpwrmess > 56) { printf("tpwrmess is too high"); abort(1); } /* LOAD VARIABLES */ settable(t1, 1, phi1); settable(t2, 16, phi2); settable(t3, 2, phi3); settable(t4, 4, phi4); settable(t5, 16, phi5); settable(t6, 2, phi6); settable(t7, 1, phi7); settable(t8, 32, phi8); settable(t9, 32, rec); /* INITIALIZE VARIABLES */ /* Phase incrementation for hypercomplex data (TPPI) */ if ( phase == 2 ) /* Hypercomplex in t1 */ tsadd(t7, 1, 4); if ( phase2 == 2 ) /* Hypercomplex in t2 */ { tsadd(t1, 1, 4); tsadd(t2, 1, 4); tsadd(t3, 1, 4); } /* 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(t7,2,4); tsadd(t9,2,4); } if(ix==1) d3_init = d3; t2_counter = (int) ( (d3-d3_init)*sw2 + 0.5); if(t2_counter %2) { tsadd(t1,2,4); tsadd(t2,2,4); tsadd(t3,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; /* calculate delays */ delt1=1/(2*jxh); chi = 1/(8*jhh); BigT=(2*chi-delt1)/2; /* BEGIN ACTUAL PULSE SEQUENCE */ status(A); decpower(dhpwr); /* Set decoupler1 power to dhpwr */ dec2power(dhpwr2); /* Set decoupler2 power to dhpwr2 */ /* kill any remaining steady state magnetization */ /* obspower(tpwrmess); rgpulse(dly_pg1,zero,rof1,0.0); rgpulse(dly_pg1/1.62,one,0.0,rof2); obspower(tpwr); */ /* Presaturation Period */ status(B); if(fsat[0] == 'y') { txphase(zero); obspower(tsatpwr); obsoffset(satfrq); rgpulse(d1,zero,rof1,rof2); obspower(tpwr); /* Set power for hard pulses */ } else delay(d1); obspower(tpwr); /* Set power for hard pulses */ obsoffset(tof); rcvroff(); txphase(t1); status(C); obsoffset(tof); rgpulse(pw,t1,0.0,0.0); xmtrphase(zero); dec2phase(t7); delay(delt1); dec2rgpulse(pwx2,t7,0.0,0.0); txphase(t2); delay(chi-delt1); rgpulse(2*pw,t2,0.0,0.0); dec2phase(zero); delay(delt1/2+tau1/4); dec2rgpulse(2*pwx2,zero,0.0,0.0); txphase(t3); delay(BigT-tau1/4); rgpulse(pw,t3,0.0,0.0); dec2phase(t8); decphase(zero); delay(tau2); if (f13C[A] == 'y') sim3pulse( (double)0.0, 2*pwx, 2*pwx2, zero, zero, t8, 0.0, 0.0); /* only necessary for a double 15N, 13C labeled sample */ else dec2rgpulse(2*pwx2,t8,0.0,0.0); /* if just 15N enriched */ txphase(t4); delay(tau2); rgpulse(pw,t4,0.0,0.0); dec2phase(zero); delay(BigT+tau1/4); dec2rgpulse(2*pwx2,zero,0.0,0.0); txphase(t5); delay(delt1/2-tau1/4); rgpulse(2*pw,t5,0.0,0.0); dec2phase(zero); delay(chi-delt1); dec2rgpulse(pwx2,zero,0.0,0.0); dec2power(dpwr2); /* lower decoupler power for decoupling on decoupler channel 2 */ txphase(t6); delay(delt1); rgpulse(pw,t6,0.0,0.0); /* purge pulse */ obsoffset(satfrq); /* acquire data */ status(D); setreceiver(t9); }