pulsesequence() { double cycles, bigtau = getval("bigtau"), tau = getval("tau"), satdly = getval("satdly"); char satmode[MAXSTR], sspul[MAXSTR]; getstr("satmode",satmode); getstr("sspul",sspul); settable(t1,4,phs1); settable(t2,8,phs2); settable(t3,4,phs3); getelem(t1,ct,v1); getelem(t2,ct,v2); getelem(t3,ct,v4); assign(v1,oph); /* calculate 'big tau' values */ cycles = bigtau/(2.0*tau); cycles = (double)((int)((cycles/2.0) + 0.5)) * 2.0; initval(cycles,v3); /* equilibration period */ status(A); delay(5.0e-5); if (sspul[0] == 'y') steadystate(); if (satmode[0] == 'y') { if ((d1-satdly) > 0.02) delay(d1-satdly); else delay(0.02); satpulse(satdly,v2,rof1,rof1); } else delay(d1); /* calculate exact delay and phases */ mod2(oph,v5); incr(v5); /* spin-echo loop */ status(B); rgpulse(pw,v1,rof1,0.0); starthardloop(v3); delay(tau - p1/2.0 - rof2); rgpulse(p1,v5,rof2,rof2); delay(tau - p1/2.0 - rof2); endhardloop(); /* observation period */ status(C); }
void pulsesequence() { double j1xh, pwxlvl, pwx, tau; pwxlvl = getval("pwxlvl"); pwx = getval("pwx"); j1xh = getval("j1xh"); tau = 1.0 / (2.0*j1xh); settable(t1, 4, ph1); settable(t2, 4, ph2); getelem(t1, ct, v1); getelem(t2, ct, oph); /* BEGIN ACTUAL PULSE SEQUENCE CODE */ status(A); decpower(pwxlvl); delay(d1); status(B); rgpulse(pw, zero, rof1, rof1); delay(tau - (2*pw/PI) - 2*rof1); simpulse(2*pw,pwx,v1,zero,rof1,rof2); decpower(dpwr); delay(tau - POWER_DELAY); status(C); }
double getarray(int i) { if(getelem(i)) { return *getelem(i); } return 0; }
OVERLAY void* Z_BMalloc(struct block_memory_alloc_s *pzone) { bmalpool_t **pool = (bmalpool_t **)&(pzone->firstpool); while (*pool != NULL) { byte *p = (byte *)memchr((*pool)->used, unused_block, (*pool)->blocks); // Scan for unused marker if (p) { int n = p - (*pool)->used; #ifdef SIMPECHECKS if ((n<0) || (n>=(*pool)->blocks)) I_Error("Z_BMalloc: memchr returned pointer outside of array!"); #endif (*pool)->used[n] = used_block; return getelem(*pool, pzone->size, n); } else pool = &((*pool)->nextpool); } { // Nothing available, must allocate a new pool bmalpool_t *newpool; // CPhipps: Allocate new memory, initialised to 0 *pool = newpool = (bmalpool_t *)Z_Calloc(sizeof(*newpool) + (sizeof(byte) + pzone->size)*(pzone->perpool), 1, pzone->tag); newpool->nextpool = NULL; // NULL = (void*)0 so this is redundant // Return element 0 from this pool to satisfy the request newpool->used[0] = used_block; newpool->blocks = pzone->perpool; return getelem(newpool, pzone->size, 0); } }
pulsesequence() { double gzlvl1, gt1, gstab, hsglvl, hsgt; char sspul[MAXSTR]; gzlvl1 = getval("gzlvl1"); gt1 = getval("gt1"); gstab = getval("gstab"); hsglvl = getval("hsglvl"); hsgt = getval("hsgt"); getstr("sspul",sspul); settable(t1,4,ph1); settable(t2,4,ph2); settable(t3,4,ph3); getelem(t1,ct,v1); getelem(t2,ct,v2); getelem(t3,ct,oph); initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v10); add(v1,v10,v1); add(oph,v10,oph); status(A); delay(5.0e-5); if (sspul[0] == 'y') { zgradpulse(hsglvl,hsgt); rgpulse(pw,zero,rof1,rof1); zgradpulse(hsglvl,hsgt); } delay(d1); if (getflag("wet")) wet4(zero,one); status(B); rgpulse(pw, v1, rof1, rof1); delay(d2); zgradpulse(gzlvl1,gt1); delay(gstab); rgpulse(pw, v2, rof1, rof2); zgradpulse(gzlvl1,gt1); delay(gstab); status(C); }
void main() {sqlist L; int i,j,k,b,n,e,m,a,cur_e,pre_e,next_e,s; initlist(L); cout<<"初始化后的基值地址:"<<L.elem<<" L.length=:"<<L.length<<" L.listsize=:"<<L.listsize<<endl; cout<<"新建一顺序表."<<endl; cout<<"当前表是否为空表"<<listempty(L)<<endl; cout<<"定义该线性表长度:"<<endl; cin>>a; cout<<"分别输入线性表的各个元素,按ENTER"<<endl; for(k=1;k<=a;k++){ cin>>j; i=listinsert(L,k,j);} for(b=1;b<=a;b++) cout<<L.elem[b-1]<<endl; listlength(L); cout<<"当前表长:"<<L.length<<endl; cout<<"输入要取的数的位置n(n<=a)"<<endl; cin>>n; getelem(L,n,e); //cout<<L.elem[n-1]<<endl; cout<<e<<endl; cout<<"与该数相等的的一个数的位序为:"<<locateelem(L,e,compare)<<endl; cout<<"输入要取前驱的数的位置m(<=a)"<<endl; cin>>m; getelem(L,m,cur_e); if(priorelem(L,cur_e,pre_e)) cout<<"cur_e的前驱为:"<<pre_e<<endl; else cout<<"该元素没前驱"<<endl; nextelem(L,cur_e,next_e); if(nextelem(L,cur_e,next_e)) cout<<"cur_e的后继为:"<<next_e<<endl; else cout<<"该元素没后继"<<endl; cout<<"奇数在前,偶数在后,并输出"<<endl; move(L); for(s=1;s<=a;s++) cout<<L.elem[s-1]<<endl; cout<<"输入要删元素的位序m(<=a)"<<endl; cin>>m; listdelete(L,m,e); cout<<"被删的元素为:"<<e<<endl; cout<<"删除元素后表长为"<<L.length<<endl; //listtraverse(L,visit); cout<<"置为空表"<<clearlist(L)<<endl; cout<<"销毁线性表"<<destroylist(L)<<endl; }
pulsesequence() { double cmult = getval("cmult"); settable(t1,8,ph1); settable(t2,8,ph2); settable(t3,8,ph3); getelem(t1,ct,v1); getelem(t2,ct,v2); getelem(t3,ct,oph); /* mod2(id2,v10); dbl(v10,v10); */ initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v10); add(v1,v10,v1); add(oph,v10,oph); assign(v1,v4); 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); satpulse(satdly,v4,rof1,rof1); } else delay(d1); if (getflag("wet")) wet4(zero,one); status(B); rgpulse(pw, v1, rof1, rof1); delay(d2); rgpulse(cmult*pw, v2, rof1, rof2); status(C); }
int main(void) { int i; for(i = 0; i < 16; i++) append(i); printf("Size = %d\n", size()); print(); append(1); printf("Size = %d\n", size()); print(); printf("-------------------------------------------------\n"); for( i = 0; i < 17; i++) printf("%d, ", getelem()); printf("\n"); for(i = 0; i < size(); i++) printf("%d, ", findelem(i, 0)); printf("\n"); reserve(5); print(); printf("Cap = %d, size = %d \n", capacity(), size()); printf("-------------------------------------------------\n"); append(5); printf("Cap = %d, size = %d \n", capacity(), size()); }
void pulsesequence() { char compshape[MAXSTR], sspul[MAXSTR], wet[MAXSTR], composit[MAXSTR]; getstr("compshape",compshape); getstr("composit",composit); getstr("sspul",sspul); getstr("wet",wet); settable(t1,4,phs1); settable(t2,8,phs2); getelem(t1,ct,oph); getelem(t2,ct,v2); assign(oph,v1); /* equilibrium period */ status(A); delay(5.0e-5); if (sspul[0] == 'y') steadystate(); delay(d1); if (wet[0] == 'y') wet4(zero,one); status(B); pulse(p1,zero); hsdelay(d2); if (composit[0] == 'y') { if (rfwg[OBSch-1] == 'y') shaped_pulse(compshape,4.0*pw+0.8e-6,v1,rof1,rof2); else comp90pulse(pw,v1,rof1,rof2); } else rgpulse(pw,v1,rof1,rof2); status(C); }
static void composite_pulse(double width, codeint phasetable, double rx1, double rx2, codeint phase) { getelem(phasetable,ct,phase); /* Extract observe phase from table */ incr(phase); rgpulse(width,phase,rx1,rx1); /* Y */ incr(phase); rgpulse(width,phase,rx1,rx1); /* -X */ incr(phase); rgpulse(width,phase,rx1,rx1); /* -Y */ incr(phase); rgpulse(width,phase,rx1,rx2); /* X */ }
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(); }
void pulsesequence() { double pwx; char rcvrsflag[MAXSTR]; pwx = getval("pwx"); getstr("rcvrs",rcvrsflag); /* check decoupling modes */ if ( (dm[C] == 'y') || (dm[D] == 'y') || (h**o[0] == 'y') ) { printf("dm[C], dm[D] should be set to 'n' and/or h**o should set to 'n'"); psg_abort(1); } if (strcmp(rcvrsflag,"yy")) printf("rcvrs parameter should be set to 'yy'\n"); settable(t1,4,ph1); getelem(t1,ct,v1); assign(v1,oph); settable(t2,4,ph2); status(A); obspower(tpwr); decpower(dpwr); delay(d1); status(B); delay(d2); rgpulse(pw, t2, rof1, rof2); status(C); setactivercvrs("yn"); startacq(alfa); acquire(np,1.0/sw); endacq(); status(B); delay(d2); decrgpulse(pwx, t2, rof1, rof2); status(D); setactivercvrs("ny"); startacq(alfa); acquire(np,1.0/sw); endacq(); }
pulsesequence() { double gzlvl1,pwClvl, gt1, gstab; gzlvl1 = getval("gzlvl1"); gt1 = getval("gt1"); gstab = getval("gstab"); pwClvl = getval("pwClvl"); settable(t1,4,ph1); settable(t2,4,ph2); settable(t3,4,ph3); getelem(t1,ct,v1); getelem(t2,ct,v2); getelem(t3,ct,oph); initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v10); add(v1,v10,v1); add(oph,v10,oph); status(A); obspower(pwClvl); delay(d1); status(B); rgpulse(pw, v1, rof1, rof1); delay(d2); zgradpulse(gzlvl1,gt1); delay(gstab); rgpulse(pw, v2, rof1, rof2); zgradpulse(gzlvl1,gt1); delay(gstab); status(C); }
void incvol(const Arg *arg) { long min, max; snd_mixer_elem_t* elem = getelem(alsachannel); snd_mixer_selem_get_playback_volume_range(elem, &min, &max); int delta = (arg->i*(max-min))/100; long vol = getvol(elem); int newvol = vol+delta; if (newvol < min) newvol = min; if (newvol > max) newvol = max; setvol(newvol, elem); }
void mutevol(const Arg *arg) { snd_mixer_elem_t* elem = getelem(alsachannel); switch (arg->i) { case -1: togglemute(elem); return; case 0: setmute(elem, 0); return; case 1: setmute(elem, 1); return; } return; }
int main() { int x[6]={3,6,5,2,8,9},a,c,d,e=8,g; bool b,f; sqlist *A; createlist(A,x,6); listinsert(A,4,1); listdelete(A,2,g); displist(A); a=listlength(A); b=getelem(A,3,c); d=locateelem(A,e); printf("%d\n",a); printf("%d\n",b); printf("%d\n",d); printf("%d\n",f); system("pause"); return 0; }
int main() { int x[]={32,42,334,22,67,89}; int a,c,d,f; bool b,e,g; linklist *A; createlistr(A,x,6); b=getelem(A,4,c); d=locateelem(A,67); listinsert(A,4,76); listdelete(A,2,f); displist(A); a=listlength(A); printf("%d\n",a); printf("%d\n",c); printf("%d\n",d); printf("%d\n",f); system("pause"); return 0; }
int main(void) { int i; time_t theTime; time(&theTime); srand(theTime); for(i=0; i < CAPACITY; i++) { append((int)10*(rand()/((double)RAND_MAX+1))); } printf("%s\n", "--------------------------------"); reread(); for(i=0; i < CAPACITY; i++) printf("%d: %d\n",i , getelem()); printf("%s\n", "--------------------------------"); for(i=0; i < CAPACITY; i++) printf("%d: %d\n",i , find(i)); }
pulsesequence() { double phase = getval("phase"), mix = getval("mix"), wrefpwr = getval("wrefpwr"), wrefpw = getval("wrefpw"), wrefpwrf = getval("wrefpwrf"), gt1 = getval("gt1"), gzlvl1 = getval("gzlvl1"), gt2 = getval("gt2"), gzlvl2 = getval("gzlvl2"), gstab = getval("gstab"), trimpwr = getval("trimpwr"), trim = getval("trim"), compH = getval("compH"), strength = getval("strength"), /* spinlock field strength in Hz */ cycles, d2corr, corfact, slpw90, slpwr, slpwra; int iphase; char sspul[MAXSTR],T_flg[MAXSTR], trim_flg[MAXSTR], wrefshape[MAXSTR],alt_grd[MAXSTR]; /* LOAD AND INITIALIZE PARAMETERS */ iphase = (int) (phase + 0.5); satdly = getval("satdly"); satpwr = getval("satpwr"); satfrq = getval("satfrq"); getstr("sspul", sspul); getstr("satmode", satmode); getstr("T_flg", T_flg); getstr("wrefshape", wrefshape); getstr("alt_grd",alt_grd); getstr("trim_flg", trim_flg); rof1 = getval("rof1"); if(rof1 > 2.0e-6) rof1=2.0e-6; /* CALCULATE PHASES AND INITIALIZE LOOP COUNTER FOR MIXING TIME */ settable(t1,8,phi1); settable(t2,8,phi2); settable(t3,8,phi3); settable(t4,8,phi4); settable(t5,8,phi5); settable(t6,8,phi6); settable(t7,8,phi7); getelem(t1,ct,v1); getelem(t7,ct,v7); assign(v1,oph); if (iphase == 2) { incr(v7); incr(v1); /* BC2D hypercomplex method */ } /* FOR HYPERCOMPLEX, USE REDFIED TRICK TO MOVE AXIALS TO EDGE */ initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v9); /* moves axials */ if ((iphase==2)||(iphase==1)) {add(v1,v9,v1); add(v7,v9,v7); add(oph,v9,oph);} if (alt_grd[0] == 'y') mod2(ct,v6); /* alternate gradient sign on every 2nd transient */ /* CALCULATE SPIN>LOCK POWER AND PULSE WIDTHS */ slpw90 = 1/(4.0 * strength) ; /* spinlock field strength */ /* slpw1 = slpw90/90.0; */ slpwra = tpwr - 20.0*log10(slpw90/(compH*pw)); slpwr = (int) (slpwra + 0.5); corfact = exp((slpwr-slpwra)*2.302585/20); if (corfact < 1.00) { slpwr=slpwr+1; corfact=corfact*1.12202; } cycles = mix / (16.0 * (4e-6 + 2.0*slpw90)); initval(cycles, v10); /* mixing time cycles */ /* BEGIN ACTUAL PULSE SEQUENCE */ status(C); obspower(tpwr); obspwrf(4095.0); if (sspul[A] == 'y') { zgradpulse(gzlvl1,gt1); delay(5.0e-5); rgpulse(pw,zero,rof1,rof1); zgradpulse(gzlvl1,gt1); delay(5.0e-5); } status(A); if (satmode[A] == 'y') { if (d1 > satdly) delay(d1-satdly); if (tof != satfrq) obsoffset(satfrq); obspower(satpwr); rgpulse(satdly,zero,rof1,rof1); obspower(tpwr); if (tof != satfrq) obsoffset(tof); } else delay(d1); status(B); obsstepsize(45.0); initval(7.0,v4); xmtrphase(v4); rgpulse(pw,v1,rof1,1.0e-6); if (trim_flg[0] == 'y') { obspower(trimpwr); rgpulse(trim,v7,rof1,rof1); obspower(tpwr); } xmtrphase(zero); if (T_flg[0] == 'n') d2corr = rof1 + 1.0e-6 + (2*pw/3.1416) + SAPS_DELAY; else d2corr = rof1 + 1.0e-6 + (4*pw/3.1416) + SAPS_DELAY; if (d2 > d2corr) delay(d2 - d2corr); else delay(0.0); if ((T_flg[0] == 'y')&&(cycles > 1.5)) { rgpulse(pw,t4,rof1,rof1); obspower(slpwr); obspwrf(4095.0/corfact); { starthardloop(v10); rgpulse(2.0*slpw90,t2,4e-6,0.0); rgpulse(2.0*slpw90,t3,4e-6,0.0); rgpulse(2.0*slpw90,t2,4e-6,0.0); rgpulse(2.0*slpw90,t3,4e-6,0.0); rgpulse(2.0*slpw90,t2,4e-6,0.0); rgpulse(2.0*slpw90,t3,4e-6,0.0); rgpulse(2.0*slpw90,t2,4e-6,0.0); rgpulse(2.0*slpw90,t3,4e-6,0.0); rgpulse(2.0*slpw90,t2,4e-6,0.0); rgpulse(2.0*slpw90,t3,4e-6,0.0); rgpulse(2.0*slpw90,t2,4e-6,0.0); rgpulse(2.0*slpw90,t3,4e-6,0.0); rgpulse(2.0*slpw90,t2,4e-6,0.0); rgpulse(2.0*slpw90,t3,4e-6,0.0); rgpulse(2.0*slpw90,t2,4e-6,0.0); rgpulse(2.0*slpw90,t3,4e-6,0.0); endhardloop(); } obspower(tpwr); obspwrf(4095.0); rgpulse(pw,t5,rof1,rof1); } /* The ROESY spin-lock unit is executed sixteen times within the hardware loop so that it is of sufficient duration to allow the acquisition hardware loop to be loaded in behind it on the last pass through the spin-lock loop. */ else { obspower(slpwr); obspwrf(4095.0/corfact); rgpulse(mix,t2,rof1,rof1); /* cw spin lock */ obspower(tpwr); obspwrf(4095.0); } /* DPFGSE solvent suppression */ ifzero(v6); zgradpulse(gzlvl2,gt2); elsenz(v6); zgradpulse(-1.0*gzlvl2,gt2); endif(v6); obspower(wrefpwr+6); obspwrf(wrefpwrf); delay(gstab); shaped_pulse(wrefshape,wrefpw,t5,rof1,rof1); obspower(tpwr); obspwrf(4095.0); rgpulse(2.0*pw,t6,rof1,rof1); ifzero(v6); zgradpulse(gzlvl2,gt2); elsenz(v6); zgradpulse(-1.0*gzlvl2,gt2); endif(v6); obspower(wrefpwr+6); obspwrf(wrefpwrf); delay(gstab); ifzero(v6); zgradpulse(1.2*gzlvl2,gt2); elsenz(v6); zgradpulse(-1.2*gzlvl2,gt2); endif(v6); delay(gstab); shaped_pulse(wrefshape,wrefpw,t5,rof1,rof1); obspower(tpwr); obspwrf(4095.0); rgpulse(2.0*pw,t6,rof1,rof2); ifzero(v6); zgradpulse(1.2*gzlvl2,gt2); elsenz(v6); zgradpulse(-1.2*gzlvl2,gt2); endif(v6); delay(gstab); status(C); }
pulsesequence() { double slpwrT = getval("slpwrT"), slpwT = getval("slpwT"), mixT = getval("mixT"), trim = getval("trim"), tauz1 = getval("tauz1"), tauz2 = getval("tauz2"), tauz3 = getval("tauz3"), tauz4 = getval("tauz4"), 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"); char selshapeA[MAXSTR], selshapeB[MAXSTR], slpatT[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); 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,v6); if (getflag("zqfilt")) { hlv(v6,v6); hlv(v6,v6); } settable(t1,4,ph1); getelem(t1,v6,v1); settable(t3,8,ph3); getelem(t3,v6,v11); settable(t4,8,ph4); settable(t2,4,ph2); getelem(t2,v6,v2); settable(t7,8,ph7); getelem(t7,v6,v7); settable(t8,4,ph8); getelem(t8,v6,v8); if (getflag("zqfilt")) getelem(t4,v6,oph); else assign(v1,oph); sub(v2,one,v3); add(v2,two,v4); add(v3,two,v5); mod4(ct,v10); /* 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, v1, 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,v2,rof1,rof1); obspower(slpwrT); zgradpulse(gzlvlB,gtB); delay(gstab); if (selfrq != tof) obsoffset(tof); if (mixT > 0.0) { rgpulse(trim,v11,0.0,0.0); if (dps_flag) rgpulse(mixT,v3,0.0,0.0); else SpinLock(slpatT,mixT,slpwT,v2,v3,v4,v5, v9); } if (getflag("zqfilt")) { obspower(tpwr); rgpulse(pw,v7,1.0e-6,rof1); ifzero(v10); delay(tauz1); endif(v10); decr(v10); ifzero(v10); delay(tauz2); endif(v10); decr(v10); ifzero(v10); delay(tauz3); endif(v10); decr(v10); ifzero(v10); delay(tauz4); endif(v10); rgpulse(pw,v8,rof1,rof2); } else delay(rof2); status(C); }
pulsesequence() { double pwx2lvl, pwx2, hsglvl, hsgt, satfrq, satdly, satpwr, slpw, slpwr, trim, mix, mult, cycles, tau, j1xh, null, phase; int iphase; char sspul[MAXSTR], nullflg[MAXSTR], PFGflg[MAXSTR], satmode[MAXSTR]; mix = getval("mix"); slpwr = getval("slpwr"); slpw = getval("slpw"); trim = getval("trim"); mult = getval("mult"); pwx2lvl = getval("pwx2lvl"); pwx2 = getval("pwx2"); hsglvl = getval("hsglvl"); hsgt = getval("hsgt"); getstr("PFGflg",PFGflg); getstr("nullflg",nullflg); satfrq = getval("satfrq"); satdly = getval("satdly"); satpwr = getval("satpwr"); null = getval("null"); j1xh = getval("j1xh"); tau = 1/(4*j1xh); phase = getval("phase"); getstr("satmode",satmode); getstr("sspul",sspul); iphase = (int) (phase + 0.5); cycles = (mix - trim ) / (96.66*slpw); cycles = 2.0*(double) (int) (cycles/2.0); initval(cycles, v9); settable(t1,4,ph1); settable(t2,2,ph2); settable(t3,8,ph3); settable(t4,16,ph4); settable(t5,16,ph5); getelem(t2,ct,v2); getelem(t5,ct,oph); initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v14); if (iphase == 2) incr(v2); add(v2,v14,v2); add(oph,v14,oph); status(A); dec2power(pwx2lvl); obspower(tpwr); if (sspul[0] == 'y') { if (PFGflg[0] == 'y') { zgradpulse(hsglvl,hsgt); rgpulse(pw,zero,rof1,rof1); zgradpulse(hsglvl,hsgt); } else { obspower(tpwr-12); rgpulse(500*pw,zero,rof1,rof1); rgpulse(500*pw,one,rof1,rof1); obspower(tpwr); } } delay(d1); if (satmode[0] == 'y') { obspower(satpwr); if (satfrq != tof) obsoffset(satfrq); rgpulse(satdly,zero,rof1,rof1); if (satfrq != tof) obsoffset(tof); obspower(tpwr); delay(1.0e-5); } status(B); if (PFGflg[0] == 'y') { if (nullflg[0] == 'y') { rgpulse(0.5*pw,zero,rof1,rof1); delay(2*tau); sim3pulse(2.0*pw,0.0,2.0*pwx2,zero,zero,zero,rof1,rof1); delay(2*tau); 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); sim3pulse(2*pw,0.0,2*pwx2,zero,zero,zero,rof1,rof1); delay(2*tau); rgpulse(pw,two,rof1,rof1); delay(null); } } rcvroff(); rgpulse(pw,zero,rof1,rof1); delay(tau - pwx2 - 2*pw/PI - 2*rof1); sim3pulse(2*pw,0.0,2*pwx2,zero,zero,zero,rof1,rof1); delay(tau - pwx2 - 2*pwx2/PI - 2*rof1); sim3pulse(pw,0.0,pwx2,t1,zero,v2,rof1,2.0e-6); if (d2/2 > 0.0) delay(d2/2 - (2*pwx2/PI) - pw - 4.0e-6); else delay(d2/2); rgpulse(2*pw,zero,2.0e-6,2.0e-6); if (d2/2 > 0.0) delay(d2/2 - (2*pwx2/PI) - pw - 4.0e-6); else delay(d2/2); sim3pulse(pw,0.0,pwx2,t3,zero,t4,2.0e-6,rof1); delay(tau - pwx2 - (2*pwx2/PI) - 2*rof1); sim3pulse(2*pw,0.0,2*pwx2,zero,zero,zero,rof1, rof1); obspower(slpwr); txphase(zero); delay(tau - rof1 - pwx2 - POWER_DELAY); if (cycles > 1.0) { xmtron(); delay(trim); starthardloop(v9); mleva(); mleva(); mlevb(); mlevb(); mlevb(); mleva(); mleva(); mlevb(); mlevb(); mlevb(); mleva(); mleva(); mleva(); mlevb(); mlevb(); mleva(); txphase(one); delay(0.66*slpw); endhardloop(); xmtroff(); } if (mult > 0.5) { obspower(tpwr); delay(tau - POWER_DELAY - rof1); sim3pulse(2*pw,0.0,mult*pwx2,zero,zero,zero,rof1,0.0); rcvron(); dec2power(dpwr2); delay(tau - POWER_DELAY); } else { dec2power(dpwr2); delay(rof2 - POWER_DELAY); rcvron(); } status(C); }
void pulsesequence() { double tpwr180r = getval("tpwr180r"), pw180r = getval("pw180r"), pwx180 = getval("dnbippw"), pwxlvl180 = getval("dnbippwr"), pp = getval("pp"), pplvl = getval("pplvl"), tauC = getval("tauC"), tau; int prgcycle=(int)(getval("prgcycle")+0.5); char pw180ref[MAXSTR], dnbipshp[MAXSTR], bipflg[MAXSTR]; getstr("pw180ref", pw180ref); getstr("dnbipshp", dnbipshp); getstr("bipflg",bipflg); tau = 1.0 / (2.0 * (getval("j1xh"))); assign(ct,v17); assign(zero,v18); assign(zero,v19); if (getflag("prgflg") && getflag("satmode") && (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,phs1); settable(t2,8,phs2); settable(t3,4,phs3); getelem(t1,v17,v1); getelem(t2,v17,v2); getelem(t3,v17,v3); assign(v1,oph); add(oph,v18,oph); add(oph,v19,oph); if (getflag("prgflg") && getflag("satmode")) assign(v3,v2); /* equilibrium period */ status(A); delay(5.0e-5); if (getflag("sspul")) steadystate(); if (getflag("satmode")) { if ((d1-satdly) > 0.02) delay(d1-satdly); else delay(0.02); if (getflag("slpsat")) { shaped_satpulse("relaxD",satdly,v2); if (getflag("prgflg")) shaped_purge(v1,v2,v18,v19); } else { satpulse(satdly,v2,rof1,rof1); if (getflag("prgflg")) purge(v1,v2,v18,v19); } } else delay(d1); if (getflag("wet")) wet4(zero,one); status(B); obspower(tpwr); if (bipflg[1] == 'y') decpower(pwxlvl180); else decpower(pplvl); rgpulse(pw,v1,rof1,rof1); if (bipflg[1] == 'y') { decshaped_pulse(dnbipshp,pwx180,zero,2.0e-6,2.0e-6); delay(tau+tauC); } else { decrgpulse(2*pp,zero,2.0e-6,2.0e-6); delay(tau); } obspower(tpwr180r); shaped_pulse(pw180ref,pw180r,v1,rof1,rof1); if (bipflg[1] == 'y') { decshaped_pulse(dnbipshp,pwx180,zero,2.0e-6,2.0e-6); delay(tau+tauC); } else { decrgpulse(2*pp,zero,2.0e-6,2.0e-6); delay(tau); } shaped_pulse(pw180ref,pw180r,v1,rof1,rof2); decpower(dpwr); obspower(tpwr); status(C); }
void pulsesequence() { double j1min = getval("j1min"), j1max = getval("j1max"), gzlvl0 = getval("gzlvl0"), gt0 = getval("gt0"), tau, tauA, tauB, taumb; int phase1 = (int)(getval("phase")+0.5); tauA = 1/(2*(j1min + 0.146*(j1max - j1min))); tauB = 1/(2*(j1max - 0.146*(j1max - j1min))); taumb = 1/(2*(getval("jnxh"))); tau=1/(j1min+j1max); settable(t1,1,ph1); settable(t2,2,ph2); settable(t3,4,ph3); settable(t4,1,ph4); settable(t5,8,ph5); settable(t6,8,ph6); settable(t7,4,ph7); if (getflag("jfilter")) { if (getflag("PFGflg")) { getelem(t2,ct,v3); getelem(t7,ct,oph); getelem(t3,ct,v4); } else { getelem(t3,ct,v3); getelem(t6,ct,oph); getelem(t5,ct,v4); } } else { getelem(t2,ct,v3); getelem(t7,ct,oph); getelem(t3,ct,v4); } if (phase1 == 2) incr(v3); /* mod2(id2,v10); dbl(v10,v10); */ initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v10); add(v3,v10,v3); add(oph,v10,oph); 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); satpulse(satdly,zero,rof1,rof1); } else delay(d1); if (getflag("wet")) wet4(zero,one); decpower(pwxlvl); status(B); rgpulse(pw,t1,rof1,rof2); /* Start of J filter */ if (getflag("jfilter")) { if (getflag("PFGflg")) { zgradpulse(gzlvl0/2,gt0); delay(tauA - gt0); decrgpulse(pwx, zero, rof1, rof1); zgradpulse(-gzlvl0/3,gt0); delay(tauB - gt0); decrgpulse(pwx, zero, rof1, rof1); zgradpulse(-gzlvl0/6,gt0); delay(gt0/3); } else { delay(tau - rof2 - rof1); decrgpulse(pwx,t2,rof1,rof1); } } /* End of J filter */ delay(taumb); decrgpulse(pwx,v3,rof1,2.0e-6); if (d2/2 > 0.0) delay(d2/2 - 2*pwx/PI - pw - 4.0e-6); else delay(d2/2); rgpulse(pw*2.0,t4,2.0e-6,2.0e-6); if (d2/2 > 0.0) delay(d2/2 - 2*pwx/PI - pw - 4.0e-6); else delay(d2/2); decrgpulse(pwx,v4,2.0e-6,rof2); decpower(dpwr); status(C); }
pulsesequence() { /* Internal variable declarations *************************/ int shapelist90,shapelist180,shapelistIR; double nseg; double seqtime,tau1,tau2,tau3, te1_delay,te2_delay,te3_delay, iti_delay, ti_delay, tr_delay; double kzero; double freq90[MAXNSLICE], freq180[MAXNSLICE], freqIR[MAXNSLICE]; /* Real-time variables used in this sequence **************/ int vpe_ctr = v2; // PE loop counter int vpe_mult = v3; // PE multiplier, ranges from -PE/2 to PE/2 int vms_slices = v4; // Number of slices int vms_ctr = v5; // Slice loop counter int vseg = v6; // Number of ETL segments int vseg_ctr = v7; // Segment counter int vetl = v8; // Echo train length int vetl_ctr = v9; // Echo train loop counter int vssc = v10; // Compressed steady-states int vtrimage = v11; // Counts down from nt, trimage delay when 0 int vacquire = v12; // Argument for setacqvar, to skip steady state acquires int vphase180 = v13; // phase of 180 degree refocusing pulse /* Initialize paramaters **********************************/ init_mri(); /* Load external PE table ********************************/ if (strcmp(petable,"n") && strcmp(petable,"N") && strcmp(petable,"")) { loadtable(petable); } else { abort_message("petable undefined"); } seqtime = 0.0; espmin = 0.0; kzero = getval("kzero"); /* RF Power & Bandwidth Calculations **********************/ init_rf(&p1_rf,p1pat,p1,flip1,rof1,rof2); init_rf(&p2_rf,p2pat,p2,flip2,rof1,rof2); calc_rf(&p1_rf,"tpwr1","tpwr1f"); calc_rf(&p2_rf,"tpwr2","tpwr2f"); /* Initialize gradient structures *************************/ init_readout_butterfly(&ro_grad,"ro",lro,np,sw,gcrushro,tcrushro); init_readout_refocus(&ror_grad,"ror"); init_phase(&pe_grad,"pe",lpe,nv); init_slice(&ss_grad,"ss",thk); /* NOTE assume same band widths for p1 and p2 */ init_slice_butterfly(&ss2_grad,"ss2",thk,gcrush,tcrush); init_slice_refocus(&ssr_grad,"ssr"); /* Gradient calculations **********************************/ calc_readout(&ro_grad,WRITE,"gro","sw","at"); calc_readout_refocus(&ror_grad,&ro_grad,NOWRITE,"gror"); calc_phase(&pe_grad,WRITE,"gpe","tpe"); calc_slice(&ss_grad,&p1_rf,WRITE,"gss"); calc_slice(&ss2_grad,&p1_rf,WRITE,""); calc_slice_refocus(&ssr_grad,&ss_grad,NOWRITE,"gssr"); /* Equalize refocus and PE gradient durations *************/ calc_sim_gradient(&ror_grad,&null_grad,&ssr_grad,0.0,WRITE); /* Create optional prepulse events ************************/ if (sat[0] == 'y') create_satbands(); if (fsat[0] == 'y') create_fatsat(); if (mt[0] == 'y') create_mtc(); if (ir[0] == 'y') { init_rf(&ir_rf,pipat,pi,flipir,rof1,rof2); calc_rf(&ir_rf,"tpwri","tpwrif"); init_slice_butterfly(&ssi_grad,"ssi",thk,gcrushir,tcrushir); calc_slice(&ssi_grad,&ir_rf,WRITE,"gssi"); } /* Set up frequency offset pulse shape list ********/ offsetlist(pss,ss_grad.ssamp, 0,freq90, ns,seqcon[1]); offsetlist(pss,ss2_grad.ssamp,0,freq180,ns,seqcon[1]); offsetlist(pss,ssi_grad.ssamp,0,freqIR, ns,seqcon[1]); shapelist90 = shapelist(p1pat,ss_grad.rfDuration, freq90, ns,0,seqcon[1]); shapelist180 = shapelist(p2pat,ss2_grad.rfDuration,freq180,ns,0,seqcon[1]); shapelistIR = shapelist(pipat,ssi_grad.rfDuration,freqIR, ns,0,seqcon[1]); /* same slice selection gradient and RF pattern used */ if (ss_grad.rfFraction != 0.5) abort_message("ERROR %s: RF pulse must be symmetric (RF fraction = %.2f)", seqfil,ss_grad.rfFraction); if (ro_grad.echoFraction != 1) abort_message("ERROR %s: Echo Fraction must be 1",seqfil); /* Find sum of all events in each half-echo period ********/ tau1 = ss_grad.rfCenterBack + ssr_grad.duration + ss2_grad.rfCenterFront; tau2 = ss2_grad.rfCenterBack + pe_grad.duration + ro_grad.timeToEcho; tau3 = ro_grad.timeFromEcho + pe_grad.duration + ss2_grad.rfCenterFront; espmin = 2*MAX(MAX(tau1,tau2),tau3); // Minimum echo spacing if (minesp[0] == 'y') { esp = espmin + 8e-6; // ensure at least 4us delays in both TE periods putvalue("esp",esp); } else if (((espmin+8e-6)-esp) > 12.5e-9) { abort_message("ERROR %s: Echo spacing too small, minimum is %.2fms\n",seqfil,(espmin+8e-6)*1000); } te1_delay = esp/2.0 - tau1; // Intra-esp delays te2_delay = esp/2.0 - tau2; te3_delay = esp/2.0 - tau3; te = kzero*esp; // Return effective TE putvalue("te",te); /* Minimum TR **************************************/ /* seqtime is total time per slice */ seqtime = 2*4e-6 + ss_grad.rfCenterFront + etl*esp + ro_grad.timeFromEcho + pe_grad.duration + te3_delay; /* Increase TR if any options are selected****************/ if (sat[0] == 'y') seqtime += ns*satTime; if (fsat[0] == 'y') seqtime += ns*fsatTime; if (mt[0] == 'y') seqtime += ns*mtTime; if (ir[0] == 'y') { /* Inter-IR delay */ if (ns > 1) iti_delay = seqtime - ssi_grad.duration; /* it is probably safe to assume that seqtime is always > the pulse widths */ else iti_delay = 0; /* Inversion Recovery */ timin = ssi_grad.rfCenterBack + ss_grad.rfCenterFront; timin += 8e-6; // from sp1on/off and after 90 pulse power setting timin += seqtime*(ns-1) + iti_delay; if (ti < timin + 4e-6) // ensure at least a 4us delay abort_message("%s: ti too short, minimum is %.2fms",seqfil,timin*1000); /* Delay after the last IR pulse */ ti_delay = ti - timin; /* force all slices to be acquired back-to-back, with a single TR delay at end */ trtype = 1; } else { iti_delay = ti_delay = 0; } trmin = ns*(seqtime + 4e-6); if (ir[0] == 'y') { trmin += (4e-6 + ssi_grad.rfCenterFront + ti); } if (mintr[0] == 'y'){ tr = trmin; putvalue("tr",tr); } if ((trmin-tr) > 12.5e-9) { abort_message("TR too short. Minimum TR = %.2fms\n",trmin*1000); } tr_delay = (tr - trmin)/ns; /* Set number of segments for profile or full image **********/ nseg = prep_profile(profile[0],nv/etl,&pe_grad,&per_grad); /* Shift DDR for pro *******************************/ roff = -poffset(pro,ro_grad.roamp); /* Calculate total acquisition time */ g_setExpTime(tr*(nt*nseg*getval("arraydim") + ssc) + trimage*getval("arraydim")); /* Return parameters to VnmrJ */ putvalue("rgss",ss_grad.tramp); //90 slice ramp if (ss2_grad.enableButterfly) { //180 slice ramps putvalue("rcrush",ss2_grad.crusher1RampToCrusherDuration); putvalue("rgss2",ss2_grad.crusher1RampToSsDuration); } else { putvalue("rgss2",ss2_grad.tramp); } if (ro_grad.enableButterfly) { putvalue("rgro",ro_grad.crusher1RampToSsDuration); } else { putvalue("rgro",ro_grad.tramp); //RO ramp } putvalue("tror",ror_grad.duration); //ROR duration putvalue("rgror",ror_grad.tramp); //ROR ramp putvalue("gpe",pe_grad.peamp); //PE max amp putvalue("gss",ss_grad.ssamp); putvalue("gro",ro_grad.roamp); /* PULSE SEQUENCE *************************************/ initval(fabs(ssc),vssc); // Compressed steady-state counter assign(one,vacquire); // real-time acquire flag /* Phase cycle: Alternate 180 phase to cancel residual FID */ mod2(ct,vphase180); // 0101 dbl(vphase180,vphase180); // 0202 add(vphase180,one,vphase180); // 1313 Phase difference from 90 add(vphase180,oph,vphase180); obsoffset(resto); delay(4e-6); initval(nseg,vseg); loop(vseg,vseg_ctr); /* TTL scope trigger **********************************/ sp1on(); delay(4e-6); sp1off(); /* Compressed steady-states: 1st array & transient, all arrays if ssc is negative */ if ((ix > 1) && (ssc > 0)) assign(zero,vssc); sub(vseg_ctr,vssc,vseg_ctr); // vpe_ctr counts up from -ssc assign(zero,vssc); ifzero(vseg_ctr); assign(zero,vacquire); // Start acquiring when vseg_ctr reaches zero endif(vseg_ctr); setacqvar(vacquire); // Turn on acquire when vacquire is zero if (ticks) { xgate(ticks); grad_advance(gpropdelay); delay(4e-6); } if(ir[0] == 'y') { /* IR for all slices prior to data acquisition */ obspower(ir_rf.powerCoarse); obspwrf(ir_rf.powerFine); delay(4e-6); msloop(seqcon[1],ns,vms_slices,vms_ctr); obl_shapedgradient(ssi_grad.name,ssi_grad.duration,0,0,ssi_grad.amp,NOWAIT); delay(ssi_grad.rfDelayFront); shapedpulselist(shapelistIR,ssi_grad.rfDuration,oph,rof1,rof2,seqcon[1],vms_ctr); delay(ssi_grad.rfDelayBack); delay(iti_delay); endmsloop(seqcon[1],vms_ctr); delay(ti_delay); } msloop(seqcon[1],ns,vms_slices,vms_ctr); /* Prepulse options ***********************************/ if (sat[0] == 'y') satbands(); if (fsat[0] == 'y') fatsat(); if (mt[0] == 'y') mtc(); /* 90 degree pulse ************************************/ rotate(); obspower(p1_rf.powerCoarse); obspwrf(p1_rf.powerFine); delay(4e-6); obl_shapedgradient(ss_grad.name,ss_grad.duration,0,0,ss_grad.amp,NOWAIT); delay(ss_grad.rfDelayFront); shapedpulselist(shapelist90,ss_grad.rfDuration,oph,rof1,rof2,seqcon[1],vms_ctr); delay(ss_grad.rfDelayBack); /* Read dephase and Slice refocus *********************/ obl_shapedgradient(ssr_grad.name,ssr_grad.duration,ror_grad.amp,0.0,-ssr_grad.amp,WAIT); /* First half-TE delay ********************************/ obspower(p2_rf.powerCoarse); obspwrf(p2_rf.powerFine); delay(te1_delay); peloop(seqcon[2],etl,vetl,vetl_ctr); mult(vseg_ctr,vetl,vpe_ctr); add(vpe_ctr,vetl_ctr,vpe_ctr); getelem(t1,vpe_ctr,vpe_mult); /* 180 degree pulse *******************************/ /* Note, ss2_grad.amp is max gradient for butterfly shape; flat top = _.ssamp */ obl_shapedgradient(ss2_grad.name,ss2_grad.duration,0,0,ss2_grad.amp,NOWAIT); delay(ss2_grad.rfDelayFront); shapedpulselist(shapelist180,ss2_grad.rfDuration,vphase180,rof1,rof2,seqcon[1],vms_ctr); delay(ss2_grad.rfDelayBack); /* Phase-encode gradient ******************************/ pe_shapedgradient(pe_grad.name,pe_grad.duration,0,0,0,-pe_grad.increment,vpe_mult,WAIT); /* Second half-TE period ******************************/ delay(te2_delay); /* Readout gradient ************************************/ obl_shapedgradient(ro_grad.name,ro_grad.duration,ro_grad.amp,0,0,NOWAIT); delay(ro_grad.atDelayFront); /* Acquire data ****************************************/ startacq(alfa); acquire(np,1.0/sw); endacq(); delay(ro_grad.atDelayBack); /* Rewinding phase-encode gradient ********************/ /* Phase encode, refocus, and dephase gradient ******************/ pe_shapedgradient(pe_grad.name,pe_grad.duration,0,0,0,pe_grad.increment,vpe_mult,WAIT); /* Second half-TE delay *******************************/ delay(te3_delay); endpeloop(seqcon[2],vetl_ctr); /* Relaxation delay ***********************************/ if (!trtype) delay(tr_delay); endmsloop(seqcon[1],vms_ctr); if (trtype) delay(ns*tr_delay); endloop(vseg_ctr); /* Inter-image delay **********************************/ sub(ntrt,ct,vtrimage); decr(vtrimage); ifzero(vtrimage); delay(trimage); endif(vtrimage); }
pulsesequence() { /* Internal variable declarations *********************/ char txphase[MAXSTR]; char rxphase[MAXSTR]; char blankmode[MAXSTR]={0}; double postDelay; double rfDuration; double acqt; int i,ret=-1; static int phs1[4] = {0,2,1,3}; /* from T1meas.c */ /*************************************************/ /* Initialize paramter **************************/ i = 0; postDelay = 0.5; acqt = 0.0; getstr("rxphase",rxphase); getstr("txphase",txphase); ret = P_getstring(GLOBAL,"blankmode",blankmode,1,MAXSTR); //getparm("blankmode","string",GLOBAL,blankmode,MAXSTR); postDelay = tr - at; //printf("blankmode=%s\n",blankmode); /*************************************************/ /* check phase setting ***************************/ if ( (txphase[0] =='n') && (rxphase[0] =='n') ) { abort_message("ERROR - Select at least one phase [Tx or Rx]\n"); } /**************************************************/ /* check pulse width *****************************/ rfDuration = shapelistpw(p1pat, p1); /* assign exitation pulse duration */ acqt = rfDuration + rof1 - alfa; if (FP_GT(acqt, at)) { abort_message("Pulse duration too long. max [%.3f] ms\n",(at-rof1+alfa)*1000.0); } if(ret==0 && blankmode[0]=='u') obsunblank(); delay(postDelay); settable(t1,4,phs1); /*from T1meas.c */ getelem(t1,ct,v11); /*from T1meas.c */ setreceiver(t1); /*==============================================*/ /* START LOOPBACK PULSE SEQUENCE */ /*==============================================*/ status(A); obsoffset(resto); /* TTL trigger to scope sequence ****************************/ sp1on(); /* Relaxation delay ***********************************/ xgate(ticks); /* RF pulse *******************************************/ obspower(tpwr); obspwrf(tpwrf); ShapedXmtNAcquire(p1pat, rfDuration, v11, rof1, OBSch); endacq(); sp1off(); if(ret==0 && blankmode[0]=='u') obsunblank(); }
pulsesequence() { double slpwrT = getval("slpwrT"), slpwT = getval("slpwT"), mixT = getval("mixT"), trim = getval("trim"), tauz1 = getval("tauz1"), tauz2 = getval("tauz2"), tauz3 = getval("tauz3"), tauz4 = getval("tauz4"), 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"); char selshapeA[MAXSTR], selshapeB[MAXSTR], slpatT[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("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); assign(ct,v17); assign(v17,v6); if (getflag("zqfilt")) { hlv(v6,v6); hlv(v6,v6); } settable(t1,4,ph1); getelem(t1,v6,v1); settable(t3,8,ph3); getelem(t3,v6,v11); settable(t4,8,ph4); settable(t5,4,ph5); getelem(t5,v6,v5); settable(t2,4,ph2); getelem(t2,v6,v2); settable(t7,8,ph7); getelem(t7,v6,v7); settable(t8,4,ph8); getelem(t8,v6,v8); settable(t11,16,phs8); getelem(t11,v6,v3); /* 1st echo in ES */ settable(t12,16,phs9); getelem(t12,v6,v4); /* 2nd exho in ES */ if (getflag("zqfilt")) getelem(t4,v6,oph); else assign(v1,oph); add(oph,v5,oph); mod4(oph,oph); sub(v2,one,v21); add(v21,two,v23); mod4(ct,v10); if (alt_grd[0] == 'y') mod2(ct,v12); /* 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, v1, rof1, rof1); if (selfrq != tof) obsoffset(selfrq); ifzero(v12); zgradpulse(gzlvlA,gtA); elsenz(v12); zgradpulse(-gzlvlA,gtA); endif(v12); delay(gstab); obspower(selpwrA); shaped_pulse(selshapeA,selpwA,v1,rof1,rof1); obspower(tpwr); ifzero(v12); zgradpulse(gzlvlA,gtA); elsenz(v12); zgradpulse(-gzlvlA,gtA); endif(v12); delay(gstab); if (selfrq != tof) delay(2*OFFSET_DELAY); ifzero(v12); zgradpulse(gzlvlB,gtB); elsenz(v12); zgradpulse(-gzlvlB,gtB); endif(v12); delay(gstab); obspower(selpwrB); shaped_pulse(selshapeB,selpwB,v2,rof1,rof1); obspower(slpwrT); ifzero(v12); zgradpulse(gzlvlB,gtB); elsenz(v12); zgradpulse(-gzlvlB,gtB); endif(v12); delay(gstab); if (selfrq != tof) obsoffset(tof); if (mixT > 0.0) { rgpulse(trim,v11,0.0,0.0); if (dps_flag) rgpulse(mixT,v21,0.0,0.0); else SpinLock(slpatT,mixT,slpwT,v21); } if (getflag("zqfilt")) { obspower(tpwr); rgpulse(pw,v7,1.0e-6,rof1); ifzero(v10); delay(tauz1); endif(v10); decr(v10); ifzero(v10); delay(tauz2); endif(v10); decr(v10); ifzero(v10); delay(tauz3); endif(v10); decr(v10); ifzero(v10); delay(tauz4); endif(v10); rgpulse(pw,v8,rof1,2.0e-6); } ExcitationSculpting(v3,v4,v12); delay(rof2); status(C); }
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); }
pulsesequence() { double gzlvl1, gt1, gzlvl3, gt3, gstab, pwx2lvl, pwx2, tau, gtau, hsglvl, hsgt; char nullflg[MAXSTR], sspul[MAXSTR]; int iphase, icosel; gzlvl1 = getval("gzlvl1"); gt1 = getval("gt1"); gzlvl3 = getval("gzlvl3"); gt3 = getval("gt3"); pwx2lvl = getval("pwx2lvl"); pwx2 = getval("pwx2"); hsglvl = getval("hsglvl"); hsgt = getval("hsgt"); gstab = getval("gstab"); getstr("nullflg",nullflg); getstr("sspul",sspul); iphase = (int)(getval("phase")+0.5); icosel = 1; tau = 1/(2*(getval("j1xh"))); gtau = 2*gstab + GRADIENT_DELAY; if (tau < (gt3+gstab)) { text_error("tau must be greater than gt3+gstab\n"); psg_abort(1); } settable(t1,2,ph1); settable(t2,4,ph2); settable(t3,4,ph3); assign(zero,v4); getelem(t1,ct,v1); getelem(t3,ct,oph); if (iphase == 2) icosel = -1; initval(2.0*(double)((int)(d2*getval("sw1")+0.5)%2),v10); add(v1,v10,v1); add(v4,v10,v4); add(oph,v10,oph); status(A); dec2power(pwx2lvl); if (sspul[0] == 'y') { zgradpulse(hsglvl,hsgt); rgpulse(pw,zero,rof1,rof1); zgradpulse(hsglvl,hsgt); } delay(d1); status(B); rcvroff(); if (nullflg[0] == 'y') { rgpulse(0.5*pw,zero,rof1,rof1); delay(tau); sim3pulse(2.0*pw,0.0,2.0*pwx2,zero,zero,zero,rof1,rof1); delay(tau); rgpulse(1.5*pw,two,rof1,rof1); zgradpulse(hsglvl,hsgt); delay(1e-3); } rgpulse(pw,zero,rof1,rof1); delay(tau - rof1 - (2*pw/PI)); dec2rgpulse(pwx2,v1,rof1,1.0e-6); delay(gt1+gtau - (2*pwx2/PI) - pwx2 - 1.0e-6 - rof1); dec2rgpulse(2*pwx2,v4,rof1,1.0e-6); delay(gstab - pwx2 - 1.0e-6); zgradpulse(gzlvl1,gt1); delay(gstab - rof1 - pw); delay(d2/2); rgpulse(2.0*pw,zero,rof1,rof1); delay(d2/2); delay(gstab - rof1 - pw); zgradpulse(gzlvl1,gt1); delay(gstab - pwx2 - rof1); dec2rgpulse(2*pwx2,zero,rof1,1.0e-6); delay(gt1+gtau - (2*pwx2/PI) - pwx2 - 1.0e-6 - rof1); dec2rgpulse(pwx2,t2,rof1,rof1); delay(gstab - rof1); zgradpulse(icosel*gzlvl3,gt3); delay(tau - gt3 - gstab - GRADIENT_DELAY); dec2power(dpwr2); delay(rof2 - POWER_DELAY); rcvron(); status(C); }
pulsesequence() { double hsglvl = getval("hsglvl"), hsgt = getval("hsgt"), tau, evolcorr, taug, mult = getval("mult"), null = getval("null"); int phase1 = (int)(getval("phase")+0.5), prgcycle = (int)(getval("prgcycle")+0.5), ZZgsign; tau = 1/(4*(getval("j1xh"))); if (mult > 0.5) taug = 2*tau; else taug = 0.0; evolcorr=2*pw+4.0e-6; ZZgsign=-1; if (mult == 2) ZZgsign=1; 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); /* mod2(id2,v14); dbl(v14,v14); */ initval(2.0*(double)(((int)(d2*getval("sw1")+0.5)%2)),v14); if (phase1 == 2) incr(v2); add(v2,v14,v2); add(oph,v14,oph); if (mult > 0.5) add(oph,two,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); simpulse(2.0*pw,2.0*pwx,zero,zero,rof1,rof1); delay(2*tau); 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); simpulse(2*pw,2*pwx,zero,zero,rof1,rof1); delay(2*tau); 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); simpulse(2*pw,2*pwx,zero,zero,rof1,rof1); delay(tau); rgpulse(pw,v1,rof1,rof1); if (getflag("PFGflg")) { zgradpulse(hsglvl,2*hsgt); delay(1e-3); } decrgpulse(pwx,v2,rof1,2.0e-6); if (mult > 0.5) { delay(d2/2); rgpulse(2*pw,zero,2.0e-6,2.0e-6); delay(d2/2); delay(taug); simpulse(mult*pw,2*pwx,zero,zero,rof1,rof1); delay(taug + evolcorr); } else { if (d2/2 > 0.0) delay(d2/2 - (2*pwx/PI) - pw - 4.0e-6); else delay(d2/2); rgpulse(2*pw,zero,2.0e-6,2.0e-6); if (d2/2 > 0.0) delay(d2/2 - (2*pwx/PI) - pw - 4.0e-6); else delay(d2/2); } decrgpulse(pwx,v4,2.0e-6,rof1); if (getflag("PFGflg")) { zgradpulse(ZZgsign*0.6*hsglvl,1.2*hsgt); delay(1e-3); } rgpulse(pw,v3,rof1,rof1); delay(tau - (2*pw/PI) - 2*rof1); simpulse(2*pw,2*pwx,zero,zero,rof1, rof2); decpower(dpwr); delay(tau - POWER_DELAY); status(C); }
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(); }