/* 43D_HabCabcoNHN.c This pulse sequence will allow one to perform the following experiment: GFT (4,3)D HBHACBCA(CO)NHN (gradient sensitivity enhanced): F1 H_alpha_beta/C_alpha_beta F2 15N F3(acq) 1H (NH) The magnetization transfer for this experiment is ('i' refers to residue number): Ha/Hb(i-1) -> 13Ca/13Cb(i-1) -> 13Ca(i-1)-> 13CO(i-1) -> 15N (i) -> HN (i) (t1) (t1) (t2) (t3) t1/t2/t3 refers to the frequency labeling periods ************************************************************************** 1. All pulse widths and power levels of 13C rf pulses and decoupling sequences are calculated automatically in the pulse sequence. 2. Correspondingly, parameter file is modified. 3. Semi-constant time Ha/Hb evolution delays: tau1ai, tau1bi and tau1ci are calculated automatically. 4. Calibration compared to spectrum recorded by Nhsqc.c when TROSY='y': rfl=rfl-45 rfl2=rfl2+45 5. Scaling factor "scale_hahb" allows one to scale the ha/hb chemical shifts in the projected (GFT) dimension Setting scale_hahb=0 and GFTphase=1 allows one to acquire the central peak spectra comprising peaks at CA and CB chemical shifts (i.e., equivalent to a 3D CBCA(CO)NHN). dof -> 58ppm, dofcacb -> 43ppm projtof -> 0.0 ppm (offset on 1H during Ha/Hb evolution) 6. The carrier frequency on C13 is shifted to 176 ppm ("dofco") internally in the sequence during CO-N transfer and shifted back to dof. Hence, dof should be caribrated properly. 7. The correct order of phase cycling is: phase2=1,2 phase =1,2 GFTphase=1,2 8. For obtaining the central peak spectrum from C13 steady state, use ssmag='y' and record two spectra with flgab='a'/'b' in two separate experiments 9. The fids must be manipulated (add/subtract) before processing with the G-matrix Originally written for RD-NMR by Thomas Szyperski based on Lewis Kay's CBCA(CO)NHN sequence modified RD_NMR pack by Youlin Xia on June, 2001 C. Arrowsmith lab, OCI/Dept. of Medical Biophysics, University of Toronto modified for GFT_NMR pack by H. S. Atreya, 2004 SUNY Buffalo Reference: Szyperski et al., Proc. Natl. Acad. Sci. 99, 8009-8014 (2002). Liu et al., Proc. Natl. Acad. Sci. 102, 10487-10492 (2005). ************************************************************************** Uses three channels: 1) 1H - carrier (tof) @ 4.7ppm [H2O] - carrier (projtof) @ 0 ppm for 1H frequency labelling 2) 13C - carrier (dof @ 56ppm [CA] and dofcacb @ 43ppm [CA,CB]) (Note: centre of F1 is 43ppm (dofcacb)) 3) 15N - carrier (dof2)@ 119ppm [centre of amide N] Set dm = 'nnnn', dmm = 'cccc' Set dm2 = 'nnny', dmm2 = 'cccp' [15N decoupling during acquisition] dseq2 = 'waltz16' Must set phase = 1,2 and phase2 = 1,2 for States-TPPI acquisition in t1 [carbon] and t2 [N]. Flags fsat 'y' for presaturation of H2O fscuba 'y' to apply scuba pulse after presaturation of H2O f1180 'y' to get 180deg linear phase correction in F1, otherwise linear phase correction is 0. f2180 'y' to get 180deg linear phase correction in F2, otherwise linear phase correction is 0. flgab 'a' to record spectrum a, otherwise to record spectrum b Standard Settings: fsat='n', fscuba='n', f1180='n', f2180='n'. The flag f1180/f2180 should be set to 'y' if t1 is to be started at halfdwell time. This will give -90, 180 phasing in f1/f2. If it is set to 'n' the phasing will be 0,0 and will still give a perfect baseline. Set f1180 to n for (0,0) in C and f2180 = n for (0,0) in N */ #include static int phi1[1] = {0}, phi2[1] = {1}, phi3[4] = {0,0,2,2}, phi4[1] = {0}, phi5[2] = {0,2}, phi6[2] = {0,2}, phi7[1] = {0}, phi8[1] = {0}, phi9[4] = {0,0,2,2}, rec[4] = {0,2,2,0}, phi11[1] = {0}, phi12[1] = {1}, phi13[1] = {1}, phi14[2] = {0,2}, phi15[2] = {1,3}; static double d2_init=0.0, d3_init=0.0; pulsesequence() { /* DECLARE VARIABLES */ char fsat[MAXSTR], fscuba[MAXSTR], f1180[MAXSTR], /* Flag to start t1 @ halfdwell */ f2180[MAXSTR], /* Flag to start t2 @ halfdwell */ flgab[MAXSTR], /* Flag to record spectrum a or b */ ssmag[MAXSTR], spco180a[MAXSTR], spco180b[MAXSTR], spco90c[MAXSTR], spco180c[MAXSTR], spca180d[MAXSTR], shp_sl[MAXSTR], TROSY[MAXSTR], cadecseq[MAXSTR]; int GFTphase,phase, phase2, ni, ni2, icosel, /* used to get n and p type */ t1_counter, /* used for states tppi in t1 */ t2_counter; /* used for states tppi in t2 */ double scale_hahb,tau1, /* t1 delay */ tau1ai, tau1bi, tau1ci, tau2, /* t2 delay */ taub, taua, /* ~ 1/4JCH = 1.7 ms */ tauc, /* ~ 1/4JCAC' = 3.6 ms */ taud, /* ~ 1/4JC'CA = 4.3, 4.4 ms */ taue, /* 1/4JC'N = 12.4 ms */ tauf, /* 1/4JNH = 2.25 ms */ BigTC, /* carbon constant time period */ BigTN, /* nitrogen constant time period */ pwN, /* PW90 for 15N pulse */ pwca90a, /* PW90 for 13C at dvhpwr */ pwca180a, /* PW180 for 13C at dvhpwra */ pwco180a, pwca180b, /* PW180 for ca nucleus @ dvhpwrb */ pwco180b, pwco90c, /* PW90 for co nucleus @ dhpwrb */ pwco180c,rfco90c,rfco180c, pwca180d,rfca180d, tsatpwr, /* low level 1H trans.power for presat */ tpwrsl, /* power for soft pulse on water */ tpwrml, /* power level for h decoupling */ projtof, /* 1h carrier for 1h semi-ct labeling */ pwmlev, /* h 90 pulse at tpwrml */ pw_sl, /* soft pulse on water for suppression */ sfreq,lambda, compC = getval("compC"), /* adjustment for C13 amplifier compression */ 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 */ rfca90a, /* power level for 13C pulses on dec1 90 for part a of the sequence at 43 ppm */ rfca180a, /* power level for 180 13C pulses at 43 ppm */ rfco180b, /* power level for 13C pulses on dec1 - 54 ppm 90 for part b of the sequence*/ rfca180b, /* power level for 13C pulses on dec1 - 54 ppm 180 for part b of the sequence */ rfcadec, /* power level for seduce ca decoupling */ rfco180a, /* power level for pwco180a, 180 shaped C' */ pwNlvl, /* high dec2 pwr for 15N hard pulses */ sw1, /* sweep width in f1 */ sw2, /* sweep width in f2 */ dofcacb, /* dof for dipsi part, 43 ppm */ dofco, pwcadec, /* seduce ca decoupling at dpwrsed */ dressed, /* resoln for seduce decoupling = 2 */ BigT1, gt1, gt2, gt4, gt5, gt6, gt7, gt9, gt10, gzlvl1, gzlvl2, gzlvl4, gzlvl5, gzlvl6, gzlvl7, gzlvl9, gzlvl10; /* variables commented out are already defined by the system */ /* LOAD VARIABLES */ getstr("fsat",fsat); getstr("f1180",f1180); getstr("f2180",f2180); getstr("flgab",flgab); getstr("ssmag",ssmag); getstr("fscuba",fscuba); getstr("TROSY",TROSY); taua = getval("taua"); taub = getval("taub"); tauc = getval("tauc"); taud = getval("taud"); taue = getval("taue"); tauf = getval("tauf"); BigTC = getval("BigTC"); BigTN = getval("BigTN"); pwN = getval("pwN"); projtof = getval("projtof"); scale_hahb = getval("scale_hahb"); tpwr = getval("tpwr"); tsatpwr = getval("tsatpwr"); dpwr = getval("dpwr"); pwNlvl = getval("pwNlvl"); phase = (int) ( getval("phase") + 0.5); phase2 = (int) ( getval("phase2") + 0.5); GFTphase = (int) (getval("GFTphase") + 0.5); sw1 = getval("sw1"); sw2 = getval("sw2"); dofcacb = getval("dofcacb"); dofco = dofcacb + 133.0*dfrq; ni = getval("ni"); ni2 = getval("ni2"); pwcadec = getval("pwcadec"); dressed = getval("dressed"); BigT1 = getval("BigT1"); gt1 = getval("gt1"); gt2 = getval("gt2"); gt4 = getval("gt4"); gt5 = getval("gt5"); gt6 = getval("gt6"); gt7 = getval("gt7"); gt9 = getval("gt9"); gt10 = getval("gt10"); gzlvl1 = getval("gzlvl1"); gzlvl2 = getval("gzlvl2"); gzlvl4 = getval("gzlvl4"); gzlvl5 = getval("gzlvl5"); gzlvl6 = getval("gzlvl6"); gzlvl7 = getval("gzlvl7"); gzlvl9 = getval("gzlvl9"); gzlvl10 = getval("gzlvl10"); /* LOAD PHASE TABLE */ settable(t1,1,phi1); settable(t2,1,phi2); settable(t3,4,phi3); settable(t4,1,phi4); settable(t5,2,phi5); settable(t6,2,phi6); settable(t7,1,phi7); settable(t8,1,phi8); settable(t9,4,phi9); settable(t10,4,rec); settable(t11,1,phi11); settable(t12,1,phi12); settable(t13,1,phi13); settable(t14,2,phi14); settable(t15,2,phi15); /* INITIALIZE VARIABLES */ /* maximum fine power for pwC pulses */ rf0 = 4095.0; sfreq = ( (int) ((sfrq +5.0) *0.1))*10.0; /* 180 degree hard pulse on Ca, null at CO 118ppm away */ pwca180d = ( (int) ( (10*48.8*600.0/sfreq) + 0.5) )*0.1e-6; rfca180d = (compC*4095.0*pwC*2.0)/pwca180d; rfca180d = (int) (rfca180d + 0.5); strcpy(spca180d,"hard_180ca_HNCOCA"); /* 90 degree hard pulse on CA, null at CO 118ppm away */ pwca90a = ( (int) ( (10*47.5*600.0/sfreq) + 0.5) )*0.1e-6; rfca90a = (compC*4095.0*pwC)/pwca90a; rfca90a = (int) (rfca90a + 0.5); /* 180 degree hard pulse on CA, null at CO 118ppm away */ pwca180a = ( (int) ( (10*42.5*600.0/sfreq) + 0.5) )*0.1e-6; rfca180a = (compC*4095.0*pwC*2.0)/pwca180a; rfca180a = (int) (rfca180a + 0.5); /* 180 degree hard pulse on CA, null at CO 118ppm away */ pwca180b = ( (int) ( (10*46*600.0/sfreq) + 0.5) )*0.1e-6; rfca180b = (compC*4095.0*pwC*2.0)/pwca180b; rfca180b = (int) (rfca180b + 0.5); /* 180 degree seduce1 off-resonance pulse on CO, null at CA 118ppm away*/ pwco180a = ( (int) ( (10*200*600.0/sfreq) + 0.5) )*0.1e-6; rfco180a = (compC*4095.0*2.0*pwC*2.16)/pwco180a; /* needs 2.16 times more */ rfco180a = (int) (rfco180a + 0.5); /* power than a square pulse */ strcpy(spco180a,"seduce1_180co_HBCBHACACONH"); /* 180 degree hard pulse on CO, null at Ca 118ppm away */ pwco180b = ( (int) ( (10*103.2*600.0/sfreq) + 0.5) )*0.1e-6; rfco180b = (compC*4095.0*pwC*2.0)/pwco180b; rfco180b = (int) (rfco180b + 0.5); strcpy(spco180b,"hard_180co_HACACONH"); /* 90 degree seduce pulse on CO at CO*/ pwco90c = 200.0e-6*600.0/sfreq; rfco90c = (compC*4095.0*pwC*2.16)/pwco90c; rfco90c = (int)(rfco90c + 0.5); strcpy(spco90c,"seduce1_onres_200us1"); /* 180 degree seduce pulse on CO at CO*/ pwco180c = 200.0e-6*600.0/sfreq; rfco180c = (compC*4095.0*pwC*2.0*2.16)/pwco180c; rfco180c = (int)(rfco180c + 0.5); strcpy(spco180c,"seduce1_onres_200us1"); /* power level and pulse time for WALTZ 1H decoupling */ pwmlev = 1/(4.0 * 6000*sfrq/600) ; /* 6.0 kHz rf */ tpwrml = tpwr - 20.0*log10(pwmlev/(pw)); tpwrml = (int) (tpwrml + 0.5); /* 90 degree seduce1 on-resonance pulse on CA, null at CO 118ppm away, for cadecseq */ pwcadec = ( (int) ( (10*252*600.0/sfreq) + 0.5) )*0.1e-6; rfcadec = (compC*4095.0*pwC*2.16)/pwcadec; /* needs 2.16 times more */ rfcadec = (int) (rfcadec + 0.5); /* power than a square pulse */ strcpy(cadecseq,"seduce1_cadec_HACACONH"); /* 90 degree seduce1 pulse on H2O */ pw_sl=1.455e-3*600/sfreq; tpwrsl = tpwr - 20.0*log10(pw_sl/(pw*2.16)); /* needs 2.16 times more */ tpwrsl = (int) (tpwrsl + 0.5); /* power than a square pulse */ strcpy(shp_sl,"seduce1"); /* semi constant time increments calculation */ tau1ai=scale_hahb*1.0/(2.0*sw1); lambda=1.0-(taua - gt2 + 4*pwC -1.0e-4)/(ni*tau1ai); if (lambda < 0) lambda=1.0; tau1ci=(1.0-lambda)*tau1ai; tau1bi=tau1ai-tau1ci; if (ix==1) printf(" tau1ai= %f tau1bi= %f tau1ci= %f lambda= %f \n", tau1ai,tau1bi,tau1ci,lambda); /* CHECK VALIDITY OF PARAMETER RANGES */ if ( TROSY[A]=='y' && dm2[D] == 'y' ) {printf("Choose either TROSY='n' or dm2='n' ! "); abort(1);} if ( TROSY[A]!='y' && dm2[D] == 'n') { printf("Choose either TROSY='y' or dm2='y' ! "); abort(1);} if ( dm3[A] == 'y' || dm3[C] == 'y' ) { printf("incorrect dec3 decoupler flags! Should be 'nyn' or 'nnn' "); abort(1);} if( 0.5*ni*1/(sw1) > BigTC - gt10 ) { printf(" ni is too big\n"); abort(1); } if( ni2*1/(sw2) > 2.0*BigTN ) { printf(" ni2 is too big\n"); abort(1); } if((dm[A] == 'y' || dm[B] == 'y' || dm[C] == 'y' || dm[D] == 'y' )) { printf("incorrect dec1 decoupler flags! "); abort(1); } if((dm2[A] == 'y' || dm2[B] == 'y' || dm2[C] == 'y')) { printf("incorrect dec2 decoupler flags! Should be 'nnny' "); abort(1); } if( pwmlev < 20.0e-6 ) { printf("too much power during proton mlev sequence\n"); abort(1); } if( tpwrml > 53 ) { printf("tpwrml is too high\n"); abort(1); } if( tpwrsl > 25 ) { printf("tpwrsl is too high\n"); abort(1); } if( tsatpwr > 6 ) { printf("TSATPWR too large !!! "); abort(1); } if( dpwr > 47 ) { printf("don't fry the probe, DPWR too large! "); abort(1); } if( dpwr2 > 50 ) { printf("don't fry the probe, DPWR2 too large! "); abort(1); } if( pwNlvl > 62 ) { printf("don't fry the probe, pwNlvl too large! "); abort(1); } if( pw > 200.0e-6 ) { printf("dont fry the probe, pw too high ! "); abort(1); } if( pwmlev > 200.0e-6 ) { printf("dont fry the probe, pwmlev too high ! "); abort(1); } if( pwN > 200.0e-6 ) { printf("dont fry the probe, pwN too high ! "); abort(1); } if( pwca90a > 200.0e-6 ) { printf("dont fry the probe, pwca90a too high ! "); abort(1); } if( pwca180a > 200.0e-6 ) { printf("dont fry the probe, pwca180a too high ! "); abort(1); } if( pwca180b > 200.0e-6 ) { printf("dont fry the probe, pwca180b too high ! "); abort(1); } if( pwcadec > 500.0e-6 || pwcadec < 200.0e-6 ) { printf("pwcadec outside reasonable limits: < 500e-6 > 200e-6 \n"); abort(1); } if( compC > 1.0 ) { printf("dont fry the probe, compC too high ! "); abort(1); } if( pwC>40.0 || (pwC>30.0 && pwClvl > 57) || (pwC > 20 && pwClvl > 60) ) { printf("dont fry the probe, pwC too high ! "); abort(1); } if( gt1 > 15e-3 || gt2 > 15e-3 || gt4 >=15e-3 || gt5 > 15e-3 || gt6 >= 15e-3 || gt7 >= 15e-3 || gt9 >= 15e-3 || gt10 >= 15e-3) { printf("all gti values must be < 15e-3\n"); abort(1); } if(gt10 > 250.0e-6) { printf("gt10 must be 250e-6\n"); abort(1); } /* Phase incrementation for hypercomplex 2D data */ GFTphase = (int) (getval("GFTphase") + 0.5); if(GFTphase==2) tsadd(t1,1,4); if(flgab[A] == 'b') tsadd(t1,2,4); if (TROSY[A]=='y') {tsadd(t11, 3, 4);if (phase2 == 1) tsadd(t10,2,4);} if (phase == 2) tsadd(t3,1,4); if (phase2 == 2) { tsadd(t11,2,4); icosel = 1; } else icosel = -1; /* Set up f1180 tau1 = t1 */ tau1 = d2; if(f1180[A] == 'y') { tau1 += ( 1.0 / (2.0*sw1) ); if(tau1 < 0.2e-6) tau1 = 0.0; } tau1 = tau1/2.0; /* Set up f2180 tau2 = t2 */ tau2 = d3; if(f2180[A] == 'y') { tau2 += ( 1.0 / (2.0*sw2) ); if(tau2 < 0.2e-6) tau2 = 0.0; } tau2 = tau2/2.0; /* 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(t10,2,4); } if( ix == 1) d3_init = d3 ; t2_counter = (int) ( (d3-d3_init)*sw2 + 0.5 ); if(t2_counter % 2) { tsadd(t8,2,4); tsadd(t10,2,4); } /* BEGIN ACTUAL PULSE SEQUENCE */ status(C); offset(tof,TODEV); /* initially pulse 1h at 0 ppm */ offset(dofcacb,DODEV); decpower(pwClvl); decpwrf(rf0); rlpower(pwNlvl,DO2DEV); /* Set Dec2 power for 15N hard pulses */ /* Presaturation Period */ if (fsat[A] == 'y') { offset(tof,TODEV); rlpower(tsatpwr,TODEV); /* Set transmitter power for 1H presaturation */ delay(2.0e-5); rgpulse(d1,zero,rof1,rof1); rlpower(tpwr,TODEV); /* Set transmitter power for hard 1H pulses */ delay(2.0e-5); offset(projtof,TODEV); if(fscuba[A] == 'y') { delay(2.2e-2); rgpulse(pw,zero,2.0e-6,0.0); rgpulse(2*pw,one,2.0e-6,0.0); rgpulse(pw,zero,2.0e-6,0.0); delay(2.2e-2); } } else delay(d1); if (dm3[B] == 'y') lk_hold(); rlpower(tpwr,TODEV); /* Set transmitter power for hard 1H pulses */ txphase(zero); delay(1.0e-5); /* Begin Pulses */ rcvroff(); delay(20.0e-6); dec2rgpulse(pwN,zero,0.0,0.0); delay(20.0e-6); if(ssmag[A] == 'n') decrgpulse(pwC,zero,0.0,0.0); delay(0.2e-6); rgradient('z',gzlvl1); delay(gt1); rgradient('z',0.0); delay(650.0e-6); offset(projtof,TODEV); delay(10.0e-6); rgpulse(pw,t1,0.0,0.0); /* 90 deg 1H pulse */ decphase(t14); delay(0.2e-6); rgradient('z',gzlvl2); delay(gt2); rgradient('z',0.0); delay(2.0e-6); decpwrf(rf0); delay(taua + t1_counter*tau1ai - POWER_DELAY - gt2 - 2.2e-6); /* taua <= 1/4JCH */ decrgpulse(pwC,t14,0.0,0.0); decrgpulse(2*pwC,t15,0.0,0.0); decrgpulse(pwC,t14,0.0,0.0); delay(1.0e-6 + t1_counter*tau1bi); rgpulse(2*pw,zero,0.0,0.0); delay(0.2e-6); rgradient('z',gzlvl2); delay(gt2); rgradient('z',0.0); delay(2.0e-6); txphase(t2); decphase(t3); delay(taua - t1_counter*tau1ci - POWER_DELAY - gt2 - 2.2e-6 +1.0e-6 + 4*pwC); rgpulse(pw,t2,0.0,0.0); offset(tof,TODEV); delay(0.2e-6); rgradient('z',gzlvl1); delay(gt1); rgradient('z',0.0); delay(1.0e-3); if(dm3[B] == 'y') /*optional 2H decoupling on */ {dec3unblank(); setstatus(DEC3ch, TRUE, 'w', FALSE, dmf3);} decrgpulse(pwC,t3,2.0e-6,0.0); delay(tau1); decpwrf(rfco180a); decshaped_pulse(spco180a,pwco180a,zero,4.0e-6,0.0); dec2rgpulse(2*pwN,zero,0.0,0.0); decpwrf(rfca180a); if(dm3[B] == 'y') /*optional 2H decoupling off */ {dec3blank(); setstatus(DEC3ch, FALSE, 'w', FALSE, dmf3); dec3blank();} delay(2.0e-6); rgradient('z',gzlvl10); delay(gt10); rgradient('z',0.0); delay(92.0e-6); if(dm3[B] == 'y') /*optional 2H decoupling on */ {dec3unblank(); setstatus(DEC3ch, TRUE, 'w', FALSE, dmf3);} delay(taub - gt10 - 94.0e-6 - 2*POWER_DELAY); delay(0.2e-6); rgpulse(2*pw,zero,0.0,0.0); decphase(t4); delay(BigTC - taub); decrgpulse(pwca180a,t4,0.0,0.0); if(dm3[B] == 'y') /*optional 2H decoupling off */ {dec3blank(); setstatus(DEC3ch, FALSE, 'w', FALSE, dmf3); dec3blank();} delay(2.0e-6); rgradient('z',gzlvl10); delay(gt10); rgradient('z',0.0); delay(92.0e-6); if(dm3[B] == 'y') /*optional 2H decoupling on */ {dec3unblank(); setstatus(DEC3ch, TRUE, 'w', FALSE, dmf3);} delay(BigTC - tau1 + 2*pwN + 2*pw - 2*POWER_DELAY - gt10 - 94.0e-6 -(pwca90a - pwC)*2/3.14); delay(0.2e-6); decpwrf(rfco180a); decshaped_pulse(spco180a,pwco180a,zero,4.0e-6,0.0); /* bloch seigert */ decpwrf(rfca90a); decrgpulse(pwca90a,zero,0.0,0.0); txphase(one); delay(2.0e-6); /* H decoupling on */ rlpower(tpwrml,TODEV); obsprgon("waltz16",pwmlev,90.0); xmtron(); /* TURN ME OFF DONT FORGET */ /* H decoupling on */ decpwrf(rfco180a); decshaped_pulse(spco180a,pwco180a,zero,4.0e-6,0.0); /* bloch seigert */ decphase(t5); delay(tauc - 3*POWER_DELAY - PRG_START_DELAY); decpwrf(rfca180a); decrgpulse(pwca180a,t5,0.0,0.0); decpwrf(rfco180a); decshaped_pulse(spco180a,pwco180a,zero,4.0e-6,0.0); decphase(zero); decpwrf(rfca90a); delay(tauc - 2*POWER_DELAY); decrgpulse(pwca90a,zero,0.0,0.0); if(dm3[B] == 'y') /*optional 2H decoupling off */ {dec3blank(); setstatus(DEC3ch, FALSE, 'w', FALSE, dmf3); dec3blank();} /* H decoupling off */ xmtroff(); obsprgoff(); /* H decoupling off */ rgpulse(pwmlev,two,2.0e-6,0.0); delay(0.2e-6); offset(dof,DODEV); decpwrf(rfco180b); delay(0.2e-6); rgradient('z',gzlvl4); delay(gt4); rgradient('z',0.0); delay(50.0e-6); rgpulse(pwmlev,zero,2.0e-6,0.0); txphase(one); delay(2.0e-6); /* H decoupling on */ rlpower(tpwrml,TODEV); obsprgon("waltz16",pwmlev,90.0); xmtron(); /* H decoupling on */ offset(dofco,DODEV); decphase(t6); decpwrf(rfco90c); delay(2.0e-6); /*******/ decshaped_pulse(spco90c,pwco90c,t6,0.0,0.0); decphase(zero); delay(taud - POWER_DELAY - 4.0e-6); decpwrf(rfca180d); decshaped_pulse(spca180d,pwca180d,zero,4.0e-6,0.0); decpwrf(rfco180c); delay(taue - taud - POWER_DELAY + 2*pwN ); decshaped_pulse(spco180c,pwco180c,zero,0.0,0.0); dec2rgpulse(2*pwN,zero,0.0,0.0); delay(taue - POWER_DELAY - 4.0e-6); decpwrf(rfca180d); decshaped_pulse(spca180d,pwca180d,two,4.0e-6,0.0); decpwrf(rfco90c); decshaped_pulse(spco90c,pwco90c,t7,0.0,0.0); /**********************/ /* H decoupling off */ xmtroff(); obsprgoff(); /* H decoupling off */ rgpulse(pwmlev,two,2.0e-6,0.0); offset(dof,DODEV); delay(0.2e-6); rgradient('z',gzlvl5); delay(gt5); rgradient('z',0.0); delay(50.0e-6); if (TROSY[A]!='y') {rgpulse(pwmlev,zero,2.0e-6,0.0); txphase(one); delay(2.0e-6); rlpower(tpwrml,TODEV); obsprgon("waltz16",pwmlev,90.0); xmtron();} /* N15 evolution */ dec2rgpulse(pwN,t8,2.0e-6,0.0); dec2phase(t9); decphase(zero); /* seduce on */ decpwrf(rfcadec); decprgon(cadecseq,pwcadec,dressed); decon(); /* seduce on */ delay(BigTN - tau2 + WFG_START_DELAY + WFG_STOP_DELAY + pwco180b); /* seduce off */ decoff(); decprgoff(); decpwrf(rfco180b); /* seduce off */ dec2rgpulse(2*pwN,t9,0.0,0.0); decshaped_pulse(spco180b,pwco180b,zero,0.0,0.0); dec2phase(t11); /* seduce on */ decpwrf(rfcadec); decprgon(cadecseq,pwcadec,dressed); decon(); /* seduce on */ if (TROSY[A]!='y') {delay(BigTN + tau2 - 5.5e-3 - POWER_DELAY - PRG_STOP_DELAY -300*pw -pwmlev -2.0e-6); /* H decoupling off */ xmtroff(); obsprgoff(); /* H decoupling off */ rgpulse(pwmlev,two,2.0e-6,0.0); rlpower(tpwr,TODEV); rgpulse(200*pw,zero,2.0e-6,0.0); rgpulse(100*pw,one,2.0e-6,0.0); delay(2.5e-3); /* seduce off */ decoff(); decprgoff(); decpwrf(rfco180b); /* seduce off */ delay(0.2e-6); rgradient('z',icosel*gzlvl6); delay(gt6); rgradient('z',0.0); delay(2.0e-6); txphase(zero); dec2phase(t11); delay(3.0e-3 - gt6 - 2.2e-6 - 2.0*GRADIENT_DELAY); /* pep */ sim3pulse(pw,0.0,pwN,zero,zero,t11,0.0,0.0); delay(0.2e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(2.0e-6); dec2phase(zero); delay(tauf - gt7 - 2.2e-6); sim3pulse(2*pw,0.0,2*pwN,zero,zero,zero,0.0,0.0); delay(0.2e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(2.0e-6); txphase(t12); dec2phase(t13); delay(tauf - gt7 - 2.2e-6); sim3pulse(pw,0.0,pwN,t12,zero,t13,0.0,0.0); delay(0.2e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(2.0e-6); txphase(zero); dec2phase(zero); delay(tauf - gt7 - 2.2e-6); sim3pulse(2*pw,0.0,2*pwN,zero,zero,zero,0.0,0.0); delay(0.2e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(2.0e-6); txphase(zero); delay(tauf - gt7 - 2.2e-6); rgpulse(pw,zero,0.0,0.0); txphase(zero); delay(BigT1); rgpulse(2*pw,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl9); delay(gt9); rgradient('z',0.0); delay(2.0e-6); delay(BigT1 - gt9 - POWER_DELAY - 4.0e-6 - 2*GRADIENT_DELAY); rlpower(dpwr2,DO2DEV); /* set power for 15N decoupling */ } else {delay(BigTN + tau2 - 0.5e-4 - pw_sl-gt6-9.0e-5); /* seduce off */ decoff(); decprgoff(); decpwrf(rfco180b); /* seduce off */ zgradpulse(icosel*gzlvl6, gt6); /* 2.0*GRADIENT_DELAY */ delay(9.0e-5); obspower(tpwrsl); txphase(two); shaped_pulse(shp_sl, pw_sl, two, 0.0, 0.0); obspower(tpwr); delay(0.5e-4 - 2.0*POWER_DELAY); /* ST2 */ rgpulse(pw, t11, 0.0, 0.0); zgradpulse(gzlvl7,gt7); dec2phase(zero); delay(tauf - gt7 -pwN -0.5*pw); sim3pulse(2.0*pw, 0.0, 2.0*pwN, zero, zero, zero, 0.0, 0.0); zgradpulse(gzlvl7,gt7); dec2phase(t11); delay(tauf - gt7 -1.5*pwN); sim3pulse(pw, 0.0, pwN, zero, zero, t11, 0.0, 0.0); txphase(two); dec2phase(zero); zgradpulse(gzlvl7, gt7); delay(tauf - 1.5*pwN - gt7 -pw_sl - 2.0*POWER_DELAY -5.0e-6); obspower(tpwrsl); txphase(zero); shaped_pulse(shp_sl, pw_sl, two, 0.0, 5.0e-6); obspower(tpwr); sim3pulse(2.0*pw, 0.0, 2.0*pwN, zero, zero, zero, 0.0, 0.0); obspower(tpwrsl); txphase(zero); shaped_pulse(shp_sl, pw_sl, two, 5.0e-6, 0.0); obspower(tpwr); zgradpulse(gzlvl7, gt7); delay(tauf - 1.5*pwN - gt7 -pw_sl - 2.0*POWER_DELAY -5.0e-6); dec2rgpulse(pwN, zero, 0.0, 0.0); delay(gt9+9.0e-5); rgpulse(2.0*pw,zero,0.0,0.0); zgradpulse(gzlvl9,gt9); dec2power(dpwr2); delay(9.0e-5); } /* BEGIN ACQUISITION */ status(D); if (dm3[B]=='y') lk_sample(); setreceiver(t10); } /************************************************************************************** The GFT method and experiments are protected by patents owned by 'The Research Foundation of the State University of New York' To obtain license to the patent rights for academic and/or commercial use (direct or indirect) please contact: Office of Science, Technology Transfer and Economic Outreach University at Buffalo 1576 Sweet Home Rd. Amherst, New York 14228 Tel: 716-645-5500 Fax: 716-636-5921 prv-stor@buffalo.edu US patent No. 6,831,459: Claim 1 out of 56 What is claimed: 1. A method of conducting a (N,N-K) dimensional (D) G-matrix Fourier transformation (GFT) nuclear magnetic resonance (NMR) experiment, wherein N is the dimensionality of an N-dimensional (ND) Fourier transformation (FT) NMR experiment and K is the desired reduction in dimensionality relative to N, said method comprising: providing a sample; applying radiofrequency pulses for the ND FT NMR experiment to the sample; selecting m indirect chemical shift evolution periods of the ND FT NMR experiment, wherein m equals K+1; jointly sampling the m indirect chemical shift evolution periods; independently cosine and sine modulating NMR signals detected in a direct dimension to generate (N-K)D basic NMR spectra comprising frequency domain signals with 2^K chemical shift multiplet components, thereby enabling phase-sensitive sampling of all jointly sampled m indirect chemical shift evolution periods; and transforming the (N-K) D basic NMR spectra into (N-K) D phase-sensitively edited basic NMR spectra, wherein the 2^K chemical shift multiplet components of the (N-K) D basic NMR spectra are edited to yield (N-K) D phase-sensitively edited basic NMR spectra having individual chemical shift multiplet components. **************************************************************************************/