/* sesamehsqc.c SESAME-HSQC: Spin-statE Selective All Multiplicity Edited-HSQC 200607 13C-CT 27 ms version, final version. Web release 070907 Article Reference: P. Würtz and P. Permi: SESAME-HSQC for simultaneous measurement of NH and CH scalar and residual dipolar couplings. Magn. Reson. Chem. 2007, 45:289-295. Written by Peter Würtz and Perttu Permi, University of Helsinki Adapted from Varion BioPack gNhsqc. Copyright (c), 2006, Finnish National Biological NMR Laboratory, All rights reserved Disclaimer: Disclaimer for NMR pulse sequences from the Finnish National Biological NMR laboratory, University of Helsinki. Please pay attention to the requirements of your system, when implementing pulse sequences from this site. Pulse sequences on this web site are tested and working on our spectrometers. However, adjustments in pulse program syntax and/or parameter sets may be necessary on other hardware configurations or systems. The Finnish National Biological NMR laboratory, the Institute of Biotechnology and the University of Helsinki does not make any warranties with respect to the software. In no event will the Finnish National Biological NMR laboratory be liable for any loss, damages of any nature arising or relating to the use or performance of the software. INSTRUCTIONS FOR USE OF sesamehsqc 1. Load parameters by rtp('sesamehsqc.par') and compile sequence by seqgen('sesamehsqc'). 2. Run sesamehsqc macro. 4. Set pw, pwN and pwC. Set dm='nnn' and dm2='nnn' Set abfilter='a','b' for all multiplicity editing. Set doublet='a','b' in order to select inner or outer lines of CH2 doublet of doublets. 5. Set sw1 (C13) and sw2 (N15). sw1 >= sw2. kappa is calculated automatically. Scaling of N15 and 13C axis may be done in VNMR by sesame_nh(freq[ppm]) and sesame_ch(freq[ppm]) macroes respectively. 6. Processing can be done by processing macroes sesamehsqc_a (Inphase+antiphase), sesamehsqc_b (Inphase-antiphase) and sesamehsqc_ab (Inphase only). For geminal coupling measurements (I2S) set geminal='y' and doublet='a','b'. Keep abfilter='a','b' and make sure array is array='phase,abfilter,doublet'. Separation of the four individual lines in the I2S quadlet is done by the macroes sesame_ipapx, sesame_ipap_x, sesame_ip_ap_x and sesame_ip_ap_x. The macroes correspond to addition and subtraction of inphase (ip) and antiphase (ap) and the last indicator is the phase of PSI (t2) being x or -x. 7. Refocusing gradients may need to be fine-tuned for optimal performance on each spectrometer. */ #include #include "bionmr.h" static int phi2[1] = {1}, /* phase PSI in article */ phi3[1] = {0}, /* phase1 in article */ phi7[1] = {2}, /* phase4 in article */ phi9[4] = {0,1,2,3}, /* phase2 in article */ phi10[1] = {0}, /* phase3 in article */ rec[2] = {0,2}; /* phase_rec in article */ static double d2_init=0.0; pulsesequence() { /* DECLARE AND LOAD VARIABLES */ char f1180[MAXSTR], /* Flag to start t1 @ halfdwell */ allC[MAXSTR], /* aliphatic and aromatic groups */ aliph[MAXSTR], /* aliphatic CHn groups only */ stCshape[MAXSTR], /* calls sech/tanh pulses from shapelib */ doublet[MAXSTR], /* Select inner/outer lines in ZQ/DQ */ abfilter[MAXSTR], /* Select alpha/beta states */ mag_flg[MAXSTR], /* magic-angle coherence transfer gradients */ C13refoc[MAXSTR], /* C13 sech/tanh pulse in middle of t1*/ geminal[MAXSTR], /* flag for measuring homonuclear two-bond I2S*/ offCshape[MAXSTR]; /* calls SLP pulses from shapelib */ int icosel, /* used to get n and p type */ t1_counter; /* used for states tppi in t1 */ double tau1, /* t1 delay */ lambda = 0.91/(4.0*getval("JNH")), /*1/(4J*NH) evolution delay */ del1, /* 1/4J(CH) */ deltau = getval("deltau"), /* Tau G delay */ kappa, /* relation between sw1(C) and sw1(N) */ /* the sech/tanh pulse is automatically calculated by the macro "proteincal", */ /* and is called directly from your shapelib. */ pwClvl = getval("pwClvl"), /* coarse power for C13 pulse */ pwC = getval("pwC"), /* C13 90 degree pulse length at pwClvl */ rf0, /* maximum fine power when using pwC pulses */ rfst, /* fine power for the stCshape pulse, initialised */ compH = getval("compH"), /* adjustment for H1 amplifier compression */ compN = getval("compN"), /* adjustment for N15 amplifier compression */ compC = getval("compC"), /* adjustment for C13 amplifier compression */ pwHs = getval("pwHs"), /* H1 90 degree pulse length at tpwrs */ tpwrs, /* power for the pwHs ("H2Osinc") pulse */ pwNlvl = getval("pwNlvl"), /* power for N15 pulses */ pwN = getval("pwN"), /* N15 90 degree pulse length at pwNlvl */ slNlvl, /* power for N15 spin lock */ slNrf = 1500.0, /* RF field in Hz for N15 spin lock at 600 MHz */ /* the following pulse lengths for SLP pulses are automatically calculated */ /* by the macro "proteincal". SLP pulse shapes, "offC10"/"offC9" are called */ /* directly from your shapelib. offC9 uses the same parameters as offC10. */ pwC10 = getval("pwC10"), /*180 degree pulse at CO(174ppm) null at Ca(56ppm) */ rf10 = 0.0, /* fine power for the pwC10 ("offC10") pulse, initialised */ /* 90 degree pulse at Caliph (35ppm), first off-resonance null at CO (174ppm) */ pwC1, /* 90 degree pulse length on C13 at rf1 */ rf1, /* fine power for 4.7 kHz rf for 600MHz magnet */ /* 180 degree pulse at Cab (35ppm), first off-resonance null at CO(174ppm) */ pwC2 = 0.0, /* 180 degree pulse length at rf2, initialised */ rf2 = 0.0,/* fine power for 12.1 kHz rf for 600MHz magnet, initialised*/ sw1 = getval("sw1"), gt1 = getval("gt1"), /* coherence pathway gradients */ gzcal = getval("gzcal"), /* dac to G/cm conversion */ gzlvl1 = getval("gzlvl1"), gzlvl2 = getval("gzlvl2"), gt0 = getval("gt0"), /* other gradients */ gt3 = getval("gt3"), gt5 = getval("gt5"), gzlvl0 = getval("gzlvl0"), gzlvl3 = getval("gzlvl3"), gzlvl5 = getval("gzlvl5"), gzlvl6 = getval("gzlvl6"); getstr("f1180",f1180); getstr("mag_flg",mag_flg); getstr("C13refoc",C13refoc); getstr("doublet",doublet); getstr("abfilter",abfilter); getstr("aliph",aliph); getstr("allC",allC); getstr("geminal",geminal); /* LOAD PHASE TABLE */ settable(t2,1,phi2); /* PSI in article */ settable(t3,1,phi3); /* phase1 in article */ settable(t7,1,phi7); /* phase4 in article */ settable(t9,4,phi9); /* phase2 in article */ settable(t10,1,phi10);/* phase3 in article */ settable(t12,2,rec); /* phase_rec in article */ /* INITIALIZE VARIABLES */ /* maximum fine power for pwC pulses (and initialize rfst) */ rf0 = 4095.0; rfst=0.0; /* 80ppm sech/tanh inversion */ rfst = (compC*4095.0*pwC*4000.0*sqrt((12.07*sfrq/600+3.85)/0.35)); rfst = (int) (rfst + 0.5); strcpy(stCshape, "stC80"); /* selective H20 one-lobe sinc pulse */ tpwrs = tpwr - 20.0*log10(pwHs/(compH*pw*1.69)); /*needs 1.69 times more*/ tpwrs = (int) (tpwrs); /*power than a square pulse */ /* Set delays in mixing */ del1 = 0.91/(4.0*getval("JCH")); /* 1/(4J*NH) evolution delay */ /* power level for N15 spinlock (90 degree pulse length calculated first) */ slNlvl = 1/(4.0*slNrf*sfrq/600.0) ; slNlvl = pwNlvl - 20.0*log10(slNlvl/(pwN*compN)); slNlvl = (int) (slNlvl + 0.5); /* 90 degree pulse on Caliph, null at CO 140ppm away */ pwC1 = sqrt(15.0)/(4.0*140.0*dfrq); rf1 = (compC*4095.0*pwC)/pwC1; rf1 = (int) (rf1 + 0.5); /* 180 degree one-lobe sinc pulse on CO, null at Caliph 140ppm away, dof at */ /* 56ppm, to refocus CO coupling during t1 for aliphatic spectrum */ rf10 = (compC*4095.0*pwC*2.0*1.65)/pwC10; /* needs 1.65 times more */ rf10 = (int) (rf10 + 0.5); /* power than a square pulse */ strcpy(offCshape, "offC10"); /* 180 degree pulse on Ca at 35 ppm, null at CO 140ppm away, for CT='y' */ pwC2 = sqrt(3.0)/(2.0*140.0*dfrq); rf2 = (compC*4095.0*pwC*2.0)/pwC2; rf2 = (int) (rf2 + 0.5); if( rf2 > 4095.0 ) { text_error("increase pwClvl and recalibrate so that C13 90 is less than 24us*600/sfrq"); abort(1); } /* CHECK VALIDITY OF PARAMETER RANGES */ if((dm[A] == 'y' || dm[B] == 'y')) { text_error("incorrect dec1 decoupler flags! Should be 'nnn' "); abort(1); } if((dm2[A] == 'y' || dm2[B] == 'y')) { text_error("incorrect dec2 decoupler flags! Should be 'nny' "); abort(1); } if( dpwr2 > 46 ) { text_error("don't fry the probe, DPWR2 too large! "); abort(1); } if( pw > 50.0e-6 ) { text_error("dont fry the probe, pw too high ! "); abort(1); } if( pwN > 100.0e-6 ) { text_error("dont fry the probe, pwN too high ! "); abort(1); } if( ((aliph[A]=='y') && (allC[A]=='y')) ) { text_error ("Choose ONE of aliph='y' OR allC='y' ! "); abort(1); } /* PHASES AND INCREMENTED TIMES */ /* Phase incrementation for hypercomplex 2D data, States-Haberkorn element */ if (phase1 == 1) { tsadd(t7,2,4); tsadd(t10,2,4); icosel = +1;} else {icosel = -1; } /* Set up f1180 */ tau1 = d2; if((f1180[A] == 'y') && (ni > 1.0)) { tau1 += ( 1.0 / (2.0*sw1) ); if(tau1 < 0.2e-6) tau1 = 0.0; } tau1 = tau1/2.0; /* adjusting signal spread relation in N and C */ kappa = sw1/sw2; /* setting PSI phase for one-bond or two bond couplings */ if (geminal[A] == 'y') { tssub(t2,1,4); if (doublet[A] == 'b') tsadd(t2,2,4); } /* Calculate modifications to phases for States-TPPI acquisition */ if( ix == 1) d2_init = d2; t1_counter = (int) ( (d2-d2_init)*sw1 + 0.5 ); if(t1_counter % 2) { tsadd(t3,2,4); tsadd(t12,2,4); } /* BEGIN PULSE SEQUENCE */ status(A); obspower(tpwr); decpower(pwClvl); decpwrf(rf0); dec2power(pwNlvl); txphase(zero); decphase(zero); dec2phase(zero); delay(d1); /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx */ rcvroff(); dec2rgpulse(pwN, zero, 0.0, 0.0); decrgpulse(pwC, zero, 0.0, 0.0); /*destroy N15 and C13 magnetization*/ zgradpulse(gzlvl0, 0.5e-3); delay(1.0e-4); dec2rgpulse(pwN, one, 0.0, 0.0); decrgpulse(pwC, one, 0.0, 0.0); zgradpulse(0.7*gzlvl0, 0.5e-3); txphase(zero); delay(5.0e-4); rgpulse(pw,zero,0.0,0.0); /* 1H pulse excitation */ txphase(zero); zgradpulse(gzlvl0, gt0); delay(del1 - gt0); decrgpulse(2.0*pwC, zero, 0.0, 0.0); delay(lambda - del1 - pwC2); sim3pulse(2.0*pw, 0.0, 2.0*pwN, zero, zero, zero, 0.0, 0.0); txphase(one); zgradpulse(gzlvl0, gt0); delay(lambda - gt0); rgpulse(pw, one, 0.0, 0.0); zgradpulse(gzlvl3, gt3); txphase(zero); dec2phase(t3); delay(1.5e-4); decpwrf(rf2); dec2rgpulse(pwN, t3, 0.0, 0.0); delay(kappa*tau1); simpulse(2.0*pw, pwC2, zero, zero, 0.0, 0.0); decpwrf(rf10); decshaped_pulse(offCshape, pwC10, zero, 0.0, 0.0); delay(kappa*tau1); decpwrf(rf1); txphase(one); decphase(t3); decrgpulse(pwC1, t3, 0.0, 0.0); delay(tau1/2.0); decpwrf(rf10); simshaped_pulse("", offCshape, 2.0*pw, pwC10, one, zero, 0.0, 0.0); if (mag_flg[A] == 'y') magradpulse(icosel*gzcal*gzlvl6, gt1); else zgradpulse(icosel*gzlvl6, gt1); /* GN: N15 gradient,C13 unpertubed */ delay(deltau/2.0 - gt1 - 2.0*GRADIENT_DELAY -0.65*pwC1); decpwrf(rf2); decphase(zero); decrgpulse(pwC2, zero, 0.0, 0.0); if (mag_flg[A] == 'y') magradpulse(icosel*gzcal*gzlvl6, gt1); else zgradpulse(icosel*gzlvl6, gt1); /* GN: N15 gradient,C13 unpertubed */ delay(deltau/2.0 - tau1/2.0 - gt1 - 2.0*GRADIENT_DELAY); dec2phase(t9); decphase(t9); decpwrf(rf10); simshaped_pulse("", offCshape, 0.0, pwC10, one, zero, 0.0, 0.0); txphase(three); dec2rgpulse(2.0*pwN, t9, 0.0, 0.0); decpwrf(rf10); simshaped_pulse("", offCshape, 0.0, pwC10, one, zero, 0.0, 0.0); decpwrf(rf2); if (mag_flg[A] == 'y') magradpulse(icosel*gzcal*gzlvl1, gt1); else zgradpulse(icosel*gzlvl1, gt1); /* GC: 15N and 13C gradient encoding */ delay(deltau/2.0 - tau1/2.0 -gt1 -2.0*GRADIENT_DELAY + pwC10/2.0 + pwC2/2.0 -0.65*pwC1); decrgpulse(pwC2, t9, 0.0, 0.0); delay(deltau/2.0 + pwC10/2.0 + pwC2/2.0); decpwrf(rf10); simshaped_pulse("", offCshape, 2.0*pw, pwC10, three, zero, 0.0, 0.0); /* WFG3_START_DELAY */ delay(tau1/2.0); decpwrf(rf1); txphase(zero); decphase(t10); dec2phase(t7); /* xxxxxxxxx BACK TRANSFER xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx */ sim3pulse(pw, pwC1, pwN, zero, t10, t7, 0.0, 0.0); txphase(zero); decphase(zero); dec2phase(zero); zgradpulse(gzlvl5, gt5); decpwrf(rf2); delay(del1 - gt5); sim3pulse(2.0*pw, pwC2, 2.0*pwN, zero, zero, zero, 0.0, 0.0); zgradpulse(gzlvl5, gt5); decpwrf(rf1); delay(del1 - gt5); decphase(one); decrgpulse(pwC1, t2, 0.0, 0.0); decphase(zero); dec2phase(zero); zgradpulse(1.5*gzlvl5, gt5); delay(lambda - del1 - gt5); sim3pulse(2.0*pw, 0.0, 2.0*pwN, zero, zero, zero, 0.0, 0.0); zgradpulse(1.5*gzlvl5, gt5); delay(lambda - del1 - gt5); decphase(zero); dec2phase(one); if(abfilter[A] == 'a' || abfilter[A] == 'b') { if(abfilter[A] == 'a') { txphase(one); sim3pulse(pw, 0.0, pwN, one, zero, t2, 0.0, 0.0); } if(abfilter[A] == 'b') { txphase(zero); sim3pulse(pw, 0.0, pwN, zero, zero, t2, 0.0, 0.0); } } else { txphase(one); sim3pulse(pw, 0.0, pwN, one, zero, t2, 0.0, 0.0); } zgradpulse(gzlvl0, gt0); delay(del1 - gt0); decpwrf(rf2); decrgpulse(pwC2, zero, 0.0, 0.0); delay(lambda - del1 - pwC2); sim3pulse(2.0*pw, 0.0, 2.0*pwN, zero, zero, zero, 0.0, 0.0); txphase(one); zgradpulse(gzlvl0, gt0); delay(lambda - gt0); if(abfilter[A] == 'a' || abfilter[A] == 'b') { if(abfilter[A] == 'a') { txphase(zero); rgpulse(pw, zero, 0.0, 0.0); } if(abfilter[A] == 'b') { txphase(one); rgpulse(pw, one, 0.0, 0.0); txphase(zero); } } else { txphase(zero); rgpulse(pw, zero, 0.0, 0.0); } decpwrf(rf0); delay((gt1/10.0) + 1.0e-4 + 2.0*GRADIENT_DELAY + POWER_DELAY); rgpulse(2.0*pw, zero, 0.0, rof2); decpower(dpwr); dec2power(dpwr2); /* POWER_DELAY */ if (mag_flg[A] == 'y') magradpulse(gzcal*gzlvl2, 0.1*gt1); else zgradpulse(gzlvl2, 0.1*gt1); /* Gr: Gradient refocusing */ rcvron(); statusdelay(C,1.0e-4-rof2); setreceiver(t12); }