pulsesequence() { double pd, seqtime; double minte,ted1,ted2; double restol, resto_local; int vph180 = v2; /* Phase of 180 pulse */ init_mri(); /****needed ****/ restol=getval("restol"); //local frequency offset roff=getval("roff"); //receiver offset init_rf(&p1_rf,p1pat,p1,flip1,rof1,rof2); /* hard pulse */ calc_rf(&p1_rf,"tpwr1","tpwr1f"); init_rf(&p2_rf,p2pat,p2,flip2,rof1,rof2); /* hard pulse */ calc_rf(&p2_rf,"tpwr2","tpwr2f"); seqtime = at+(p1/2.0)+rof1+d2; pd = tr - seqtime; /* predelay based on tr */ if (pd <= 0.0) { abort_message("%s: Requested tr too short. Min tr = %f ms",seqfil,seqtime*1e3); } minte = p1/2.0 + p2 + 2*rof2 + rof1; if(d2 > 0) { if(d2 < minte+4e-6) abort_message("%s: TE too short. Min te = %f ms",seqfil,minte*1e3); } ted1 = d2/2 - p1/2 - p2/2 + rof2 + rof1; ted2 = d2/2 - p2/2 + rof2; resto_local=resto-restol; status(A); xgate(ticks); delay(pd); /* --- observe period --- */ obsoffset(resto_local); obspower(p1_rf.powerCoarse); obspwrf(p1_rf.powerFine); shapedpulse(p1pat,p1,oph,rof1,rof2); /* if d2=0 no 180 pulse applied */ if (d2 > 0) { obspower(p2_rf.powerCoarse); obspwrf(p2_rf.powerFine); settable(t2,2,ph180); /* initialize phase tables and variables */ getelem(t2,ct,v6); /* 180 deg pulse phase alternates +/- 90 off the rcvr */ add(oph,v6,vph180); /* oph=zero */ delay(ted1); shapedpulse(p2pat,p2,vph180,rof1,rof2); delay(ted2); } startacq(alfa); acquire(np,1.0/sw); endacq(); }
pulsesequence() { double pd, seqtime; initparms_sis(); /* initialize standard imaging parameters */ seqtime = at+pw+rof1+rof2; pd = tr - seqtime; /* predelay based on tr */ if (pd <= 0.0) { abort_message("%s: Requested tr too short. Min tr = %f ms",seqfil,seqtime*1e3); } status(A); delay(pd); xgate(ticks); /* --- observe period --- */ obspower(tpwr); shapedpulse(pwpat,pw,oph,rof1,rof2); startacq(alfa); acquire(np,1.0/sw); endacq(); }
pulsesequence() { double sign,currentlimit,RMScurrentlimit,dutycycle; int calcpower; /* Initialize paramaters **********************************/ init_mri(); calcpower=(int)getval("calcpower"); dutycycle=getval("dutycycle"); currentlimit=getval("currentlimit"); RMScurrentlimit=getval("RMScurrentlimit"); if (gspoil>0.0) sign = 1.0; else sign = -1.0; init_rf(&p1_rf,p1pat,p1,flip1,rof1,rof2); if (calcpower) calc_rf(&p1_rf,"tpwr1","tpwr1f"); if (tspoil>0.0) { gspoil = sqrt(dutycycle/100.0)*gmax*RMScurrentlimit/currentlimit; init_generic(&spoil_grad,"spoil",gspoil,tspoil); spoil_grad.rollOut=FALSE; calc_generic(&spoil_grad,WRITE,"gspoil","tspoil"); } xgate(ticks); rotate(); status(A); mod4(ct,oph); delay(d1); /* TTL scope trigger **********************************/ sp1on(); delay(4e-6); sp1off(); if (calcpower) { obspower(p1_rf.powerCoarse); obspwrf(p1_rf.powerFine); } else obspower(tpwr1); delay(4e-6); if (tspoil>0.0) { obl_shapedgradient(spoil_grad.name,spoil_grad.duration,0,0,spoil_grad.amp*sign,WAIT); delay(d2); } shapedpulse(p1pat,p1,ct,rof1,rof2); startacq(alfa); acquire(np,1.0/sw); endacq(); }
pulsesequence() { double pd, seqtime; double mintDELTA,ted1,ted2,gf; double restol, resto_local; init_mri(); /****needed ****/ restol=getval("restol"); //local frequency offset roff=getval("roff"); //receiver offset init_rf(&p1_rf,p1pat,p1,flip1,rof1,rof2); /* hard pulse */ calc_rf(&p1_rf,"tpwr1","tpwr1f"); init_rf(&p2_rf,p2pat,p2,flip2,rof1,rof2); /* hard pulse */ calc_rf(&p2_rf,"tpwr2","tpwr2f"); gf=1.0; if(diff[0] == 'n') gf=0; int vph180 = v2; /* Phase of 180 pulse */ mintDELTA = tdelta + trise + rof1 + p2 + rof2; if(tDELTA <= mintDELTA) { abort_message("%s: tDELTA too short. Min tDELTA = %f ms",seqfil,mintDELTA*1e3); } ted1 = tDELTA - tdelta + trise + p2 + rof1 + rof2; te = p1/2 + rof2 + tdelta + trise + ted1 + rof1 + p2/2; /* first half-te */ ted2 = te - p2/2 - rof2 - tdelta - trise; if((ted1 <= 0)||(ted2 <= 0) ) { abort_message("%s: tDELTA too short. Min tDELTA = %f ms",seqfil,mintDELTA*1e3); } te = te*2.0; putvalue("te",te); seqtime = at+(p1/2.0)+rof1+te; pd = tr - seqtime; /* predelay based on tr */ if (pd <= 0.0) { abort_message("%s: Requested tr too short. Min tr = %f ms",seqfil,seqtime*1e3); } resto_local=resto-restol; status(A); rotate(); delay(pd); xgate(ticks); /* --- observe period --- */ obsoffset(resto_local); obspower(p1_rf.powerCoarse); obspwrf(p1_rf.powerFine); shapedpulse(p1pat,p1,oph,rof1,rof2); obl_gradient(0,0,gdiff*gf); /* x,y,z gradients selected via orient */ delay(tdelta); zero_all_gradients(); delay(trise); delay(ted1); obspower(p2_rf.powerCoarse); obspwrf(p2_rf.powerFine); settable(t2,2,ph180); /* initialize phase tables and variables */ getelem(t2,ct,v6); /* 180 deg pulse phase alternates +/- 90 off the rcvr */ add(oph,v6,vph180); /* oph=zero */ shapedpulse(p2pat,p2,vph180,rof1,rof2); obl_gradient(0,0,gdiff); /* x,y,z gradients selected via orient */ delay(tdelta); zero_all_gradients(); delay(trise); delay(ted2); startacq(alfa); acquire(np,1.0/sw); endacq(); }
pulsesequence() { char CT_flg[MAXSTR], /* Constant time flag */ shname1[MAXSTR], shname2[MAXSTR], shname3[MAXSTR], f1180[MAXSTR], Cdecflg[MAXSTR], Cdecseq[MAXSTR], grad_flg[MAXSTR]; /*gradient flag */ int t1_counter, phase; double d2_init=0.0, adjust = getval("adjust"), gzlvl1 = getval("gzlvl1"), gzlvl2 = getval("gzlvl2"), gt1 = getval("gt1"), gt2 = getval("gt2"), shlvl1 = getval("shlvl1"), shlvl2 = getval("shlvl2"), shlvl3 = getval("shlvl3"), shdmf2 = getval("shdmf2"), shpw1 = getval("shpw1"), shpw2 = getval("shpw2"), shpw3 = getval("shpw3"), pwClvl = getval("pwClvl"), pwC = getval("pwC"), dpwr = getval("dpwr"), CT_delay = getval("CT_delay"), d2 = getval("d2"), tau1 = getval("tau1"), tauch = getval("tauch"); getstr("shname1", shname1); getstr("shname2", shname2); getstr("shname3", shname3); getstr("CT_flg", CT_flg); getstr("grad_flg",grad_flg); getstr("f1180",f1180); getstr("Cdecflg",Cdecflg); getstr("Cdecseq",Cdecseq); phase = (int) (getval("phase") + 0.5); settable(t1,2,phi1); settable(t2,2,phi2); if (phase == 1) ; if (phase == 2) tsadd(t1,1,4); tau1 = d2; if((f1180[A] == 'y') && (ni > 1.0)) { tau1 += ( 1.0 / (2.0*sw1) ); if(tau1 < 0.2e-6) tau1 = 0.0; } tau1 = tau1; if (f1180[0] == 'y') tau1 = tau1-pwC*4.0/3.0; if(CT_flg[0] == 'y') { if ( (ni/sw1) > (CT_delay-pwC*8.0/3.0)) { text_error( " ni is too big. Make ni equal to %d or less.\n", ((int)((CT_delay-pwC*8.0/3.0)*sw1)) ); psg_abort(1); } } if( ix == 1) d2_init = d2; t1_counter = (int) ( (d2-d2_init)*sw1 + 0.5 ); if(t1_counter % 2) { tsadd(t1,2,4); tsadd(t2,2,4); } status(A); decpower(pwClvl); decoffset(dof); obsoffset(tof); zgradpulse(gzlvl2, gt2); lk_sample(); delay(1.0e-4); delay(d1-gt2); if (ix < (int)(2.0*ni)) lk_hold(); /*force lock sampling at end of experiment*/ obspower(shlvl1); shaped_pulse(shname1,shpw1,zero,2.0e-4,2.0e-6); zgradpulse(gzlvl1, gt1); delay(1.0e-4); if (ni == 0) { delay(tauch-gt1-1.0e-4-WFG_START_DELAY+pwC*4.0-adjust); obspower(shlvl2); shaped_pulse(shname2,shpw2,zero,2.0e-6,2.0e-6); obspower(shlvl1); decrgpulse(pwC,t1,0.0,0.0); decrgpulse(pwC*2.0,zero,0.0,0.0); decrgpulse(pwC,zero,0.0,0.0); } else { delay(tauch-gt1-1.0e-4-adjust); obspower(shlvl2); status(B); if(CT_flg[0] == 'y') { /*************************************************/ /**** CT EVOLUTION **********/ /*************************************************/ decrgpulse(pwC,t1,0.0,0.0); delay((CT_delay-tau1)*0.25-pwC*2.0/3.0); decpower(shlvl3); decshaped_pulse(shname3,shpw3,zero,0.0,0.0); delay((CT_delay+tau1)*0.25-shpw2*0.5); shapedpulse(shname2,shpw2,zero,0.0,0.0); delay((CT_delay+tau1)*0.25-shpw2*0.5); decshaped_pulse(shname3,shpw3,zero,0.0,0.0); decpower(pwClvl); delay((CT_delay-tau1)*0.25-pwC*2.0/3.0); decrgpulse(pwC,zero,0.0,0.0); } else { /*************************************************/ /**** REAL-TIME EVOLUTION **********/ /*************************************************/ if ((tau1) > shpw2) { decrgpulse(pwC,t1,0.0,0.0); if(Cdecflg[0] == 'y') { decpower(getval("Cdecpwr")); decprgon(Cdecseq, 1.0/getval("Cdecdmf"), getval("Cdecres")); decon(); } delay((tau1-shpw2)*0.5); xmtrphase(zero); xmtron(); obsunblank(); obsprgon(shname2,1/shdmf2,9.0); delay(shpw2); obsprgoff(); obsblank(); xmtroff(); delay((tau1-shpw2)*0.5); if(Cdecflg[0] == 'y') { decoff(); decprgoff(); decpower(pwClvl); } decrgpulse(pwC,zero,0.0,0.0); } else { xmtrphase(zero); xmtron(); obsunblank(); obsprgon(shname2,1/shdmf2,9.0); delay((shpw2-tau1-pwC*2.0)*0.5); decrgpulse(pwC,t1,0.0,0.0); if(Cdecflg[0] == 'y') { decpower(getval("Cdecpwr")); decprgon(Cdecseq, 1.0/getval("Cdecdmf"), getval("Cdecres")); decon(); delay(tau1); decoff(); decprgoff(); decpower(pwClvl); } else delay(tau1); decrgpulse(pwC,zero,0.0,0.0); delay((shpw2-tau1-pwC*2.0)*0.5); obsprgoff(); obsblank(); xmtroff(); } } obspower(shlvl1); status(A); zgradpulse(gzlvl1, gt1); delay(1.0e-4); delay(tauch-gt1-1.0e-4-POWER_DELAY); decpower(dpwr); status(C); setreceiver(t2); } }
pulsesequence() { /* Internal variable declarations *************************/ double freqEx[MAXNSLICE]; double pespoil_amp,spoilMoment,maxgradtime,pe2_offsetamp=0.0,nvblock; double tetime,te_delay,tr_delay,perTime; int table=0,shapeEx=0,sepSliceRephase=0,image,blocknvs; char spoilflag[MAXSTR],perName[MAXSTR],slab[MAXSTR]; /* Real-time variables used in this sequence **************/ int vpe_steps = v1; // Number of PE steps int vpe_ctr = v2; // PE loop counter int vpe_offset = v3; // PE/2 for non-table offset int vpe_mult = v4; // PE multiplier, ranges from -PE/2 to PE/2 int vper_mult = v5; // PE rewinder multiplier; turn off rewinder when 0 int vpe2_steps = v6; // Number of PE2 steps int vpe2_ctr = v7; // PE2 loop counter int vpe2_mult = v8; // PE2 multiplier int vpe2_offset = v9; // PE2/2 for non-table offset int vpe2r_mult = v10; // PE2 rewinder multiplier int vtrigblock = v11; // Number of PE steps per trigger block int vpe = v12; // Current PE step out of total PE*PE2 steps /* Initialize paramaters *********************************/ init_mri(); getstr("spoilflag",spoilflag); getstr("slab",slab); image = getval("image"); blocknvs = (int)getval("blocknvs"); nvblock = getval("nvblock"); if (!blocknvs) nvblock=1; // If blocked PEs for trigger not selected nvblock=1 trmin = 0.0; temin = 0.0; /* Check for external PE table ***************************/ if (strcmp(petable,"n") && strcmp(petable,"N") && strcmp(petable,"")) { loadtable(petable); table = 1; } if (ns > 1) abort_message("No of slices must be set to one"); /* RF Calculations ****************************************/ init_rf(&p1_rf,p1pat,p1,flip1,rof1,rof2); /* hard pulse */ init_rf(&p2_rf,p2pat,p2,flip2,rof1,rof2); /* soft pulse */ calc_rf(&p1_rf,"tpwr1","tpwr1f"); calc_rf(&p2_rf,"tpwr2","tpwr2f"); /* Gradient calculations **********************************/ if (slab[0] == 'y') { init_slice(&ss_grad,"ss",thk); init_slice_refocus(&ssr_grad,"ssr"); calc_slice(&ss_grad,&p2_rf,WRITE,"gss"); calc_slice_refocus(&ssr_grad,&ss_grad,WRITE,"gssr"); } if (FP_GT(tcrushro,0.0)) init_readout_butterfly(&ro_grad,"ro",lro,np,sw,gcrushro,tcrushro); else init_readout(&ro_grad,"ro",lro,np,sw); init_readout_refocus(&ror_grad,"ror"); calc_readout(&ro_grad,WRITE,"gro","sw","at"); ro_grad.m0ref *= grof; calc_readout_refocus(&ror_grad,&ro_grad,NOWRITE,"gror"); init_phase(&pe_grad,"pe",lpe,nv); init_phase(&pe2_grad,"pe2",lpe2,nv2); calc_phase(&pe_grad,NOWRITE,"gpe","tpe"); if (!blocknvs) nvblock=1; calc_phase(&pe2_grad,NOWRITE,"gpe2",""); if (spoilflag[0] == 'y') { // Calculate spoil grad if spoiling is turned on init_dephase(&spoil_grad,"spoil"); // Optimized spoiler spoilMoment = ro_grad.acqTime*ro_grad.roamp; // Optimal spoiling is at*gro for 2pi per pixel spoilMoment -= ro_grad.m0def; // Subtract partial spoiling from back half of readout calc_dephase(&spoil_grad,WRITE,spoilMoment,"gspoil","tspoil"); } /* Is TE long enough for separate slab refocus? ***********/ maxgradtime = MAX(ror_grad.duration,MAX(pe_grad.duration,pe2_grad.duration)); if (spoilflag[0] == 'y') maxgradtime = MAX(maxgradtime,spoil_grad.duration); tetime = maxgradtime + alfa + ro_grad.timeToEcho + 4e-6; if (slab[0] == 'y') { tetime += ss_grad.rfCenterBack + ssr_grad.duration; if ((te >= tetime) && (minte[0] != 'y')) { sepSliceRephase = 1; // Set flag for separate slice rephase } else { pe2_grad.areaOffset = ss_grad.m0ref; // Add slab refocus on pe2 axis calc_phase(&pe2_grad,NOWRITE,"gpe2",""); // Recalculate pe2 to include slab refocus } } /* Equalize refocus and PE gradient durations *************/ pespoil_amp = 0.0; perTime = 0.0; if ((perewind[0] == 'y') && (spoilflag[0] == 'y')) { // All four must be single shape if (ror_grad.duration > spoil_grad.duration) { // calc_sim first with ror calc_sim_gradient(&pe_grad,&pe2_grad,&ror_grad,tpemin,WRITE); calc_sim_gradient(&ror_grad,&spoil_grad,&null_grad,tpemin,NOWRITE); } else { // calc_sim first with spoil calc_sim_gradient(&pe_grad,&pe2_grad,&spoil_grad,tpemin,WRITE); calc_sim_gradient(&ror_grad,&spoil_grad,&null_grad,tpemin,NOWRITE); } strcpy(perName,pe_grad.name); perTime = pe_grad.duration; putvalue("tspoil",perTime); putvalue("gspoil",spoil_grad.amp); } else { // post-acquire shape will be either pe or spoil, but not both calc_sim_gradient(&ror_grad,&pe_grad,&pe2_grad,tpemin,WRITE); if ((perewind[0] == 'y') && (spoilflag[0] == 'n')) { // Rewinder, no spoiler strcpy(perName,pe_grad.name); perTime = pe_grad.duration; spoil_grad.amp = 0.0; putvalue("tpe",perTime); } else if ((perewind[0] == 'n') && (spoilflag[0] == 'y')) { // Spoiler, no rewinder strcpy(perName,spoil_grad.name); perTime = spoil_grad.duration; pespoil_amp = spoil_grad.amp; // Apply spoiler on PE & PE2 axis if no rewinder } } if (slab[0] == 'y') pe2_offsetamp = sepSliceRephase ? 0.0 : pe2_grad.offsetamp; // pe2 slab refocus /* Create optional prepulse events ************************/ if (sat[0] == 'y') create_satbands(); if (fsat[0] == 'y') create_fatsat(); sgl_error_check(sglerror); // Check for any SGL errors /* Min TE ******************************************/ tetime = pe_grad.duration + alfa + ro_grad.timeToEcho; if (slab[0] == 'y') { tetime += ss_grad.rfCenterBack; tetime += (sepSliceRephase) ? ssr_grad.duration : 0.0; // Add slice refocusing if separate event } else if (ws[0] == 'y') tetime += p2/2.0 + rof2; /* soft pulse */ else tetime += p1/2.0 + rof2; /* hard pulse */ temin = tetime + 4e-6; // Ensure that te_delay is at least 4us if (minte[0] == 'y') { te = temin; putvalue("te",te); } if (te < temin) { abort_message("TE too short. Minimum TE= %.2fms\n",temin*1000+0.005); } te_delay = te - tetime; /* Min TR ******************************************/ trmin = te_delay + pe_grad.duration + ro_grad.duration + perTime; if (slab[0] == 'y') { trmin += ss_grad.duration; trmin += (sepSliceRephase) ? ssr_grad.duration : 0.0; // Add slice refocusing if separate event } else if (ws[0] == 'y') trmin += p2 +rof1 + rof2; /* soft pulse */ else trmin += p1 +rof1 + rof2; /* hard pulse */ trmin += 8e-6; /* Increase TR if any options are selected *********/ if (sat[0] == 'y') trmin += satTime; if (fsat[0] == 'y') trmin += fsatTime; if (ticks > 0) trmin += 4e-6; if (mintr[0] == 'y') { tr = trmin; putvalue("tr",tr); } if (FP_LT(tr,trmin)) { abort_message("TR too short. Minimum TR = %.2fms\n",trmin*1000+0.005); } /* Calculate tr delay */ tr_delay = granularity(tr-trmin,GRADIENT_RES); if(slab[0] == 'y') { /* Generate phase-ramped pulses: 90 */ offsetlist(pss,ss_grad.ssamp,0,freqEx,ns,seqcon[1]); shapeEx = shapelist(p1pat,ss_grad.rfDuration,freqEx,ns,ss_grad.rfFraction,seqcon[1]); } /* Set pe_steps for profile or full image **********/ pe_steps = prep_profile(profile[0],nv,&pe_grad,&null_grad); F_initval(pe_steps/2.0,vpe_offset); pe2_steps = prep_profile(profile[1],nv2,&pe2_grad,&null_grad); F_initval(pe2_steps/2.0,vpe2_offset); assign(zero,oph); /* Shift DDR for pro *******************************/ roff = -poffset(pro,ro_grad.roamp); /* Adjust experiment time for VnmrJ *******************/ g_setExpTime(tr*(nt*pe_steps*pe2_steps)); /* PULSE SEQUENCE *************************************/ status(A); rotate(); triggerSelect(trigger); // Select trigger input 1/2/3 obsoffset(resto); delay(4e-6); /* trigger */ if (ticks > 0) F_initval((double)nvblock,vtrigblock); /* Begin phase-encode loop ****************************/ peloop2(seqcon[3],pe2_steps,vpe2_steps,vpe2_ctr); peloop(seqcon[2],pe_steps,vpe_steps,vpe_ctr); delay(tr_delay); // relaxation delay sub(vpe_ctr,vpe_offset,vpe_mult); sub(vpe2_ctr,vpe2_offset,vpe2_mult); mult(vpe2_ctr,vpe_steps,vpe); add(vpe_ctr,vpe,vpe); /* PE rewinder follows PE table; zero if turned off ***/ if (perewind[0] == 'y') { assign(vpe_mult,vper_mult); assign(vpe2_mult,vpe2r_mult); } else { assign(zero,vper_mult); assign(zero,vpe2r_mult); } if (ticks > 0) { modn(vpe,vtrigblock,vtest); ifzero(vtest); // if the beginning of an trigger block xgate(ticks); grad_advance(gpropdelay); delay(4e-6); elsenz(vtest); delay(4e-6); endif(vtest); } sp1on(); delay(4e-6); sp1off(); // Scope trigger /* Prepulse options ***********************************/ if (sat[0] == 'y') satbands(); if (fsat[0] == 'y') fatsat(); if (slab[0] == 'y') { obspower(p2_rf.powerCoarse); obspwrf(p2_rf.powerFine); delay(4e-6); obl_shapedgradient(ss_grad.name,ss_grad.duration,0,0,ss_grad.amp,NOWAIT); delay(ss_grad.rfDelayFront); shapedpulselist(shapeEx,ss_grad.rfDuration,zero,rof1,rof2,seqcon[1],zero); delay(ss_grad.rfDelayBack); if (sepSliceRephase) { obl_shapedgradient(ssr_grad.name,ssr_grad.duration,0,0,-ssr_grad.amp,WAIT); delay(te_delay + tau); /* tau is current B0 encoding delay */ } } else { obspower(p1_rf.powerCoarse); obspwrf(p1_rf.powerFine); delay(4e-6); if (ws[0] == 'y') shapedpulse(p2pat,p2,zero,rof1,rof2); /* soft CS pulse */ else shapedpulse(p1pat,p1,zero,rof1,rof2); /* hard pulse */ delay(te_delay + tau); /* tau is current B0 encoding delay */ } pe2_shapedgradient(pe_grad.name,pe_grad.duration,-ror_grad.amp*image,0,-pe2_offsetamp, -pe_grad.increment,-pe2_grad.increment,vpe_mult,vpe2_mult,WAIT); if ((slab[0] == 'y') && !sepSliceRephase) delay(te_delay + tau); /* tau is current B0 encoding delay */ /* Readout gradient and acquisition ********************/ obl_shapedgradient(ro_grad.name,ro_grad.duration,ro_grad.amp*image,0,0,NOWAIT); delay(ro_grad.atDelayFront); startacq(alfa); acquire(np,1.0/sw); delay(ro_grad.atDelayBack); endacq(); /* Rewind / spoiler gradient *********************************/ if (perewind[0] == 'y' || (spoilflag[0] == 'y')) { pe2_shapedgradient(perName,perTime,spoil_grad.amp,pespoil_amp,pespoil_amp, pe_grad.increment,pe2_grad.increment,vper_mult,vpe2r_mult,WAIT); } endpeloop(seqcon[2],vpe_ctr); endpeloop(seqcon[3],vpe2_ctr); }
pulsesequence() { /* DECLARE AND LOAD VARIABLES */ int t1_counter, t2_counter; /* used for states tppi in t1 & t2*/ char IPAP[MAXSTR]; double tau1, /* t1 delay */ tau2, /* t2 delay */ TC = getval("TC"), /* delay 1/(2JCACB) ~ 7.0ms in Ref. */ del = getval("del"), /* delay del = 1/(2JC'C) ~ 9.0ms in Ref. */ pwClvl = getval("pwClvl"), /* coarse power for C13 pulse */ pwC = getval("pwC"), /* C13 90 degree pulse length at pwClvl */ compC = getval("compC"), /* adjustment for C13 amplifier compression */ rf0, /* maximum fine power when using pwC pulses */ ppm, /* 90 degree pulse at CO (174ppm) */ pwCO_90, /* 90 degree pulse length on C13 */ pwrCO_90, /*fine power */ CO_bw, /* 180 degree pulse at CO (174ppm) */ pwCO_180, /* 180 degree pulse length at rf2 */ pwrCO_180, /* fine power */ /* 90 degree pulse at CA (57.7ppm) */ pwCA, /* 90 degree pulse on CA */ pwrCA, /* fine power */ CA_bw, CA_ofs, /* Offset */ /* 180 degree pulse at CA (57.7ppm) */ pwCA2, /* 180 degree pulse on CA */ pwrCA2, /* fine power */ /* 90 degree pulse at CAB (44.2ppm) */ pwCAB, /* 90 degree pulse on CAB */ pwrCAB, /* fine power */ CAB_bw, CAB_ofs, /* Offset */ /* 180 degree pulse at CAB (44.2ppm) */ pwCAB2, /* 180 degree pulse on CA */ pwrCAB2, /* fine power */ sw1 = getval("sw1"), sw2 = getval("sw2"), gt1 = getval("gt1"), gzlvl1 = getval("gzlvl1"), gt2 = getval("gt2"), gzlvl2 = getval("gzlvl2"), gt3 = getval("gt3"), gzlvl3 = getval("gzlvl3"), gstab = getval("gstab"); getstr("IPAP",IPAP); /* LOAD PHASE TABLE */ settable(t1,4,phi1); settable(t2,1,phi2); settable(t3,2,phi3); settable(t4,8,phi4); settable(t5,16,phi5); settable(t12,16,rec); getelem(t5,ct,v5); assign(two,v6); if (IPAP[0] == 'y') { add(v5,one,v5); assign(three,v6); } setautocal(); /* activate auto-calibration */ /* INITIALIZE VARIABLES */ /* PHASES AND INCREMENTED TIMES */ /* Phase incrementation for hypercomplex 2D data, States-Haberkorn element */ if (phase1 == 2) tsadd(t1,1,4); if (phase2 == 2) tsadd(t2,1,4); tau1 = d2; tau1 = tau1/2.0; tau2 = d3; tau2 = tau2/2.0; /* Calculate modifications to phases for States-TPPI acquisition */ if( ix == 1) d2_init = d2; t1_counter = (int) ( (d2-d2_init)*sw1 + 0.5 ); if(t1_counter % 2) { tsadd(t1,2,4); tsadd(t12,2,4); } if( ix == 1) d3_init = d3; t2_counter = (int) ( (d3-d3_init)*sw2 + 0.5 ); if(t2_counter % 2) { tsadd(t2,2,4); tsadd(t12,2,4); } if (autocal[0] == 'y') { if (FIRST_FID) { ppm = getval("sfrq"); ofs_check(C13ofs); CO_bw=80*ppm; CA_bw=100*ppm; CAB_bw=100*ppm; CA_ofs=(57.7-C13ofs)*ppm; CAB_ofs=(44.2-C13ofs)*ppm; CO_90 = pbox_make("CO_90", "Q5", CO_bw, 0.0, pwC*compC, pwClvl); CO_180 = pbox_make("CO_180", "square180r", CO_bw, 0.0, pwC*compC, pwClvl); CA_90 = pbox_make("CA_90", "Q5", CA_bw, CA_ofs, pwC*compC, pwClvl); CA_180 = pbox_make("CA_180", "q3", CA_bw, CA_ofs, pwC*compC, pwClvl); CAB_90 = pbox_make("CAB_90", "Q5", CAB_bw, CAB_ofs, pwC*compC, pwClvl); CAB_180 = pbox_make("CAB_180", "q3", CAB_bw, CAB_ofs, pwC*compC, pwClvl); /* pbox_make creates shapes with coarse power at pwClvl and fine power is adjusted */ } } pwCO_90 = CO_90.pw; pwrCO_90 = CO_90.pwrf; pwCO_180 = CO_180.pw; pwrCO_180 = CO_180.pwrf; pwCA = CA_90.pw; pwrCA = CA_90.pwrf; pwCA2 = CA_180.pw; pwrCA2 = CA_180.pwrf; pwCAB = CAB_90.pw; pwrCAB = CAB_90.pwrf; pwCAB2 = CAB_180.pw; pwrCAB2 = CAB_180.pwrf; /* BEGIN PULSE SEQUENCE */ status(A); delay(d1); obsoffset(tof); rf0 = 4095.0; obspower(pwClvl); obspwrf(rf0); status(B); obspwrf(pwrCA); shapedpulse("CA_90",pwCA,t1,0.0,0.0); delay(tau1); obspwrf(pwrCO_180); shapedpulse("CO_180",pwCO_180,zero,0.0,0.0); obspwrf(pwrCA2); delay(TC/2); shapedpulse("CA_180",pwCA2,zero,0.0,0.0); delay(TC/2 - tau1); obspwrf(pwrCO_180); shapedpulse("CO_180",pwCO_180,zero,0.0,0.0); obspwrf(pwrCA); shapedpulse("CA_90",pwCA,one,0.0,0.0); delay(TC/2+tau2-gstab-gt1); zgradpulse(gzlvl1,gt1); delay(gstab); obspwrf(pwrCO_180); shapedpulse("CO_180",pwCO_180,zero,0.0,0.0); obspwrf(pwrCA2); shapedpulse("CA_180",pwCA2,zero,0.0,0.0); delay(TC/2-tau2-gt1-gstab); zgradpulse(gzlvl1,gt1); delay(gstab); obspwrf(pwrCO_180); shapedpulse("CO_180",pwCO_180,zero,0.0,0.0); obspwrf(pwrCAB); shapedpulse("CAB_90",pwCAB,t2,0.0,0.0); zgradpulse(gzlvl2,gt2); delay(gstab); obspwrf(pwrCO_90); shapedpulse("CO_90",pwCO_90,t3,0.0,0.0); if (IPAP[0] == 'y') { delay(del/2); obspwrf(pwrCAB2); shapedpulse("CAB_180",pwCAB2,zero,0.0,0.0); obspwrf(pwrCO_180); shapedpulse("CO_180",pwCO_180,t4,0.0,0.0); delay(del/2); } else { delay(del/4); obspwrf(pwrCAB2); shapedpulse("CAB_180",pwCAB2,zero,0.0,0.0); delay(del/4); obspwrf(pwrCO_180); shapedpulse("CO_180",pwCO_180,t4,0.0,0.0); delay(del/4); obspwrf(pwrCAB2); shapedpulse("CAB_180",pwCAB2,zero,0.0,0.0); delay(del/4); } obspwrf(pwrCO_90); shapedpulse("CO_90",pwCO_90,v5,0.0,0.0); zgradpulse(gzlvl3,gt3); delay(gstab); shapedpulse("CO_90",pwCO_90,v6,0.0,rof2); obspwrf(pwrCO_180); shapedpulse("CO_180",pwCO_180,zero,0.0,rof2); status(C); setreceiver(t12); }
pulsesequence() { /* DECLARE AND LOAD VARIABLES */ int t1_counter; /* used for states tppi in t1 */ double tau1, /* t1 delay */ TC = getval("TC"), /* delay 1/(2JC'C) ~ 9.1 ms */ pwClvl = getval("pwClvl"), /* coarse power for C13 pulse */ pwC = getval("pwC"), /* C13 90 degree pulse length at pwClvl */ compC = getval("compC"), /* adjustment for C13 amplifier compression */ rf0, /* maximum fine power when using pwC pulses */ ppm, /* 90 degree pulse at CO (174ppm) */ pwCO_90, /* 90 degree pulse length on C13 */ pwrCO_90, /*fine power */ CO_bw, /* 180 degree pulse at CO (174ppm) */ pwCO_180, /* 180 degree pulse length at rf2 */ pwrCO_180, /* fine power */ /* 90 degree pulse at C-aliph (35ppm) */ pwCaliph1, /* 90 degree pulse on C-aliphatic */ pwrCaliph1, /* fine power */ CA_bw, CA_ofs, /* fine power */ /* 180 degree pulse at C-aliph (35ppm) */ pwCaliph2, /* 180 degree pulse on C-aliphatic */ pwrCaliph2, /* fine power */ sw1 = getval("sw1"), gt1 = getval("gt1"), gzlvl1 = getval("gzlvl1"), gt2 = getval("gt2"), gzlvl2 = getval("gzlvl2"), gstab = getval("gstab"); /* LOAD PHASE TABLE */ settable(t1,1,phi1); settable(t2,2,phi2); settable(t3,4,phi3); settable(t12,4,rec); setautocal(); /* activate auto-calibration */ /* INITIALIZE VARIABLES */ /* maximum fine power for pwC pulses */ rf0 = 4095.0; /* PHASES AND INCREMENTED TIMES */ /* Phase incrementation for hypercomplex 2D data, States-Haberkorn element */ if (phase1 == 2) tsadd(t2,1,4); tau1 = d2; 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(t2,2,4); tsadd(t12,2,4); } if (autocal[0] == 'y') { if (FIRST_FID) { ppm = getval("sfrq"); ofs_check(C13ofs); CO_bw=80*ppm; CA_bw=100*ppm; CA_ofs=(35-C13ofs)*ppm; CO_90 = pbox_make("CO_90", "Q5", CO_bw, 0.0, pwC*compC, pwClvl); CO_180 = pbox_make("CO_180", "square180r", CO_bw, 0.0, pwC*compC, pwClvl); CA_90 = pbox_make("CA_90", "Q5", CA_bw, CA_ofs, pwC*compC, pwClvl); CA_180 = pbox_make("CA_180", "square180r", CA_bw, CA_ofs, pwC*compC, pwClvl); /* pbox_make creates shapes with coarse power at pwClvl and fine power is adjusted */ } } pwCO_90 = CO_90.pw; pwrCO_90 = CO_90.pwrf; pwCO_180 = CO_180.pw; pwrCO_180 = CO_180.pwrf; pwCaliph1 = CA_90.pw; pwrCaliph1 = CA_90.pwrf; pwCaliph2 = CA_180.pw; pwrCaliph2 = CA_180.pwrf; /* BEGIN PULSE SEQUENCE */ status(A); delay(d1); obsoffset(tof); rf0 = 4095.0; obspower(pwClvl); obspwrf(rf0); status(B); obspwrf(pwrCO_90); shapedpulse("CO_90",pwCO_90,zero,0.0,0.0); zgradpulse(gzlvl1,gt1); delay(TC/2.0-gt1); obspwrf(pwrCO_180); shapedpulse("CO_180",pwCO_180,zero,0.0,0.0); obspwrf(pwrCaliph2); shapedpulse("CA_180",pwCaliph2,zero,0.0,0.0); zgradpulse(gzlvl1,gt1); delay(TC/2.0-gt1); obspwrf(pwrCaliph1); shapedpulse("CA_90",pwCaliph1,t2,0.0,0.0); if (tau1 < pwCO_180) { obspwrf(pwrCO_180); delay(tau1); shapedpulse("CO_180",pwCO_180,zero,0.0,0.0); delay(tau1); } else { obspwrf(pwrCO_180); delay(tau1-pwCO_180/2.0); shapedpulse("CO_180",pwCO_180,zero,0.0,0.0); delay(tau1-pwCO_180/2.0); } obspwrf(pwrCaliph1); shapedpulse("CA_90",pwCaliph1,t3,0.0,0.0); obspwrf(pwrCO_90); shapedpulse("CO_90",pwCO_90,t1,0.0,0.0); zgradpulse(gzlvl2*0.8,gt2); delay(gstab); obspwrf(pwrCO_90); shapedpulse("CO_90",pwCO_90,t1,0.0,rof2); obspwrf(pwrCO_180); /* added for cold probe */ shapedpulse("CO_180",pwCO_180,zero,0.0,rof2); status(C); setreceiver(t12); }
pulsesequence() { /* DECLARE AND LOAD VARIABLES */ int t1_counter, t2_counter; /* used for states tppi in t1 & t2*/ char IPAP[MAXSTR], Hstart[MAXSTR], f1180[MAXSTR],H2dec[MAXSTR], shCACB_90[MAXSTR],shCACB_90r[MAXSTR], shCACB_180[MAXSTR], shCB_180[MAXSTR], decCB[MAXSTR], shCACB_180off[MAXSTR], shCBIP[MAXSTR], shCO_90[MAXSTR], shCO_180[MAXSTR], shCO_180off[MAXSTR]; double tau1, /* t1 delay */ x, TCH = getval("TCH"), TC = getval("TC"), /* delay 1/(2JCACB) ~ 7.0ms in Ref. */ del = getval("del"), /* delay del = 1/(2JC'C) ~ 9.0ms in Ref. */ pwClvl = getval("pwClvl"), /* coarse power for C13 pulse */ pwC = getval("pwC"), /* C13 90 degree pulse length at pwClvl */ compC = getval("compC"), /* adjustment for C13 amplifier compression */ pwClvlF=getval("pwClvlF"), /* maximum fine power when using pwC pulses */ pwHlvl = getval("pwHlvl"), pwH = getval("pwH"), pwCBIP = getval("pwCBIP"), /* 90 degree pulse at CO (174ppm) */ pwCO_90 = getval("pwCO_90"), /* 90 degree pulse length on C13 */ pwCO_90phase_roll = getval("pwCO_90phase_roll") , /* fraction of CACB pulse to compensate for phase roll */ pwrCO_90 = getval("pwrCO_90"), /*power */ pwrfCO_90 = getval("pwrfCO_90"), /* 180 degree pulse at CO (174ppm) */ pwCO_180 = getval("pwCO_180"), /* 180 degree pulse length on C13 */ pwrCO_180 = getval("pwrCO_180"), /*power */ pwrfCO_180 = getval("pwrfCO_180"), /* 90 degree pulse at CAB (57.7ppm) */ tofCACB = getval("tofCACB"), pwCACB_90 = getval("pwCACB_90"), pwCACB_90phase_roll = getval("pwCACB_90phase_roll") , /* fraction of CACB pulse to compensate for phase roll */ /* 90 degree pulse length on C13 */ pwrCACB_90 = getval("pwrCACB_90"), /*power */ pwrfCACB_90 = getval("pwrfCACB_90"), /* 180 degree pulse at CA (57.7ppm) */ pwCACB_180 = getval("pwCACB_180"), /* 180 degree pulse length on C13 */ pwrCACB_180 = getval("pwrCACB_180"), /*power */ pwrfCACB_180 = getval("pwrfCACB_180"), pwCB_180 = getval("pwCB_180"), /* 180 degree pulse length on C13 */ pwrCB_180 = getval("pwrCB_180"), sw1 = getval("sw1"), sw2 = getval("sw2"), gt1 = getval("gt1"), gzlvl1 = getval("gzlvl1"), gt2 = getval("gt2"), gzlvl2 = getval("gzlvl2"), gt3 = getval("gt3"), gzlvl3 = getval("gzlvl3"), gstab = getval("gstab"); getstr("IPAP",IPAP); getstr("H2dec",H2dec); getstr("shCBIP",shCBIP); getstr("f1180",f1180); getstr("shCACB_90",shCACB_90); getstr("shCACB_90r",shCACB_90r); getstr("shCACB_180",shCACB_180); getstr("shCACB_180off",shCACB_180off); getstr("shCB_180",shCB_180); getstr("decCB",decCB); getstr("shCO_90",shCO_90); getstr("shCO_180",shCO_180); getstr("shCO_180off",shCO_180off); getstr("Hstart",Hstart); /* LOAD PHASE TABLE */ settable(t1,4,phi1); settable(t2,4,phi2); settable(t3,4,phi3); settable(t4,4,phi4); settable(t5,4,phi5); settable(t12,4,rec); /* INITIALIZE VARIABLES */ if( (IPAP[A] != 'i') && (IPAP[A] != 'a')&& (IPAP[A] != 't')) { text_error("IPAP flag either i or a, exiting "); psg_abort(1); } if( (Hstart[A]=='y') && ((dmm[A]!='c' || dm[A]=='y')) ) { text_error("Incorrect combination of dm, dmm and Hstart. "); psg_abort(1);}; x=0.0; if(decCB[A]=='y'){x=1.0;} if(ni/sw1 > TC-2.0*pwCB_180*x) { text_error("too many increments in CAB t1 evolution %d\n",(int)( (TC-2.0*pwCB_180*x)*sw1 +0.5)); psg_abort(1);}; /* PHASES AND INCREMENTED TIMES */ /* Phase incrementation for hypercomplex 2D data, States-Haberkorn element */ if (phase1 == 2) tsadd(t1,1,4); tau1 = d2; if(f1180[A]=='y') {tau1+=0.5/sw1;} tau1 = tau1/2.0; /* Calculate modifications to phases for States-TPPI acquisition */ if(IPAP[A]=='a'){tsadd(t4,1,4);}; if( ix == 1) d2_init = d2; t1_counter = (int) ( (d2-d2_init)*sw1 + 0.5 ); if(t1_counter % 2) { tsadd(t1,2,4); tsadd(t12,2,4); } /* BEGIN PULSE SEQUENCE */ status(A); delay(10.0e-6); obspower(pwClvl); obspwrf(4095.0); dec2power(dpwr2); dec2pwrf(4095.0); obsoffset(tofCACB); delay(d1); /* option to start from H magnetization */ if(Hstart[A]=='y') { decpower(pwHlvl); decpwrf(4095.0); decrgpulse(pwH, zero, 0.0, 0.0); delay(TCH); simpulse(2.0*pwC,2.0*pwH, zero,zero, 0.0, 0.0); delay(TCH); decrgpulse(pwH, one, 0.0, 0.0); zgradpulse(gzlvl2,gt2); delay(gstab); rgpulse(pwC, two, 0.0, 0.0); delay(TCH); simpulse(2.0*pwC,2.0*pwH, zero,zero, 0.0, 0.0); delay(TCH); rgpulse(pwC, one, 0.0, 0.0); zgradpulse(gzlvl3,gt3); delay(gstab*2.0); decpower(dpwr); decpwrf(4095.0); } if (H2dec[A] == 'y') lk_hold(); status(B); /* CACO experiment */ /************optional deuterium decoupling**************************/ if(H2dec[A] == 'y'){ dec3unblank(); if(1.0/dmf3>900.0e-6) { dec3power(dpwr3+6.0); dec3rgpulse(0.5/dmf3, one, 1.0e-6, 0.0e-6); dec3power(dpwr3); } else dec3rgpulse(1.0/dmf3, one, 1.0e-6,0.0e-6); dec3phase(zero); setstatus(DEC3ch, TRUE, 'w', FALSE, dmf3); } /**************************************/ /* begin CA evolution and transfer to CO */ obspwrf(pwrfCACB_90); obspower(pwrCACB_90); shapedpulse(shCACB_90,pwCACB_90,t1,0.0,0.0); obspwrf(4095.0); obspower(pwClvl); delay(10.0e-6); shapedpulse(shCBIP,pwCBIP,zero,0.0,0.0); delay(10.0e-6); if(decCB[A]=='y') { delay( (TC/2.0-tau1 + 2.0*pwCACB_90phase_roll*pwCACB_90)*0.5 -pwCB_180*0.5); obspower(pwrCB_180); shapedpulse(shCB_180,pwCB_180,zero,0.0,0.0); delay( (TC/2.0-tau1 + 2.0*pwCACB_90phase_roll*pwCACB_90)*0.5 -pwCB_180*0.5); } else delay(TC/2.0-tau1 + 2.0*pwCACB_90phase_roll*pwCACB_90); obspower(pwClvl); shapedpulse(shCBIP,pwCBIP,zero,0.0,0.0); if(decCB[A]=='y') { delay((TC/2.0+tau1)*0.5 -pwCB_180*0.5); obspower(pwrCB_180); shapedpulse(shCB_180,pwCB_180,zero,0.0,0.0); delay((TC/2.0+tau1)*0.5 -pwCB_180*0.5); } else delay(TC/2.0+tau1); obspower(pwrCACB_90); shapedpulse(shCACB_90r,pwCACB_90,one,0.0,0.0); /*************************************************************/ if(H2dec[A] == 'y') { setstatus(DEC3ch, FALSE, 'w', FALSE, dmf3); if(1.0/dmf3>900.0e-6) { dec3power(dpwr3+6.0); dec3rgpulse(0.5/dmf3, three, 1.0e-6, 0.0e-6); dec3power(dpwr3); } else dec3rgpulse(1.0/dmf3, three, 1.0e-6, 0.0e-6); dec3blank(); } /*************************************************************/ /* CAzCOz */ delay(10e-6); obsoffset(tof); delay(10e-6); zgradpulse(gzlvl1,gt1); delay(gstab); status(C); /* CAzCOz -> CO or CACO */ obspwrf(pwrfCO_90); obspower(pwrCO_90); shapedpulse(shCO_90,pwCO_90,t4,0.0,0.0); /* ghost 180 on CA*/ if(IPAP[A]=='i') { obspwrf(pwClvlF); obspower(pwClvl); delay(10.0e-6); shapedpulse(shCBIP,pwCBIP,zero,0.0,0.0); delay(10.0e-6); delay(del/2.0 + pwCO_90phase_roll*pwCO_90); obspwrf(pwrfCACB_180); obspower(pwrCACB_180); delay(10.0e-6); shapedpulse(shCACB_180off,pwCACB_180,zero,0.0,0.0); obspwrf(pwClvlF); obspower(pwClvl); delay(10.0e-6); shapedpulse(shCBIP,pwCBIP,zero,0.0,0.0); obspwrf(pwrfCACB_180); obspower(pwrCACB_180); delay(10.0e-6); shapedpulse(shCACB_180off,pwCACB_180,zero,0.0,0.0); delay(10.0e-6); delay(del/2.0 ); } /***>>>>>>>>>>>**TEST*********/ if(IPAP[A]=='t') { obspwrf(pwrfCACB_180); obspower(pwrCACB_180); delay(10.0e-6); shapedpulse(shCACB_180off,pwCACB_180,zero,0.0,0.0); delay(10.0e-6); obspwrf(pwrfCO_180); obspower(pwrCO_180); delay(del/2.0); shapedpulse(shCO_180,pwCO_180,zero,0.0,0.0); obspwrf(pwrfCACB_180); obspower(pwrCACB_180); delay(10.0e-6); shapedpulse(shCACB_180off,pwCACB_180,zero,0.0,0.0); delay(10.0e-6); obspwrf(pwrfCO_90); obspower(pwrCO_90); delay(del/2.0); } /********<<<<<<<<<<<<<**TEST*********/ if(IPAP[A]=='a') { obspwrf(pwClvlF); obspower(pwClvl); delay(10.0e-6); shapedpulse(shCBIP,pwCBIP,zero,0.0,0.0); delay(10.0e-6); delay(del/4.0 + pwCO_90phase_roll*pwCO_90); obspwrf(pwrfCACB_180); obspower(pwrCACB_180); delay(10.0e-6); shapedpulse(shCACB_180off,pwCACB_180,zero,0.0,0.0); obspwrf(pwClvlF); obspower(pwClvl); delay(10.0e-6); delay(del/4.0 ); shapedpulse(shCBIP,pwCBIP,zero,0.0,0.0); delay(del/4.0); obspwrf(pwrfCACB_180); obspower(pwrCACB_180); delay(10.0e-6); shapedpulse(shCACB_180off,pwCACB_180,zero,0.0,0.0); delay(10.0e-6); delay(del/4.0 ); } if (H2dec[A]=='y') lk_sample(); status(D); setreceiver(t12); }