/* noesyc_C_chirp_purge_lek_v3.c This pulse sequence will allow one to perform the following experiment: 3D noesy from unlabeled to labeled (13C) in D2O. Note the corresponding expt. for water samples is noesy_NC_chirp_purge_lek_500.c purging and INEPT transfer is achieved by carbon CHIRP inversion pulses well-suited for D2O-SAMPLES!! F1 1H F2 13C and 15N F3(acq) 1H NOTE: cnoesy_3c_sed_pfg(1).c 3D C13 edited NOESYs with separation via the carbon of the origination site. (D2O experiments) Uses three channels: 1) 1H - carrier @ water 2) 13C - carrier @ 67 ppm 3) 15N - carrier @ 119ppm [centre of amide N] Set dm = 'nnny', dmm = 'cccp' [13C decoupling during acquisition]. Set dm2 = 'nnnn', dmm2 = 'cccc' Must set phase = 1,2 and phase2 = 1,2 for States-TPPI acquisition in t1 [H] and t2 [C and N]. Flags fsat 'y' for presaturation of H2O fscuba 'y' to apply scuba pulse after presaturation of H2O mess_flg 'y' for 1H (H2O) purging pulse before relaxation delay f1180 'y' for 180deg linear phase correction in F1 otherwise 0deg linear phase correction f2180 'y' for 180deg linear phase correction in F2 c180_flg 'y' when recording F1,F3 2D. Standard Settings: fsat='n', fscuba='n', mess_flg='y', f1180='y', f2180='y' c180_flg='n' Set f1180 = 'y' and f2180 = 'y' for (-90,180) in F1 and (-90,180) in F2. Note: Zero order phase correct may not be exactly -90 in F2 due to seduce. Modified by L.E. Kay on Aug. 15, 1994 from noesyc_pfg_h2o_NC+.c Modified by L. E. Kay on March 6, 1995 to include 15N purging Modified by L.E.Kay on April 2, 1996 to include additional N purging Modified by R.Konrat on May, 1996 to include CHIRP pulses, (improves INEPT transfer & B1-sensitivity) NOTE: CHIRP-inversion is achieved using the decoupler (decprgon) PROGRAM: apod_chirp_dec creates the necessary .DEC-shape Please check with the paper for details concerning the construction of the pulses for your specific field Adiabatic pulses are used for both purging and the INEPT transfers from 1H ----> 13C and from 13C ----> 1H. Example: For Purging for labeled protein/unlabeled peptide Carbon carrier is placed at 67 ppm throughout the expt. The center of the adiapatic pulse (purging) is at 0 ppm and covers a sweep of 60 KHz (centered about 0 ppm). I recommend a taua delay of 2.1ms and a sweep rate of 2.980 *107 Hz/s and a adiabatic pulse width of 2.013 ms. We have also optimized a taua of 2.0 ms and a sweep rate of 3.729*107Hz/s with a width of 1.609 ms. (600 MHz) Note that different rates are needed for different fields. apod_chirp_dec 2013 1000 -40090.0 60000.0 20 0 1 will generate a pulse of 2.013 ms with 1000 steps starting -40090 Hz from 67 ppm (ie, 30 KHz downfield of 0 ppm) with a sweep of 60 KHz and the first 20% and last 20% of the pulse is multiplied by a sine funtion. For the adiabatic pulses used for the INEPT transfers we use pulses of duration 500 us and a 60 KHz sweep centered at 0 ppm for protein/ peptide work. Note: Optmized taua/pw_chirp and rates must be employed. Use a 5 KHz field for chirp Modified by L.E.Kay, based on noesy_NC+_chirp_purge_rk.c on Sept. 6, 96 Modified by L. E. Kay on Nov 27, 1996 to allow for fast chirps for the inept transfers Modified by C. Zwahlen & S. Vincent on March 18, 1997, to allow two two different chirps for purging */ #include /* #define PI 3.1416 */ static int phi1[8] = {0,0,0,0,2,2,2,2}, phi2[16] = {0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2}, rec[16] = {0,2,1,3,2,0,3,1,2,0,3,1,0,2,1,3}, phi5[4] = {0,0,1,1}, phi6[2] = {0,2}, phi7[4] = {0,0,2,2}; 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 */ c180_flg[MAXSTR], codecseq[MAXSTR], mess_flg[MAXSTR], ch_shp1[MAXSTR], /* shape for the 1st purge CHIRP */ ch_shp2[MAXSTR], /* shape for the 2nd purge CHIRP */ chshpi[MAXSTR]; /* shape for the INEPT CHIRPs */ int phase, phase2, t1_counter, /* used for states tppi in t1 */ t2_counter; /* used for states tppi in t2 */ double tau1, /* t1 delay */ tau2, /* t2 delay */ mix, /* mixing time in seconds */ pwc, /* PW90 for c nucleus @ dhpwr */ pwcodec, /* PW for C' nucleus @ dpwrco seduce dec */ tsatpwr, /* low level 1H trans.power for presat */ dhpwr, /* power level for 13C pulses on dec1 */ dpwrco, /* power level for C' seduce decoupling */ dpwr2, /* low dec2 pwr for 15N decoupling */ sw1, /* sweep width in f1 */ sw2, /* sweep width in f2 */ tofps, /* tof for presat */ dressed, /* decoupler resolution for seduce decoupling */ tpwrmess, /* power level for Messerlie purge */ dly_pg1, /* duration of first part of purge */ dly_wt, taua1, /* Delay for the first purge CHIRP */ taua2, /* Delay for the second purge CHIRP */ pwchirp1, /* duration of the 1st purge CHIRP */ pwchirp2, /* duration of the 2nd purge CHIRP */ d_me1, /* time difference between start of the sweep and the excitation of the methyl region automatically calculated by the program necessary parameter diff (see below) */ d_me2, /* time difference between start of the sweep and the excitation of the methyl region automatically calculated by the program necessary parameter diff (see below) */ dchrp1, /* power for the 1st purge CHIRP pulse, only lower limit is important (see above!) */ dchrp2, /* power for the 2nd purge CHIRP pulse, only lower limit is important (see above!) */ dmfchp1, /* dmf (1/90) for the 1st purge CHIRP pulse dmfchp1 = 1/time_step of chirp-pulse [time_step = pwchirp1/no. of points in the .DEC-shape] */ dmfchp2, /* dmf (1/90) for the 1st purge CHIRP pulse dmfchp2 = 1/time_step of chirp-pulse [time_step = pwchirp2/no. of points in the .DEC-shape] */ dres_chp, /* dres for the chirp pulse (must be set to 90, otherwise timing errors! ) */ diff1, /* shift differences between methyl region and start of sweep */ diff2, /* shift differences between methyl region and start of sweep */ rate1, /* sweep rate of the 1st purge CHIRP pulse frequency sweep/pwchirp1 */ rate2, /* sweep rate of the 2nd purge CHIRP pulse frequency sweep/pwchirp2 */ dchrpi, dmfchpi, pwchirpi, /* INEPT CHIRP duration */ ratei, diffi, tauf, d_mei, gt0, gt1, gt2, gt3, gt4, gt5, gt8, gt9, gt10, gt11, gzlvl0, gzlvl1, gzlvl2, gzlvl3, gzlvl4, gzlvl5, gzlvl8, gzlvl9, gzlvl10, gzlvl11; /* variables commented out are already defined by the system */ /* LOAD VARIABLES */ getstr("fsat",fsat); getstr("f1180",f1180); getstr("f2180",f2180); getstr("fscuba",fscuba); getstr("codecseq",codecseq); getstr("c180_flg",c180_flg); getstr("mess_flg",mess_flg); getstr("chshpi",chshpi); tofps = getval("tofps"); mix = getval("mix"); pwc = getval("pwc"); pwcodec = getval("pwcodec"); tpwr = getval("tpwr"); tsatpwr = getval("tsatpwr"); dhpwr = getval("dhpwr"); dpwr = getval("dpwr"); dpwrco = getval("dpwrco"); dpwr2 = getval("dpwr2"); phase = (int) ( getval("phase") + 0.5); phase2 = (int) ( getval("phase2") + 0.5); sw1 = getval("sw1"); sw2 = getval("sw2"); dressed = getval("dressed"); tpwrmess = getval("tpwrmess"); dly_pg1 = getval("dly_pg1"); dly_wt = getval("dly_wt"); taua1 = getval("taua1"); taua2 = getval("taua2"); getstr("ch_shp1",ch_shp1); getstr("ch_shp2",ch_shp2); pwchirp1 = getval("pwchirp1"); pwchirp2 = getval("pwchirp2"); rate1 = getval("rate1"); rate2 = getval("rate2"); diff1 = getval("diff1"); diff2 = getval("diff2"); dchrp1 = getval("dchrp1"); dchrp2 = getval("dchrp2"); dmfchp1 = getval("dmfchp1"); dmfchp2 = getval("dmfchp2"); dres_chp = getval("dres_chp"); dchrpi = getval("dchrpi"); diffi = getval("diffi"); ratei = getval("ratei"); dmfchpi = getval("dmfchpi"); pwchirpi = getval("pwchirpi"); tauf = getval("tauf"); gt0 = getval("gt0"); gt1 = getval("gt1"); gt2 = getval("gt2"); gt3 = getval("gt3"); gt4 = getval("gt4"); gt5 = getval("gt5"); gt8 = getval("gt8"); gt9 = getval("gt9"); gt10 = getval("gt10"); gt11 = getval("gt11"); gzlvl0 = getval("gzlvl0"); gzlvl1 = getval("gzlvl1"); gzlvl2 = getval("gzlvl2"); gzlvl3 = getval("gzlvl3"); gzlvl4 = getval("gzlvl4"); gzlvl5 = getval("gzlvl5"); gzlvl8 = getval("gzlvl8"); gzlvl9 = getval("gzlvl9"); gzlvl10 = getval("gzlvl10"); gzlvl11 = getval("gzlvl11"); /* LOAD PHASE TABLE */ settable(t1,8,phi1); settable(t2,16,phi2); settable(t4,16,rec); settable(t5,4,phi5); settable(t6,2,phi6); settable(t7,4,phi7); /* CHECK VALIDITY OF PARAMETER RANGES */ 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! Should be 'nnn' "); abort(1); } if( tsatpwr > 6 ) { printf("TSATPWR too large !!! "); abort(1); } if( dpwr > 49 ) { printf("don't fry the probe, DPWR too large! "); abort(1); } if( dpwrco > 47 ) { printf("don't fry the probe, dpwrco too large! "); abort(1); } if( dpwr2 > 46 ) { printf("don't fry the probe, DPWR2 too large! "); abort(1); } if( pw > 200.0e-6 ) { printf("dont fry the probe, pw too high ! "); abort(1); } if( pwc > 200.0e-6 ) { printf("dont fry the probe, pwc too high ! "); abort(1); } if( pwcodec < 300.0e-6 ) { printf("dont fry the probe, pwcodec too high ! "); abort(1); } if ( tpwrmess > 56 ) { printf("dont fry the probe, tpwrmess too high ! "); abort(1); } if ( dly_pg1 > 0.010) { printf("dont fry the probe, dly_pg1 too long ! "); abort(1); } if(dmf2 > 4000) { printf("15N decoupling pulses must be less than 250e-6\n"); abort(1); } if( gt0 > 15e-3 || gt1 > 15e-3 || gt2 > 15e-3 || gt3 > 15e-3 || gt4 > 15e-3 || gt5 > 15e-3 || gt8 > 15e-3 || gt9 > 15e-3 || gt10 > 15e-3 || gt11 > 15e-3 ) { printf("gti values < 15e-3\n"); abort(1); } if( gzlvl3*gzlvl4 > 0.0 ) { printf("gt3 and gt4 must be of opposite sign \n"); printf("for optimal water suppression\n"); abort(1); } if( dchrp1 > 48 ) { printf("don't fry the probe, dchrp1 too large! "); abort(1); } if( dchrp2 > 48 ) { printf("don't fry the probe, dchrp2 too large! "); abort(1); } if( pwchirp1 > 10.e-03 ) { printf("don't fry the probe, pwchirp1 too large! "); abort(1); } if( pwchirp2 > 10.e-03 ) { printf("don't fry the probe, pwchirp2 too large! "); abort(1); } d_me1 = diff1/rate1 ; d_me2 = diff2/rate2 ; if( d_me1 > 10.e-03 ) { printf("don't fry the probe, d_me1 too large \n"); printf(" (must be less than 10 msec)! "); abort(1); } if( d_me2 > 10.e-03 ) { printf("don't fry the probe, d_me2 too large \n"); printf(" (must be less than 10 msec)! "); abort(1); } if( d_me1 > pwchirp1 ) { printf("impossible; d_me1 > pwchirp1 ! "); abort(1); } if( d_me2 > pwchirp2 ) { printf("impossible; d_me2 > pwchirp2 ! "); abort(1); } if( dchrpi > 54 ) { printf("dont fry the probe, dchrpi too large\n"); abort(1); } if(pwchirpi > 10.0e-3) { printf("don't fry the probe, pwchirpi too large! "); abort(1); } d_mei = diffi/ratei; /* Phase incrementation for hypercomplex 2D data */ if (phase == 2) tsadd(t1,1,4); if (phase2 == 2) tsadd(t2,1,4); /* Set up f1180 tau1 = t1 */ tau1 = d2; if(f1180[A] == 'y') { tau1 += ( 1.0 / (2.0*sw1) - 4.0/PI*pw - 2.0e-6 ); } else tau1 = tau1 - 4.0/PI*pw - 2.0e-6; if(tau1 < 0.2e-6) tau1 = 2.0e-7; /* Set up f2180 tau2 = t2 */ tau2 = d3; if(f2180[A] == 'y') { tau2 += ( 1.0 / (2.0*sw2) - (4.0/PI)*pwc - 2.0*pw - PRG_START_DELAY - PRG_STOP_DELAY - 2.0*POWER_DELAY - 4.0e-6); } else tau2 = tau2 - ((4.0/PI)*pwc + 2.0*pw + PRG_START_DELAY + PRG_STOP_DELAY + 2.0*POWER_DELAY + 4.0e-6); if(tau2 < 0.2e-6) tau2 = 4.0e-7; 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(t1,2,4); tsadd(t4,2,4); } if( ix == 1) d3_init = d3 ; t2_counter = (int) ( (d3-d3_init)*sw2 + 0.5 ); if(t2_counter % 2) { tsadd(t2,2,4); tsadd(t4,2,4); } /* BEGIN ACTUAL PULSE SEQUENCE */ status(A); delay(5.0e-6); rlpower(tsatpwr,TODEV); /* Set transmitter power for 1H presaturation */ rlpower(dhpwr,DODEV); /* Set Dec1 power for hard 13C pulses */ rlpower(dpwr2,DO2DEV); /* Set Dec2 to low power for 15N dec */ delay(5.0e-6); /* Presaturation Period */ status(B); if (mess_flg[A] == 'y') { offset(tofps,TODEV); rlpower(tpwrmess,TODEV); txphase(zero); rgpulse(dly_pg1,zero,2.0e-6,2.0e-6); txphase(one); rgpulse(dly_pg1/1.62,one,2.0e-6,2.0e-6); rlpower(tsatpwr,TODEV); } if (fsat[0] == 'y') { offset(tofps,TODEV); delay(2.0e-5); rgpulse(d1,zero,2.0e-6,2.0e-6); /* presat */ rlpower(tpwr,TODEV); /* Set transmitter power for hard 1H pulses */ delay(2.0e-5); if(fscuba[0] == '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); } rlpower(tpwr,TODEV); /* Set transmitter power for hard 1H pulses */ offset(tof,TODEV); decphase(zero); dec2phase(zero); /* Begin Pulses */ status(C); rcvroff(); delay(10.0e-6); rgpulse(pw,t6,4.0e-6,0.0); /* 90 deg 1H pulse */ txphase(zero); decphase(zero); delay(2.0e-6); rgradient('z',gzlvl8); delay(gt8); rgradient('z',0.0); delay(50.0e-6); delay(taua1 - gt8 - 52.0e-6 - POWER_DELAY - 4.0e-6 - PRG_START_DELAY - d_me1); /* 1st purge CHIRP inversion on */ rlpower(dchrp1,DODEV); /* Set power for 1st purge CHIRP inversion */ delay(4.0e-6); decprgon(ch_shp1,1.0/dmfchp1,dres_chp); decon(); delay(d_me1); rgpulse(2*pw,zero,0.0,0.0); /* 1H inversion pulse */ delay(pwchirp1 - d_me1 - 2*pw); decoff(); decprgoff(); /* chirp inversion off */ delay(2.0e-6); rgradient('z',gzlvl8); delay(gt8); rgradient('z',0.0); delay(50.0e-6); delay(taua1 + 2*pw - (pwchirp1 - d_me1) - PRG_STOP_DELAY - gt8 - 52.0e-6); rgpulse(pw,zero,0.0,0.0); txphase(t7); delay(2.0e-6); rgradient('z',gzlvl9); delay(gt9); rgradient('z',0.0); delay(250.0e-6); rgpulse(pw,t7,0.0,0.0); /* PHASE t7 = 2(x),2(-x)*/ delay(2.0e-6); rgradient('z',gzlvl11); delay(gt11); rgradient('z',0.0); delay(50.0e-6); decphase(zero); txphase(zero); delay(taua2 - gt11 - 52.0e-6 - POWER_DELAY - 4.0e-6 - PRG_START_DELAY - d_me2); /* Second chirp inversion on */ rlpower(dchrp2,DODEV); /* Set power for chirp inversion */ delay(4.0e-6); decprgon(ch_shp2,1.0/dmfchp2,dres_chp); decon(); delay(d_me2); rgpulse(2*pw,zero,0.0,0.0); /* 1H inversion pulse */ delay(pwchirp2 - d_me2 - 2*pw); decoff(); decprgoff(); /* Second purge CHIRP off */ delay(2.0e-6); rgradient('z',gzlvl11); delay(gt11); rgradient('z',0.0); delay(50.0e-6); txphase(zero); delay(taua2 + 2*pw - (pwchirp2 - d_me2) - PRG_STOP_DELAY - gt11 - 52.0e-6 ); rgpulse(pw,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl10); delay(gt10); rgradient('z',0.0); delay(150.0e-6); rgpulse(pw,t1,4.0e-6,0.0); delay(tau1); rgpulse(pw,zero,2.0e-6,0.0); delay(mix - 10.0e-3); delay(2.0e-6); rgradient('z',gzlvl0); delay(gt0); rgradient('z',0.0); rlpower(dhpwr,DODEV); /* Set power for hard pulses */ delay(4.0e-6); decrgpulse(pwc,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl1); delay(gt1); rgradient('z',0.0); delay(2.0e-6); decphase(zero); delay(10.0e-3 - gt1 - gt0 - 8.0e-6); rgpulse(pw,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl2); delay(gt2); rgradient('z',0.0); delay(50.0e-6); decphase(zero); delay(tauf - gt2 - 52.0e-6 - POWER_DELAY - 4.0e-6 - PRG_START_DELAY - d_mei); /* INEPT CHIRP inversion on */ rlpower(dchrpi,DODEV); /* Set power for chirp inversion */ delay(4.0e-6); decprgon(chshpi,1.0/dmfchpi,dres_chp); decon(); delay(d_mei); rgpulse(2*pw,zero,0.0,0.0); /* 1H inversion pulse */ delay(pwchirpi - d_mei - 2*pw); decoff(); decprgoff(); /* chirp inversion off */ delay(2.0e-6); rgradient('z',gzlvl2); delay(gt2); rgradient('z',0.0); delay(50.0e-6); txphase(one); delay(tauf + 2*pw - (pwchirpi - d_mei) - PRG_STOP_DELAY - gt2 - 52.0e-6 ); rgpulse(pw,one,0.0,0.0); txphase(zero); decphase(t2); rlpower(dhpwr,DODEV); /* Set power for C13 hard pulse */ delay(2.0e-6); rgradient('z',gzlvl3); delay(gt3); rgradient('z',0.0); delay(200.0e-6); decrgpulse(pwc,t2,0.0,0.0); decphase(zero); if( c180_flg[A] == 'n' ) { delay(2.0e-6); /* CO decoupling on */ rlpower(dpwrco,DODEV); decprgon(codecseq,pwcodec,dressed); decon(); /* CO decoupling on */ delay(tau2); rgpulse(2*pw,zero,0.0,0.0); delay(tau2); /* CO decoupling off */ decoff(); decprgoff(); rlpower(dhpwr,DODEV); /* CO decoupling off */ delay(2.0e-6); } else simpulse(2*pw,2*pwc,zero,zero,2.0e-6,2.0e-6); decrgpulse(pwc,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl4); delay(gt4); rgradient('z',0.0); delay(200.0e-6); rgpulse(pw,t5,2.0e-6,0.0); txphase(zero); delay(2.0e-6); rgradient('z',gzlvl5); delay(gt5); rgradient('z',0.0); delay(50.0e-6); decphase(zero); delay(tauf - gt5 - 52.0e-6 - POWER_DELAY - 4.0e-6 - PRG_START_DELAY - d_mei); /* 2nd INEPT CHIRP inversion on */ rlpower(dchrpi,DODEV); /* Set power for chirp inversion */ delay(4.0e-6); decprgon(chshpi,1.0/dmfchpi,dres_chp); decon(); delay(d_mei); rgpulse(2*pw,zero,0.0,0.0); /* 1H inversion pulse */ delay(pwchirpi - d_mei - 2*pw); decoff(); decprgoff(); /* chirp inversion off */ delay(2.0e-6); rgradient('z',gzlvl5); delay(gt5); rgradient('z',0.0); delay(50.0e-6); rlpower(dpwr,DODEV); /* Set power for decoupling */ rlpower(dpwr2,DO2DEV); /* Set power for decoupling */ txphase(t5); delay(tauf + 2*pw - (pwchirpi - d_mei) - PRG_STOP_DELAY - gt5 - 52.0e-6 - 2*POWER_DELAY); rgpulse(pw,t5,0.0,0.0); /* BEGIN ACQUISITION */ status(D); setreceiver(t4); }