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() { double gzlvl1 = getval("gzlvl1"), gt1 = getval("gt1"), zqfpw1 = getval("zqfpw1"), zqfpwr1 = getval("zqfpwr1"), gzlvlzq1 = getval("gzlvlzq1"), gstab = getval("gstab"), h1freq_local = getval("h1freq_local"), flip1 = getval("flip1"), flip2 = getval("flip2"), swfactor = 9.0, /* do the adiabatic sweep over 9.0*sw */ gzlvlzq,invsw; int iphase = (int) (getval("phase") + 0.5), prgcycle = (int)(getval("prgcycle")+0.5); char satmode[MAXSTR], zqfpat1[MAXSTR], wet[MAXSTR], antiz_flg[MAXSTR], alt_grd[MAXSTR]; getstr("satmode",satmode); getstr("wet",wet); getstr("zqfpat1",zqfpat1); getstr("antiz_flg", antiz_flg); getstr("alt_grd",alt_grd); invsw = sw*swfactor; if (invsw > 60000.0) invsw = 60000.0; /* do not exceed 60 kHz */ invsw = invsw/0.97; /* correct for end effects of the cawurst-20 shape */ assign(ct,v17); assign(zero,v18); assign(zero,v19); if (getflag("prgflg") && (satmode[0] == 'y') && (prgcycle > 1.5)) { hlv(ct,v17); mod2(ct,v18); dbl(v18,v18); if (prgcycle > 2.5) { hlv(v17,v17); hlv(ct,v19); mod2(v19,v19); dbl(v19,v19); } } // sub(ct,ssctr,v12); settable(t1,8,ph1); getelem(t1,v17,v1); settable(t2,8,ph2); getelem(t2,v17,v2); settable(t3,8,ph3); getelem(t3,v17,v3); settable(t4,8,ph4); getelem(t4,v17,oph); add(oph,v18,oph); add(oph,v19,oph); if (alt_grd[0] == 'y') mod2(ct,v8); /* alternate gradient sign */ if (getflag("Gzqfilt")) add(oph,two,oph); if (iphase == 2) incr(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);} /* BEGIN THE ACTUAL PULSE SEQUENCE */ status(A); delay(5.0e-5); if (getflag("sspul")) steadystate(); if (satmode[0] == 'y') { if ((d1-satdly) > 0.02) delay(d1-satdly); else delay(0.02); if (getflag("slpsat")) { shaped_satpulse("relaxD",satdly,v6); if (getflag("prgflg")) shaped_purge(v1,v6,v18,v19); } else { satpulse(satdly,v6,rof1,rof1); if (getflag("prgflg")) purge(v1,v6,v18,v19); } } else delay(d1); if (wet[0] == 'y') wet4(zero,one); obsstepsize(45.0); initval(7.0,v7); xmtrphase(v7); status(B); if (antiz_flg[0] == 'n') rgpulse(flip1*pw/90.0,v1,rof1,1.0e-6); else rgpulse(flip1*pw/90.0+2.0*pw,v1,rof1,1.0e-6); xmtrphase(zero); if (d2 > 0.0) { if (antiz_flg[0] == 'n') delay(d2-1.0e-6-rof1-SAPS_DELAY-(2.0*pw/3.14159)*(flip1+flip2)/90.0); else delay(d2-1.0e-6-rof1-SAPS_DELAY-(2.0*pw/3.14159)*(flip1+flip2)/90.0+4.0*pw); } else delay(0.0); if (antiz_flg[0] == 'n') rgpulse(flip2*pw/90.0,v2,rof1,1.0e-6); else rgpulse(flip2*pw/90.0+2.0*pw,v2,rof1,1.0e-6); status(C); if (getflag("Gzqfilt")) { obspower(zqfpwr1); rgradient('z',gzlvlzq1); delay(100.0e-6); shaped_pulse(zqfpat1,zqfpw1,zero,rof1,rof1); delay(100.0e-6); rgradient('z',0.0); delay(gstab); obspower(tpwr); } ifzero(v8); zgradpulse(gzlvl1,gt1); elsenz(v8); zgradpulse(-1.0*gzlvl1,gt1); endif(v8); delay(gstab); status(D); rgpulse(flip2*pw/90.0,v3,rof1,rof2); }
void pulsesequence() { double mixN = getval("mixN"), mixNcorr, gzlvl1 = getval("gzlvl1"), gt1 = getval("gt1"), gstab = getval("gstab"), zqfpw1 = getval("zqfpw1"), zqfpwr1 = getval("zqfpwr1"), gzlvlzq1 = getval("gzlvlzq1"); char satmode[MAXSTR], zqfpat1[MAXSTR], wet[MAXSTR]; int phase1 = (int)(getval("phase")+0.5); /* LOAD VARIABLES */ getstr("satmode",satmode); getstr("wet",wet); getstr("zqfpat1",zqfpat1); mixNcorr = 0.0; if (getflag("PFGflg")) { mixNcorr = gt1 + gstab; if (getflag("Gzqfilt")) mixNcorr += gstab + zqfpw1; if (wet[1] == 'y') mixNcorr += 4*(getval("pwwet")+getval("gtw")+getval("gswet")); } if (mixNcorr > mixN) mixN=mixNcorr; settable(t1,16,phs1); settable(t2,32,phs2); settable(t3,16,phs3); settable(t5,16,phs5); settable(t4,32,phs4); getelem(t1,ct,v1); getelem(t4,ct,oph); assign(oph,v7); assign(zero,v6); getelem(t2,ct,v2); getelem(t3,ct,v3); /* mod2(id2,v14); dbl(v14,v14); */ initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v14); if (phase1 == 2) /* hypercomplex */ incr(v1); add(v1, v14, v1); add(oph,v14,oph); /* BEGIN THE ACTUAL PULSE SEQUENCE */ status(A); obspower(tpwr); delay(5.0e-5); if (getflag("sspul")) steadystate(); if (satmode[0] == 'y') { if ((d1-satdly) > 0.02) delay(d1-satdly); else delay(0.02); satpulse(satdly,v6,rof1,rof1); } else delay(d1); if (wet[0] == 'y') wet4(zero,one); status(B); rgpulse(pw, v1, rof1, rof1); if (d2>0) delay(d2- 2*rof1 -(4*pw/PI)); /*corrected evolution time */ else delay(d2); rgpulse(pw, v2, rof1, rof1); if (satmode[1] == 'y') satpulse((mixN-mixNcorr)*0.7,v7,rof1,rof1); else delay((mixN - mixNcorr)*0.7); if (getflag("PFGflg")) { if (getflag("Gzqfilt")) { obspower(zqfpwr1); rgradient('z',gzlvlzq1); delay(100.0e-6); shaped_pulse(zqfpat1,zqfpw1,zero,rof1,rof1); delay(100.0e-6); rgradient('z',0.0); delay(gstab); obspower(tpwr); } zgradpulse(gzlvl1,gt1); delay(gstab); } if (satmode[1] == 'y') satpulse((mixN-mixNcorr)*0.3,v7,rof1,rof1); else delay((mixN - mixNcorr)*0.3); if (wet[1] == 'y') wet4(zero,one); status(C); rgpulse(pw, v3, rof1, rof2); }
pulsesequence() { double gtE = getval("gtE"), gzlvlE=getval("gzlvlE"), selpwrPS = getval("selpwrPS"), selpwPS = getval("selpwPS"), gzlvlPS = getval("gzlvlPS"), droppts=getval("droppts"), gstab = getval("gstab"); int prgcycle=(int)(getval("prgcycle")+0.5); char selshapePS[MAXSTR]; //synchronize gradients to srate for probetype='nano' // Preserve gradient "area" gtE = syncGradTime("gtE","gzlvlE",1.0); gzlvlE = syncGradLvl("gtE","gzlvlE",1.0); getstr("selshapePS",selshapePS); assign(ct,v17); assign(zero,v18); assign(zero,v19); if (getflag("prgflg") && (satmode[0] == 'y') && (prgcycle > 1.5)) { hlv(ct,v17); mod2(ct,v18); dbl(v18,v18); if (prgcycle > 2.5) { hlv(v17,v17); hlv(ct,v19); mod2(v19,v19); dbl(v19,v19); } } settable(t1,4,ph1); settable(t2,32,ph2); settable(t3,8,ph3); settable(t4,16,ph4); getelem(t1,v17,v1); getelem(t2,v17,v2); getelem(t3,v17,v3); getelem(t4,v17,v4); assign(v4,oph); assign(v1,v6); add(oph,v18,oph); add(oph,v19,oph); /* BEGIN THE ACTUAL PULSE SEQUENCE */ status(A); obspower(tpwr); delay(5.0e-5); if (getflag("sspul")) steadystate(); if (satmode[0] == 'y') { if ((d1-satdly) > 0.02) delay(d1-satdly); else delay(0.02); if (getflag("slpsat")) { shaped_satpulse("relaxD",satdly,v6); if (getflag("prgflg")) shaped_purge(v1,v6,v18,v19); } else { satpulse(satdly,v6,rof1,rof1); if (getflag("prgflg")) purge(v1,v6,v18,v19); } } else delay(d1); if (getflag("wet")) wet4(zero,one); status(B); obspower(tpwr); rgpulse(pw, v1, rof1, rof2); delay(d2/2.0); delay((0.25/sw1) - gtE - gstab - 2*pw/PI - rof2 - 2*GRADIENT_DELAY); zgradpulse(gzlvlE,gtE); delay(gstab); rgpulse(2*pw,v2,rof1,rof1); delay(0.25/sw1); delay(gstab); zgradpulse(-1.0*gzlvlE,gtE); delay(gstab); obspower(selpwrPS); rgradient('z',gzlvlPS); shaped_pulse(selshapePS,selpwPS,v3,rof1,rof1); rgradient('z',0.0); obspower(tpwr); delay(gstab); zgradpulse(-2.0*gzlvlE,gtE); delay(gstab - droppts/sw); delay(d2/2.0); status(C); }
pulsesequence() { double slpwrT = getval("slpwrT"), slpwT = getval("slpwT"), mixT = getval("mixT"), gzlvl1 = getval("gzlvl1"), gt1 = getval("gt1"), gzlvl2 = getval("gzlvl2"), gt2 = getval("gt2"), gstab = getval("gstab"), selpwrA = getval("selpwrA"), selpwA = getval("selpwA"), gzlvlA = getval("gzlvlA"), gtA = getval("gtA"), selpwrB = getval("selpwrB"), selpwB = getval("selpwB"), gzlvlB = getval("gzlvlB"), gtB = getval("gtB"), selfrq = getval("selfrq"), zqfpw1 = getval("zqfpw1"), zqfpwr1 = getval("zqfpwr1"), zqfpw2 = getval("zqfpw2"), zqfpwr2 = getval("zqfpwr2"), gzlvlzq1 = getval("gzlvlzq1"), gzlvlzq2 = getval("gzlvlzq2"); char slpatT[MAXSTR], selshapeA[MAXSTR], selshapeB[MAXSTR], zqfpat1[MAXSTR], zqfpat2[MAXSTR]; //synchronize gradients to srate for probetype='nano' // Preserve gradient "area" gtA = syncGradTime("gtA","gzlvlA",1.0); gzlvlA = syncGradLvl("gtA","gzlvlA",1.0); gtB = syncGradTime("gtB","gzlvlB",1.0); gzlvlB = syncGradLvl("gtB","gzlvlB",1.0); getstr("slpatT",slpatT); getstr("selshapeA",selshapeA); getstr("selshapeB",selshapeB); getstr("zqfpat1",zqfpat1); getstr("zqfpat2",zqfpat2); if (strcmp(slpatT,"mlev17c") && strcmp(slpatT,"dipsi2") && strcmp(slpatT,"dipsi3") && strcmp(slpatT,"mlev17") && strcmp(slpatT,"mlev16")) abort_message("SpinLock pattern %s not supported!.\n", slpatT); /* STEADY-STATE PHASECYCLING */ /* This section determines if the phase calculations trigger off of (SS - SSCTR) or off of CT */ ifzero(ssctr); assign(ct,v13); elsenz(ssctr); sub(ssval, ssctr, v13); /* v13 = 0,...,ss-1 */ endif(ssctr); mod4(v13,v1); /* v1 = 0 1 2 3 */ hlv(v13,v13); hlv(v13,v13); mod4(v13,v11); /* v11 = 0000 1111 2222 3333 */ dbl(v1,oph); add(v11,oph,oph); add(v11,oph,oph); /* oph = 2v1 + 2v11 */ /* CYCLOPS */ hlv(v13,v13); hlv(v13,v14); add(v1,v14,v1); add(v11,v14,v11); add(oph,v14,oph); assign(v14,v3); add(one,v3,v3); add(two,v3,v12); sub(v3,one,v2); add(v3,one,v4); add(v3,two,v5); /* BEGIN THE ACTUAL PULSE SEQUENCE */ status(A); obspower(tpwr); delay(5.0e-5); if (getflag("sspul")) steadystate(); if (satmode[0] == 'y') { if ((d1-satdly) > 0.02) delay(d1-satdly); else delay(0.02); satpulse(satdly,v6,rof1,rof1); } else delay(d1); if (getflag("wet")) wet4(zero,one); status(B); rgpulse(pw, v14, rof1, rof1); if (selfrq != tof) obsoffset(selfrq); zgradpulse(gzlvlA,gtA); delay(gstab); obspower(selpwrA); shaped_pulse(selshapeA,selpwA,v1,rof1,rof1); obspower(tpwr); zgradpulse(gzlvlA,gtA); delay(gstab); if (selfrq != tof) delay(2*OFFSET_DELAY); zgradpulse(gzlvlB,gtB); delay(gstab); obspower(selpwrB); shaped_pulse(selshapeB,selpwB,v11,rof1,rof1); obspower(tpwr); zgradpulse(gzlvlB,gtB); delay(gstab); if (selfrq != tof) obsoffset(tof); rgpulse(pw, v14, rof1, rof1); if (getflag("Gzqfilt")) { obspower(zqfpwr1); rgradient('z',gzlvlzq1); delay(100.0e-6); shaped_pulse(zqfpat1,zqfpw1,v14,rof1,rof1); delay(100.0e-6); rgradient('z',0.0); delay(gstab); } obspower(slpwrT); zgradpulse(gzlvl1,gt1); delay(gstab); if (mixT > 0.0) { if (dps_flag) rgpulse(mixT,v3,0.0,0.0); else SpinLock(slpatT,mixT,slpwT,v2,v3,v4,v5, v9); } if (getflag("Gzqfilt")) { obspower(zqfpwr2); rgradient('z',gzlvlzq2); delay(100.0e-6); shaped_pulse(zqfpat2,zqfpw2,v14,rof1,rof1); delay(100.0e-6); rgradient('z',0.0); delay(gstab); } obspower(tpwr); zgradpulse(gzlvl2,gt2); delay(gstab); rgpulse(pw,v14,rof1,rof2); status(C); }
pulsesequence () { double gstab = getval("gstab"), gt1 = getval("gt1"), gzlvl1 = getval("gzlvl1"), gzlvlhs = getval("gzlvlhs"), wselpw = getval("wselpw"), wselpwr = getval("wselpwr"), mixN = getval("mixN"), prgtime = getval("prgtime"), prgpwr = getval("prgpwr"), phincr1 = getval("phincr1"); char wselshape[MAXSTR], sspul[MAXSTR],flipshape[MAXSTR], ESmode[MAXSTR], flipback[MAXSTR],prg_flg[MAXSTR],alt_grd[MAXSTR]; rof1 = getval("rof1"); if(rof1 > 2.0e-6) rof1 = 2.0e-6; getstr("wselshape", wselshape); getstr("flipshape", flipshape); getstr("prg_flg", prg_flg); getstr("alt_grd",alt_grd); if (phincr1 < 0.0) phincr1=360+phincr1; initval(phincr1,v8); settable(t1,16,phi1); settable(t3,16,phi3); settable(t5,16,phi5); settable(t6,16,rec); settable(t9,16,phi9); sub(ct,ssctr,v12); getelem(t1,v12,v1); getelem(t3,v12,v3); getelem(t5,v12,v5); getelem(t9,v12,v9); getelem(t6,v12,oph); add(v1,one,v10); if (alt_grd[0] == 'y') mod2(ct,v6); /* alternate gradient sign on every 2nd transient */ status(A); if (getflag("lkgate_flg")) lk_sample(); /* turn lock sampling on */ decpower(dpwr); obspower(tpwr); if (getflag("sspul")) steadystate(); delay(d1); if (getflag("lkgate_flg")) lk_hold(); /* turn lock sampling off */ status(B); if (getflag("ESmode")) { rgpulse(pw,zero,rof1,rof1); ifzero(v6); zgradpulse(gzlvl1,gt1); elsenz(v6); zgradpulse(-1.0*gzlvl1,gt1); endif(v6); obspower(wselpwr); delay(gstab); shaped_pulse(wselshape,wselpw,v9,10.0e-6,rof1); ifzero(v6); zgradpulse(gzlvl1,gt1); elsenz(v6); zgradpulse(-1.0*gzlvl1,gt1); endif(v6); obspower(tpwr); delay(gstab); /* do mixing */ rgpulse(pw,zero,rof1,rof1); ifzero(v6); rgradient('z',gzlvlhs); /* make it compatible with cold probes */ elsenz(v6); rgradient('z',-1.0*gzlvlhs); endif(v6); delay(mixN); rgradient('z',0.0); delay(gstab); if (getflag("flipback")) FlipBack(v1,v8); rgpulse(pw,v1,rof1,rof1); ExcitationSculpting(v5,v3,v6); if (prg_flg[A] == 'y') /* optional purge pulse */ { obspower(prgpwr); add(v1,one,v1); rgpulse(prgtime,v1,rof1,rof2); } else delay(rof2); } else rgpulse(pw,v1,rof1,rof2); status(C); }
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); }
pulsesequence() { double selpwrA = getval("selpwrA"), selpwA = getval("selpwA"), gzlvlA = getval("gzlvlA"), gtA = getval("gtA"), selpwrB = getval("selpwrB"), selpwB = getval("selpwB"), gzlvlB = getval("gzlvlB"), gtB = getval("gtB"), gstab = getval("gstab"), slpwrT = getval("slpwrT"), slpwT = getval("slpwT"), mixT = getval("mixT"), gzlvl1 = getval("gzlvl1"), gt1 = getval("gt1"), gzlvl2 = getval("gzlvl2"), gt2 = getval("gt2"), alfa1, t1dly, zqfpw1 = getval("zqfpw1"), zqfpwr1 = getval("zqfpwr1"), zqfpw2 = getval("zqfpw2"), zqfpwr2 = getval("zqfpwr2"), gzlvlzq1 = getval("gzlvlzq1"), gzlvlzq2 = getval("gzlvlzq2"); char slpatT[MAXSTR], selshapeA[MAXSTR], selshapeB[MAXSTR], zqfpat1[MAXSTR], zqfpat2[MAXSTR]; int phase1 = (int)(getval("phase")+0.5), prgcycle = (int)(getval("prgcycle")+0.5); //synchronize gradients to srate for probetype='nano' // Preserve gradient "area" gtA = syncGradTime("gtA","gzlvlA",1.0); gzlvlA = syncGradLvl("gtA","gzlvlA",1.0); gtB = syncGradTime("gtB","gzlvlB",1.0); gzlvlB = syncGradLvl("gtB","gzlvlB",1.0); /* LOAD AND INITIALIZE VARIABLES */ getstr("selshapeA",selshapeA); getstr("selshapeB",selshapeB); getstr("slpatT",slpatT); getstr("zqfpat1",zqfpat1); getstr("zqfpat2",zqfpat2); alfa1 = (4*pw/PI) + 4.0e-6; if (getflag("homodec")) alfa1 = alfa1 + 2.0e-6 + 2*pw; t1dly = d2-alfa1; if (t1dly > 0.0) t1dly = t1dly; else t1dly = 0.0; if (strcmp(slpatT,"mlev17c") && strcmp(slpatT,"dipsi2") && strcmp(slpatT,"dipsi3") && strcmp(slpatT,"mlev17") && strcmp(slpatT,"mlev16")) abort_message("SpinLock pattern %s not supported!.\n", slpatT); assign(ct,v17); assign(zero,v18); assign(zero,v19); if (getflag("prgflg") && (satmode[0] == 'y') && (prgcycle > 1.5)) { hlv(ct,v17); mod2(ct,v18); dbl(v18,v18); if (prgcycle > 2.5) { hlv(v17,v17); hlv(ct,v19); mod2(v19,v19); dbl(v19,v19); } } /* mod2(id2,v14); dbl(v14,v14); */ initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v14); settable(t1,4,ph1); getelem(t1,v17,v6); settable(t2,4,ph2); getelem(t2,v17,v1); settable(t3,8,ph3); getelem(t3,v17,oph); settable(t5,4,ph5); getelem(t5,v17,v21); settable(t7,8,ph7); getelem(t7,v17,v7); settable(t8,4,ph8); getelem(t8,v17,v8); if (getflag("prgflg") && (satmode[0] == 'y')) sub(v6,one,v6); add(oph,v18,oph); add(oph,v19,oph); assign(v1,v11); add(v11,two,v12); assign(oph,v13); if (phase1 == 2) {incr(v1); incr(v6);} add(v1, v14, v1); add(v6, v14, v6); add(oph,v14,oph); if (getflag("homodec")) add(oph,two,oph); /* BEGIN ACTUAL PULSE SEQUENCE CODE */ status(A); obspower(tpwr); delay(5.0e-5); if (getflag("sspul")) steadystate(); if (satmode[0] == 'y') { if ((d1-satdly) > 0.02) delay(d1-satdly); else delay(0.02); if (getflag("slpsat")) { shaped_satpulse("relaxD",satdly,v6); if (getflag("prgflg")) shaped_purge(v1,v6,v18,v19); } else { satpulse(satdly,v6,rof1,rof1); if (getflag("prgflg")) purge(v1,v6,v18,v19); } } else delay(d1); if (getflag("wet")) wet4(zero,one); status(B); rgpulse(pw, v1, rof1, 2.0e-6); if (getflag("homodec")) { delay(t1dly/2); rgpulse(2*pw,v13,1.0e-6,1.0e-6); } else delay(t1dly); zgradpulse(gzlvlA,gtA); delay(gstab); obspower(selpwrA); shaped_pulse(selshapeA,selpwA,v11,rof1,rof1); obspower(tpwr); zgradpulse(gzlvlA,gtA); delay(gstab); if (getflag("homodec")) delay(t1dly/2); zgradpulse(gzlvlB,gtB); delay(gstab); obspower(selpwrB); shaped_pulse(selshapeB,selpwB,v12,rof1,rof1); obspower(tpwr); zgradpulse(gzlvlB,gtB); delay(gstab); rgpulse(pw,v7,2.0e-6,rof1); if (mixT > 0.0) { if (getflag("Gzqfilt")) { obspower(zqfpwr1); rgradient('z',gzlvlzq1); delay(100.0e-6); shaped_pulse(zqfpat1,zqfpw1,zero,rof1,rof1); delay(100.0e-6); rgradient('z',0.0); delay(100e-6); } obspower(slpwrT); zgradpulse(gzlvl1,gt1); delay(gt1); if (dps_flag) rgpulse(mixT,v21,0.0,0.0); else SpinLock(slpatT,mixT,slpwT,v21); if (getflag("Gzqfilt")) { obspower(zqfpwr2); rgradient('z',gzlvlzq2); delay(100.0e-6); shaped_pulse(zqfpat2,zqfpw2,zero,rof1,rof1); delay(100.0e-6); rgradient('z',0.0); delay(100e-6); } obspower(tpwr); zgradpulse(gzlvl2,gt2); delay(gt2); } rgpulse(pw,v8,rof1,rof2); status(C); }
void pulsesequence() { double mixN = getval("mixN"), gzlvlC = getval("gzlvlC"), gtC = getval("gtC"), gstab = getval("gstab"), selpwrA = getval("selpwrA"), selpwA = getval("selpwA"), gzlvlA = getval("gzlvlA"), gtA = getval("gtA"), selpwrB = getval("selpwrB"), selpwB = getval("selpwB"), gzlvlB = getval("gzlvlB"), gtB = getval("gtB"), selfrq = getval("selfrq"), zqfpw3 = getval("zqfpw3"), zqfpwr3 = getval("zqfpwr3"), gzlvlzq3 = getval("gzlvlzq3"), mixNcorr, fbcorr, phincr1 = getval("phincr1"), flippw = getval("flippw"), sweeppw = getval("sweeppw"), sweeppwr = getval("sweeppwr"); char sweepshp[MAXSTR],alt_grd[MAXSTR], selshapeA[MAXSTR],flipback[MAXSTR], selshapeB[MAXSTR],zqfpat3[MAXSTR]; //synchronize gradients to srate for probetype='nano' // Preserve gradient "area" gtC = syncGradTime("gtC","gzlvlC",1.0); gzlvlC = syncGradLvl("gtC","gzlvlC",1.0); gtA = syncGradTime("gtA","gzlvlA",1.0); gzlvlA = syncGradLvl("gtA","gzlvlA",1.0); gtB = syncGradTime("gtB","gzlvlB",1.0); gzlvlB = syncGradLvl("gtB","gzlvlB",1.0); getstr("sweepshp",sweepshp); getstr("selshapeA",selshapeA); getstr("selshapeB",selshapeB); getstr("zqfpat3",zqfpat3); getstr("flipback", flipback); getstr("alt_grd",alt_grd); /* alternate gradient sign on every 2nd transient */ if (flipback[A] == 'y') fbcorr = flippw + 2.0*rof1; else fbcorr = 0.0; /* correck for flipback if used */ if (phincr1 < 0.0) phincr1=360+phincr1; initval(phincr1,v12); mixNcorr = fbcorr; if (getflag("Gzqfilt")) mixNcorr += zqfpw3 + 2.0*rof1 + 4.0e-4; mixN = mixN-mixNcorr; assign(ct,v17); hlv(v17,v1); hlv(v1,v1); hlv(v1,v1); hlv(v1,v1); mod4(v1,v1); mod4(v17,v2); add(v1,v2,v2); hlv(v17,v3); hlv(v3,v3); mod4(v3,v3); add(v1,v3,v3); dbl(v3,v4); dbl(v2,oph); add(oph,v4,oph); add(oph,v1,oph); mod2(ct,v5); /* 01 01 */ hlv(ct,v7); hlv(v7,v7); mod2(v7,v7); dbl(v7,v7); /* 0000 2222 */ add(v7,v5,v7); mod4(v7,v7); /* 0101 2323 first echo in Excitation Sculpting */ hlv(ct,v11); mod2(v11,v11); /* 0011 */ hlv(ct,v8); hlv(v8,v8); hlv(v8,v8); dbl(v8,v8); add(v8,v11,v8); mod4(v8,v8); /* 0011 0011 2233 2233 second echo in Excitation Sculpting */ dbl(v5,v5); /* 0202 */ dbl(v11,v11); /* 0022 */ add(v5,v11,v11); /* 0220 correct oph for Excitation Sculpting */ add(oph,v11,oph); mod4(oph,oph); if (alt_grd[0] == 'y') mod2(ct,v10); /* BEGIN THE ACTUAL PULSE SEQUENCE */ status(A); if (getflag("lkgate_flg")) lk_sample(); /* turn lock sampling on */ obspower(tpwr); delay(5.0e-5); if (getflag("sspul")) steadystate(); delay(d1); if (getflag("lkgate_flg")) lk_hold(); /* turn lock sampling off */ status(B); if (getflag("cpmgflg")) { rgpulse(pw, v1, rof1, 0.0); cpmg(v1, v15); } else rgpulse(pw, v1, rof1, rof1); if (selfrq != tof) obsoffset(selfrq); ifzero(v10); zgradpulse(gzlvlA,gtA); elsenz(v10); zgradpulse(-gzlvlA,gtA); endif(v10); delay(gstab); obspower(selpwrA); shaped_pulse(selshapeA,selpwA,v2,rof1,rof1); obspower(tpwr); ifzero(v10); zgradpulse(gzlvlA,gtA); elsenz(v10); zgradpulse(-gzlvlA,gtA); endif(v10); delay(gstab); if (selfrq != tof) delay(2*OFFSET_DELAY); ifzero(v10); zgradpulse(gzlvlB,gtB); elsenz(v10); zgradpulse(-gzlvlB,gtB); endif(v10); delay(gstab); obspower(selpwrB); shaped_pulse(selshapeB,selpwB,v3,rof1,rof1); obspower(tpwr); ifzero(v10); zgradpulse(gzlvlB,gtB); elsenz(v10); zgradpulse(-gzlvlB,gtB); endif(v10); delay(gstab); if (selfrq != tof) obsoffset(tof); rgpulse(pw,v1,rof1,rof1); obspower(sweeppwr); delay(0.31*mixN); ifzero(v10); zgradpulse(gzlvlC,gtC); elsenz(v10); zgradpulse(-gzlvlC,gtC); endif(v10); delay(gstab); shaped_pulse(sweepshp,sweeppw,zero,rof1,rof1); delay(gstab); ifzero(v10); zgradpulse(-gzlvlC,gtC); elsenz(v10); zgradpulse(gzlvlC,gtC); endif(v10); delay(0.49*mixN); ifzero(v10); zgradpulse(-gzlvlC,2.0*gtC); elsenz(v10); zgradpulse(gzlvlC,2.0*gtC); endif(v10); delay(gstab); if (getflag("Gzqfilt")) { obspower(zqfpwr3); ifzero(v10); rgradient('z',gzlvlzq3); elsenz(v10); rgradient('z',-gzlvlzq3); endif(v10); delay(100.0e-6); shaped_pulse(zqfpat3,zqfpw3,zero,rof1,rof1); delay(100.0e-6); rgradient('z',0.0); } else shaped_pulse(sweepshp,sweeppw,zero,rof1,rof1); delay(gstab); ifzero(v10); zgradpulse(gzlvlC,2.0*gtC); elsenz(v10); zgradpulse(-gzlvlC,2.0*gtC); endif(v10); delay(0.2*mixN); obspower(tpwr); if (flipback[A] == 'y') FlipBack(v1,v12); rgpulse(pw,v1,rof1,2.0e-6); ExcitationSculpting(v7,v8,v10); delay(rof2); status(C); }
pulsesequence() { double gzlvl1,qlvl,grise,gstab,gt1,taud2,tau1; int icosel; grise=getval("grise"); gstab=getval("gstab"); gt1=getval("gt1"); gzlvl1=getval("gzlvl1"); qlvl=getval("qlvl"); tau1 = getval("tau1"); taud2 = getval("taud2"); if (phase1 == 2) { icosel=-1; if (ix==1) fprintf(stdout,"P-type MQCOSY\n"); } else { icosel=1; /* Default to N-type experiment */ if (ix==1) fprintf(stdout,"N-type MQCOSY\n"); } qlvl++ ; status(A); obspower(satpwr); delay(d1); rgpulse(satdly,zero,rof1,rof2); obspower(tpwr); delay(1.0e-6); rgpulse(pw,oph,rof1,rof2); delay(d2); rgradient('z',gzlvl1); delay(gt1+grise); rgradient('z',0.0); txphase(oph); delay(grise); rgpulse(pw,oph,0.0,rof2); delay(taud2); rgradient('z',gzlvl1); delay(gt1+grise); rgradient('z',0.0); txphase(oph); delay(grise); delay(taud2); status(B); rgpulse(pw,oph,rof1,rof2); delay(tau1); rgradient('z',gzlvl1*qlvl*(double)icosel); delay(gt1+grise); rgradient('z',0.0); delay(grise); delay(gstab); status(C); }
void pulsesequence() { double j,pwxpwr,gzlvl1,gt1,gzlvl2,gt2,gzlvl3,gt3,grise,gstab,phase; double taumb = 0.0; int icosel,t1_counter; char mbond[MAXSTR]; sw1 = getval("sw1"); j = getval("j"); pwxpwr = getval("pwxpwr"); pwx = getval("pwx"); gzlvl1 = getval("gzlvl1"); gt1 = getval("gt1"); gzlvl2 = getval("gzlvl2"); gt2 = getval("gt2"); gzlvl3 = getval("gzlvl3"); gt3 = getval("gt3"); grise = getval("grise"); gstab = getval("gstab"); phase = getval("phase"); getstr("mbond", mbond); if (mbond[0] == 'y') taumb = getval("taumb"); tau=1/(2.0*j); if(tau < (gt3+grise)) { text_error("tau must be greater than gt3+grise\n"); psg_abort(1); } settable(t1,4,ph1); settable(t2,8,ph2); settable(t3,4,ph3); settable(t4,4,ph4); settable(t5,4,ph5); settable(t6,4,ph6); settable(t7,4,ph7); settable(t8,4,ph8); settable(t9,4,ph9); settable(t10,4,ph10); /* Gradient incrementation for hypercomplex data */ if (phase == 2) /* Hypercomplex in t1 */ { icosel = -1; /* change sign of gradient */ } else icosel = 1; /* calculate modification to phases based on current t1 values to achieve States-TPPI acquisition */ if(ix == 1) d2_init = d2; t1_counter = (int) ( (d2-d2_init)*sw1 + 0.5); if(t1_counter %2) { tsadd(t9,2,4); tsadd(t10,2,4); } status(A); decpower(pwxpwr); delay(d1); if (getflag("wet")) wet4(zero,one); decpower(pwxpwr); rcvroff(); status(B); rgpulse(pw,t1,rof1,rof2); delay(tau); if (mbond[0] == 'y') /* one-bond J(CH)-filter */ { decrgpulse(pwx, t2, rof1, 0.0); delay(taumb - tau - rof1 - pwx); } decrgpulse(pwx,t3,rof1,rof2); decphase(t5); delay(gt1 + (grise*2.0) + (2.0*GRADIENT_DELAY)); decrgpulse(pwx*2.0,t3,rof1,rof2); txphase(t6); rgradient('z',gzlvl1); delay(gt1+grise); rgradient('z',0.0); delay(grise); if (d2 > 0); delay(d2/2 + (2.0*pwx/3.14159) - pw + D2_FUDGEFACTOR); rgpulse(pw*2.0,t6,rof1,rof2); decphase(t9); rgradient('z',gzlvl2); delay(gt2+grise); rgradient('z',0.0); delay(grise); if (d2 > 0); delay(d2/2 + (2.0*pwx/3.14159) - pw + D2_FUDGEFACTOR); decrgpulse(pwx*2.0,t9,rof1,rof2); decphase(t9); delay(gt2 + (grise*2.0) + (2.0*GRADIENT_DELAY)); decrgpulse(pwx,t9,rof1,rof2); rgradient('z',(double)icosel*gzlvl3); delay(gt3+grise); rgradient('z',0.0); decpower(dpwr); setreceiver(t10); rcvron(); delay(tau-(gt3+grise)); /* delay(gstab); (Needs to be zero to phase f2 automatically) */ status(C); }
pulsesequence() { /* DECLARE VARIABLES */ char fscuba[MAXSTR],f1180[MAXSTR],f2180[MAXSTR],fsat[MAXSTR], shape[MAXSTR],sh_ad[MAXSTR],f3180[MAXSTR], N_flg[MAXSTR],diag_supp[MAXSTR]; int phase, phase2, phase3, t1_counter, t2_counter, t3_counter, icosel; double hscuba, /* length of 1/2 scuba delay */ pwx2, /* PW90 for X-nuc */ tsatpwr, /* low power level for presat*/ dhpwr2, /* power level for X hard pulses */ jxh, /* coupling for XH */ tauxh, /* delay = 1/(2jxh) */ tau1, /* t1/2 H */ tau2, /* t2/2 N */ tau3, /* t3/2 N */ sw1, /* spectral width in 1H dimension */ sw2, /* spectral width in 15N dimension */ sw3, /* spectral width in 15N dimension */ MIX, /* Total Mixing time for noesy portion */ pw_sl, /* selective 2ms pulse on water */ tpwrsl, /* power level for pw_sl */ ppm,nst,pws,bw,ofs, /* used by Pbox */ pwN,pwNlvl,compH,compC,pwC,pwClvl, d_ad, /* C high power for adiabatic pulses */ pwc_ad, /* C 90 pulse width */ zeta, /* Bax-Logan trick */ zeta1, /* Bax-Logan trick */ BigT, BigT1, gzlvl0, gzlvl1, gzlvl2, gzlvl3, gzlvl4, gzlvl5, gzlvl6, gzlvl7, gzlvl8, gzlvl9, gzlvl10, gzlvl11, gzlvl12, gstab, gt1, gt2, gt3, gt4, gt5, gt6, gt7, gt8, gt9, gt10, gt11, gt12; /* LOAD VARIABLES */ pwNlvl=getval("pwNlvl"); pwN=getval("pwN"); compC=getval("compC"); pwC=getval("pwC"); pwClvl=getval("pwClvl"); compH=getval("compH"); jxh = getval("jxh"); dhpwr2 = getval("dhpwr2"); pwx2 = getval("pwx2"); tsatpwr = getval("tsatpwr"); hscuba = getval("hscuba"); phase = (int) (getval("phase") + 0.5); phase2 = (int) (getval("phase2") + 0.5); phase3 = (int) (getval("phase3") + 0.5); sw1 = getval("sw1"); sw2 = getval("sw2"); sw3 = getval("sw3"); MIX = getval("MIX"); pw_sl = getval("pw_sl"); tpwrsl = getval("tpwrsl"); pwc_ad = getval("pwc_ad"); d_ad = getval("d_ad"); ni = getval("ni"); BigT = getval("BigT"); BigT1 = getval("BigT1"); gstab = getval("gstab"); gzlvl0 = getval("gzlvl0"); gzlvl1 = getval("gzlvl1"); gzlvl2 = getval("gzlvl2"); gzlvl3 = getval("gzlvl3"); gzlvl4 = getval("gzlvl4"); gzlvl5 = getval("gzlvl5"); gzlvl6 = getval("gzlvl6"); gzlvl7 = getval("gzlvl7"); gzlvl8 = getval("gzlvl8"); gzlvl9 = getval("gzlvl9"); gzlvl10 = getval("gzlvl10"); gzlvl11 = getval("gzlvl11"); gzlvl12 = getval("gzlvl12"); gt1 = getval("gt1"); gt2 = getval("gt2"); gt3 = getval("gt3"); gt4 = getval("gt4"); gt5 = getval("gt5"); gt6 = getval("gt6"); gt7 = getval("gt7"); gt8 = getval("gt8"); gt9 = getval("gt9"); gt10 = getval("gt10"); gt11 = getval("gt11"); gt12 = getval("gt12"); getstr("fscuba",fscuba); getstr("fsat",fsat); getstr("f1180",f1180); getstr("f2180",f2180); getstr("f3180",f3180); getstr("N_flg",N_flg); getstr("diag_supp",diag_supp); getstr("sh_ad",sh_ad); getstr("shape",shape); if(d_ad > 62) { printf("chirp power is too high \n"); psg_abort(1); } if(pwc_ad > 1.2e-3) { printf("adiabatic pulse is too long; set < 0.5 ms\n"); psg_abort(1); } setautocal(); /* activate auto-calibration flags */ if (autocal[0] != 'n') /* if autocal = 'y'(yes), 'q'(quiet), r(read), or 's'(semi) */ { strcpy(shape,"H2Osel"); strcpy(sh_ad,"C13adiab"); if(FIRST_FID) /* call Pbox */ { ppm = getval("dfrq"); ofs = 0.0; pws = 0.0005; /*0.5 ms pulse */ bw = 200.0*ppm; nst = 1000; /* nst - number of steps */ C13adiab = pbox_makeA("C13adiab", "sech", bw, pws, ofs, compC*pwC, pwClvl, nst); H2Osel = pbox_Rsh("H2Osel", "sinc90", pw_sl, 0.0, compH*pw, tpwr); ofs_check(H1ofs, C13ofs, N15ofs, H2ofs); } pw_sl = H2Osel.pw; tpwrsl = H2Osel.pwr-1.0; /* 1dB correction applied */ d_ad = C13adiab.pwr; pwc_ad = C13adiab.pw; pwx2=pwN; dhpwr2=pwNlvl; } /* check validity of parameter range */ if((dm[A] == 'y' || dm[B] == 'y' || dm[C] == 'y')) { printf("incorrect Dec1 decoupler flags! "); psg_abort(1); } if((dm2[A] == 'y' || dm2[B] == 'y' || dm2[C] == 'y')) { printf("incorrect Dec2 decoupler flags! "); psg_abort(1); } if( tsatpwr > 8 ) { printf("tsatpwr too large !!! "); psg_abort(1); } if( dpwr > -16 ) { printf("No C decoupling used in this expt. "); psg_abort(1); } if( dpwr2 > -16 ) { printf("No N decoupling used in this expt. "); psg_abort(1); } if(gzlvl0 > 500) { printf("gzlvl0_max is 500\n"); psg_abort(1); } if( gt1 > 3e-3 || gt2 > 3e-3 || gt3 > 3e-3 || gt4 > 3e-3 || gt5 > 3e-3 || gt6 > 3e-3 || gt7 > 3e-3 || gt8 > 3e-3 || gt9 > 3e-3 || gt10 > 3e-3 || gt11 > 3e-3 || gt12 > 3e-3) { printf("gradients are on for too long !!! "); psg_abort(1); } if(ix==1) { if(f1180[A] != 'n' || f2180[A] !='y' || f3180[A] != 'y') { printf("f1180 should be n, f2180 y, and f3180 should be y\n"); } } /* LOAD VARIABLES */ settable(t1, 4, phi1); settable(t2, 1, phi2); settable(t3, 1, phi3); settable(t4, 1, phi4); settable(t5, 1, phi5); settable(t6, 1, phi6); settable(t7, 1, phi7); settable(t8, 1, phi8); settable(t9, 2, phi9); settable(t10, 4, rec); /* INITIALIZE VARIABLES */ tauxh = 1/(4*jxh); /* Phase incrementation for hypercomplex data */ if( phase == 2 ) { tsadd(t2, 1, 4); tsadd(t3, 1, 4); } if ( phase2 == 2 ) { /* Hypercomplex in t2 */ tsadd(t1, 1, 4); } if ( phase3 == 2 ) /* Hypercomplex in t3 */ { tsadd(t6, 2, 4); tsadd(t7, 2, 4); tsadd(t8, 2, 4); tsadd(t10, 2, 4); icosel = -1; } else icosel = 1; /* calculate modifications to phases based on current t2/t3 values to achieve States-TPPI acquisition */ if(ix==1) d4_init = d4; t3_counter = (int) ( (d4-d4_init)*sw3 + 0.5); if(t3_counter %2) { tsadd(t4,2,4); tsadd(t5,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(t1,2,4); tsadd(t10,2,4); } if(ix==1) d2_init = d2; t1_counter = (int) ( (d2-d2_init)*sw1 + 0.5); if(t1_counter %2) { tsadd(t2,2,4); tsadd(t3,2,4); tsadd(t10,2,4); } /* set up so that get (-90,180) phase corrects in F1 if f1180 flag is y */ tau1 = d2; if(f1180[A] == 'y') { tau1 += 1/(2.0*sw1); } tau1 = tau1/2.0; if(tau1 < 0.2e-6) tau1 = 0.2e-6; /* set up so that get (-90,180) phase corrects in F2 if f2180 flag is y */ tau2 = d3; if(f2180[A] == 'y') tau2 += ( 1.0/(2.0*sw2) - (4.0/PI)*pwx2 - 2.0*(2.0*GRADIENT_DELAY + 50.0e-6 + 5.0e-6) ); if(f2180[A] == 'n') tau2 = ( tau2 - (4.0/PI)*pwx2 - 2.0*(2.0*GRADIENT_DELAY + 50.0e-6 + 5.0e-6) ); tau2 = tau2/2.0; if(ix==1) if((tau2 + 5.0e-6 - 0.5*(WFG_START_DELAY + 4.0*pw + WFG_STOP_DELAY) < 5.0e-6) && N_flg[A] == 'n') printf("tau2 is negative; set f1180 to y\n"); /* set up so that get (-90,180) phase corrects in F3 if f3180 flag is y */ tau3 = d4; if(f3180[A] == 'y') tau3 += ( 1.0/(2.0*sw3) ); tau3 = tau3/2.0; if( tau3 < 0.2e-6) tau3 = 2.0e-7; /* Now include Bax/Logan trick */ if(ni != 1) { if(diag_supp[A] == 'n') zeta = (tauxh - gt5 - 102.0e-6 + 2.0*pwx2 - 2.0e-6); else zeta = (1.0/(8.0*93.39) - gt5 - 102.0e-6 + 2.0*pwx2 - 2.0e-6); zeta = zeta / ( (double) (ni-1) ); if(zeta < 0.0) { printf("problem with zeta\n"); psg_abort(1); } } else zeta = 0.0; if( ix == 1) d2_init = d2; t1_counter = (int) ( (d2 - d2_init)*sw1 + 0.5 ); zeta1 = zeta*( (double)t1_counter ); tau1 = tau1 - zeta1; /* BEGIN ACTUAL PULSE SEQUENCE */ status(A); obspower(tsatpwr); /* Set power for presaturation */ decpower(d_ad); /* Set decoupler1 power to d_ad */ dec2power(dhpwr2); /* Set decoupler2 power to dhpwr2 */ /* Presaturation Period */ if(fsat[0] == 'y') { txphase(zero); rgpulse(d1,zero,2.0e-6,2.0e-6); /* presat */ obspower(tpwr); /* Set power for hard pulses */ if (fscuba[0] == 'y') /* Scuba pulse sequence */ { hsdelay(hscuba); rgpulse(pw,zero,1.0e-6,0.0); /* 90x180y90x */ rgpulse(2*pw,one,1.0e-6,0.0); rgpulse(pw,zero,1.0e-6,0.0); txphase(zero); delay(hscuba); } } else { obspower(tpwr); /* Set power for hard pulses */ delay(d1); } status(B); obsoffset(tof); rcvroff(); delay(20.0e-6); /* eliminate all magnetization originating from 15N */ dec2rgpulse(pwx2,zero,0.0,0.0); delay(2.0e-6); zgradpulse(gzlvl1,gt1); delay(gstab); rgpulse(pw,zero,0.0,0.0); delay(2.0e-6); zgradpulse(gzlvl2,gt2); delay(2.0e-6); delay(tauxh - gt2 - 4.0e-6); /* delay=1/4J(XH) */ sim3pulse(2*pw,0.0e-6,2*pwx2,zero,zero,zero,0.0,0.0); delay(tauxh - gt2 - 202.0e-6); /* delay=1/4J(XH) */ txphase(one); dec2phase(t1); delay(2.0e-6); zgradpulse(gzlvl2,gt2); delay(gstab); rgpulse(pw,one,0.0,0.0); /* shaped pulse */ obspower(tpwrsl); shaped_pulse(shape,pw_sl,two,2.0e-6,0.0); delay(2.0e-6); obspower(tpwr); /* shaped pulse */ delay(2.0e-6); zgradpulse(gzlvl3,gt3); delay(gstab); txphase(zero); dec2rgpulse(pwx2,t1,0.0,0.0); dec2phase(zero); if(N_flg[A] == 'n') { if(tau2 + 5.0e-6 - 0.5*(WFG2_START_DELAY + pwc_ad + WFG2_STOP_DELAY) < 0.2e-6) { rgradient('z',gzlvl0); /* use rgradient since shaping takes more time */ delay(tau2 + 5.0e-6 - 0.5*(WFG_START_DELAY + 4.0*pw + WFG_STOP_DELAY)); rgradient('z',0.0); delay(50.0e-6); shaped_pulse("composite",4.0*pw,zero,0.0,0.0); /* 90x-180y-90x */ rgradient('z',-1.0*gzlvl0); delay(tau2 + 5.0e-6 - 0.5*(WFG_START_DELAY + 4.0*pw + WFG_STOP_DELAY)); rgradient('z',0.0); delay(50.0e-6); } else { rgradient('z',gzlvl0); /* use rgradient since shaping takes more time */ delay(tau2 + 5.0e-6 - 0.5*(WFG2_START_DELAY + pwc_ad + WFG2_STOP_DELAY)); rgradient('z',0.0); delay(50.0e-6); simshaped_pulse("composite",sh_ad,4.0*pw,pwc_ad,zero,zero,0.0,0.0); rgradient('z',-1.0*gzlvl0); /* use rgradient since shaping takes more time */ delay(tau2 + 5.0e-6 - 0.5*(WFG2_START_DELAY + pwc_ad + WFG2_STOP_DELAY)); rgradient('z',0.0); delay(50.0e-6); } } /* N_flg[A] == y */ else sim3pulse(2.0*pw,0.0,2.0*pwx2,zero,zero,zero,4.0e-6,4.0e-6); dec2rgpulse(pwx2,zero,0.0,0.0); delay(2.0e-6); zgradpulse(gzlvl4,gt4); delay(gstab); if(diag_supp[A] == 'n') { /* shaped pulse */ obspower(tpwrsl); shaped_pulse(shape,pw_sl,t3,2.0e-6,0.0); delay(2.0e-6); obspower(tpwr); /* shaped pulse */ rgpulse(pw,t2,2.0e-6,0.0); txphase(t9); delay(tau1 + tauxh + zeta1 - gt5 - 102.0e-6); delay(2.0e-6); zgradpulse(gzlvl5,gt5); delay(100.0e-6); dec2rgpulse(2.0*pwx2,zero,0.0,0.0); delay(tau1); rgpulse(2.0*pw,t9,0.0,0.0); txphase(one); delay(tauxh - zeta1 - gt5 - 102.0e-6 + 2.0*pwx2); delay(2.0e-6); zgradpulse(gzlvl5,gt5); delay(100.0e-6); rgpulse(pw,one,0.0,0.0); /* shaped pulse */ obspower(tpwrsl); shaped_pulse(shape,pw_sl,one,2.0e-6,0.0); delay(2.0e-6); obspower(tpwr); /* shaped pulse */ delay(MIX - gt6 - gstab -2.0e-6); delay(2.0e-6); zgradpulse(gzlvl6,gt6); delay(gt6); delay(gstab); } else { initval(1.0,v4); obsstepsize(45.0); xmtrphase(v4); /* shaped pulse */ obspower(tpwrsl); shaped_pulse(shape,pw_sl,t3,2.0e-6,0.0); delay(2.0e-6); obspower(tpwr); /* shaped pulse */ /* xmtrphase(zero); delay(2.0e-6); initval(1.0,v4); obsstepsize(45.0); xmtrphase(v4); */ rgpulse(pw,t2,2.0e-6,0.0); xmtrphase(zero); txphase(t9); delay(tau1 + 1.0/(8.0*93.39) + zeta1 - gt5 - 102.0e-6 - SAPS_DELAY); delay(2.0e-6); zgradpulse(gzlvl5,gt5); delay(100.0e-6); dec2rgpulse(2.0*pwx2,zero,0.0,0.0); delay(tau1); rgpulse(2.0*pw,t9,0.0,0.0); txphase(one); delay(1.0/(8.0*93.39) - zeta1 - gt5 - 102.0e-6 + 2.0*pwx2); delay(2.0e-6); zgradpulse(gzlvl5,gt5); delay(100.0e-6); rgpulse(pw,one,0.0,0.0); /* shaped pulse */ obspower(tpwrsl); shaped_pulse(shape,pw_sl,one,2.0e-6,0.0); delay(2.0e-6); obspower(tpwr); /* shaped pulse */ delay(2.0e-6); zgradpulse(gzlvl6,gt6/2.0); delay(gstab); delay(MIX - 1.5*gt6 - 2.0*(gstab+2.0e-6) - 2.0*pwx2); dec2rgpulse(2.0*pwx2,zero,0.0,0.0); delay(2.0e-6); zgradpulse(gzlvl6,gt6); delay(gstab); } rgpulse(pw,two,2.0e-6,0.0); /* shaped pulse */ obspower(tpwrsl); shaped_pulse(shape,pw_sl,zero,2.0e-6,0.0); delay(2.0e-6); txphase(zero); obspower(tpwr); /* shaped pulse */ delay(2.0e-6); zgradpulse(gzlvl7,gt7); delay(2.0e-6); delay(tauxh - POWER_DELAY - 2.0e-6 - WFG_START_DELAY - pw_sl - WFG_STOP_DELAY - 2.0e-6 - POWER_DELAY - gt7 - 4.0e-6); /* delay=1/4J(XH) */ sim3pulse(2*pw,0.0e-6,2*pwx2,zero,zero,zero,0.0,0.0); delay(tauxh - gt7 - gstab -2.0e-6 - POWER_DELAY - 2.0e-6 - WFG_START_DELAY - pw_sl - WFG_STOP_DELAY - 2.0e-6 - POWER_DELAY); delay(2.0e-6); zgradpulse(gzlvl7,gt7); delay(gt7); delay(gstab); /* shaped pulse */ obspower(tpwrsl); shaped_pulse(shape,pw_sl,one,2.0e-6,0.0); obspower(tpwr); delay(2.0e-6); txphase(zero); /* shaped pulse */ rgpulse(pw,one,0.0,0.0); delay(2.0e-6); zgradpulse(gzlvl8,gt8); delay(gstab); txphase(t6); if(phase3 == 1) dec2rgpulse(pwx2,t4,4.0e-6,0.0); if(phase3 == 2) dec2rgpulse(pwx2,t5,4.0e-6,0.0); decphase(zero); if(tau3 - 0.5*(WFG_START_DELAY + pwc_ad + WFG_STOP_DELAY) < 0.2e-6) { delay(tau3); delay(tau3); } else { delay(tau3 - 0.5*(WFG_START_DELAY + pwc_ad + WFG_STOP_DELAY)); decshaped_pulse(sh_ad,pwc_ad,zero,0.0,0.0); delay(tau3 - 0.5*(WFG_START_DELAY + pwc_ad + WFG_STOP_DELAY)); } delay(2.0e-6); zgradpulse(-1.0*gzlvl11,gt11); delay(100.0e-6); delay(BigT - 4.0/PI*pwx2 + pw - 2.0*GRADIENT_DELAY - gt11 - 102.0e-6); dec2rgpulse(2.0*pwx2,zero,0.0,0.0); delay(2.0e-6); zgradpulse(gzlvl11,gt11); delay(100.0e-6); delay(BigT - 2.0*GRADIENT_DELAY - gt11 - 102.0e-6); rgpulse(pw,t6,0.0,0.0); /* shaped pulse */ obspower(tpwrsl); shaped_pulse(shape,pw_sl,t7,2.0e-6,0.0); delay(2.0e-6); txphase(zero); obspower(tpwr); /* shaped pulse */ delay(2.0e-6); zgradpulse(gzlvl9,gt9); delay(100.0e-6); delay(tauxh - POWER_DELAY - 2.0e-6 - WFG_START_DELAY - pw_sl - WFG_STOP_DELAY - 2.0e-6 - POWER_DELAY - gt9 - 102.0e-6); sim3pulse(2.0*pw,0.0,2.0*pwx2,zero,zero,zero,0.0,0.0); dec2phase(t8); delay(2.0e-6); zgradpulse(gzlvl9,gt9); delay(100.0e-6); delay(tauxh - gt9 - 102.0e-6 - POWER_DELAY - 2.0e-6 - WFG_START_DELAY - pw_sl - WFG_STOP_DELAY - 2.0e-6 - POWER_DELAY); /* shaped pulse */ obspower(tpwrsl); shaped_pulse(shape,pw_sl,zero,2.0e-6,0.0); obspower(tpwr); delay(2.0e-6); txphase(zero); /* shaped pulse */ sim3pulse(pw,0.0,pwx2,zero,zero,t8,0.0,0.0); dec2phase(zero); delay(2.0e-6); zgradpulse(gzlvl10,gt10); delay(2.0e-6); delay(tauxh - gt10 - 4.0e-6); sim3pulse(2*pw,0.0e-6,2*pwx2,zero,zero,zero,2.0e-6,2.0e-6); delay(2.0e-6); zgradpulse(gzlvl10,gt10); delay(100.0e-6); delay(tauxh - gt10 - 102.0e-6 + 2.0/PI*pw - pwx2 + 0.5*(pwx2-pw)); dec2rgpulse(pwx2,zero,0.0,0.0); dec2power(dpwr2); /* Very Important */ decpower(dpwr); delay(BigT1 - 2.0*POWER_DELAY); rgpulse(2.0*pw,zero,0.0,0.0); delay(2.0e-6); zgradpulse(-1.0*icosel*gzlvl12,gt12); delay(50.0e-6); delay(BigT1 - 2.0*GRADIENT_DELAY - 52.0e-6 - gt12); /* acquire data */ status(C); setreceiver(t10); }
pulsesequence() { double slpwrT = getval("slpwrT"), slpwT = getval("slpwT"), mixT = getval("mixT"), gzlvl1 = getval("gzlvl1"), gt1 = getval("gt1"), gzlvl2 = getval("gzlvl2"), gt2 = getval("gt2"), gstab = getval("gstab"), selpwrA = getval("selpwrA"), selpwA = getval("selpwA"), gzlvlA = getval("gzlvlA"), gtA = getval("gtA"), selpwrB = getval("selpwrB"), selpwB = getval("selpwB"), gzlvlB = getval("gzlvlB"), gtB = getval("gtB"), selfrq = getval("selfrq"), zqfpw1 = getval("zqfpw1"), zqfpwr1 = getval("zqfpwr1"), zqfpw2 = getval("zqfpw2"), zqfpwr2 = getval("zqfpwr2"), gzlvlzq1 = getval("gzlvlzq1"), gzlvlzq2 = getval("gzlvlzq2"), phincr1 = getval("phincr1"); char slpatT[MAXSTR], selshapeA[MAXSTR], selshapeB[MAXSTR], zqfpat1[MAXSTR], zqfpat2[MAXSTR], flipback[MAXSTR], alt_grd[MAXSTR]; //synchronize gradients to srate for probetype='nano' // Preserve gradient "area" gtA = syncGradTime("gtA","gzlvlA",1.0); gzlvlA = syncGradLvl("gtA","gzlvlA",1.0); gtB = syncGradTime("gtB","gzlvlB",1.0); gzlvlB = syncGradLvl("gtB","gzlvlB",1.0); getstr("slpatT",slpatT); getstr("selshapeA",selshapeA); getstr("selshapeB",selshapeB); getstr("zqfpat1",zqfpat1); getstr("zqfpat2",zqfpat2); getstr("flipback", flipback); getstr("alt_grd",alt_grd); /* alternate gradient sign on every 2nd transient */ if (strcmp(slpatT,"mlev17c") && strcmp(slpatT,"dipsi2") && strcmp(slpatT,"dipsi3") && strcmp(slpatT,"mlev17") && strcmp(slpatT,"mlev16")) abort_message("SpinLock pattern %s not supported!.\n", slpatT); /* STEADY-STATE PHASECYCLING */ /* This section determines if the phase calculations trigger off of (SS - SSCTR) or off of CT */ assign(ct,v17); ifzero(ssctr); assign(v17,v13); elsenz(ssctr); /* purge option does not adjust v13 during steady state*/ sub(ssval, ssctr, v13); /* v13 = 0,...,ss-1 */ endif(ssctr); mod4(v13,v1); /* v1 = 0 1 2 3 */ hlv(v13,v13); hlv(v13,v13); mod4(v13,v11); /* v11 = 0000 1111 2222 3333 */ dbl(v1,oph); add(v11,oph,oph); add(v11,oph,oph); /* oph = 2v1 + 2v11 */ /* CYCLOPS */ hlv(v13,v13); hlv(v13,v14); add(v1,v14,v1); add(v11,v14,v11); add(oph,v14,oph); assign(v14,v21); add(one,v21,v21); add(two,v21,v12); if (phincr1 < 0.0) phincr1=360+phincr1; initval(phincr1,v5); mod2(ct,v2); /* 01 01 */ hlv(ct,v4); hlv(v4,v4); mod2(v4,v4); dbl(v4,v4); /* 0000 2222 */ add(v4,v2,v4); mod4(v4,v4); /* 0101 2323 first echo in Excitation Sculpting */ hlv(ct,v7); mod2(v7,v7); /* 0011 */ hlv(ct,v9); hlv(v9,v9); hlv(v9,v9); dbl(v9,v9); add(v9,v7,v9); mod4(v9,v9); /* 0011 0011 2233 2233 second echo in Excitation Sculpting */ dbl(v2,v2); /* 0202 */ dbl(v7,v7); /* 0022 */ add(v2,v7,v7); /* 0220 correct oph for Excitation Sculpting */ add(oph,v7,oph); mod4(oph,oph); if (alt_grd[0] == 'y') mod2(ct,v10); /* alternate gradient sign on every 2nd transient */ /* BEGIN THE ACTUAL PULSE SEQUENCE */ status(A); if (getflag("lkgate_flg")) lk_sample(); /* turn lock sampling on */ obspower(tpwr); delay(5.0e-5); if (getflag("sspul")) steadystate(); delay(d1); if (getflag("lkgate_flg")) lk_hold(); /* turn lock sampling off */ status(B); rgpulse(pw, v14, rof1, rof1); if (selfrq != tof) obsoffset(selfrq); ifzero(v10); zgradpulse(gzlvlA,gtA); elsenz(v10); zgradpulse(-gzlvlA,gtA); endif(v10); delay(gstab); obspower(selpwrA); shaped_pulse(selshapeA,selpwA,v1,rof1,rof1); obspower(tpwr); ifzero(v10); zgradpulse(gzlvlA,gtA); elsenz(v10); zgradpulse(-gzlvlA,gtA); endif(v10); delay(gstab); if (selfrq != tof) delay(2*OFFSET_DELAY); ifzero(v10); zgradpulse(gzlvlB,gtB); elsenz(v10); zgradpulse(-gzlvlB,gtB); endif(v10); delay(gstab); obspower(selpwrB); shaped_pulse(selshapeB,selpwB,v11,rof1,rof1); obspower(tpwr); ifzero(v10); zgradpulse(gzlvlB,gtB); elsenz(v10); zgradpulse(-gzlvlB,gtB); endif(v10); delay(gstab); if (selfrq != tof) obsoffset(tof); rgpulse(pw, v14, rof1, rof1); if (getflag("Gzqfilt")) { obspower(zqfpwr1); ifzero(v10); rgradient('z',gzlvlzq1); elsenz(v10); rgradient('z',-gzlvlzq1); endif(v10); delay(100.0e-6); shaped_pulse(zqfpat1,zqfpw1,v14,rof1,rof1); delay(100.0e-6); rgradient('z',0.0); delay(gstab); } obspower(slpwrT); ifzero(v10); zgradpulse(gzlvl1,gt1); elsenz(v10); zgradpulse(-gzlvl1,gt1); endif(v10); delay(gstab); if (mixT > 0.0) { if (dps_flag) rgpulse(mixT,v21,0.0,0.0); else SpinLock(slpatT,mixT,slpwT,v21); } if (getflag("Gzqfilt")) { obspower(zqfpwr2); ifzero(v10); rgradient('z',gzlvlzq2); elsenz(v10); rgradient('z',-gzlvlzq2); endif(v10); delay(100.0e-6); shaped_pulse(zqfpat2,zqfpw2,v14,rof1,rof1); delay(100.0e-6); rgradient('z',0.0); delay(gstab); } obspower(tpwr); ifzero(v10); zgradpulse(gzlvl2,gt2); elsenz(v10); zgradpulse(-gzlvl2,gt2); endif(v10); delay(gstab); if (flipback[A] == 'y') FlipBack(v14,v5); rgpulse(pw,v14,rof1,2.0e-6); ExcitationSculpting(v4,v9,v10); delay(rof2); status(C); }
void pulsesequence() { double mix, gzlvl1,gt1, gzlvl2,gt2, gzlvl3,gt3, grise,gstab; int icosel; char sspul[MAXSTR]; /* LOAD VARIABLES */ mix = getval("mix"); getstr("sspul", sspul); gzlvl1 = getval("gzlvl1"); gt1 = getval("gt1"); gzlvl2 = getval("gzlvl2"); gt2 = getval("gt2"); gzlvl3 = getval("gzlvl3"); gt3 = getval("gt3"); grise = getval("grise"); gstab = getval("gstab"); icosel=1; if (phase1 == 2) icosel= -1; if (phase1 == 3) { initval((double) (d2_index % 32768), v14); } else assign(zero, v14); /* CHECK CONDITIONS */ if ((rof1 < 9.9e-6) && (ix == 1)) fprintf(stdout,"Warning: ROF1 is less than 10 us\n"); if (satpwr > 40) { printf("satpwr too large (must be less than 41).\n"); psg_abort(1); } /* STEADY-STATE PHASECYCLING */ /* This section determines if the phase calculations trigger off of (SS - SSCTR) or off of CT */ ifzero(ssctr); mod2(ct, v2); hlv(ct, v3); elsenz(ssctr); sub(ssval, ssctr, v12); /* v12 = 0,...,ss-1 */ mod2(v12, v2); hlv(v12, v3); endif(ssctr); /* CALCULATE PHASECYCLE */ dbl(v2, v2); hlv(v3, v10); hlv(v10, v10); if (phase1 == 0) { assign(v10, v9); hlv(v10, v10); mod2(v9, v9); } else { assign(zero, v9); } assign(v10,v1); hlv(v10, v10); mod2(v1, v1); dbl(v1, v1); add(v9, v2, v2); mod2(v10, v10); add(v1, v2, oph); add(v3, oph, oph); add(v10, oph, oph); add(v10, v1, v1); add(v10, v2, v2); add(v10, v3, v3); add(v10,v14,v5); if (phase1 == 2) { incr(v2); incr(v5); } if (phase1 == 3) add(v2, v14, v2); /* TPPI phase increment */ /*HYPERCOMPLEX MODE USES REDFIELD TRICK TO MOVE AXIAL PEAKS TO EDGE */ if ((phase1==1)||(phase1==2)) { initval(2.0*(double)(d2_index%2),v6); add(v2,v6,v2); add(oph,v6,oph); add(v5,v6,v5); } /* BEGIN THE ACTUAL PULSE SEQUENCE */ status(A); decpower(0.0); if (sspul[A] == 'y') { rgpulse(200*pw, zero, rof1, 0.0e-6); rgpulse(200*pw, one, 0.0e-6, rof1); } if (d1>hst) hsdelay(d1); if (satmode[A] == 'y') { obspower(satpwr); rgpulse(satdly,v5,rof1,rof1); obspower(tpwr); } status(B); rgpulse(pw, v2, rof1, 1.0e-6); delay(gt1 + grise + grise + 24.4e-6 - 1.0e-6 - rof1 - 2.2e-6); rgpulse(pw*2.0, v2, rof1, 1.0e-6); if (satmode[B] =='y') { if (d2 > 0.0) { obspower(satpwr); rgpulse(d2 - 9.4e-6 - rof1 - 10.0e-6 - (4.0*pw/3.14159),zero,5.0e-6,5.0e-6); obspower(tpwr); } } else { if (d2 > 0.0) delay(d2 - 1.0e-6 - rof1 - (4.0*pw/3.14159)); } rgradient('z',gzlvl1); delay(gt1+grise); rgradient('z',0.0); delay(grise); rgpulse(pw, v1, rof1, 1.0e-6); status(C); rgradient('z',gzlvl2); delay(gt2+grise); rgradient('z',0.0); delay(grise); if (satmode[C] == 'y') { hsdelay(hst); obspower(satpwr); rgpulse(mix-hst-gt2,zero,2.0e-6,rof1); obspower(tpwr); } else hsdelay(mix-gt2); status(D); rgpulse(pw, v3, rof1, rof2); delay(gt3 + grise + grise + gstab + 24.4e-6 - rof2 - rof1); rgpulse(pw*2.0, v3, rof1, rof2); rgradient('z',gzlvl3*icosel); delay(gt3+grise); rgradient('z',0.0); delay(grise); delay(gstab); /* Phase cycle: ...satdly(v5)...pw(v2)..d2..pw(v1)..mix...pw(v3)..at(oph) (for phase=1. for phase = 2 incr(v2) and incr(v5) ) v2 =[02] for axial peaks v1 =[02]16 for axial peaks v3 =[0123]2 "4 step phase cycle selection" v10 =[01]8 for quad image oph = v1+v2+v3+v10 v5: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 v2: 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 v1: 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 v3: 0 0 1 1 2 2 3 3 0 0 1 1 2 2 3 3 1 1 2 2 3 3 0 0 1 1 2 2 3 3 0 0 oph:0 2 1 3 2 0 3 1 2 0 3 1 0 2 1 3 1 3 2 0 3 1 0 2 3 1 0 2 1 3 2 0 */ }
pulsesequence() { double Dtau,Ddelta,dosytimecubed,dosyfrq,CORR,del2check,del2max, gzlvl1 = getval("gzlvl1"), gt1 = getval("gt1"), gzlvl2 = getval("gzlvl2"), gt2 = getval("gt2"), gzlvl3 = getval("gzlvl3"), gt3 = getval("gt3"), del = getval("del"), del2 = getval("del2"), gstab = getval("gstab"), gzlvlhs = getval("gzlvlhs"), hsgt = getval("hsgt"), kappa = getval("kappa"), gzlvlmax = getval("gzlvlmax"), satdly = getval("satdly"), satpwr = getval("satpwr"), satfrq = getval("satfrq"); char delflag[MAXSTR],sspul[MAXSTR],satmode[MAXSTR], triax_flg[MAXSTR],alt_grd[MAXSTR],lkgate_flg[MAXSTR]; nt = getval("nt"); getstr("delflag",delflag); getstr("sspul",sspul); getstr("triax_flg",triax_flg); getstr("satmode",satmode); getstr("alt_grd",alt_grd); getstr("lkgate_flg",lkgate_flg); //synchronize gradients to srate for probetype='nano' // Preserve gradient "area" gt1 = syncGradTime("gt1","gzlvl1",0.5); gzlvl1 = syncGradLvl("gt1","gzlvl1",0.5); CORR=1.5*gt1+3*gstab+3.0*pw+5*rof1; if (ni > 1.0) abort_message("This is a 2D, not a 3D dosy sequence: please set ni to 0 or 1"); /* check the shortest executable delay in the sequence */ if ((del-2.0*CORR-gt2-gt3)< 0.0) abort_message("The minimum value of del is %.6f seconds", 2*CORR+gt2+gt3); del2check = del/2.0-CORR-fabs(del2)-gt3; del2max = del/2.0-CORR-gt3; if (del2check< 0.0) abort_message("del2 in absolute value cannot exceed %.6f seconds",del2max); if (gzlvl1*(1+kappa)>gzlvlmax) abort_message("Warning: 'gzlvl1*(1+kappa)>gzlvlmax"); Ddelta = gt1; Dtau = 2.0*pw+2.0*rof1+gstab+gt1/2.0; dosyfrq = getval("sfrq"); dosytimecubed = Ddelta*Ddelta*(del-2.0*(Ddelta/3.0)-2.0*(Dtau/2.0)); putCmd("makedosyparams(%e,%e)\n",dosytimecubed,dosyfrq); /* phase cycling calculation */ settable(t1, 8, phi1); settable(t2, 8, phi2); settable(t3, 1, phi3); settable(t4, 4, phi4); settable(t5,16, phi5); settable(t6, 1, phi6); settable(t7, 1, phi7); settable(t8,32, phi8); settable(t9, 1, phi9); settable(t10, 1, phi10); settable(t11, 16, rec); sub(ct,ssctr,v12); getelem(t1,v12,v1); getelem(t2,v12,v2); getelem(t3,v12,v3); getelem(t4,v12,v4); getelem(t5,v12,v5); getelem(t6,v12,v6); getelem(t7,v12,v7); getelem(t8,v12,v8); getelem(t9,v12,v9); getelem(t10,v12,v10); getelem(t11,v12,oph); mod2(ct,v11); /* gradients change sign at odd transients */ /* equilibrium period */ status(A); if (sspul[0]=='y') { zgradpulse(gzlvlhs,hsgt); rgpulse(pw,zero,rof1,rof1); zgradpulse(gzlvlhs,hsgt); } if (satmode[0] == 'y') { if (d1>satdly) delay(d1-satdly); obspower(satpwr); if (satfrq != tof) obsoffset(satfrq); rgpulse(satdly,zero,rof1,rof1); if (satfrq != tof) obsoffset(tof); obspower(tpwr); } else delay(d1); if (getflag("wet")) wet4(zero,one); status(B); /* first part of bppste sequence */ if(delflag[0]=='y') { if(gt1>0 && gzlvl1!=0) { if (lkgate_flg[0] == 'y') lk_hold(); /* turn lock sampling off */ if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(2*kappa*gzlvl1,gt1/2.0); /* comp. gradient */ elsenz(v11); zgradpulse(-2.0*kappa*gzlvl1,gt1/2.0); /* comp. gradient */ endif(v11); } else zgradpulse(2*kappa*gzlvl1,gt1/2.0); /* comp. gradient */ delay(gstab); if (triax_flg[0] == 'y') /* homospoil grad */ { rgradient('x',-1.0*gzlvl2); /* along x if available */ delay(gt2); rgradient('x',0.0); } else { if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(-1.0*gzlvl2,gt2); /*spoiler comp. gradient*/ elsenz(v11); zgradpulse(1.0*gzlvl2,gt2); /*spoiler comp. gradient*/ endif(v11); } else zgradpulse(-1.0*gzlvl2,gt2); /*spoiler comp. gradient*/ } rgpulse(pw, v1, rof1, rof1); /* first 90, v1 */ if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse((1-kappa)*gzlvl1,gt1/2.0); elsenz(v11); zgradpulse(-1.0*(1-kappa)*gzlvl1,gt1/2.0); endif(v11); } else zgradpulse((1-kappa)*gzlvl1,gt1/2.0); delay(gstab); rgpulse(pw*2, v2, rof1, rof1); /* first 180, v2 */ if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(-1.0*(1+kappa)*gzlvl1,gt1/2.0); elsenz(v11); zgradpulse((1+kappa)*gzlvl1,gt1/2.0); endif(v11); } else zgradpulse(-1.0*(1+kappa)*gzlvl1,gt1/2.0); delay(gstab); rgpulse(pw, v3, rof1, rof1); /* second 90, v3 */ if (triax_flg[0] == 'y') /* homospoil grad */ { rgradient('x',gzlvl2); /* along x if available */ delay(gt2); rgradient('x',0.0); } else { if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(gzlvl2,gt2); /*spoiler gradient*/ elsenz(v11); zgradpulse(-1.0*gzlvl2,gt2); /*spoiler gradient*/ endif(v11); } else zgradpulse(gzlvl2,gt2); /*spoiler gradient*/ } delay(gstab); if (satmode[1] == 'y') { obspower(satpwr); if (satfrq != tof) obsoffset(satfrq); rgpulse(del/2.0-CORR+del2-gt2-gstab-2*rof1,zero,rof1,rof1); if (satfrq != tof) obsoffset(tof); obspower(tpwr); } else delay(del/2.0-CORR+del2-gt2-gstab); if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(2.0*kappa*gzlvl1,gt1/2.0); elsenz(v11); zgradpulse(-2.0*kappa*gzlvl1,gt1/2.0); endif(v11); } else zgradpulse(2.0*kappa*gzlvl1,gt1/2.0); delay(gstab); rgpulse(pw, v4, rof1, rof1); /* third 90, v4 */ if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse((1-kappa)*gzlvl1,gt1/2.0); elsenz(v11); zgradpulse(-1.0*(1-kappa)*gzlvl1,gt1/2.0); endif(v11); } else zgradpulse((1-kappa)*gzlvl1,gt1/2.0); delay(gstab); if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse((1-kappa)*gzlvl1,gt1/2.0); elsenz(v11); zgradpulse(-1.0*(1-kappa)*gzlvl1,gt1/2.0); endif(v11); } else zgradpulse((1-kappa)*gzlvl1,gt1/2.0); delay(gstab); rgpulse(2*pw,v5,rof1,rof1); if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(-1.0*(1+kappa)*gzlvl1,gt1/2.0); elsenz(v11); zgradpulse((1+kappa)*gzlvl1,gt1/2.0); endif(v11); } else zgradpulse(-1.0*(1+kappa)*gzlvl1,gt1/2.0); delay(gstab); if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(-1.0*(1+kappa)*gzlvl1,gt1/2.0); elsenz(v11); zgradpulse((1+kappa)*gzlvl1,gt1/2.0); endif(v11); } else zgradpulse(-1.0*(1+kappa)*gzlvl1,gt1/2.0); delay(gstab); rgpulse(pw,v6,rof1,rof1); if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(2.0*kappa*gzlvl1,gt1/2.0); elsenz(v11); zgradpulse(-2.0*kappa*gzlvl1,gt1/2.0); endif(v11); } else zgradpulse(2.0*kappa*gzlvl1,gt1/2.0); if (satmode[1] == 'y') { obspower(satpwr); if (satfrq != tof) obsoffset(satfrq); rgpulse(del/2.0-CORR-del2-gt3-2*rof1,zero,rof1,rof1); if (satfrq != tof) obsoffset(tof); obspower(tpwr); } else delay(del/2.0-CORR-del2-gt3); if (triax_flg[0] == 'y') /* homospoil grad */ { rgradient('y',gzlvl3); /* along y if available */ delay(gt3); rgradient('y',0.0); } else { if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(gzlvl3,gt3); /* 2nd spoiler gradient */ elsenz(v11); zgradpulse(-1.0*gzlvl3,gt3); /* 2nd spoiler gradient */ endif(v11); } else zgradpulse(gzlvl3,gt3); /* 2nd spoiler gradient */ } delay(gstab); rgpulse(pw,v7,rof1,rof1); if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse((1-kappa)*gzlvl1,gt1/2.0); elsenz(v11); zgradpulse(-1.0*(1-kappa)*gzlvl1,gt1/2.0); endif(v11); } else zgradpulse((1-kappa)*gzlvl1,gt1/2.0); delay(gstab); rgpulse(pw*2, v8, rof1, rof1); /* second 180, v8 */ if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(-1.0*(1+kappa)*gzlvl1,gt1/2.0); elsenz(v11); zgradpulse((1+kappa)*gzlvl1,gt1/2.0); endif(v11); } else zgradpulse(-1.0*(1+kappa)*gzlvl1,gt1/2.0); delay(gstab); rgpulse(pw,v9,rof1,rof1); /* z- filter */ if (triax_flg[0] == 'y') /* homospoil grad */ { rgradient('y',-1.0*gzlvl3); /* along y if available */ delay(gt3); rgradient('y',0.0); } else { if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(-1.0*gzlvl3,gt3); /* 2nd spoiler comp. gradient */ elsenz(v11); zgradpulse(gzlvl3,gt3); /* 2nd spoiler comp. gradient */ endif(v11); } else zgradpulse(-1.0*gzlvl3,gt3); /* 2nd spoiler comp. gradient */ } delay(gstab); if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(2.0*kappa*gzlvl1,gt1/2.0); elsenz(v11); zgradpulse(-2.0*kappa*gzlvl1,gt1/2.0); endif(v11); } else zgradpulse(2.0*kappa*gzlvl1,gt1/2.0); delay(gstab); rgpulse(pw,v10,rof1,rof2); if (lkgate_flg[0] == 'y') lk_sample(); /* turn lock sampling on */ } } else rgpulse(pw, oph,rof1,rof2); /* --- observe period --- */ status(C); }
pulsesequence() { double hsglvl = getval("hsglvl"), hsgt = getval("hsgt"), tau, evolcorr, mixN = getval("mixN"), mixNcorr, pwx180 = getval("pwx180"), pwxlvl180 = getval("pwxlvl180"), selpwxA = getval("selpwxA"), selpwxlvlA = getval("selpwxlvlA"), gzlvlA = getval("gzlvlA"), gtA = getval("gtA"), selpwxB = getval("selpwxB"), selpwxlvlB = getval("selpwxlvlB"), gzlvlB = getval("gzlvlB"), gtB = getval("gtB"), gstab = getval("gstab"), gzlvl1 = getval("gzlvl1"), gt1 = getval("gt1"), zqfpw1 = getval("zqfpw1"), zqfpwr1 = getval("zqfpwr1"), gzlvlzq1 = getval("gzlvlzq1"), impress = getval("impress"), null = getval("null"); int phase1 = (int)(getval("phase")+0.5), prgcycle = (int)(getval("prgcycle")+0.5), iimphase = (int)(getval("imphase")+0.5); char pwx180ad[MAXSTR], selpwxshpA[MAXSTR], selpwxshpB[MAXSTR], pwx180adR[MAXSTR], satmode[MAXSTR], zqfpat1[MAXSTR], wet[MAXSTR]; getstr("pwx180ad", pwx180ad); getstr("pwx180adR", pwx180adR); getstr("selpwxshpA", selpwxshpA); getstr("selpwxshpB", selpwxshpB); getstr("satmode", satmode); getstr("zqfpat1", zqfpat1); getstr("wet", wet); evolcorr=(4*pwx/PI)+2*pw+8.0e-6; mixNcorr = gt1 + gstab; if (getflag("Gzqfilt")) mixNcorr += gstab + zqfpw1; if (wet[1] == 'y') mixNcorr += 4*(getval("pwwet")+getval("gtw")+getval("gswet")); if (mixNcorr > mixN) mixN=mixNcorr; tau = 1/(4*(getval("j1xh"))); if (impress > 0.5) { selpwxA = getval("imppw1"); selpwxlvlA = getval("imppwr1"); getstr("impshp1", selpwxshpA); if (iimphase == 1) { selpwxB = getval("imppw1"); selpwxlvlB = getval("imppwr1"); getstr("impshp1",selpwxshpB); } if (iimphase == 2) { selpwxB = getval("imppw2"); selpwxlvlB = getval("imppwr2"); getstr("impshp2",selpwxshpB); } if (iimphase == 3) { selpwxB = getval("imppw3"); selpwxlvlB = getval("imppwr3"); getstr("impshp3",selpwxshpB); } if (iimphase == 4) { selpwxB = getval("imppw4"); selpwxlvlB = getval("imppwr4"); getstr("impshp4",selpwxshpB); } } assign(ct,v17); assign(zero,v18); assign(zero,v19); if (getflag("prgflg") && (satmode[0] == 'y') && (prgcycle > 1.5)) { hlv(ct,v17); mod2(ct,v18); dbl(v18,v18); if (prgcycle > 2.5) { hlv(v17,v17); hlv(ct,v19); mod2(v19,v19); dbl(v19,v19); } } settable(t1, 4, ph1); settable(t2, 2, ph2); settable(t3, 8, ph3); settable(t4, 16, ph4); settable(t5, 16, ph5); getelem(t1, v17, v1); getelem(t3, v17, v3); getelem(t4, v17, v4); getelem(t2, v17, v2); getelem(t5, v17, oph); assign(zero,v6); add(oph,v18,oph); add(oph,v19,oph); if (phase1 == 2) incr(v2); /* mod2(id2,v14); dbl(v14, v14); */ initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v14); if (impress > 0.5) { if (getflag("fadflg")) { add(v2, v14, v2); add(oph, v14, oph); } } else { add(v2, v14, v2); add(oph, v14, oph); } status(A); obspower(tpwr); delay(5.0e-5); if (getflag("sspul")) steadystate(); if (satmode[0] == 'y') { if ((d1-satdly) > 0.02) delay(d1-satdly); else delay(0.02); if (getflag("slpsat")) { shaped_satpulse("relaxD",satdly,zero); if (getflag("prgflg")) shaped_purge(v6,zero,v18,v19); } else { satpulse(satdly,zero,rof1,rof1); if (getflag("prgflg")) purge(v6,zero,v18,v19); } } else delay(d1); if (getflag("wet")) wet4(zero,one); decpower(pwxlvl); status(B); if ((getflag("PFGflg")) && (getflag("nullflg"))) { rgpulse(0.5 * pw, zero, rof1, rof1); delay(2 * tau); decpower(pwxlvl180); decshaped_pulse(pwx180ad, pwx180, zero, rof1, rof1); rgpulse(2.0 * pw, zero, rof1, rof1); delay(2 * tau + 2 * POWER_DELAY); decshaped_pulse(pwx180adR, pwx180, zero, rof1, rof1); decpower(pwxlvl); rgpulse(1.5 * pw, two, rof1, rof1); zgradpulse(hsglvl, hsgt); delay(1e-3); } else if (null != 0.0) { rgpulse(pw, zero, rof1, rof1); delay(2 * tau); decpower(pwxlvl180); decshaped_pulse(pwx180ad, pwx180, zero, rof1, rof1); rgpulse(2.0 * pw, zero, rof1, rof1); delay(2 * tau + 2 * POWER_DELAY); decshaped_pulse(pwx180adR, pwx180, zero, rof1, rof1); decpower(pwxlvl); rgpulse(pw, two, rof1, rof1); if (satmode[1] == 'y') { if (getflag("slpsat")) shaped_satpulse("BIRDnull",null,zero); else satpulse(null,zero,rof1,rof1); } else delay(null); } rgpulse(pw, v6, rof1, rof1); delay(tau); decpower(pwxlvl180); decshaped_pulse(pwx180ad, pwx180, zero, rof1, rof1); rgpulse(2.0 * pw, zero, rof1, rof1); delay(tau + 2 * POWER_DELAY); decshaped_pulse(pwx180adR, pwx180, zero, rof1, rof1); decpower(pwxlvl); rgpulse(pw, t1, rof1, rof1); if (getflag("PFGflg")) { zgradpulse(hsglvl, 2 * hsgt); delay(1e-3); } decrgpulse(pwx, v2, rof1, 2.0e-6); delay(d2 / 2); rgpulse(2 * pw, zero, 2.0e-6, 2.0e-6); delay(d2 / 2); zgradpulse(gzlvlA,gtA); delay(gstab); decpower(selpwxlvlA); decshaped_pulse(selpwxshpA, selpwxA, zero, rof1, rof1); decpower(pwxlvl); zgradpulse(gzlvlA,gtA); delay(gstab + evolcorr); zgradpulse(gzlvlB,gtB); delay(gstab); decpower(selpwxlvlB); decshaped_pulse(selpwxshpB, selpwxB, zero, rof1, rof1); decpower(pwxlvl); zgradpulse(gzlvlB,gtB); delay(gstab); decrgpulse(pwx, t4, 2.0e-6, rof1); if (getflag("PFGflg")) { zgradpulse(0.6 * hsglvl, 1.2 * hsgt); delay(1e-3); } rgpulse(pw, t3, rof1, rof1); decpower(pwxlvl180); decshaped_pulse(pwx180adR, pwx180, zero, rof1, rof1); decpower(dpwr); delay(tau); rgpulse(2 * pw, zero, rof1, rof1); decpower(pwxlvl180); decshaped_pulse(pwx180ad, pwx180, zero, rof1, rof1); decpower(dpwr); delay(tau); rgpulse(pw,three,rof1,rof1); if (satmode[1] == 'y') { if (getflag("slpsat")) shaped_satpulse("mixN1",(mixN-mixNcorr)*0.7,zero); else satpulse((mixN-mixNcorr)*0.7,zero,rof1,rof1); } else delay((mixN - mixNcorr)*0.7); if (getflag("Gzqfilt")) { obspower(zqfpwr1); rgradient('z',gzlvlzq1); delay(100.0e-6); shaped_pulse(zqfpat1,zqfpw1,zero,rof1,rof1); delay(100.0e-6); rgradient('z',0.0); delay(gstab); obspower(tpwr); } zgradpulse(gzlvl1,gt1); delay(gstab); if (satmode[1] == 'y') { if (getflag("slpsat")) shaped_satpulse("mixN2",(mixN-mixNcorr)*0.3,zero); else satpulse((mixN-mixNcorr)*0.3,zero,rof1,rof1); } else delay((mixN - mixNcorr)*0.3); if (wet[1] == 'y') wet4(zero,one); rgpulse(pw,one,rof1,rof2); status(C); }
void pulsesequence() { double mixN = getval("mixN"), gzlvlC = getval("gzlvlC"), gtC = getval("gtC"), gstab = getval("gstab"), selpwrA = getval("selpwrA"), selpwA = getval("selpwA"), gzlvlA = getval("gzlvlA"), gtA = getval("gtA"), selpwrB = getval("selpwrB"), selpwB = getval("selpwB"), gzlvlB = getval("gzlvlB"), gtB = getval("gtB"), selfrq = getval("selfrq"), zqfpw3 = getval("zqfpw3"), zqfpwr3 = getval("zqfpwr3"), gzlvlzq3 = getval("gzlvlzq3"), mixNcorr, sweeppw = getval("sweeppw"), sweeppwr = getval("sweeppwr"); char sweepshp[MAXSTR], selshapeA[MAXSTR], selshapeB[MAXSTR], zqfpat3[MAXSTR]; //synchronize gradients to srate for probetype='nano' // Preserve gradient "area" gtC = syncGradTime("gtC","gzlvlC",1.0); gzlvlC = syncGradLvl("gtC","gzlvlC",1.0); gtA = syncGradTime("gtA","gzlvlA",1.0); gzlvlA = syncGradLvl("gtA","gzlvlA",1.0); gtB = syncGradTime("gtB","gzlvlB",1.0); gzlvlB = syncGradLvl("gtB","gzlvlB",1.0); getstr("sweepshp",sweepshp); getstr("selshapeA",selshapeA); getstr("selshapeB",selshapeB); getstr("zqfpat3",zqfpat3); mixNcorr=0.0; if (getflag("Gzqfilt")) mixNcorr=getval("zqfpw3"); hlv(ct,v1); hlv(v1,v1); hlv(v1,v1); hlv(v1,v1); mod4(v1,v1); mod4(ct,v2); add(v1,v2,v2); hlv(ct,v3); hlv(v3,v3); mod4(v3,v3); add(v1,v3,v3); dbl(v3,v4); dbl(v2,oph); add(oph,v4,oph); add(oph,v1,oph); /* BEGIN THE ACTUAL PULSE SEQUENCE */ status(A); obspower(tpwr); delay(5.0e-5); delay(5.0e-5); if (getflag("sspul")) steadystate(); if (satmode[0] == 'y') { if ((d1-satdly) > 0.02) delay(d1-satdly); else delay(0.02); satpulse(satdly,zero,rof1,rof1); } else delay(d1); if (getflag("wet")) wet4(zero,one); status(B); if (selfrq != tof) obsoffset(selfrq); rgpulse(pw, v1, rof1, rof1); if (selfrq != tof) obsoffset(selfrq); zgradpulse(gzlvlA,gtA); delay(gstab); obspower(selpwrA); shaped_pulse(selshapeA,selpwA,v2,rof1,rof1); obspower(tpwr); zgradpulse(gzlvlA,gtA); delay(gstab); if (selfrq != tof) delay(2*OFFSET_DELAY); zgradpulse(gzlvlB,gtB); delay(gstab); obspower(selpwrB); shaped_pulse(selshapeB,selpwB,v3,rof1,rof1); obspower(tpwr); zgradpulse(gzlvlB,gtB); delay(gstab); if (selfrq != tof) obsoffset(tof); rgpulse(pw,v1,rof1,rof1); obspower(sweeppwr); delay(0.31*mixN); zgradpulse(gzlvlC,gtC); delay(gstab); shaped_pulse(sweepshp,sweeppw,zero,rof1,rof1); delay(gstab); zgradpulse(-gzlvlC,gtC); delay(0.49*mixN); zgradpulse(-gzlvlC,2*gtC); delay(gstab); if (getflag("Gzqfilt")) { obspower(zqfpwr3); rgradient('z',gzlvlzq3); delay(100.0e-6); shaped_pulse(zqfpat3,zqfpw3,zero,rof1,rof1); delay(100.0e-6); rgradient('z',0.0); } else shaped_pulse(sweepshp,sweeppw,zero,rof1,rof1); delay(gstab); zgradpulse(gzlvlC,2*gtC); delay(0.2*mixN); obspower(tpwr); rgpulse(pw,v1,rof1,rof2); status(C); }
pulsesequence() { double Ddelta,dosytimecubed,CORR,del2check,del2max, gzlvl3 = getval("gzlvl3"), gt3 = getval("gt3"), gzlvl1 = getval("gzlvl1"), gt1 = getval("gt1"), gzlvl2 = getval("gzlvl2"), gt2 = getval("gt2"), gstab = getval("gstab"), del = getval("del"), del2 = getval("del2"), dosyfrq = getval("sfrq"), prgtime = getval("prgtime"), prgpwr = getval("prgpwr"), gzlvlhs = getval("gzlvlhs"), hsgt = getval("hsgt"), satdly = getval("satdly"), satpwr = getval("satpwr"), satfrq = getval("satfrq"); char delflag[MAXSTR],prg_flg[MAXSTR],satmode[MAXSTR],lkgate_flg[MAXSTR], triax_flg[MAXSTR],sspul[MAXSTR],alt_grd[MAXSTR]; nt = getval("nt"); getstr("delflag",delflag); getstr("prg_flg",prg_flg); getstr("triax_flg",triax_flg); getstr("satmode",satmode); getstr("lkgate_flg",lkgate_flg); getstr("sspul",sspul); getstr("alt_grd",alt_grd); //synchronize gradients to srate for probetype='nano' // Preserve gradient "area" gt1 = syncGradTime("gt1","gzlvl1",1.0); gzlvl1 = syncGradLvl("gt1","gzlvl1",1.0); CORR=3.0*gt1+gt3+4.0*gstab+2.0*pw+3*rof1; if (ni > 1.0) abort_message("This is a 2D, not a 3D dosy sequence: please set ni to 0 or 1"); if((del-2.0*CORR-gt2-rof1)< 0.0) abort_message("The minimum value of del is %.6f seconds", 2*CORR+gt2+rof1); del2check=del/2.0-CORR-fabs(del2)-rof1; del2max=del/2.0-CORR-rof1; if (del2check< 0.0) abort_message("del2 in absolute value cannot exceed %.6f seconds", del2max); Ddelta=gt1; dosytimecubed=Ddelta*Ddelta*(del - 2.0*(Ddelta/3.0)); putCmd("makedosyparams(%e,%e)\n",dosytimecubed,dosyfrq); /* phase cycling calculation */ if (delflag[0]=='y') { settable(t1,8,ph1); settable(t2,4,ph2); settable(t3,16,ph3); settable(t4,32,ph4); settable(t5,64,ph5); settable(t6,2,ph6); settable(t7,64,ph7); sub(ct,ssctr,v10); getelem(t1,v10,v1); getelem(t2,v10,v2); getelem(t3,v10,v3); getelem(t4,v10,v4); getelem(t5,v10,v5); getelem(t6,v10,v6); getelem(t7,v10,oph); } else { add(oph,one,v1); } mod2(ct,v11); /* gradients change sign at odd transients */ /* equilibrium period */ status(A); obspower(tpwr); if (sspul[0]=='y') { zgradpulse(gzlvlhs,hsgt); rgpulse(pw,zero,rof1,rof1); zgradpulse(gzlvlhs,hsgt); } if (satmode[0] == 'y') { if (d1>satdly) delay(d1-satdly); obspower(satpwr); if (satfrq != tof) obsoffset(satfrq); rgpulse(satdly,zero,rof1,rof1); if (satfrq != tof) obsoffset(tof); obspower(tpwr); } else delay(d1); if (getflag("wet")) wet4(zero,one); status(B); /* first part of bppdel sequence */ if(delflag[0] == 'y') { if (lkgate_flg[0] == 'y') lk_hold(); /* turn lock sampling off */ if (triax_flg[0] == 'y') /* homospoil comp. grad */ { rgradient('x',gzlvl2); /* along x if available */ delay(gt2); rgradient('x',0.0); } else { if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(gzlvl2,gt2); /*spoiler comp. gradient*/ elsenz(v11); zgradpulse(-1.0*gzlvl2,gt2); /*spoiler comp. gradient*/ endif(v11); } else zgradpulse(gzlvl2,gt2); /*spoiler comp. gradient*/ } delay(gstab); rgpulse(pw, v1, rof1, rof1); /* first 90 */ if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(gzlvl1,gt1); elsenz(v11); zgradpulse(-1.0*gzlvl1,gt1); endif(v11); } else zgradpulse(gzlvl1,gt1); delay(gstab); rgpulse(pw, v2, rof1, rof1); /* second 90, v1 */ if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(-1.0*gzlvl1,gt1); elsenz(v11); zgradpulse(1.0*gzlvl1,gt1); endif(v11); } else zgradpulse(-1.0*gzlvl1,gt1); delay(gstab); if (triax_flg[0] == 'y') /* homospoil grad */ { rgradient('x',-1.0*gzlvl2); /* along x if available */ delay(gt2); rgradient('x',0.0); } else { if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(-1.0*gzlvl2,gt2); /*spoiler comp. gradient*/ elsenz(v11); zgradpulse(1.0*gzlvl2,gt2); /*spoiler comp. gradient*/ endif(v11); } else zgradpulse(-1.0*gzlvl2,gt2); /*spoiler comp. gradient*/ } if (satmode[1] == 'y') { obspower(satpwr); if (satfrq != tof) obsoffset(satfrq); rgpulse(del/2.0+del2-CORR-gt3-3*rof1,zero,rof1,rof1); if (satfrq != tof) obsoffset(tof); obspower(tpwr); } else delay(del/2.0+del2-CORR-gt3); if (triax_flg[0] == 'y') /* homospoil comp. grad */ { rgradient('y',gzlvl3); /* along y if available */ delay(gt3); rgradient('y',0.0); } else { if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(1.0*gzlvl3,gt3); /*spoiler comp. gradient*/ elsenz(v11); zgradpulse(-1.0*gzlvl3,gt3); /*spoiler comp. gradient*/ endif(v11); } else zgradpulse(1.0*gzlvl3,gt3); /*spoiler comp. gradient*/ } delay(gstab); if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(-1.0*gzlvl1,gt1); elsenz(v11); zgradpulse(1.0*gzlvl1,gt1); endif(v11); } else zgradpulse(-1.0*gzlvl1,gt1); delay(gstab); rgpulse(pw, v3, rof1, rof1); /* third 90 */ if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(gzlvl1,gt1); elsenz(v11); zgradpulse(-1.0*gzlvl1,gt1); endif(v11); } else zgradpulse(gzlvl1,gt1); delay(gstab); if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(gzlvl1,gt1); elsenz(v11); zgradpulse(-1.0*gzlvl1,gt1); endif(v11); } else zgradpulse(gzlvl1,gt1); delay(gstab); rgpulse(pw, v4, rof1, rof1); /* fourth 90 */ if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(-1.0*gzlvl1,gt1); elsenz(v11); zgradpulse(1.0*gzlvl1,gt1); endif(v11); } else zgradpulse(-1.0*gzlvl1,gt1); delay(gstab); if (triax_flg[0] == 'y') /* homospoil grad */ { rgradient('y',-1.0*gzlvl3); /* along y if available */ delay(gt3); rgradient('y',0.0); } else { if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(-1.0*gzlvl3,gt3); /*spoiler comp. gradient*/ elsenz(v11); zgradpulse(1.0*gzlvl3,gt3); /*spoiler comp. gradient*/ endif(v11); } else zgradpulse(-1.0*gzlvl3,gt3); /*spoiler comp. gradient*/ } if (satmode[1] == 'y') { obspower(satpwr); if (satfrq != tof) obsoffset(satfrq); rgpulse(del/2.0-CORR-del2-2*rof1,zero,rof1,rof1); if (satfrq != tof) obsoffset(tof); obspower(tpwr); } else delay(del/2.0-CORR-del2); if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(-1.0*gzlvl1,gt1); elsenz(v11); zgradpulse(1.0*gzlvl1,gt1); endif(v11); } else zgradpulse(-1.0*gzlvl1,gt1); delay(gstab); if (prg_flg[0] == 'y') { rgpulse(pw, v5, rof1, rof1); } /* fifth 90 */ else { rgpulse(pw, v5, rof1, 0.0); } /* fifth */ if (alt_grd[0] == 'y') { ifzero(v11); zgradpulse(gzlvl1,gt1); elsenz(v11); zgradpulse(-1.0*gzlvl1,gt1); endif(v11); } else zgradpulse(gzlvl1,gt1); delay(gstab-2.0*pw/3.14); if (prg_flg[0] == 'y') { obspower(prgpwr); rgpulse(prgtime, v6, rof1, 0.0); } if (lkgate_flg[0] == 'y') lk_sample(); /* turn lock sampling on */ } else rgpulse(pw, v1, rof1, rof2); /* first 90, v1 */ /* --- observe period --- */ status(C); }
pulsesequence() { double mixN = getval("mixN"), gzlvlC = getval("gzlvlC"), gtC = getval("gtC"), gstab = getval("gstab"), selpwrA = getval("selpwrA"), selpwA = getval("selpwA"), gzlvlA = getval("gzlvlA"), gtA = getval("gtA"), selpwrB = getval("selpwrB"), selpwB = getval("selpwB"), gzlvlB = getval("gzlvlB"), gtB = getval("gtB"), selfrq = getval("selfrq"), zqfpw3 = getval("zqfpw3"), zqfpwr3 = getval("zqfpwr3"), gzlvlzq3 = getval("gzlvlzq3"), mixNcorr, sweeppw = getval("sweeppw"), sweeppwr = getval("sweeppwr"); char sweepshp[MAXSTR], selshapeA[MAXSTR], selshapeB[MAXSTR], zqfpat3[MAXSTR]; int prgcycle=(int)(getval("prgcycle")+0.5); //synchronize gradients to srate for probetype='nano' // Preserve gradient "area" gtC = syncGradTime("gtC","gzlvlC",1.0); gzlvlC = syncGradLvl("gtC","gzlvlC",1.0); gtA = syncGradTime("gtA","gzlvlA",1.0); gzlvlA = syncGradLvl("gtA","gzlvlA",1.0); gtB = syncGradTime("gtB","gzlvlB",1.0); gzlvlB = syncGradLvl("gtB","gzlvlB",1.0); getstr("sweepshp",sweepshp); getstr("selshapeA",selshapeA); getstr("selshapeB",selshapeB); getstr("zqfpat3",zqfpat3); mixNcorr=0.0; if (getflag("Gzqfilt")) mixNcorr=getval("zqfpw3"); assign(ct,v17); assign(zero,v18); assign(zero,v19); if (getflag("prgflg") && (satmode[0] == 'y') && (prgcycle > 1.5)) { hlv(ct,v17); mod2(ct,v18); dbl(v18,v18); if (prgcycle > 2.5) { hlv(v17,v17); hlv(ct,v19); mod2(v19,v19); dbl(v19,v19); } } assign(zero,v16); if (getflag("STEP")) { mod2(v17,v16); hlv(v17,v17); } hlv(v17,v1); hlv(v1,v1); hlv(v1,v1); hlv(v1,v1); mod4(v1,v1); mod4(v17,v2); add(v1,v2,v2); hlv(v17,v3); hlv(v3,v3); mod4(v3,v3); add(v1,v3,v3); dbl(v3,v4); dbl(v2,oph); add(oph,v4,oph); add(oph,v1,oph); if (!getflag("NOE")) assign(v1,oph); /* if prgflg='n' the next two steps are non-events */ add(oph,v18,oph); add(oph,v19,oph); /* if STEP='n', the next two steps are non-events */ add(oph,v16,oph); add(oph,v16,oph); add(v1,v16,v16); /*v16 is the phase of first echo pulse in steptrain */ /* example: v1=0,0,2,2 v16=0,1,2,3 oph=0,2,2,0 - if STEP='y'*/ /* v1=0,2 v16=0 oph=0,2 - if STEP='n' */ if (getflag("prgflg") && (satmode[0] == 'y')) assign(v1,v6); /* BEGIN THE ACTUAL PULSE SEQUENCE */ status(A); obspower(tpwr); delay(5.0e-5); if (getflag("sspul")) steadystate(); if (satmode[0] == 'y') { if ((d1-satdly) > 0.02) delay(d1-satdly); else delay(0.02); if (getflag("slpsat")) { shaped_satpulse("relaxD",satdly,v6); if (getflag("prgflg")) shaped_purge(v1,v6,v18,v19); } else { satpulse(satdly,v6,rof1,rof1); if (getflag("prgflg")) purge(v1,v6,v18,v19); } } else delay(d1); if (getflag("wet")) wet4(zero,one); status(B); rgpulse(pw,v1,rof1,rof2); if (getflag("STEP")) steptrain(v1,v16); if (getflag("NOE")) { if (selfrq != tof) obsoffset(selfrq); zgradpulse(gzlvlA,gtA); delay(gstab); obspower(selpwrA); shaped_pulse(selshapeA,selpwA,v2,rof1,rof1); obspower(tpwr); zgradpulse(gzlvlA,gtA); delay(gstab); if (selfrq != tof) delay(2*OFFSET_DELAY); zgradpulse(gzlvlB,gtB); delay(gstab); obspower(selpwrB); shaped_pulse(selshapeB,selpwB,v3,rof1,rof1); obspower(tpwr); zgradpulse(gzlvlB,gtB); delay(gstab); if (selfrq != tof) obsoffset(tof); rgpulse(pw,v1,rof1,rof1); obspower(sweeppwr); delay(0.31*mixN); zgradpulse(gzlvlC,gtC); delay(gstab); shaped_pulse(sweepshp,sweeppw,zero,rof1,rof1); delay(gstab); zgradpulse(-gzlvlC,gtC); delay(0.49*mixN); zgradpulse(-gzlvlC,2*gtC); delay(gstab); if (getflag("Gzqfilt")) { obspower(zqfpwr3); rgradient('z',gzlvlzq3); delay(100.0e-6); shaped_pulse(zqfpat3,zqfpw3,zero,rof1,rof1); delay(100.0e-6); rgradient('z',0.0); } else shaped_pulse(sweepshp,sweeppw,zero,rof1,rof1); delay(gstab); zgradpulse(gzlvlC,2*gtC); delay(0.2*mixN); obspower(tpwr); rgpulse(pw,v1,rof1,rof2); } status(C); }
pulsesequence() { double cpw,cpwr,jch,gtime1,gtime2,gtime,gdel,gzlvl1, gzlvl2,gzlvl,gzlvl0,gtime0,gstab0,hsw180, csw180,delt; int iphase,icosel,ifad; char p1pat[MAXSTR],hsweep[MAXSTR],csweep[MAXSTR]; cpw = getval("cpw"); cpwr = getval("cpwr"); jch = getval("jch"); gtime0 = getval("gtime0"); gtime1 = getval("gtime1"); gtime2 = getval("gtime2"); gtime = getval("gtime"); gzlvl0 = getval("gzlvl0"); gzlvl1 = getval("gzlvl1"); gzlvl2 = getval("gzlvl2"); gzlvl = getval("gzlvl"); gdel = getval("gdel"); gstab0 = getval("gstab0"); hsw180 = getval("hsw180"); csw180 = getval("csw180"); delt = getval("delt"); getstr("p1pat",p1pat); getstr("hsweep",hsweep); getstr("csweep",csweep); iphase=(int)(getval("phase")+0.5); if(iphase==2) { icosel=-1; } else { icosel=1; } ifad=(int)(getval("ifad")+0.5); /* if ifad != 0 do FAD */ /* STEADY-STATE PHASECYCLING */ /* This section determines if the phase calculations trigger off of (SS - SSCTR) or off of CT */ ifzero(ssctr); assign(ct,v14); elsenz(ssctr); sub(ssval,ssctr,v14); /* v14 = 0,1,2,...,ss-1 */ endif(ssctr); /* PHASE CYCLING */ mod2(v14,v1); dbl(v1,v1); /* v1=0202 */ hlv(v14,v14); mod2(v14,v2); dbl(v2,v2); /* v2=0022 */ add(v1,v2,oph); hlv(v14,v14); mod2(v14,v3); dbl(v3,v3); add(one,v3,v3); /* v3=4x1,4x3 */ hlv(v14,v14); add(v14,v1,v1); add(v14,v2,v2); add(v14,v3,v3); add(v14,oph,oph); assign(v14,v12); add(one,v14,v13); if(ifad != 0) { initval(2.0*(double)(((int)(d2*sw1+0.5)%2)),v10); add(v10,oph,oph); add(v10,v12,v12); add(v10,v1,v1); } /* check parameters */ if((delt-gtime0-gstab0)<0.0) { text_error("ABORT: delt-gtime0-gstab0 is negative"); psg_abort(1); } /* gtime has to be shorter than 1/(4j) */ if((1.0/(4.0*jch)-gtime)<=0.0) { text_error("ABORT: gtime too long!"); psg_abort(1); } /* gtime has to be shorter than 1/(4j) */ if( (dpwr > 50) || (at > 1.2) ) { text_error("don't fry the probe!!!"); psg_abort(1); } /* equilibrium period */ status(A); delay(10.0e-6); decpower(cpwr); decoffset(dof); /*Middle of the X spectrum*/ delay(d1-delt-(10.0e-6)); rgpulse(pw,zero,rof1,rof2); delay(1.0/(2.0*jch)); simshaped_pulse(p1pat,csweep,p1,csw180,one,one,rof1,rof2); delay(1.0/(2.0*jch)); rgpulse(pw,zero,rof1,rof2); rgradient('z',gzlvl0); delay(gtime0); rgradient('z',0.0); delay(gstab0); delay(delt-gtime0-gstab0); /* Normal BIRDy presat for carbon-12 protons. Probably not strictly necessary, but doesn't hurt. */ status(B); /* Start of pulse sequence. INEPT in: */ rgpulse(pw,v14,rof1,rof2); delay(1.0/(4.0*jch)); simshaped_pulse(p1pat,csweep,p1,csw180,v14,v12,rof1,rof2); delay(1.0/(4.0*jch)); rgpulse(pw,v13,rof1,rof2); /* a short x or y gradient can be added right here to dephase any tranvserse magnetization */ decrgpulse(cpw,v1,rof1,1.0e-6); delay(d2/2.0); shaped_pulse(hsweep,hsw180,v3,1.0e-6,1.0e-6); delay(d2/2.0); /* CLUB sandwich: */ zgradpulse(gzlvl1*(double)icosel,gtime1); delay(gdel); decshaped_pulse(csweep,csw180,v14,rof1,rof2); zgradpulse(-gzlvl1*(double)icosel,gtime1); delay(gdel); delay(hsw180+(4.0*cpw/3.1416)+(4.0e-6)+WFG_START_DELAY+WFG_STOP_DELAY); zgradpulse(-gzlvl2*(double)icosel,gtime2); delay(gdel); decshaped_pulse(csweep,csw180,v14,rof1,rof2); zgradpulse(gzlvl2*(double)icosel,gtime2); delay(gdel); /* INEPT out */ decrgpulse(cpw,v2,1.0e-6,rof2); rgpulse(pw,v14,rof1,rof2); delay(1.0/(4.0*jch)); simshaped_pulse(p1pat,csweep,p1,csw180,v14,v14,rof1,rof2); zgradpulse(gzlvl,gtime); delay(1.0/(4.0*jch)-gtime); decpower(dpwr); /* CAUTION set dpwr to 47dB and acquire for < 1 sec */ status(C); }
pulsesequence() { double grise,gstab,gt1,gzlvl1,phase,qlvl,ss,taud2,tau1; int icosel; /* GATHER AND INITIALIZE VARIABLES */ grise = getval("grise"); gstab = getval("gstab"); gt1 = getval("gt1"); gzlvl1 = getval("gzlvl1"); phase = getval("phase"); qlvl = getval("qlvl"); ss = getval("ss"); tau1 = getval("tau1"); taud2 = getval("taud2"); if (phase == 2.0) { icosel=-1; if (ix==1) printf("P-type MQCOSY\n"); } else { icosel=1; /* Default to N-type experiment */ if (ix==1) printf("N-type MQCOSY\n"); } qlvl++ ; initval(ss, ssctr); initval(ss, ssval); /* BEGIN PULSE SEQUENCE */ status(A); delay(d1); rgpulse(pw,oph,rof1,rof2); delay(d2); rgradient('z',gzlvl1); delay(gt1+grise); rgradient('z',0.0); txphase(oph); delay(grise); rgpulse(pw,oph,0.0,rof2); delay(taud2); rgradient('z',gzlvl1); delay(gt1+grise); rgradient('z',0.0); txphase(oph); delay(grise); delay(taud2); status(B); rgpulse(pw,oph,rof1,rof2); delay(tau1); rgradient('z',gzlvl1*qlvl*(double)icosel); delay(gt1+grise); rgradient('z',0.0); delay(grise); delay(gstab); status(C); }
pulsesequence() { int phase, t1_counter; char C13refoc[MAXSTR], /* C13 sech/tanh pulse in middle of t1 */ TROSY[MAXSTR], wtg3919[MAXSTR]; double tauxh, tau1, gt2, gt1, gztm, mix, pw180, pw135, pw120, pw110, p1lvl, gzlvl1, cycles, pwNt = 0.0, /* pulse only active in the TROSY option */ gsign = 1.0, gzlvl3=getval("gzlvl3"), gt3=getval("gt3"), JNH = getval("JNH"), pwN = getval("pwN"), pwNlvl = getval("pwNlvl"), pwHs, tpwrs=0.0, /* H1 90 degree pulse length at tpwrs */ compH = getval("compH"), sw1 = getval("sw1"), pwClvl = getval("pwClvl"), /* coarse power for C13 pulse */ pwC = getval("pwC"), /* C13 90 degree pulse length at pwClvl */ rfst = 4095.0, /* fine power for the stCall pulse */ compC = getval("compC"); /* adjustment for C13 amplifier compr-n */ gztm=getval("gztm"); gt2=getval("gt2"); gt1= getval("gt1"); mix=getval("mix"); phase = (int) (getval("phase") + 0.5); sw1 = getval("sw1"); pw180 = getval("pw180"); gzlvl1 = getval("gzlvl1"); /* INITIALIZE VARIABLES */ pw135 = pw180 / 180.0 * 135.0 ; pw120 = pw180 / 180.0 * 120.0 ; pw110 = pw180 / 180.0 * 110.0 ; p1lvl = tpwr -20*log10(pw180/(compH*2.0*pw)); p1lvl = (int)(p1lvl + 0.5); cycles = mix / (730.0/180.0 * pw180) - 8.0; initval(cycles, v10); /* mixing time cycles */ getstr("C13refoc",C13refoc); getstr("TROSY",TROSY); getstr("wtg3919",wtg3919); tauxh = ((JNH != 0.0) ? 1/(4*(JNH)) : 2.25e-3); if (C13refoc[A]=='y') /* 180 degree adiabatic C13 pulse from 0 to 200 ppm */ { rfst = (compC*4095.0*pwC*4000.0*sqrt((30.0*sfrq/600.0+7.0)/0.35)); rfst = (int) (rfst + 0.5); if ( 1.0/(4000.0*sqrt((30.0*sfrq/600.0+7.0)/0.35)) < pwC ) { text_error( " Not enough C13 RF. pwC must be %f usec or less.\n", (1.0e6/(4000.0*sqrt((30.0*sfrq/600.0+7.0)/0.35))) ); psg_abort(1); } } /* selective H20 one-lobe sinc pulse needs 1.69 */ pwHs = getval("pwHs"); /* times more power than a square pulse */ if (pwHs > 1e-6) tpwrs = tpwr - 20.0*log10(pwHs/(compH*pw*1.69)); else tpwrs = 0.0; tpwrs = (int) (tpwrs); /* check validity of parameter range */ if((dm[A] == 'y' || dm[B] == 'y' || dm[C] == 'y' )) { text_error("incorrect Dec1 decoupler flags! "); psg_abort(1); } if((dm2[A] == 'y' || dm2[B] == 'y') ) { text_error("incorrect Dec2 decoupler flags! "); psg_abort(1); } if( dpwr > 0 ) { text_error("don't fry the probe, dpwr too large! "); psg_abort(1); } if( dpwr2 > 50 ) { text_error("don't fry the probe, dpwr2 too large! "); psg_abort(1); } if ((TROSY[A]=='y') && (dm2[C] == 'y')) { text_error("Choose either TROSY='n' or dm2='n' ! "); psg_abort(1); } /* LOAD VARIABLES */ if(ix == 1) d2_init = d2; t1_counter = (int) ( (d2-d2_init)*sw1 + 0.5); tau1 = d2/2.0; /* LOAD PHASE TABLES */ settable(t6, 4, recT); if (TROSY[A] == 'y') { gsign = -1.0; pwNt = pwN; assign(zero,v7); assign(two,v8); settable(t1, 1, phT1); settable(t2, 4, phT2); settable(t3, 1, phT4); settable(t4, 1, phT4); settable(t5, 4, recT); } else { assign(one,v7); assign(three,v8); settable(t1, 4, phi1); settable(t2, 2, phi2); settable(t3, 8, phi3); settable(t4, 16, phi4); settable(t5, 8, rec); } if ( phase1 == 2 ) /* Hypercomplex in t1 */ { if (TROSY[A] == 'y') { tsadd(t3, 2, 4); tsadd(t5, 2, 4); } else tsadd(t2, 1, 4); } if(t1_counter %2) /* calculate modification to phases based on */ { tsadd(t2,2,4); tsadd(t5,2,4); tsadd(t6,2,4); } /* current t1 values */ if(wtg3919[0] != 'y') { add(one,v7,v7); add(one,v8,v8); } /* sequence starts!! */ status(A); obspower(tpwr); dec2power(pwNlvl); decpower(pwClvl); decpwrf(rfst); delay(d1); status(B); /* slective excitation of water */ rgpulse(pw, zero, rof1, rof1); zgradpulse(gzlvl1,gt1); obspower(tpwrs+6); /*make it a 180 degree inversion pulse*/ shaped_pulse("H2Osinc", pwHs, zero, rof1, 0.0); obspower(tpwr); zgradpulse(gzlvl1,gt1); /* CLEANEX-PM spin-lock */ if (cycles > 1.5000) { obspower(p1lvl); txphase(zero); rgpulse(pw135, zero, 0.0, 0.0); rgpulse(pw120, two, 0.0, 0.0); rgpulse(pw110, zero, 0.0, 0.0); rgpulse(pw110, two, 0.0, 0.0); rgpulse(pw120, zero, 0.0, 0.0); rgpulse(pw135, two, 0.0, 0.0); rgradient('z',gztm/4.0); rgpulse(pw135, zero, 0.0, 0.0); rgpulse(pw120, two, 0.0, 0.0); rgpulse(pw110, zero, 0.0, 0.0); rgpulse(pw110, two, 0.0, 0.0); rgpulse(pw120, zero, 0.0, 0.0); rgpulse(pw135, two, 0.0, 0.0); rgradient('z',gztm/2.0); rgpulse(pw135, zero, 0.0, 0.0); rgpulse(pw120, two, 0.0, 0.0); rgpulse(pw110, zero, 0.0, 0.0); rgpulse(pw110, two, 0.0, 0.0); rgpulse(pw120, zero, 0.0, 0.0); rgpulse(pw135, two, 0.0, 0.0); rgpulse(pw135, zero, 0.0, 0.0); rgpulse(pw120, two, 0.0, 0.0); rgpulse(pw110, zero, 0.0, 0.0); rgpulse(pw110, two, 0.0, 0.0); rgpulse(pw120, zero, 0.0, 0.0); rgpulse(pw135, two, 0.0, 0.0); rgradient('z',gztm/4.0*3.0); rgpulse(pw135, zero, 0.0, 0.0); rgpulse(pw120, two, 0.0, 0.0); rgpulse(pw110, zero, 0.0, 0.0); rgpulse(pw110, two, 0.0, 0.0); rgpulse(pw120, zero, 0.0, 0.0); rgpulse(pw135, two, 0.0, 0.0); rgradient('z',gztm); starthardloop(v10); rgpulse(pw135, zero, 0.0, 0.0); rgpulse(pw120, two, 0.0, 0.0); rgpulse(pw110, zero, 0.0, 0.0); rgpulse(pw110, two, 0.0, 0.0); rgpulse(pw120, zero, 0.0, 0.0); rgpulse(pw135, two, 0.0, 0.0); endhardloop(); rgradient('z',gztm/4.0*3.0); rgpulse(pw135, zero, 0.0, 0.0); rgpulse(pw120, two, 0.0, 0.0); rgpulse(pw110, zero, 0.0, 0.0); rgpulse(pw110, two, 0.0, 0.0); rgpulse(pw120, zero, 0.0, 0.0); rgpulse(pw135, two, 0.0, 0.0); rgradient('z',gztm/2.0); rgpulse(pw135, zero, 0.0, 0.0); rgpulse(pw120, two, 0.0, 0.0); rgpulse(pw110, zero, 0.0, 0.0); rgpulse(pw110, two, 0.0, 0.0); rgpulse(pw120, zero, 0.0, 0.0); rgpulse(pw135, two, 0.0, 0.0); rgradient('z',gztm/4.0); rgpulse(pw135, zero, 0.0, 0.0); rgpulse(pw120, two, 0.0, 0.0); rgpulse(pw110, zero, 0.0, 0.0); rgpulse(pw110, two, 0.0, 0.0); rgpulse(pw120, zero, 0.0, 0.0); rgpulse(pw135, two, 0.0, 0.0); rgradient('z', 0.0); rgpulse(pw135, zero, 0.0, 0.0); rgpulse(pw120, two, 0.0, 0.0); rgpulse(pw110, zero, 0.0, 0.0); rgpulse(pw110, two, 0.0, 0.0); rgpulse(pw120, zero, 0.0, 0.0); rgpulse(pw135, two, 0.0, 0.0); obspower(tpwr); } /* ....................................... */ zgradpulse(0.3*gzlvl3,gt3); txphase(zero); dec2phase(zero); delay(tauxh-gt3); /* delay=1/4J(XH) */ sim3pulse(2*pw,0.0,2*pwN,t4,zero,zero,rof1,rof1); zgradpulse(0.3*gzlvl3,gt3); dec2phase(t2); delay(tauxh-gt3 ); /* delay=1/4J(XH) */ rgpulse(pw, t1, rof1, rof1); zgradpulse(0.5*gsign*gzlvl3,gt3); delay(200.0e-6); decphase(zero); if (TROSY[A] == 'y') { txphase(t3); if ( phase1 == 2 ) dec2rgpulse(pwN, t6, rof1, 0.0); else dec2rgpulse(pwN, t2, rof1, 0.0); if ( (C13refoc[A]=='y') && (d2 > 1.0e-3 + 2.0*WFG2_START_DELAY) ) { delay(d2/2.0 - 0.5e-3 - WFG2_START_DELAY); decshaped_pulse("stC200", 1.0e-3, zero, 0.0, 0.0); delay(d2/2.0 - 0.5e-3 - WFG2_STOP_DELAY); } else delay(d2); rgpulse(pw, t3, 0.0, rof1); zgradpulse(0.3*gzlvl3,gt3); delay(tauxh-gt3 ); sim3pulse(2*pw,0.0,2*pwN,zero,zero,zero,rof1,rof1); zgradpulse(0.3*gzlvl3,gt3); delay(tauxh-gt3 ); sim3pulse(pw,0.0,pwN,zero,zero,t3,rof1,rof1); } else { txphase(t4); dec2rgpulse(pwN, t2, rof1, 0.0); if ( (C13refoc[A]=='y') && (tau1 > 0.5e-3 + WFG2_START_DELAY) ) { delay(tau1 - 0.5e-3 - WFG2_START_DELAY); simshaped_pulse("", "stC200", 2.0*pw, 1.0e-3, t4, zero, 0.0, 0.0); dec2phase(t3); delay(tau1 - 0.5e-3 - WFG2_STOP_DELAY); } else { tau1 -= pw; if (tau1 < 0.0) tau1 = 0.0; delay(tau1); rgpulse(2.0*pw, t4, 0.0, 0.0); dec2phase(t3); delay(tau1); } dec2rgpulse(pwN, t3, 0.0, 0.0); zgradpulse(0.5*gzlvl3,gt3); delay(200.0e-6); rgpulse(pw, two, rof1, rof1); } zgradpulse(gzlvl3,gt3); txphase(v7); dec2phase(zero); delay(tauxh-gt3-pwHs-rof1); if(wtg3919[0] == 'y') { rgpulse(pw*0.231,v7,rof1,rof1); delay(d3); rgpulse(pw*0.692,v7,rof1,rof1); delay(d3); rgpulse(pw*1.462,v7,rof1,rof1); delay(d3/2-pwN); dec2rgpulse(2*pwN, zero, rof1, rof1); txphase(v8); delay(d3/2-pwN); rgpulse(pw*1.462,v8,rof1,rof1); delay(d3); rgpulse(pw*0.692,v8,rof1,rof1); delay(d3); rgpulse(pw*0.231,v8,rof1,rof1); } else { obspower(tpwrs); shaped_pulse("H2Osinc", pwHs, v7, rof1, 0.0); obspower(tpwr); sim3pulse(2.0*pw, 0.0, 2.0*pwN, v8, zero, zero, 0.0, 0.0); obspower(tpwrs); shaped_pulse("H2Osinc", pwHs, v7, rof1, 0.0); obspower(tpwr); } zgradpulse(gzlvl3,gt3); delay(tauxh-gt3-pwHs-rof1-pwNt-POWER_DELAY); dec2rgpulse(pwNt, zero, rof1, rof1); dec2power(dpwr2); status(C); setreceiver(t5); }
pulsesequence() { double d3 = getval("d3"), vtcomplvl = getval("vtcomplvl"), gzlvl = getval("gzlvl"), shapedpw90 = getvalnwarn("shapedpw90"), shapedpw180 = getvalnwarn("shapedpw180"), shapedpwr90 = getvalnwarn("shapedpwr90"), shapedpwr180 = getvalnwarn("shapedpwr180"), gt,gts,lvlf; int hs_gradtype; char shaped[MAXSTR], shapename90[MAXSTR], shapename180[MAXSTR]; getstrnwarn("shaped", shaped); getstrnwarn("shapename90", shapename90); getstrnwarn("shapename180", shapename180); settmpgradtype("tmpgradtype"); hs_gradtype = ((specialGradtype == 'h') || (specialGradtype == 'a')); if ((p1==0.0) && ((vtcomplvl>0.5) || (hs_gradtype))) { p1 = 2.0*pw; } if ((vtcomplvl==2) && ((hs_gradtype) || (spin>0))) { vtcomplvl = 1; if (ix==1) { text_message("gmapz: vtcomplvl set to 1\n"); putCmd("setvalue('vtcomplvl',%.0f)\n",vtcomplvl); putCmd("setvalue('vtcomplvl',%.0f,'processed')\n",vtcomplvl); } } /* lvlf, gt, gts only used for convection compensation */ if (gradtype[2]=='l') lvlf=2.5; else lvlf=3.0; if ((hs_gradtype) || (spin>0)) lvlf=1.0; gt = (0.5*at + d2)/lvlf; gts=0.18*at/lvlf; gts = 0.2*at/lvlf; if (vtcomplvl==2) gt += gts; gt *= 2.0; settable(t1,16,ph1); settable(t2,2,ph2); settable(t3,8,ph3); settable(t4,16,ph4); sub(ct,ssctr,v12); getelem(t1,v12,v1); getelem(t2,v12,v2); getelem(t3,v12,v3); getelem(t4,v12,oph); if (vtcomplvl < 0.5) { getelem(t4,v12,v1); getelem(t1,v12,v2); } /* --- equilibration period --- */ status(A); delay(d1); /* --- initial pulse --- */ status(B); if (shaped[A] == 'y') { obspower(shapedpwr90); shaped_pulse(shapename90,shapedpw90,v1,rof1,rof2); obspower(tpwr); } else pulse(pw,v1); /* instead of hard pulse, could use shapedpulse("gauss",pw,oph,rof1,rof2); or "bir4_90_512" or other shape for selective excitation. selective inversion pulses may or may not work as well. */ /* --- shim phase encode, not during PFG recovery --- */ delay(2e-5+d3); /* First case: No convection compensation, traditional sequence */ if (vtcomplvl < 0.5) { if (p1 > 0) { zgradpulse(gzlvl,at/2+d2); delay(d2); if (shaped[A] == 'y') { obspower(shapedpwr180); shaped_pulse(shapename180,shapedpw180,v2,rof1,rof2); obspower(tpwr); } else pulse(p1,v2); delay(d2); } else { zgradpulse(-gzlvl,at/2+d2); delay(d2*2); } } else /* (vtcomplvl > 0.5) */ { /* Second case: convection compensation */ zgradpulse(gzlvl,at/2+d2); delay(d2); if (vtcomplvl==2) { zgradpulse(lvlf*gzlvl,gts); delay(d2); } if (shaped[A] == 'y') { obspower(shapedpwr180); shaped_pulse(shapename180,shapedpw180,v2,rof1,rof2); } else pulse(p1,v2); delay(d2); zgradpulse(lvlf*gzlvl,gt); delay(d2); if (shaped[A] == 'y') { shaped_pulse(shapename180,shapedpw180,v3,rof1,rof2); obspower(tpwr); } else pulse(p1,v3); delay(d2); if (vtcomplvl==2) { zgradpulse(lvlf*gzlvl,gts); delay(d2); } } /* --- acq. of echo during gradient --- */ rgradient('z',gzlvl); delay(d2); /* gradient switches off at end of acq. */ }
pulsesequence () { double gstab = getval("gstab"), gt1 = getval("gt1"), gzlvl1 = getval("gzlvl1"), gt2 = getval("gt2"), gzlvl2 = getval("gzlvl2"), mix = getval("mix"), wrefpw = getval("wrefpw"), wrefpwr = getval("wrefpwr"), wrefpwrf = getval("wrefpwrf"), phincr1 = getval("phincr1"), flippwr = getval("flippwr"), flippwrf = getval("flippwrf"), flippw = getval("flippw"), trimpwr = getval("trimpwr"), gt0 = getval("gt0"), gzlvl0 = getval("gzlvl0"), trim = getval("trim"), h1freq_local = getval("h1freq_local"), gcal_local = getval("gcal_local"), coil_size = getval("coil_size"), zqpw=getval("zqpw"), zqpwr=getval("zqpwr"), swfactor = 9.0, /* do the adiabatic sweep over 9.0*sw */ gzlvlzq,invsw; int iphase = (int) (getval("phase") + 0.5); char sspul[MAXSTR], trim_flg[MAXSTR], wrefshape[MAXSTR],flipback[MAXSTR], zqshape[MAXSTR], zqflg[MAXSTR], alt_grd[MAXSTR],flipshape[MAXSTR]; getstr("sspul", sspul); getstr("trim_flg", trim_flg); getstr("wrefshape", wrefshape); getstr("flipshape", flipshape); getstr("flipback", flipback); getstr("zqshape", zqshape); getstr("zqflg", zqflg); getstr("alt_grd",alt_grd); rof1 = getval("rof1"); if(rof1 > 2.0e-6) rof1=2.0e-6; if (phincr1 < 0.0) phincr1=360+phincr1; initval(phincr1,v13); if (coil_size == 0) coil_size=16; invsw = sw*swfactor; if (invsw > 60000.0) invsw = 60000.0; /* do not exceed 60 kHz */ invsw = invsw/0.97; /* correct for end effects of the cawurst-20 shape */ if ((zqflg[0] == 'y') && (mix < 0.051)) { printf("Mixing time should be more than 51 ms for zero quantum suppression\n"); psg_abort(1); } gzlvlzq=(invsw*h1freq_local*2349)/(gcal_local*coil_size*sfrq*1e+6); settable(t1,16,phi1); settable(t2,16,phi2); settable(t3,16,phi3); settable(t4,16,phi4); settable(t5,16,phi5); settable(t7,16,phi7); settable(t8,16,phi8); settable(t6,16,rec); settable(t9,16,phi9); sub(ct,ssctr,v12); getelem(t1,v12,v1); getelem(t2,v12,v2); getelem(t3,v12,v3); getelem(t4,v12,v4); getelem(t5,v12,v5); getelem(t6,v12,oph); getelem(t7,v12,v7); getelem(t8,v12,v8); getelem(t9,v12,v6); if (zqflg[0] == 'y') add(oph,two,oph); mod2(ct,v10); /*changing gradient sign on even transitents */ if (iphase == 2) { incr(v1); incr(v6); } /* HYPERCOMPLEX MODE USES REDFIELD TRICK TO MOVE AXIAL PEAKS TO EDGE */ initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v9); if ((iphase == 1)||(iphase == 2)) {add(v1,v9,v1); add(oph,v9,oph), add(v6,v9,v6);} status(A); obspower(tpwr); obspwrf(4095.0); decpower(dpwr); if (sspul[A] == 'y') { zgradpulse(gzlvl0,gt0); rgpulse(pw,zero,rof1,rof1); zgradpulse(gzlvl0,gt0); } delay(d1); status(B); obsstepsize(45.0); initval(7.0,v11); xmtrphase(v11); rgpulse(pw,v1,rof1,rof1); if (trim_flg[0] == 'y') { obspower(trimpwr); rgpulse(trim,v6,rof1,rof1); obspower(tpwr); } xmtrphase(zero); if (trim_flg[0] == 'y') { if (d2-2.0*pw/3.14 - 2.0*rof1 - SAPS_DELAY - POWER_DELAY> 0) delay(d2-2.0*pw/3.14-2.0*rof1-SAPS_DELAY - POWER_DELAY); else delay(0.0); } else { if (d2-4.0*pw/3.14 - 2.0*rof1 - SAPS_DELAY> 0) delay(d2-4.0*pw/3.14-2.0*rof1-SAPS_DELAY); else delay(0.0); } rgpulse(pw,v7,rof1,rof1); if (zqflg[0] == 'y') { ifzero(v10); rgradient('z',gzlvlzq); elsenz(v10); rgradient('z',-1.0*gzlvlzq); endif(v10); obspower(zqpwr); shaped_pulse(zqshape,zqpw,zero,rof1,rof1); obspower(tpwr); rgradient('z',0.0); delay((mix-0.050-gt1)*0.7); if (alt_grd[0] == 'y') { ifzero(v10); zgradpulse(gzlvl1,gt1); elsenz(v10); zgradpulse(-1.0*gzlvl1,gt1); endif(v10); } else zgradpulse(gzlvl1,gt1); if (flipback[0] == 'n') delay((mix-0.05-gt1)*0.3); else { delay((mix-0.05-gt1)*0.3 - flippw - rof1); obsstepsize(1.0); xmtrphase(v13); add(v8,two,v8); obspower(flippwr+6); obspwrf(flippwrf); shaped_pulse(flipshape,flippw,v8,rof1,rof1); xmtrphase(zero); add(v8,two,v8); obspower(tpwr); obspwrf(4095.0); } } else { delay(mix*0.7); if (alt_grd[0] == 'y') { ifzero(v10); zgradpulse(gzlvl1,gt1); elsenz(v10); zgradpulse(-1.0*gzlvl1,gt1); endif(v10); } else zgradpulse(gzlvl1,gt1); if (flipback[0] == 'n') delay(mix*0.3-gt2); else { delay(mix*0.3 - flippw - rof1); obsstepsize(1.0); xmtrphase(v13); add(v8,two,v8); obspower(flippwr+6); obspwrf(flippwrf); shaped_pulse(flipshape,flippw,v8,rof1,rof1); xmtrphase(zero); add(v8,two,v8); obspower(tpwr); obspwrf(4095.0); } } obspower(tpwr); rgpulse(pw,v8,rof1,rof1); if (alt_grd[0] == 'y') { ifzero(v10); zgradpulse(gzlvl2,gt2); elsenz(v10); zgradpulse(-1.0*gzlvl2,gt2); endif(v10); } else zgradpulse(gzlvl2,gt2); delay(gstab); obspower(wrefpwr+6); obspwrf(wrefpwrf); shaped_pulse(wrefshape,wrefpw,v5,rof1,rof1); obspower(tpwr); obspwrf(4095.0); rgpulse(2.0*pw,v4,rof1,rof1); if (alt_grd[0] == 'y') { ifzero(v10); zgradpulse(gzlvl2,gt2); elsenz(v10); zgradpulse(-1.0*gzlvl2,gt2); endif(v10); } else zgradpulse(gzlvl2,gt2); delay(gstab); if (alt_grd[0] == 'y') { ifzero(v10); zgradpulse(1.2*gzlvl2,gt2); elsenz(v10); zgradpulse(-1.2*gzlvl2,gt2); endif(v10); } else zgradpulse(1.2*gzlvl2,gt2); delay(gstab); obspower(wrefpwr+6); obspwrf(wrefpwrf); shaped_pulse(wrefshape,wrefpw,v3,rof1,rof1); obspower(tpwr); obspwrf(4095.0); rgpulse(2.0*pw,v2,rof1,rof2); if (alt_grd[0] == 'y') { ifzero(v10); zgradpulse(1.2*gzlvl2,gt2); elsenz(v10); zgradpulse(-1.2*gzlvl2,gt2); endif(v10); } else zgradpulse(1.2*gzlvl2,gt2); delay(gstab); status(C); }
pulsesequence() { int selectCTP = getval("selectCTP"); double kappa = getval("kappa"), gzlvl1 = getval("gzlvl1"), gzlvl3 = getval("gzlvl3"), gzlvl_max = getval("gzlvl_max"), gt1 = getval("gt1"), gt3 = getval("gt3"), del = getval("del"), gstab = getval("gstab"), gss = getval("gss"), tweak = getval("tweak"), gzlvl_read=getval("gzlvl_read"), num=getval("num"), hsgt = getval("hsgt"), gzlvlhs = getval("gzlvlhs"), avm,gzlvl4,gt4,Dtau,Ddelta,dosytimecubed,dosyfrq; char alt_grd[MAXSTR],avflag[MAXSTR],delflag[MAXSTR],STEflag[MAXSTR],sspul[MAXSTR]; gt4 = 2.0*gt1; getstr("alt_grd",alt_grd); getstr("delflag",delflag); getstr("avflag",avflag); getstr("STEflag",STEflag); getstr("sspul",sspul); avm=0.0; if(avflag[0]=='y') { avm=1.0; } /* Decrement gzlvl4 as gzlvl1 is incremented, to ensure constant energy dissipation in the gradient coil Current through the gradient coil is proportional to gzlvl */ gzlvl4=sqrt(2.0*gt1*(1+3.0*kappa*kappa)/gt4)*sqrt(gzlvl_max*gzlvl_max/((1+kappa)*(1+kappa))-gzlvl1*gzlvl1); /* In pulse sequence, del>4.0*pw+3*rof1+2.0*gt1+5.0*gstab+gt3 */ if ((del-(4*pw+3.0*rof1+2.0*gt1+5.0*gstab+gt3)) < 0.0) { del=(4*pw+3.0*rof1+2.0*gt1+5.0*gstab+gt3); printf("Warning: del too short; reset to minimum value\n");} if ((d1 - (gt3+gstab) -2.0*(gt4/2.0+gstab)) < 0.0) { d1 = (gt3+gstab) -2.0*(gt4/2.0+gstab); printf("Warning: d1 too short; reset to minimum value\n");} if ((abs(gzlvl1)*(1+kappa)) > gzlvl_max) { abort_message("Max. grad. amplitude exceeded: reduce either gzlvl1 or kappa\n"); } if (ni > 1.0) { abort_message("This is a 2D, not a 3D dosy sequence: please set ni to 0 or 1\n"); } Ddelta=gt1; Dtau=2.0*pw+gstab+gt1/2.0+rof1; dosyfrq = getval("sfrq"); dosytimecubed=del+(gt1*((kappa*kappa-2)/6.0))+Dtau*((kappa*kappa-1.0)/2.0); dosytimecubed=(gt1*gt1)*dosytimecubed; putCmd("makedosyparams(%e,%e)\n",dosytimecubed,dosyfrq); /* This section determines the phase calculation for any number of transients */ initval(num,v14); add(v14,ct,v13); /* phase cycling calculation */ if(delflag[0]=='y') { mod4(v13,v3); /* 1st 180, 0 1 2 3 */ hlv(v13,v9); hlv(v9,v9); mod4(v9,v4); /* 2nd 90, (0)4 (1)4 (2)4 (3)4 */ hlv(v9,v9); hlv(v9,v9); mod4(v9,v1); /* 2nd 180, (0)16 (1)16 (2)16 (3)16 */ hlv(v9,v9); hlv(v9,v9); mod4(v9,v2); /* 1st 90, (0)64 (1)64 (2)64 (3)64 */ hlv(v9,v9); hlv(v9,v9); mod4(v9,v5); /* 3rd 90, (0)256 (1)256 (2)256 (3)256 */ if(STEflag[0]=='y') { dbl(v2,v6); assign(v6,oph); sub(oph,v1,oph); sub(oph,v3,oph); sub(oph,v4,oph); dbl(v5,v6); add(v6,oph,oph); mod4(oph,oph); /* receiver phase for STE */ } else { assign(v1,oph); dbl(v2,v6); sub(oph,v6,oph); add(v3,oph,oph); sub(oph,v4,oph); dbl(v5,v6); add(v6,oph,oph); mod4(oph,oph); /* receiver phase for STAE */ } } mod2(ct,v7); /* change sign of gradients on alternate transients */ status(A); if(delflag[0]=='y') { if (sspul[0]=='y') { zgradpulse(gzlvlhs,hsgt); rgpulse(pw,zero,rof1,rof1); zgradpulse(gzlvlhs,hsgt); } delay(d1 - (gt3+gstab) -2.0*(gt4/2.0+gstab)-gss); /* Move d1 to here */ zgradpulse(-1.0*gzlvl4,gt4/2.0); /* 1st dummy heating pulse */ delay(gstab); zgradpulse(gzlvl4,gt4/2.0); /* 2nd dummy heating pulse */ delay(gstab); delay(gss); /* Short delay to acheive steady state */ if (alt_grd[0] == 'y') { ifzero(v7); zgradpulse(-1.0*gzlvl3,gt3); elsenz(v7); zgradpulse(gzlvl3,gt3); endif(v7); } else zgradpulse(-1.0*gzlvl3,gt3); /* Spoiler gradient balancing pulse */ delay(gstab); } else delay(d1); status(B); /* first part of sequence */ if(delflag[0]=='y') { if(gt1>0 && abs(gzlvl1)>0) { if(selectCTP==2) { rgpulse(0.0, v1, rof1, rof2); /* first 90, v1 */ } else rgpulse(pw, v1, rof1, rof2); /* first 90, v1 */ zgradpulse(gzlvl1*(1.0+kappa),gt1/2.0); /*1st main gradient pulse*/ delay(gstab); if(selectCTP==2) { rgpulse(0.0, v2, rof1, rof2); /* first 180, v2 */ } else rgpulse(pw*2.0, v2, rof1, rof2); /* first 180, v2 */ zgradpulse(-1.0*gzlvl1*(1.0-kappa),gt1/2.0); /*2nd main grad. pulse*/ delay(gstab); if((selectCTP==1)||(selectCTP==2)) { rgpulse(0.0, v3, rof1, rof2); /* second 90, v3 */ } else rgpulse(pw, v3, rof1, rof2); /* second 90, v3 */ zgradpulse(-gzlvl1*2.0*kappa,gt1/2.0); /*Lock refocussing pulse*/ delay(gstab); if (alt_grd[0] == 'y') { ifzero(v7); zgradpulse(gzlvl3,gt3); /* Spoiler gradient */ elsenz(v7); zgradpulse(-1.0*gzlvl3,gt3); endif(v7); } else zgradpulse(gzlvl3,gt3); /* Spoiler gradient */ delay(gstab); delay(del-4.0*pw-3.0*rof1-2.0*gt1-5.0*gstab-gt3); /* diffusion delay */ if(STEflag[0]=='y') { zgradpulse(2.0*kappa*gzlvl1,gt1/2.0); /*Lock refocussing pulse*/ delay(gstab); } else { zgradpulse(-2.0*kappa*gzlvl1,gt1/2.0); /*Lock refocussing pulse*/ delay(gstab); } if(selectCTP==1) { rgpulse(0.0, v4, rof1, rof2); /* third 90, v4 */ } else rgpulse(pw, v4, rof1, rof2); /* third 90, v4 */ if(STEflag[0]=='y') { zgradpulse(-gzlvl1*(1.0+kappa),gt1/2.0); /*3rd main gradient pulse*/ delay(gstab); } else { zgradpulse(gzlvl1*(1.0+kappa),gt1/2.0); /*3rd main gradient pulse*/ delay(gstab); } rgpulse(pw*2.0, v5, rof1, rof2); /* second 180, v5 */ rcvron(); if(STEflag[0]=='y') { zgradpulse(1.0*(1.0-kappa)*gzlvl1+tweak-avm*at*gzlvl_read/gt1,gt1/2.0); /*4th main grad. pulse*/ delay(gstab); } else { zgradpulse(-1.0*(1.0-kappa)*gzlvl1-tweak-avm*at*gzlvl_read/gt1,gt1/2.0); /*4th main grad. pulse*/ delay(gstab); } rgradient('z',gzlvl_read); } } else rgpulse(pw,oph,rof1,rof2); status(C); }
void pulsesequence() { double gt1 = getval("gt1"), gzlvl1=getval("gzlvl1"), gt2 = getval("gt2"), gzlvl2=getval("gzlvl2"), gt3 = getval("gt3"), gzlvl3=getval("gzlvl3"), gt4 = getval("gt4"), gzlvl4=getval("gzlvl4"), selpwrPS = getval("selpwrPS"), selpwPS = getval("selpwPS"), gzlvlPS = getval("gzlvlPS"), slpwrT = getval("slpwrT"), slpwT = getval("slpwT"), mixT = getval("mixT"), zqfpw1 = getval("zqfpw1"), zqfpwr1 = getval("zqfpwr1"), zqfpw2 = getval("zqfpw2"), zqfpwr2 = getval("zqfpwr2"), gzlvlzq1 = getval("gzlvlzq1"), gzlvlzq2 = getval("gzlvlzq2"), gstab = getval("gstab"); int prgcycle=(int)(getval("prgcycle")+0.5), phase1 = (int)(getval("phase")+0.5); char selshapePS[MAXSTR], slpatT[MAXSTR], zqfpat1[MAXSTR], zqfpat2[MAXSTR]; /* LOAD AND INITIALIZE VARIABLES */ getstr("slpatT",slpatT); getstr("zqfpat1",zqfpat1); getstr("zqfpat2",zqfpat2); if (strcmp(slpatT,"mlev17c") && strcmp(slpatT,"dipsi2") && strcmp(slpatT,"dipsi3") && strcmp(slpatT,"mlev17") && strcmp(slpatT,"mlev16")) abort_message("SpinLock pattern %s not supported!.\n", slpatT); //synchronize gradients to srate for probetype='nano' // Preserve gradient "area" gt1 = syncGradTime("gt1","gzlvl1",1.0); gzlvl1 = syncGradLvl("gt1","gzlvl1",1.0); gt2 = syncGradTime("gt2","gzlvl2",1.0); gzlvl2 = syncGradLvl("gt2","gzlvl2",1.0); getstr("selshapePS",selshapePS); assign(ct,v17); initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v14); settable(t1,2,ph1); settable(t2,1,ph2); settable(t3,8,ph3); settable(t4,1,ph4); settable(t5,1,ph5); settable(t6,1,ph6); settable(t7,1,ph7); settable(t8,1,ph8); settable(t9,8,ph9); getelem(t1,v17,v1); getelem(t2,v17,v2); getelem(t3,v17,v3); getelem(t4,v17,v4); getelem(t5,v17,v5); getelem(t6,v17,v6); getelem(t7,v17,v7); getelem(t8,v17,v8); getelem(t9,v17,v9); assign(v9,oph); if (phase1 == 2) {incr(v1); } add(v1, v14, v1); add(oph,v14,oph); /* BEGIN THE ACTUAL PULSE SEQUENCE */ status(A); obspower(tpwr); delay(5.0e-5); if (getflag("sspul")) steadystate(); delay(d1); status(B); obspower(tpwr); rgpulse(pw, v1, rof1, rof1); delay(d2/2.0); zgradpulse(gzlvl1,gt1); delay(gstab); rgpulse(2*pw,v2,rof1,rof1); zgradpulse(gzlvl1,gt1); delay(gstab); zgradpulse(gzlvl2,gt2); delay(2.0*gstab); obspower(selpwrPS); rgradient('z',gzlvlPS); shaped_pulse(selshapePS,selpwPS,v3,rof1,rof1); rgradient('z',0.0); delay(gstab); obspower(tpwr); zgradpulse(gzlvl2,gt2); delay(gstab); if (d2>0) delay(d2/2.0-2.0*pw/PI-2.0*rof1); rgpulse(pw,v5,rof1,rof1); if (mixT > 0.0) { if (getflag("Gzqfilt")) { obspower(zqfpwr1); rgradient('z',gzlvlzq1); delay(100.0e-6); shaped_pulse(zqfpat1,zqfpw1,zero,rof1,rof1); delay(100.0e-6); rgradient('z',0.0); delay(100e-6); } obspower(slpwrT); zgradpulse(gzlvl3,gt3); delay(gt3); if (dps_flag) rgpulse(mixT,v4,0.0,0.0); else SpinLock(slpatT,mixT,slpwT,v4); if (getflag("Gzqfilt")) { obspower(zqfpwr2); rgradient('z',gzlvlzq2); delay(100.0e-6); shaped_pulse(zqfpat2,zqfpw2,zero,rof1,rof1); delay(100.0e-6); rgradient('z',0.0); delay(100e-6); } obspower(tpwr); zgradpulse(gzlvl4,gt4); delay(gt4); } rgpulse(pw,v8,rof1,rof2); status(C); }
pulsesequence() { double slpwrR = getval("slpwrR"), slpwR = getval("slpwR"), mixR = getval("mixR"), selpwrA = getval("selpwrA"), selpwA = getval("selpwA"), gzlvlA = getval("gzlvlA"), gtA = getval("gtA"), selpwrB = getval("selpwrB"), selpwB = getval("selpwB"), gzlvlB = getval("gzlvlB"), gtB = getval("gtB"), gstab = getval("gstab"), selfrq = getval("selfrq"), gzlvl1 = getval("gzlvl1"), gt1 = getval("gt1"), gzlvl2 = getval("gzlvl2"), gt2 = getval("gt2"), zqfpw1 = getval("zqfpw1"), zqfpwr1 = getval("zqfpwr1"), gzlvlzq1 = getval("gzlvlzq1"), phincr1 = getval("phincr1"); char selshapeA[MAXSTR],selshapeB[MAXSTR], slpatR[MAXSTR], zqfpat1[MAXSTR], alt_grd[MAXSTR]; //synchronize gradients to srate for probetype='nano' // Preserve gradient "area" gtA = syncGradTime("gtA","gzlvlA",1.0); gzlvlA = syncGradLvl("gtA","gzlvlA",1.0); gtB = syncGradTime("gtB","gzlvlB",1.0); gzlvlB = syncGradLvl("gtB","gzlvlB",1.0); getstr("slpatR",slpatR); getstr("selshapeA",selshapeA); getstr("selshapeB",selshapeB); getstr("zqfpat1",zqfpat1); getstr("alt_grd",alt_grd); if (strcmp(slpatR,"cw") && strcmp(slpatR,"troesy") && strcmp(slpatR,"dante")) abort_message("SpinLock pattern %s not supported!.\n", slpatR); /* STEADY-STATE PHASECYCLING */ /* This section determines if the phase calculations trigger off of (SS - SSCTR) or off of CT */ assign(ct,v17); ifzero(ssctr); assign(v17,v13); elsenz(ssctr); /* purge option does not adjust v13 during steady state */ sub(ssval, ssctr, v13); endif(ssctr); /* Beginning phase cycling */ dbl(v13,v1); /* v1 = 0 2 */ hlv(v13,v13); dbl(v13,v20); /* v20 = 00 22 */ hlv(v13,v13); dbl(v13,v6); /* v6 = 0000 2222 */ hlv(v13,v13); dbl(v13,v7); /* v7 = 00000000 22222222 */ assign(v1,oph); if (getflag("Gzqfilt")) add(v7,oph,oph); /* CYCLOPS */ assign(v13,v14); /* v14 = 8x0 8x1 8x2 8x3 */ if (getflag("Gzqfilt")) hlv(v13,v14); /* v14 = 16x0 16x1 16x2 16x3 */ add(v1,v14,v1); add(v20,v14,v20); add(v6,v14,v6); add(v7,v14,v7); add(oph,v14,oph); /* add(oph,v18,oph); add(oph,v19,oph); */ assign(zero,v9); mod2(ct,v2); /* 01 01 */ hlv(ct,v11); hlv(v11,v11); mod2(v11,v11); dbl(v11,v11); /* 0000 2222 */ add(v11,v2,v11); mod4(v11,v11); /* 0101 2323 first echo in Excitation Sculpting */ hlv(ct,v4); mod2(v4,v4); /* 0011 */ hlv(ct,v12); hlv(v12,v12); hlv(v12,v12); dbl(v12,v12); add(v12,v4,v12); mod4(v12,v12); /* 0011 0011 2233 2233 second echo in Excitation Sculpting */ dbl(v2,v2); /* 0202 */ dbl(v4,v4); /* 0022 */ add(v2,v4,v4); /* 0220 correct oph for Excitation Sculpting */ add(oph,v4,oph); mod4(oph,oph); if (!strcmp(slpatR,"troesy")) assign(v20,v21); else add(v20,one,v21); if (alt_grd[0] == 'y') mod2(ct,v8); /* alternate gradient sign on even scans */ /* The following is for flipback pulse */ if (phincr1 < 0.0) phincr1=360+phincr1; initval(phincr1,v5); /* BEGIN THE ACTUAL PULSE SEQUENCE */ status(A); if (getflag("lkgate_flg")) lk_sample(); /* turn lock sampling on */ obspower(tpwr); delay(5.0e-5); if (getflag("sspul")) steadystate(); delay(d1); if (getflag("lkgate_flg")) lk_hold(); /* turn lock sampling off */ status(B); rgpulse(pw, v1, rof1, rof1); if (selfrq != tof) obsoffset(selfrq); ifzero(v8); zgradpulse(gzlvlA,gtA); elsenz(v8); zgradpulse(-gzlvlA,gtA); endif(v8); delay(gstab); obspower(selpwrA); shaped_pulse(selshapeA,selpwA,v14,rof1,rof1); obspower(tpwr); ifzero(v8); zgradpulse(gzlvlA,gtA); elsenz(v8); zgradpulse(-gzlvlA,gtA); endif(v8); delay(gstab); if (selfrq != tof) delay(2*OFFSET_DELAY); ifzero(v8); zgradpulse(gzlvlB,gtB); elsenz(v8); zgradpulse(-gzlvlB,gtB); endif(v8); delay(gstab); obspower(selpwrB); shaped_pulse(selshapeB,selpwB,v6,rof1,rof1); obspower(slpwrR); ifzero(v8); zgradpulse(gzlvlB,gtB); elsenz(v8); zgradpulse(-gzlvlB,gtB); endif(v8); delay(gstab); if (selfrq != tof) obsoffset(tof); if (mixR > 0.0) { if (dps_flag) rgpulse(mixR,v21,0.0,0.0); else SpinLock(slpatR,mixR,slpwR,v21); } if (getflag("Gzqfilt")) { obspower(tpwr); rgpulse(pw,v7,rof1,rof1); ifzero(v8); zgradpulse(gzlvl1,gt1); elsenz(v8); zgradpulse(-gzlvl1,gt1); endif(v8); delay(gstab); obspower(zqfpwr1); ifzero(v8); rgradient('z',gzlvlzq1); elsenz(v8); rgradient('z',-gzlvlzq1); endif(v8); delay(100.0e-6); shaped_pulse(zqfpat1,zqfpw1,zero,rof1,rof1); delay(100.0e-6); rgradient('z',0.0); delay(gstab); ifzero(v8); zgradpulse(-gzlvl2,gt2); elsenz(v8); zgradpulse(gzlvl2,gt2); endif(v8); obspower(tpwr); delay(gstab); if (getflag("flipback")) FlipBack(v14,v5); rgpulse(pw,v14,rof1,2.0e-6); } ExcitationSculpting(v11,v12,v8); delay(rof2); status(C); }
pulsesequence() { double gt1 = getval("gt1"), gzlvl1=getval("gzlvl1"), gt2 = getval("gt2"), gzlvl2=getval("gzlvl2"), selpwrPS = getval("selpwrPS"), selpwPS = getval("selpwPS"), gzlvlPS = getval("gzlvlPS"), droppts=getval("droppts"), gstab = getval("gstab"), espw180 = getval("espw180"), essoftpw = getval("essoftpw"), essoftpwr = getval("essoftpwr"), essoftpwrf = getval("essoftpwrf"); char selshapePS[MAXSTR], esshape[MAXSTR]; //synchronize gradients to srate for probetype='nano' // Preserve gradient "area" gt1 = syncGradTime("gt1","gzlvl1",1.0); gzlvl1 = syncGradLvl("gt1","gzlvl1",1.0); gt2 = syncGradTime("gt2","gzlvl2",1.0); gzlvl2 = syncGradLvl("gt2","gzlvl2",1.0); getstr("esshape",esshape); getstr("selshapePS",selshapePS); assign(ct,v17); settable(t1,2,ph1); settable(t2,8,ph2); settable(t3,8,ph3); settable(t4,4,ph4); settable(t5,4,ph5); settable(t6,4,ph6); settable(t7,8,ph7); getelem(t1,v17,v1); getelem(t2,v17,v2); getelem(t3,v17,v3); getelem(t4,v17,v4); getelem(t5,v17,v5); getelem(t6,v17,v6); getelem(t7,v17,v7); assign(v7,oph); /*assign(v1,v6); add(oph,v18,oph); add(oph,v19,oph);*/ /* BEGIN THE ACTUAL PULSE SEQUENCE */ status(A); obspower(tpwr); delay(5.0e-5); if (getflag("sspul")) steadystate(); delay(d1); status(B); obspower(tpwr); rgpulse(pw, v1, rof1, rof2); delay(d2/2.0); zgradpulse(gzlvl1,gt1); delay(gstab); delay((0.25/sw1) - gt1 - gstab - 2*pw/PI - rof2 - 2*GRADIENT_DELAY - pw - rof1-essoftpw/2.0-2.0e-6); obspower(essoftpwr+6); obspwrf(essoftpwrf); shaped_pulse(esshape,essoftpw,v2,2.0e-6,2.0e-6); obspower(tpwr); obspwrf(4095.0); rgpulse(2.0*pw,v3,rof1,rof1); zgradpulse(gzlvl1,gt1); delay(gstab); delay((0.25/sw1) - gt1 - gstab - 2*GRADIENT_DELAY - pw - rof1 - essoftpw/2.0-2.0e-6); delay(gstab); zgradpulse(gzlvl2,gt2); delay(gstab); obspower(essoftpwr+6); obspwrf(essoftpwrf); shaped_pulse(esshape,essoftpw,v4,2.0e-6,2.0e-6); obspower(selpwrPS); obspwrf(4095.0) ; rgradient('z',gzlvlPS); shaped_pulse(selshapePS,selpwPS,v5,rof1,rof1); rgradient('z',0.0); delay(gstab); obspower(tpwr); zgradpulse(gzlvl2,gt2); delay(gstab - droppts/sw); delay(d2/2.0); obspower(tpwr); obspwrf(4095.0); status(C); }