/* hcchtocsy_3c_pfg_500.c This pulse sequence will allow one to perform the following experiment: 3D hcchtocsy to correlate protons on sidechains and have separation with C. F1 1H F2 13C F3(acq) 1H Use the standard three channel configuration: 1) 1H - carrier (tof) @ 4.7 ppm [H2O] 2) 13C - carrier (dof) @ 43 ppm [CA] 3) 15N - carrier (dof2) @ 119 ppm [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]. Flags fsat 'y' for presaturation of H2O mess_flg 'y' for 1H purge pulse in the middle of sequence f1180 'y' for 180deg linear phase correction in F1 otherwise 0deg linear phase correction. f2180 'y' for 180deg linear phase correction in F2 otherwise 0deg linear phase correction. Standard Settings: fsat='n', mess_flg='y', f1180='n', f2180='n' Set f1180 = 'n' and f2180 = 'n' for (0,0) in F1 and F2. Written by Lewis Kay 09/27/92 Modified by L. E. Kay 12/14/92 to do pfg water experiments REF: Kay et. al. J. Magn. Reson. B 101, 333-337 (1993). (Sequence of Bax et. al. JMR 88, 425-431 (1990), modified somewhat by LEK) BMRB Pulse Sequence Accession Number: 41 */ #include #define PI 3.1416 static int phi1[2] = {0,2}, phi2[1] = {0}, phi3[1] = {0}, phi4[1] = {1}, phi5[4] = {0,0,2,2}, phi6[1] = {0}, phi7[1] = {0}, phi8[1] = {0}, phi9[1] = {0}, phi10[1] = {0}, phi11[1] = {0}, phi12[8] = {0,0,0,0,2,2,2,2}, rec[4] = {0,2,2,0}; 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 */ spco180[MAXSTR], /* name of file for c' 180 pulse */ mess_flg[MAXSTR]; /* purge flag if water in sample */ 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 */ taua, /* ~ 1/4JHC = 1.6 ms */ taub, /* 1/4JCH = 1.1 ms */ tauc, /* taub = 1.1 ms */ pwn, /* PW90 for 15N pulse */ pwc, /* PW90 for c nucleus @ dhpwr */ pwch, /* PW90 for c nucleus @ dvhpwr */ pwco180, /* PW180 for C' nucleus @ dpwrco */ pw_dip, /* pw90 for dipsi at dpwr_dip */ p_d, /* p_d = 50.0/90.0 * pw_dip */ ptrimc, /* trim pulse time ~ 2 ms */ tsatpwr, /* low level 1H trans.power for presat */ tpwrmess, /* power for mess purge pulse during 2ms C lock */ dhpwr, /* power level for 13C pulses on dec1 */ dvhpwr, /* power level for first 13C pulse on dec1 */ dpwrco, /* power level for C' 180 pulse. Adjust pulse to get no effect in aliphatic region */ dpwr_dip, /* power level for dipsi */ dhpwr2, /* high dec2 pwr for 15N hard pulses */ sw1, /* sweep width in f1 */ sw2, /* sweep width in f2 */ tofps, /* tof for presat */ ncyc, /* number of cycles of dipsi <= 3 */ dipsi_time, /* total amount of dipsi time <= 24 ms */ dly_pg1, gt0, gt1, gt3, gt4, gt5, gt6, gt7, gt8, gzlvl1, gzlvl3, gzlvl4, gzlvl5, gzlvl6, gzlvl7, gzlvl8; /* variables commented out are already defined by the system */ /* LOAD VARIABLES */ getstr("fsat",fsat); getstr("f1180",f1180); getstr("f2180",f2180); getstr("fscuba",fscuba); getstr("spco180",spco180); getstr("mess_flg",mess_flg); tofps = getval("tofps"); taua = getval("taua"); taub = getval("taub"); tauc = getval("tauc"); pwc = getval("pwc"); pwch = getval("pwch"); pwco180 = getval("pwco180"); pw_dip = getval("pw_dip"); ptrimc = getval("ptrimc"); pwn = getval("pwn"); tpwr = getval("tpwr"); tpwrmess = getval("tpwrmess"); tsatpwr = getval("tsatpwr"); dhpwr = getval("dhpwr"); dvhpwr = getval("dvhpwr"); dpwr = getval("dpwr"); dpwrco = getval("dpwrco"); dpwr_dip = getval("dpwr_dip"); dhpwr2 = getval("dhpwr2"); phase = (int) ( getval("phase") + 0.5); phase2 = (int) ( getval("phase2") + 0.5); sw1 = getval("sw1"); sw2 = getval("sw2"); ncyc = getval("ncyc"); dly_pg1 = getval("dly_pg1"); gt0 = getval("gt0"); gt1 = getval("gt1"); gt3 = getval("gt3"); gt4 = getval("gt4"); gt5 = getval("gt5"); gt6 = getval("gt6"); gt7 = getval("gt7"); gt8 = getval("gt8"); gzlvl1 = getval("gzlvl1"); gzlvl3 = getval("gzlvl3"); gzlvl4 = getval("gzlvl4"); gzlvl5 = getval("gzlvl5"); gzlvl6 = getval("gzlvl6"); gzlvl7 = getval("gzlvl7"); gzlvl8 = getval("gzlvl8"); p_d = (50.0/90.0)*pw_dip; /* LOAD PHASE TABLE */ settable(t1,2,phi1); settable(t2,1,phi2); settable(t3,1,phi3); settable(t4,1,phi4); settable(t5,4,phi5); settable(t6,1,phi6); settable(t7,1,phi7); settable(t8,1,phi8); settable(t9,1,phi9); settable(t10,1,phi10); settable(t11,1,phi11); settable(t12,8,phi12); settable(t13,4,rec); /* 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' || dm2[D] == 'y')) { printf("incorrect dec2 decoupler flags! Should be 'nnnn' "); abort(1); } if( tsatpwr > 6 ) { printf("TSATPWR too large !!! "); abort(1); } if( dpwr > 50 ) { 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( dhpwr2 > 62 ) { printf("don't fry the probe, DHPWR2 too large! "); abort(1); } if( dpwr_dip > 56 ) { printf("don't fry the probe, dpwr_dip too large! "); abort(1); } if( pw > 200.0e-6 ) { printf("dont fry the probe, pw too high ! "); abort(1); } if( pwn > 200.0e-6 ) { printf("dont fry the probe, pwn too high ! "); abort(1); } if( pwc > 200.0e-6 ) { printf("dont fry the probe, pwc too high ! "); abort(1); } if( pwco180 > 300.0e-6 ) { printf("dont fry the probe, pwco180 too high ! "); abort(1); } if( ptrimc > 2.0e-3) { printf("dont fry the probe, trim pulse too long ! "); abort(1); } if( ncyc > 3 ) { printf(" dont fry the probe, ncyc too big !"); abort(1); } dipsi_time = ncyc*54.33*pw_dip*4.0; if( dipsi_time > 24.0e-3 ) { printf(" dont fry the probe, dipsi time too long ! "); abort(1); } if( gt0 > 15.0e-3 || gt1 > 15.0e-3 || gt3 > 15.0e-3 || gt4 > 15.0e-3 || gt5 > 15.0e-3 || gt6 > 15.0e-3 || gt7 > 15.0e-3 || gt8 > 15.0e-3) { printf(" all values of gti must be < 15.0e-3\n"); abort(1); } /* Phase incrementation for hypercomplex 2D data */ if (phase == 2) tsadd(t1,1,4); if (phase2 == 2) tsadd(t5,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) ); 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(t1,2,4); tsadd(t13,2,4); } if( ix == 1) d3_init = d3 ; t2_counter = (int) ( (d3-d3_init)*sw2 + 0.5 ); if(t2_counter % 2) { tsadd(t5,2,4); tsadd(t13,2,4); } /* BEGIN ACTUAL PULSE SEQUENCE */ status(A); rlpower(tsatpwr,TODEV); /* Set transmitter power for 1H presaturation */ rlpower(dhpwr,DODEV); /* Set Dec1 power for hard 13C pulses */ rlpower(dhpwr2,DO2DEV); /* Set Dec2 to high power for pulses */ /* Presaturation Period */ status(B); if (fsat[0] == 'y') { offset(tofps,TODEV); delay(2.0e-5); rgpulse(d1,zero,2.0e-6,2.0e-6); /* presat with transmitter */ 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); txphase(t1); decphase(t2); dec2phase(zero); delay(1.0e-5); /* Begin Pulses */ status(C); /* ensure that magetization originates on 1H and not 13C */ rcvroff(); delay(20.0e-6); /* rlpower(dvhpwr,DODEV); decrgpulse(pwch,zero,0.0,0.0); rlpower(dhpwr,DODEV); delay(2.0e-6); rgradient('z',gzlvl0); delay(gt0); rgradient('z',0.0); delay(150.0e-6); initval(7.0,v7); stepsize(45.0,TODEV); xmtrphase(v7); */ rgpulse(pw,t1,0.0,0.0); /* 90 deg 1H pulse */ xmtrphase(zero); txphase(t3); rlpower(dvhpwr,DODEV); delay(2.0e-6); rgradient('z',gzlvl1); delay(gt1); rgradient('z',0.0); delay(2.0e-6); delay(taua + tau1 - gt1 - 4.0e-6 - SAPS_DELAY); decrgpulse(2*pwch,t2,0.0,0.0); /* very short c 180 */ delay(tau1); rgpulse(2*pw,t3,0.0,0.0); txphase(t4); decphase(t5); rlpower(dhpwr,DODEV); delay(2.0e-6); rgradient('z',gzlvl1); delay(gt1); rgradient('z',0.0); delay(2.0e-6); delay(taua + 2*pwch - gt1 - 4.0e-6); rgpulse(pw,t4,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl3); delay(gt3); rgradient('z',0.0); delay(50.0e-6); decrgpulse(pwc,t5,0.0,0.0); txphase(t7); decphase(zero); delay(tau2); dec2rgpulse(2*pwn,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl4); delay(gt4); rgradient('z',0.0); delay(2.0e-6); delay(taub/2.0 - gt4 - 4.0e-6); rlpower(dpwrco,DODEV); decshaped_pulse(spco180,pwco180,zero,2.0e-6,0.0); rlpower(dhpwr,DODEV); decphase(t8); delay(2.0e-6); rgradient('z',gzlvl4); delay(gt4); rgradient('z',0.0); delay(2.0e-6); delay(taub/2.0 - gt4 - 4.0e-6); rgpulse(2*pw,t7,0.0,0.0); txphase(zero); delay(tau2); decrgpulse(2*pwc,t8,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl4); delay(gt4); rgradient('z',0.0); delay(2.0e-6); delay( taub/2.0 + 2*pw + 2*pwn + (2.0/PI)*pwc - gt4 - 4.0e-6); rlpower(dpwrco,DODEV); decshaped_pulse(spco180,pwco180,t6,2.0e-6,0.0); rlpower(dpwr_dip,DODEV); delay(2.0e-6); rgradient('z',gzlvl4); delay(gt4); rgradient('z',0.0); delay(2.0e-6); delay(taub/2.0 - gt4 - 4.0e-6 - POWER_DELAY); /* dipsi portion of sequence */ decphase(t9); rlpower(dpwr_dip,DODEV); /* TURN POWER DOWN FOR DIPSI */ initval(ncyc,v2); if(ncyc > 0) { /* 2ms trim pulse */ decrgpulse(ptrimc,t9,2.0e-6,0.0); starthardloop(v2); decrgpulse(4.9*p_d,one,0.0,0.0); decrgpulse(7.9*p_d,three,0.0,0.0); decrgpulse(5.0*p_d,one,0.0,0.0); decrgpulse(5.5*p_d,three,0.0,0.0); decrgpulse(0.6*p_d,one,0.0,0.0); decrgpulse(4.6*p_d,three,0.0,0.0); decrgpulse(7.2*p_d,one,0.0,0.0); decrgpulse(4.9*p_d,three,0.0,0.0); decrgpulse(7.4*p_d,one,0.0,0.0); decrgpulse(6.8*p_d,three,0.0,0.0); decrgpulse(7.0*p_d,one,0.0,0.0); decrgpulse(5.2*p_d,three,0.0,0.0); decrgpulse(5.4*p_d,one,0.0,0.0); decrgpulse(0.6*p_d,three,0.0,0.0); decrgpulse(4.5*p_d,one,0.0,0.0); decrgpulse(7.3*p_d,three,0.0,0.0); decrgpulse(5.1*p_d,one,0.0,0.0); decrgpulse(7.9*p_d,three,0.0,0.0); decrgpulse(4.9*p_d,one,0.0,0.0); decrgpulse(7.9*p_d,three,0.0,0.0); decrgpulse(5.0*p_d,one,0.0,0.0); decrgpulse(5.5*p_d,three,0.0,0.0); decrgpulse(0.6*p_d,one,0.0,0.0); decrgpulse(4.6*p_d,three,0.0,0.0); decrgpulse(7.2*p_d,one,0.0,0.0); decrgpulse(4.9*p_d,three,0.0,0.0); decrgpulse(7.4*p_d,one,0.0,0.0); decrgpulse(6.8*p_d,three,0.0,0.0); decrgpulse(7.0*p_d,one,0.0,0.0); decrgpulse(5.2*p_d,three,0.0,0.0); decrgpulse(5.4*p_d,one,0.0,0.0); decrgpulse(0.6*p_d,three,0.0,0.0); decrgpulse(4.5*p_d,one,0.0,0.0); decrgpulse(7.3*p_d,three,0.0,0.0); decrgpulse(5.1*p_d,one,0.0,0.0); decrgpulse(7.9*p_d,three,0.0,0.0); decrgpulse(4.9*p_d,three,0.0,0.0); decrgpulse(7.9*p_d,one,0.0,0.0); decrgpulse(5.0*p_d,three,0.0,0.0); decrgpulse(5.5*p_d,one,0.0,0.0); decrgpulse(0.6*p_d,three,0.0,0.0); decrgpulse(4.6*p_d,one,0.0,0.0); decrgpulse(7.2*p_d,three,0.0,0.0); decrgpulse(4.9*p_d,one,0.0,0.0); decrgpulse(7.4*p_d,three,0.0,0.0); decrgpulse(6.8*p_d,one,0.0,0.0); decrgpulse(7.0*p_d,three,0.0,0.0); decrgpulse(5.2*p_d,one,0.0,0.0); decrgpulse(5.4*p_d,three,0.0,0.0); decrgpulse(0.6*p_d,one,0.0,0.0); decrgpulse(4.5*p_d,three,0.0,0.0); decrgpulse(7.3*p_d,one,0.0,0.0); decrgpulse(5.1*p_d,three,0.0,0.0); decrgpulse(7.9*p_d,one,0.0,0.0); decrgpulse(4.9*p_d,three,0.0,0.0); decrgpulse(7.9*p_d,one,0.0,0.0); decrgpulse(5.0*p_d,three,0.0,0.0); decrgpulse(5.5*p_d,one,0.0,0.0); decrgpulse(0.6*p_d,three,0.0,0.0); decrgpulse(4.6*p_d,one,0.0,0.0); decrgpulse(7.2*p_d,three,0.0,0.0); decrgpulse(4.9*p_d,one,0.0,0.0); decrgpulse(7.4*p_d,three,0.0,0.0); decrgpulse(6.8*p_d,one,0.0,0.0); decrgpulse(7.0*p_d,three,0.0,0.0); decrgpulse(5.2*p_d,one,0.0,0.0); decrgpulse(5.4*p_d,three,0.0,0.0); decrgpulse(0.6*p_d,one,0.0,0.0); decrgpulse(4.5*p_d,three,0.0,0.0); decrgpulse(7.3*p_d,one,0.0,0.0); decrgpulse(5.1*p_d,three,0.0,0.0); decrgpulse(7.9*p_d,one,0.0,0.0); endhardloop(); } decrgpulse(pw_dip,one,2.0e-6,0.0); if(mess_flg[A] == 'y') { offset(tofps,TODEV); rlpower(tpwrmess,TODEV); txphase(zero); rgpulse(dly_pg1,zero,0.0,0.0); rgpulse(dly_pg1/1.62,one,2.0e-6,2.0e-6); offset(tof,TODEV); } delay(2.0e-6); rgradient('z',gzlvl5); delay(gt5); rgradient('z',0.0); delay(50.0e-6); rlpower(tpwr,TODEV); rgpulse(pw,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl5); delay(gt5/1.6); rgradient('z',0.0); delay(50.0e-6); rlpower(dhpwr,DODEV); decrgpulse(pwc,one,0.0,0.0); txphase(zero); decphase(zero); delay(2.0e-6); rgradient('z',gzlvl6); delay(gt6); rgradient('z',0.0); delay(2.0e-6); delay(tauc - gt6 - 4.0e-6); simpulse(2*pw,2*pwc,zero,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl6); delay(gt6); rgradient('z',0.0); delay(2.0e-6); delay(tauc - 2.0e-6 - gt6 - 4.0e-6); if( gt7 != 0.0 ) { decrgpulse(pwc,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl7); delay(gt7); rgradient('z',0.0); delay(50.0e-6); rgpulse(pw,t10,2.0e-6,0.0); } else { simpulse(pw,pwc,t10,zero,2.0e-6,0.0); } txphase(zero); decphase(t11); delay(2.0e-6); rgradient('z',gzlvl8); delay(gt8); rgradient('z',0.0); delay(2.0e-6); delay(taua - gt8 - 4.0e-6); simpulse(2*pw,2*pwc,zero,t11,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl8); delay(gt8); rgradient('z',0.0); delay(2.0e-6); delay(taua - gt8 - 4.0e-6); simpulse(pw,pwc,zero,zero,0.0,0.0); decrgpulse(pwc,t12,2.0e-6,0.0); rlpower(dpwr,DODEV); /* Set power for decoupling */ /* rcvron(); */ /* Turn on receiver to warm up before acq */ /* BEGIN ACQUISITION */ status(D); setreceiver(t13); }