00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
#include "seq-tse.h"
00036
#include "seq-se.h"
00037
00038
#include "event-rfpulse.h"
00039
#include "event-precession.h"
00040
#include "event-acquisition.h"
00041
#include "seq-mpi.h"
00042
00043
void SeqTurboSpinEcho2D_0(SEQPARAM *seqparam,
EXPERIENCE3D*expr);
00044
00054 PPPVOLUME_COMPLEX_DOUBLE SeqTurboSpinEcho2D(SEQPARAM *seqparam,
EXPERIENCE3D*expr)
00055 {
00056
mpi_job(seqparam , expr,
SeqTurboSpinEcho2D_0);
00057
NormalizeRFSignal(expr);
00058
return(
GetSignalRFComplexFromExperience(expr));
00059 }
00060
00069 void SeqTurboSpinEcho2D_0(SEQPARAM *seqparam,
EXPERIENCE3D*expr)
00070 {
00071
int ntx,nty;
00072
double fovx,fovy;
00073
double te,tr,tacq,timp,acq_delay,tgp;
00074
double gx,gy,gz,gp;
00075
int npz;
00076
int tfact;
00077
int i;
00078
int Nenc,M,Nex,m,n;
00079
int kmn1,kmn4,kmn5,k;
00080
00081
EVENT* event, event_r;
00082 event = &event_r;
00083
00084 printf(
"Starting SeqTurboSpinEcho2D \n");
00085 ntx = expr->
ntx;
00086 nty = expr->
nty;
00087 tacq = expr->
readout_time*1.e+3;
00088 fovx = expr->
fovx;
00089 fovy = expr->
fovy;
00090
00091 te = seqparam->te;
00092 tr = seqparam->tr;
00093 tfact = (
int) seqparam->tfact;
00094
00095
CheckTimesSE( tacq, te, tr);
00096 timp=0.3;
00097 acq_delay = 0;
00098 tgp = te/2.- tacq/2;
00099 gx = (ntx-2.)/tacq/
G_kHz_G/fovx;
00100 gy = 2*M_PI*(nty-1)/
G_rad_G/fovy/(tgp/1000);
00101 gz = 0.0;
00102 npz= 0;
00103
00104
SetSpoilingFlag(event,
ACTIVE);
00105 i=0;
00106
DoWaiting(expr,event,
ATT_INIT);
00107
for(i=0;i<10;i++)
00108 {
00109
DoPulseRect(expr,event, 90.,timp);
00110
DoWaiting(expr,event,te/2.0);
00111
DoPulseRect(expr,event,180.,timp);
00112
DoWaiting(expr,event,tr-te/2.0);
00113 }
00114
00115 Nenc = nty;
00116 M=tfact;
00117 Nex = Nenc/M;
00118 printf(
"%d lines of the k space acquired in %d excitations of %d echos each \n",Nenc,Nex,M);
00119
00120
for (m=1; m<= Nex; m++)
00121 {
00122
DoPulseRect(expr,event,90,timp);
00123
DoGradient(expr,event,tacq/2,gx,0,0);
00124
DoWaiting(expr,event,te/2-tacq/2);
00125
for (n=1;n<=M;n++)
00126 {
00127
DoPulseRect(expr,event,180.,timp);
00128
00129 kmn1=n-1+(m-1)*M-Nenc/2+Nenc/2;
00130
00131 kmn4=m-1+(n-1)*Nex-Nenc/2+Nenc/2;
00132
00133
if (m>Nex/2) kmn5= -(m-Nex/2+(n-1)*Nex/2)+Nenc/2;
00134
else kmn5= (m-1+(n-1)*Nex/2)+Nenc/2;
00135 k=kmn5;
00136 gp = (gy) * (k - Nenc / 2) / Nenc;
00137
DoGradient(expr,event,tgp,0,-gp,0);
00138
DoAcqFrequenceX(expr,event,gx,k,npz,acq_delay,
MINUS);
00139
DoGradient(expr,event,tgp,0,+gp,0);
00140 i++;
00141 }
00142
DoWaiting(expr,event,tr-((tfact)*te)-te/2.0);
00143 }
00144 printf(
"Ending SeqTurboSpinEcho2D \n");
00145 }
00146