pulsesequence() { double gzlvl1,qlvl,grise,gstab,gt1,ss,phase; int icosel,iphase; ss = getval("ss"); grise=getval("grise"); gstab=getval("gstab"); gt1=getval("gt1"); gzlvl1=getval("gzlvl1"); qlvl=getval("qlvl"); phase=getval("phase"); iphase = (int) (phase + 0.5); /* DETERMINE STEADY-STATE MODE */ if (ss < 0) ss = (-1) * ss; else if ((ss > 0) && (ix == 1)) ss = ss; else ss = 0; initval(ss, ssctr); initval(ss, ssval); assign(oph,v2); assign(oph,v1); if (iphase == 2) incr(v1); /* HYPERCOMPLEX MODE */ initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v6); if ((iphase==1) || (iphase==2)) {add(v1,v6,v1); add(oph,v6,oph);} status(A); rcvroff(); delay(d1); if (getflag("wet")) wet4(zero,one); rlpower(tpwr,TODEV); rgpulse(pw,v1,rof1,rof2); status(B); if (d2 > rof1 + 4.0*pw/3.1416) delay(d2 - rof1 - 4.0*pw/3.1416); status(C); rgpulse(pw,v2,rof1,rof2); delay(gt1+2.0*grise+24.4e-6); rgpulse(2.0*pw,v2,rof1,rof2); icosel=-1; rgradient('z',gzlvl1*(double)icosel); delay(gt1+grise); rgradient('z',0.0); txphase(oph); delay(grise); rgpulse(pw,v2,rof1,rof2); rgradient('z',gzlvl1*qlvl); delay(gt1+grise); rgradient('z',0.0); delay(grise); rcvron(); delay(gstab); status(D); }
pulsesequence() { /* DECLARE VARIABLES */ char fsat[MAXSTR], fscuba[MAXSTR], f1180[MAXSTR], /* Flag to start t1 @ halfdwell */ sh_reb[MAXSTR], codec[MAXSTR], MQ_flg[MAXSTR], filter_flg[MAXSTR]; int phase, t1_counter; /* used for states tppi in t1 */ double tau1, /* t1 delay */ taua, /* set to exactly 1/4JCH */ tsatpwr, /* low level 1H trans.power for presat */ sw1, /* sweep width in f1 */ tpwr_cp, /* power level for 1H CPMG */ pw_cp, /* 1H pw for CPMG */ ncyc_cp, /* number of CPMG cycles */ time_T2, /* total time for CPMG trains */ tau_cpmg, dhpwr, pwc, dmf_co, dpwr_co, dresco, gt0, gt1, gt2, gt3, gt4, gt5, gt6, gzlvl0, gzlvl1, gzlvl2, gzlvl3, gzlvl4, gzlvl5, gzlvl6, tpwr, pw, d_reb, pwc_reb, dpwr3_D, pwd, pwd1, tau_eq, pwn, dhpwr2; /* LOAD VARIABLES */ getstr("fsat",fsat); getstr("f1180",f1180); getstr("fscuba",fscuba); getstr("sh_reb",sh_reb); getstr("codec",codec); getstr("MQ_flg",MQ_flg); getstr("filter_flg",filter_flg); taua = getval("taua"); tpwr = getval("tpwr"); tsatpwr = getval("tsatpwr"); dpwr = getval("dpwr"); phase = (int) ( getval("phase") + 0.5); sw1 = getval("sw1"); tpwr_cp = getval("tpwr_cp"); pw_cp = getval("pw_cp"); ncyc_cp = getval("ncyc_cp"); time_T2 = getval("time_T2"); dhpwr = getval("dhpwr"); pwc = getval("pwc"); pwn = getval("pwn"); dhpwr2 = getval("dhpwr2"); dmf_co = getval("dmf_co"); dpwr_co = getval("dpwr_co"); dresco = getval("dresco"); gt0 = getval("gt0"); gt1 = getval("gt1"); gt2 = getval("gt2"); gt3 = getval("gt3"); gt4 = getval("gt4"); gt5 = getval("gt5"); gt6 = getval("gt6"); gzlvl0 = getval("gzlvl0"); gzlvl1 = getval("gzlvl1"); gzlvl2 = getval("gzlvl2"); gzlvl3 = getval("gzlvl3"); gzlvl4 = getval("gzlvl4"); gzlvl5 = getval("gzlvl5"); gzlvl6 = getval("gzlvl6"); tpwr = getval("tpwr"); pw = getval("pw"); d_reb = getval("d_reb"); pwc_reb = getval("pwc_reb"); dpwr3_D = getval("dpwr3_D"); pwd = getval("pwd"); pwd1 = getval("pwd1"); tau_eq = getval("tau_eq"); /* LOAD PHASE TABLE */ settable(t1,4,phi1); settable(t2,2,phi2); settable(t4,8,phi4); settable(t5,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! "); abort(1); } if( tsatpwr > 6 ) { printf("TSATPWR too large !!! "); abort(1); } if( dpwr > 48 ) { printf("don't fry the probe, DPWR too large! "); abort(1); } if(tpwr_cp > 62) { printf("don't fry the probe, tpwr_cp too large: < 62! "); abort(1); } if(pw_cp < 9.5e-6) { printf("pw_cp is too low; > 9.5us\n"); abort(1); } if( dpwr2 > -16 ) { printf("don't fry the probe, DPWR2 too large! "); abort(1); } if( pw > 20.0e-6 ) { printf("dont fry the probe, pw too high ! "); abort(1); } if(gt1 > 3e-3 || gt2 > 3e-3 || gt3 > 3e-3 || gt4 > 3e-3 || gt5 > 3e-3 || gt6 > 3e-3) { printf("gradients on for too long. Must be < 3e-3 \n"); abort(1); } if(ncyc_cp > 80) { printf("ncyc_cp is too large; must be less than 81\n"); abort(1); } if(time_T2 > .080) { printf("time_T2 is too large; must be less than 80 ms\n"); abort(1); } if(ncyc_cp > 0) { tau_cpmg = time_T2/(4.0*ncyc_cp) - pw_cp; if(ix==1) printf("nuCPMG for curent experiment is (Hz): %5.3f\n",1/(4.0*(tau_cpmg+pw_cp))); } else { tau_cpmg = time_T2/(4.0) - pw_cp; if(ix==1) printf("nuCPMG for curent experiment is (Hz): not applicable"); } if(tau_cpmg + pw_cp < 125e-6) { printf("tau_cpmg is too small; decrease ncyc_cp\n"); abort(1); } if(dpwr_co > 42) { printf("dpwr_co is too high; < 42\n"); abort(1); } if(dpwr3_D > 51) { printf("dpwr3_D is too high; < 52\n"); abort(1); } if(dpwr3 > 59) { printf("dpwr3 is too high; < 60\n"); abort(1); } if(ix==1) printf("If at 800 turn dpwr3=-16, pwd1=0\n"); /* Phase incrementation for hypercomplex 2D data */ if (phase == 2) tsadd(t1,1,4); /* Set up f1180 tau1 = t1 */ tau1 = d2; if(MQ_flg[A] == 'n') tau1 = tau1 - 4.0/PI*pwc - POWER_DELAY - PRG_START_DELAY - 2.0*pw - 2.0*pwn - PRG_STOP_DELAY - POWER_DELAY - 4.0e-6; else tau1 = tau1 - 4.0/PI*pwc - POWER_DELAY - PRG_START_DELAY - 2.0*pw - 2.0*pwn - PRG_STOP_DELAY - POWER_DELAY - 4.0e-6; if(f1180[A] == 'y') { tau1 += ( 1.0 / (2.0*sw1)); if(tau1 < 0.4e-6) tau1 = 0.4e-6; } if(tau1 < 0.4e-6) tau1 = 0.4e-6; tau1 = tau1/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(t5,2,4); } /* BEGIN ACTUAL PULSE SEQUENCE */ status(A); rlpower(tsatpwr,TODEV); /* Set transmitter power for 1H presaturation */ rlpower(dhpwr,DODEV); /* Set Dec1 power for 13C pulses */ rlpower(dhpwr2,DO2DEV); /* Set Dec2 power for 15N pulses */ obsoffset(tof); /* Presaturation Period */ status(B); if (fsat[0] == 'y') { delay(2.0e-5); rgpulse(d1,zero,2.0e-6,2.0e-6); /* presaturation */ 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 1H CPMG pulses */ txphase(zero); dec2phase(zero); decphase(zero); delay(1.0e-5); /* Begin Pulses */ status(C); rcvroff(); delay(20.0e-6); decrgpulse(pwc,zero,4.0e-6,0.0); delay(2.0e-6); rgradient('z',gzlvl1); delay(gt1); rgradient('z',0.0); delay(250.0e-6); rgpulse(pw,zero,0.0,0.0); decpower(d_reb); delay(2.0e-6); rgradient('z',gzlvl2); delay(gt2); rgradient('z',0.0); delay(150.0e-6); if(filter_flg[A] == 'y') delay(taua - POWER_DELAY - gt2 - 152e-6 - WFG2_START_DELAY - 0.5*pwc_reb - 4.0/PI*pw); else delay(taua - POWER_DELAY - gt2 - 152e-6 - WFG2_START_DELAY - 0.5*pwc_reb); simshaped_pulse("hard",sh_reb,2.0*pw,pwc_reb,zero,zero,0.0,0.0); txphase(one); decpower(dhpwr); decphase(t4); delay(taua - 0.5*pwc_reb - WFG2_STOP_DELAY - POWER_DELAY - gt2 - 152e-6 ); delay(2.0e-6); rgradient('z',gzlvl2); delay(gt2); rgradient('z',0.0); delay(150.0e-6); if(filter_flg[A] == 'n') rgpulse(pw,one,0.0,0.0); if(filter_flg[A] == 'y') { decrgpulse(pwc,t4,0.,0.); decpower(d_reb); decphase(zero); delay(2.0e-6); rgradient('z',gzlvl0); delay(gt0); rgradient('z',0.0); delay(150.0e-6); delay(taua - POWER_DELAY - gt0 - 152e-6 - WFG2_START_DELAY - 0.5*pwc_reb); simshaped_pulse("hard",sh_reb,2.0*pw,pwc_reb,zero,zero,0.0,0.0); txphase(one); decpower(dhpwr); decphase(t4); delay(taua - 0.5*pwc_reb - WFG2_STOP_DELAY - POWER_DELAY - gt0 - 152e-6 ); delay(2.0e-6); rgradient('z',gzlvl0); delay(gt0); rgradient('z',0.0); delay(150.0e-6); decrgpulse(pwc,t4,0.0,0.0); rgpulse(pw,one,0.0,0.0); } decphase(t1); delay(2.0e-6); rgradient('z',gzlvl3); delay(gt3); rgradient('z',0.0); delay(250.0e-6); /* turn on 2H decoupling */ dec3phase(one); dec3power(dpwr3); dec3rgpulse(pwd1,one,4.0e-6,0.0); dec3phase(zero); dec3unblank(); dec3power(dpwr3_D); dec3prgon(dseq3,pwd,dres3); dec3on(); /* turn on 2H decoupling */ if(MQ_flg[A] == 'y') { rgpulse(pw,zero,2.0e-6,0.0); delay(2.0*pwn - PRG_START_DELAY - PRG_STOP_DELAY); } decrgpulse(pwc,t1,4.0e-6,0.0); decphase(zero); /* 13CO decoupling on */ decpower(dpwr_co); decprgon(codec,1.0/dmf_co,dresco); decon(); /* 13CO decoupling on */ delay(tau1); rgpulse(2.0*pw,zero,0.0,0.0); dec2rgpulse(2.0*pwn,zero,0.0,0.0); delay(tau1); /* 13CO decoupling off */ decoff(); decprgoff(); /* 13CO decoupling off */ decpower(dhpwr); decrgpulse(pwc,zero,4.0e-6,0.0); if(MQ_flg[A] == 'y') rgpulse(pw,zero,0.0,0.0); /* turn off decoupling */ dec3off(); dec3prgoff(); dec3blank(); dec3phase(three); dec3power(dpwr3); dec3rgpulse(pwd1,three,4.0e-6,0.0); /* turn off decoupling */ obspower(tpwr_cp); if(MQ_flg[A] == 'n') { delay(2.0e-6); rgradient('z',gzlvl4); delay(gt4); rgradient('z',0.0); delay(250.0e-6); } else { delay(2.0e-6); rgradient('z',-1.0*gzlvl4); delay(gt4); rgradient('z',0.0); delay(250.0e-6); } /* now include a delay to allow the spin system to equilibrate */ delay(tau_eq); rgpulse(pw_cp,t2,4.0e-6,0.0); txphase(one); /* start of the CPMG period 1 */ if(ncyc_cp == 1) { delay(tau_cpmg - (2.0/PI)*pw_cp); rgpulse(2.0*pw_cp,one,0.0,0.0); delay(tau_cpmg); } if(ncyc_cp == 2) { delay(tau_cpmg - (2.0/PI)*pw_cp); rgpulse(2.0*pw_cp,one,0.0,0.0); delay(tau_cpmg); delay(tau_cpmg); rgpulse(2.0*pw_cp,one,0.0,0.0); delay(tau_cpmg); } if(ncyc_cp > 2) { delay(tau_cpmg - (2.0/PI)*pw_cp); rgpulse(2.0*pw_cp,one,0.0,0.0); delay(tau_cpmg); initval(ncyc_cp-2,v4); loop(v4,v5); delay(tau_cpmg); rgpulse(2.0*pw_cp,one,0.0,0.0); delay(tau_cpmg); endloop(v5); delay(tau_cpmg); rgpulse(2.0*pw_cp,one,0.0,0.0); delay(tau_cpmg); } txphase(t4); decphase(zero); rgpulse(2.0*pw_cp,t4,2.0e-6,2.0e-6); txphase(one); if(ncyc_cp == 1) { delay(tau_cpmg); rgpulse(2.0*pw_cp,one,0.0,0.0); txphase(one); delay(tau_cpmg - 2.0/PI*pw_cp); } if(ncyc_cp == 2) { delay(tau_cpmg); rgpulse(2.0*pw_cp,one,0.0,0.0); delay(tau_cpmg); delay(tau_cpmg); rgpulse(2.0*pw_cp,one,0.0,0.0); txphase(one); delay(tau_cpmg - 2.0/PI*pw_cp); } if(ncyc_cp > 2) { delay(tau_cpmg); rgpulse(2.0*pw_cp,one,0.0,0.0); delay(tau_cpmg); initval(ncyc_cp-2,v4); loop(v4,v5); delay(tau_cpmg); rgpulse(2.0*pw_cp,one,0.0,0.0); delay(tau_cpmg); endloop(v5); delay(tau_cpmg); rgpulse(2.0*pw_cp,one,0.0,0.0); txphase(one); delay(tau_cpmg - 2.0/PI*pw_cp); } rgpulse(pw_cp,zero,0.0,0.0); delay(2.0e-6); rgradient('z',gzlvl5); delay(gt5); rgradient('z',0.0); delay(250.0e-6); obspower(tpwr); rgpulse(pw,zero,4.0e-6,0.0); decpower(d_reb); delay(2.0e-6); rgradient('z',gzlvl6); delay(gt6); rgradient('z',0.0); delay(150.0e-6); delay(taua - POWER_DELAY - gt6 - 152e-6 - WFG2_START_DELAY - 0.5*pwc_reb); simshaped_pulse("hard",sh_reb,2.0*pw,pwc_reb,zero,zero,0.0,0.0); delay(taua - 0.5*pwc_reb - WFG2_STOP_DELAY - 2.0*POWER_DELAY - gt6 - 152e-6); rlpower(dpwr,DODEV); /* Set power for decoupling */ rlpower(dpwr2,DO2DEV); /* Set power for decoupling */ delay(2.0e-6); rgradient('z',gzlvl6); delay(gt6); rgradient('z',0.0); delay(150.0e-6); rgpulse(pw,zero,0.0,0.0); /* rcvron(); */ /* Turn on receiver to warm up before acq */ /* BEGIN ACQUISITION */ status(D); setreceiver(t5); }
void pulsesequence() { double ss, arraydim, p1lvl, trim, mix, window, cycles, phase; int iphase; char sspul[MAXSTR]; /* LOAD AND INITIALIZE VARIABLES */ ni = getval("ni"); arraydim = getval("arraydim"); mix = getval("mix"); trim = getval("trim"); phase = getval("phase"); iphase = (int) (phase + 0.5); p1lvl = getval("p1lvl"); ss = getval("ss"); window=getval("window"); getstr("sspul", sspul); if (iphase == 3) { initval((double)((int)((ix-1)/(arraydim/ni)+1.0e-6)), v14); } else { assign(zero, v14); } /* CHECK CONDITIONS */ if ((iphase != 3) && (arrayelements > 2)) { fprintf(stdout, "PHASE=3 is required if MIX is arrayed!\n"); psg_abort(1); } if (satdly > 9.999) { fprintf(stdout, "Presaturation period is too long.\n"); psg_abort(1); } if (!newtransamp) { fprintf(stdout, "TOCSY requires linear amplifiers on transmitter.\n"); fprintf(stdout, "Use DECTOCSY with the appropriate re-cabling,\n"); psg_abort(1); } if ((p1 == 0.0) && (ix == 1)) fprintf(stdout, "Warning: P1 has a zero value.\n"); if ((rof1 < 9.9e-6) && (ix == 1)) fprintf(stdout,"Warning: ROF1 is less than 10 us\n"); if (satpwr > 40) { printf("satpwr too large - acquisition aborted./n"); psg_abort(1); } /* DETERMINE STEADY-STATE MODE */ if (ss < 0) { ss = (-1) * ss; } else { if ((ss > 0) && (ix == 1)) { ss = ss; } else { ss = 0; } } initval(ss, ssctr); initval(ss, ssval); /* STEADY-STATE PHASECYCLING */ /* This section determines if the phase calculations trigger off of (SS - SSCTR) or off of CT */ ifzero(ssctr); hlv(ct, v13); mod2(ct, v1); hlv(ct, v2); elsenz(ssctr); sub(ssval, ssctr, v12); /* v12 = 0,...,ss-1 */ hlv(v12, v13); mod2(v12, v1); hlv(v12, v2); endif(ssctr); /* CALCULATE PHASES */ /* A 2-step cycle is performed on the first pulse (90 degrees) to suppress axial peaks in the first instance. Second, the 2-step F2 quadrature image suppression subcycle is added to all pulse phases and receiver phase. Finally, a 2-step cycle is performed on the spin-lock pulses. */ mod2(v13, v13); dbl(v1, v1); incr(v1); hlv(v2, v2); mod2(v2, v2); dbl(v2, v2); incr(v2); add(v13, v2, v2); sub(v2, one, v3); add(two, v2, v4); add(two, v3, v5); add(v1, v13, v1); assign(v1, oph); if (iphase == 2) incr(v1); if (iphase == 3) add(v1, v14, v1); /*HYPERCOMPLEX MODE USES REDFIELD TRICK TO MOVE AXIAL PEAKS TO EDGE*/ initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v6); if ((iphase==1)||(iphase==2)) {add(v1,v6,v1); add(oph,v6,oph);} /* CALCULATE AND INITIALIZE LOOP COUNTER */ if (pw > 0.0) { cycles = (mix - trim) / (64.66*pw+32*window); cycles = 2.0*(double) (int) (cycles/2.0); } else { cycles = 0.0; } initval(cycles, v9); /* V9 is the MIX loop count */ /* BEGIN ACTUAL PULSE SEQUENCE CODE */ status(A); rlpower(p1lvl, TODEV); if (sspul[0] == 'y') { rgpulse(1000*1e-6, zero, rof1, 0.0e-6); rgpulse(1000*1e-6, one, 0.0e-6, rof1); } hsdelay(d1); if (getflag("wet")) wet4(zero,one); rlpower(p1lvl, TODEV); if (satmode[A] == 'y') { rlpower(satpwr,TODEV); rgpulse(satdly,zero,rof1,rof2); rlpower(p1lvl,TODEV);} status(B); rgpulse(p1, v1, rof1, 1.0e-6); if (satmode[B] =='y') { if (d2 > 0.0) { rlpower(satpwr,TODEV); rgpulse(d2 - (2*POWER_DELAY) - 1.0e-6 - (2*p1/3.1416),zero,0.0,0.0); } } else { if (d2 > 0.0) delay(d2 - POWER_DELAY - 1.0e-6 - (2*p1/3.1416)); } rcvroff(); rlpower(tpwr,TODEV); txphase(v13); xmtron(); delay(trim); if (cycles > 1.0) { starthardloop(v9); mleva(window); mleva(window); mlevb(window); mlevb(window); mlevb(window); mleva(window); mleva(window); mlevb(window); mlevb(window); mlevb(window); mleva(window); mleva(window); mleva(window); mlevb(window); mlevb(window); mleva(window); rgpulse(.66*pw,v3,rof1,rof2); endhardloop(); } txphase(v13); xmtroff(); /* detection */ delay(rof2); rcvron(); status(C); }