/* hbcbcacocaha_3c_pfg1+_500.c This pulse sequence will allow one to perform the following experiment: 3D correlation of cb, ca and ha and have separation with c'. F1 CB, CA F2 CO F3(acq) HA Uses three channels: 1) 1H - carrier (tof) @ 4.7 ppm [H2O] 2) 13C - carrier (dofcacb @ 43ppm/ dof 54ppm) [CA/CB then CA] (The centre of F1 is 43ppm (dofcacb)) 3) 15N - carrier (dof2) @ 119 ppm [centre of amide N] Set dm = 'nnny', dmm = 'cccp' [13C decoupling during acquisition]. Set dm2 = 'nnnn', dmm2 = 'cccc' [15N decoupling during t2 done using N 180 pulse] Must set phase = 1,2 and phase2 = 1,2 for States-TPPI acquisition in t1 [carbon] and t2 [C']. Flags fsat 'y' for presaturation of H2O fscuba 'y' to apply scuba pulse after presaturation mess_flg 'y' for H2O purging in the middle of sequence f1180 'y' for 180deg linear phase correction in F1 otherwise 0deg linear phase correction in F1 f2180 'y' for 180deg linear phase correction in F2 c180_flg 'y' for c' 180 at t2/2 when recording F1,F3 2D Standard Settings fsat='n', fscuba='n', mess_flg='y', f1180='n', f2180='y', c180_flg='n' The flag f1180 should be set to 'y' if t1 is to be started at half dwell time. This will give -90, 180 phasing in f1. If it is set to 'n' the phasing will be 0,0 and will still give a perfect baseline. The flag f2180 should always be set to 'y' to give -90,180 in the C' dimension a pulses are all at 43 ppm; b pulses are at 54 ppm. The C' 180 shape is seduce for a pulses and rectangular for b pulses. To test the sequence set c180_flg='y', but set to n before you start 3D Set pwca90a to ~57 us pwca180a to ~ 51 us pwco180a = 254 us (seduce shape) pwca90b = 62 us pwca180b = 55.5 us decouple using a 100-120 us pulse Written by Lewis Kay 10/02/92 Modified by L.E.K on Aug 22/93 to improve the sequence. This is a three channel expt. Does not involve seduce decoupling REF: L. E. Kay J. Am. Chem. Soc. 115, 2055-2057 (1993). NOTE: THIS IS THE VERSION TO USE BMRB Pulse Sequence Accession Number: 37 */ #include #define PI 3.1416 static int phi1[1] = {0}, phi2[1] = {1}, phi3[2] = {0,2}, phi4[4] = {1,1,3,3}, phi5[8] = {0,0,0,0,2,2,2,2}, phi6[8] = {0,0,0,0,2,2,2,2}, phi7[16] = {0,0,0,0,0,0,0,0, 2,2,2,2,2,2,2,2}, rec[16] = {0,2,0,2,2,0,2,0, 2,0,2,0,0,2,0,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 */ mess_flg[MAXSTR], /* water purging */ c180_flg[MAXSTR], spco90a[MAXSTR], spco180a[MAXSTR], spco90b[MAXSTR], spco180b[MAXSTR]; int phase, phase2, ni, t1_counter, /* used for states tppi in t1 */ t2_counter; /* used for states tppi in t2 */ double tau1, /* t1 delay */ tau2, /* t2 delay */ taua, /* ~ 1/4JCH = 1.7 ms */ tauc1, /* ca/cb refocus and ca/c' defocus = 4.5 ms */ tauc2, /* ca/cb stay and ca/c' refocus = 2.7 ms */ taud, /* ca-ha refocus; 1.8 ms */ BigTC, /* carbon constant time period */ dly_pg1, /* delay for water purging */ pwn, /* PW90 for 15N pulse */ pwca90a, /* PW90 for ca nucleus @ dhpwr */ pwca180a, /* PW180 for ca at dvhpwra */ pwco180a, /* PW180 for c' using seduce shape */ pwca90b, /* PW90 for ca nucleus @ dhpwrb */ pwca180b, /* PW180 for ca nucleus @ dvhpwrb */ pwco180b, /* PW180 for c' using rectang. pulse */ pwco90b, /* PW90 for co nucleus @ dhpwrb */ tsatpwr, /* low level 1H trans.power for presat */ tpwrml, /* power level for h decoupling */ tpwrmess, /* power level for water purging */ pwmlev, /* h 90 pulse at tpwrml */ dhpwr, /* power level for 13C pulses on dec1 90 for part a of the sequence at 43 ppm */ dvhpwra, /* power level for 180 13C pulses at 43 ppm */ dpwr_coa, /* power level for C' 180 pulses at 43 ppm */ dhpwrb, /* power level for 13C pulses on dec1 - 54 ppm 90 for part b of the sequence */ dvhpwrb, /* power level for 13C pulses on dec1 - 54 ppm 180 for part b of the sequence */ dhpwr2, /* high dec2 pwr for 15N hard pulses */ sw1, /* sweep width in f1 */ sw2, /* sweep width in f2 */ dofcacb, /* dof for dipsi part, 43 ppm */ cln_dly, /* so that get rid of crap from hb etc with zero tocsy transfer */ gt0, gt1, gt2, gt3, gt4, gt5, gt6, gt7, gzlvl0, gzlvl1, gzlvl2, gzlvl3, gzlvl4, gzlvl5, gzlvl6, gzlvl7; /* variables commented out are already defined by the system */ /* LOAD VARIABLES */ getstr("fsat",fsat); getstr("f1180",f1180); getstr("f2180",f2180); getstr("fscuba",fscuba); getstr("spco90a",spco90a); getstr("spco180a",spco180a); getstr("spco90b",spco90b); getstr("spco180b",spco180b); getstr("mess_flg",mess_flg); getstr("c180_flg",c180_flg); taua = getval("taua"); tauc1 = getval("tauc1"); tauc2 = getval("tauc2"); taud = getval("taud"); BigTC = getval("BigTC"); dly_pg1 = getval("dly_pg1"); pwca90a = getval("pwca90a"); pwca180a = getval("pwca180a"); pwco180a = getval("pwco180a"); pwca90b = getval("pwca90b"); pwca180b = getval("pwca180b"); pwco90b = getval("pwco90b"); pwco180b = getval("pwco180b"); pwn = getval("pwn"); pwmlev = getval("pwmlev"); tpwr = getval("tpwr"); tsatpwr = getval("tsatpwr"); tpwrml = getval("tpwrml"); tpwrmess = getval("tpwrmess"); dhpwr = getval("dhpwr"); dvhpwra = getval("dvhpwra"); dpwr_coa = getval("dpwr_coa"); dhpwrb = getval("dhpwrb"); dvhpwrb = getval("dvhpwrb"); dpwr = getval("dpwr"); dhpwr2 = getval("dhpwr2"); phase = (int) ( getval("phase") + 0.5); phase2 = (int) ( getval("phase2") + 0.5); sw1 = getval("sw1"); sw2 = getval("sw2"); dofcacb = getval("dofcacb"); cln_dly = getval("cln_dly"); ni = getval("ni"); gt0 = getval("gt0"); gt1 = getval("gt1"); gt2 = getval("gt2"); gt3 = getval("gt3"); gt4 = getval("gt4"); gt5 = getval("gt5"); gt6 = getval("gt6"); gt7 = getval("gt7"); gzlvl0 = getval("gzlvl0"); gzlvl1 = getval("gzlvl1"); gzlvl2 = getval("gzlvl2"); gzlvl3 = getval("gzlvl3"); gzlvl4 = getval("gzlvl4"); gzlvl5 = getval("gzlvl5"); gzlvl6 = getval("gzlvl6"); gzlvl7 = getval("gzlvl7"); /* LOAD PHASE TABLE */ settable(t1,1,phi1); settable(t2,1,phi2); settable(t3,2,phi3); settable(t4,4,phi4); settable(t5,8,phi5); settable(t6,8,phi6); settable(t7,16,phi7); settable(t8,16,rec); /* CHECK VALIDITY OF PARAMETER RANGES */ if( ni*1/(sw1) > 2.0*BigTC ) { printf(" ni is too big\n"); abort(1); } 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' || dm2[D] == 'y')) { printf("incorrect dec2 decoupler flags! Should be 'nnnn' "); abort(1); } if( pwmlev < 30.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( tsatpwr > 6 ) { printf("TSATPWR too large !!! "); abort(1); } if( dpwr > 47 ) { printf("don't fry the probe, DPWR too large! "); abort(1); } if( dpwr2 > 46 ) { printf("don't fry the probe, DPWR2 too large! "); abort(1); } if( dhpwr > 62 ) { printf("don't fry the probe, DHPWR too large! "); abort(1); } if( dhpwrb > 62 ) { printf("don't fry the probe, DHPWRB too large! "); abort(1); } if( dvhpwrb > 62 ) { printf("don't fry the probe, DVHPWRB too large! "); abort(1); } if( dhpwr2 > 62 ) { printf("don't fry the probe, DHPWR2 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( pwca90b > 200.0e-6 ) { printf("dont fry the probe, pwca90b too high ! "); abort(1); } if( pwca180b > 200.0e-6 ) { printf("dont fry the probe, pwca180b too high ! "); abort(1); } if( pwco90b > 200.0e-6 ) { printf("dont fry the probe, pwco180b too high ! "); abort(1); } if( gt0 > 15e-3 || gt1 > 15e-3 || gt2 > 15e-3 || gt3 > 15e-3 || gt4 > 15e-3 || gt5 > 15e-3 || gt6 > 15e-3 || gt7 > 15e-3 ) { printf("gradients on for too long. Must be < 15e-3 \n"); abort(1); } /* Phase incrementation for hypercomplex 2D data */ if (phase == 2) { tsadd(t3,1,4); } if (phase2 == 2) tsadd(t7,1,4); /* 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) - pwca180b - 2.0*pwn - (4.0/PI)*pwco90b - 2*POWER_DELAY - WFG_START_DELAY - WFG_STOP_DELAY - 2.0e-6 ); 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(t8,2,4); } if( ix == 1) d3_init = d3 ; t2_counter = (int) ( (d3-d3_init)*sw2 + 0.5 ); if(t2_counter % 2) { tsadd(t7,2,4); tsadd(t8,2,4); } /* BEGIN ACTUAL PULSE SEQUENCE */ /* Receiver off time */ status(A); rcvroff(); offset(dofcacb,DODEV); /* initially pulse at 43 ppm */ rlpower(tsatpwr,TODEV); /* Set transmitter power for 1H presaturation */ rlpower(dhpwr,DODEV); /* Set Dec1 power for hard 13C pulses */ rlpower(dhpwr2,DO2DEV); /* Set Dec2 power for 15N hard pulses */ /* Presaturation Period */ status(B); if (fsat[0] == 'y') { delay(2.0e-5); rgpulse(d1,zero,2.0e-6,2.0e-6); 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 */ txphase(zero); dec2phase(zero); delay(1.0e-5); /* Begin Pulses */ status(C); /* first ensure that magnetization does infact start on H and not C */ decrgpulse(pwca90a,zero,2.0e-6,2.0e-6); delay(2.0e-6); rgradient('z',gzlvl0); delay(gt0); rgradient('z',0.0); delay(200.0e-6); /* this is the real start */ rgpulse(pw,zero,0.0,0.0); /* 90 deg 1H pulse */ decphase(t1); rlpower(dvhpwra,DODEV); delay(2.0e-6); rgradient('z',gzlvl1); delay(gt1); rgradient('z',0.0); delay(2.0e-6); delay(taua - POWER_DELAY - gt1 - 4.0e-6); /* taua <= 1/4JCH */ simpulse(2*pw,pwca180a,zero,t1,0.0,0.0); rlpower(dhpwr,DODEV); txphase(t2); decphase(t3); delay(2.0e-6); rgradient('z',gzlvl1); delay(gt1); rgradient('z',0.0); delay(2.0e-6); delay(taua - POWER_DELAY - gt1 - 4.0e-6); rgpulse(pw,t2,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl2); delay(gt2); rgradient('z',0.0); delay(200.0e-6); decrgpulse(pwca90a,t3,0.0,2.0e-6); delay(tau1); rlpower(dpwr_coa,DODEV); decshaped_pulse(spco180a,pwco180a,zero,0.0,0.0); dec2rgpulse(2*pwn,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(2.0e-6); rlpower(dvhpwra,DODEV); delay(0.8e-3 - gt7 - 4.0e-6 - 2*POWER_DELAY); delay(0.2e-6); rgpulse(2*pw,zero,0.0,0.0); decphase(t4); delay(BigTC - 0.8e-3); decrgpulse(pwca180a,t4,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(2.0e-6); delay(BigTC - tau1 + 2*pwn + 2*pw - 2.0*POWER_DELAY - gt7 - 4.0e-6); delay(0.2e-6); rlpower(dpwr_coa,DODEV); decshaped_pulse(spco180a,pwco180a,zero,0.0,0.0); /* bloch seigert */ rlpower(dhpwr,DODEV); decrgpulse(pwca90a,zero,2.0e-6,0.0); /* H decoupling on */ rlpower(tpwrml,TODEV); obsprgon("waltz16",pwmlev,90.0); xmtron(); /* TURN ME OFF DONT FORGET */ /* H decoupling on */ rlpower(dpwr_coa,DODEV); decshaped_pulse(spco180a,pwco180a,zero,0.0,0.0); /* bloch seigert */ rlpower(dhpwr,DODEV); delay(tauc1 - 4.0*POWER_DELAY - PRG_START_DELAY); rlpower(dvhpwra,DODEV); decrgpulse(pwca180a,t5,2.0e-6,0.0); rlpower(dpwr_coa,DODEV); decshaped_pulse(spco180a,pwco180a,zero,2.0e-6,0.0); rlpower(dhpwr,DODEV); delay(tauc1 - 2.0*POWER_DELAY - 2.0e-6); decrgpulse(pwca90a,t6,2.0e-6,0.0); delay(2.0e-6); decphase(t7); /* H decoupling off */ xmtroff(); obsprgoff(); /* H decoupling off */ delay(2.0e-6); rgradient('z',gzlvl3); delay(gt3); rgradient('z',0.0); delay(200.0e-6); offset(dof,DODEV); hsdelay(cln_dly); rlpower(dhpwrb,DODEV); /* H decoupling on */ rlpower(tpwrml,TODEV); obsprgon("waltz16",pwmlev,90.0); xmtron(); /* TURN ME OFF DONT FORGET */ /* H decoupling on */ delay(0.2e-6); decshaped_pulse(spco90b,pwco90b,t7,0.0,0.0); delay(tau2); if(c180_flg[A] == 'y') { decshaped_pulse(spco180b,pwco180b,zero,0.0,0.0); } else { rlpower(dvhpwrb,DODEV); decrgpulse(pwca180b,zero,2.0e-6,0.0); rlpower(dhpwrb,DODEV); dec2rgpulse(2*pwn,zero,0.0,0.0); } delay(tau2); decshaped_pulse(spco90b,pwco90b,zero,0.0,0.0); delay(0.2e-6); /* H decoupling off */ xmtroff(); obsprgoff(); /* H decoupling off */ if(mess_flg[A] == 'y') { rlpower(tpwrmess,TODEV); rgpulse(dly_pg1,zero,2.0e-6,2.0e-6); rgpulse(dly_pg1/1.62,one,2.0e-6,2.0e-6); } delay(2.0e-6); rgradient('z',gzlvl4); delay(gt4); rgradient('z',0.0); delay(200.0e-6); rlpower(tpwr,TODEV); rgpulse(pw,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl4); delay(gt4/1.73); rgradient('z',0.0); delay(200.0e-6); decrgpulse(pwca90b,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl5); delay(gt5); rgradient('z',0.0); delay(2.0e-6); delay(taud - gt5 - 4.0e-6); rgpulse(2*pw,zero,0.0,0.0); delay(tauc2 - taud - POWER_DELAY - 2*pw - 2.0e-6); decshaped_pulse(spco180b,pwco180b,zero,2.0e-6,0.0); rlpower(dvhpwrb,DODEV); decrgpulse(pwca180b,zero,0.0,0.0); rlpower(dhpwrb,DODEV); delay(2.0e-6); rgradient('z',gzlvl5); delay(gt5); rgradient('z',0.0); delay(2.0e-6); delay(tauc2 - gt5 - 6.0e-6 - POWER_DELAY); decshaped_pulse(spco180b,pwco180b,zero,0.0,0.0); /* bloch seigert */ simpulse(pw,pwca90b,zero,zero,2.0e-6,0.0); delay(2.0e-6); rgradient('z',gzlvl6); delay(gt6); rgradient('z',0.0); delay(2.0e-6); delay(taua - POWER_DELAY - gt6 - 4.0e-6); rlpower(dvhpwrb,DODEV); simpulse(2*pw,pwca180b,zero,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl6); delay(gt6); rgradient('z',0.0); delay(2.0e-6); delay(taua - POWER_DELAY - gt6 - 4.0e-6); rlpower(dpwr,DODEV); /* Set power for decoupling */ rgpulse(pw,zero,0.0,0.0); /* rcvron(); */ /* Turn on receiver to warm up before acq */ /* BEGIN ACQUISITION */ status(D); setreceiver(t8); }