Codebase list bart / 75398e9
update to grasp script (courtesy of tobias block) Martin Uecker 8 years ago
1 changed file(s) with 27 addition(s) and 30 deletion(s). Raw diff Collapse all Expand all
1818 export ITER=30
1919 export REG=0.05
2020 SCALE=0.6
21 LOGFILE=/dev/null
21 LOGFILE=/dev/stdout
2222 MAXPROC=4
2323 MAXTHREADS=4
2424
100100 exit 1
101101 fi
102102
103 if [ ! -e $TOOLBOX_PATH/fft ] ; then
103 if [ ! -e $TOOLBOX_PATH/bart ] ; then
104104 echo "\$TOOLBOX_PATH is not set correctly!" >&2
105105 exit 1
106106 fi
116116 {
117117
118118 # read TWIX file
119 twixread -A $input grasp
119 bart twixread -A $input grasp
120120
121121 export READ=$(tail -n1 grasp.hdr | cut -f1 -d" ")
122122 export COILS=$(tail -n1 grasp.hdr | cut -f4 -d" ")
132132 #rm grasp.* grasp2.*
133133
134134 # inverse FFT along 3rd dimension
135 fft -i -u $(bitmask 2) grasp grasp_hybrid
135 bart fft -i -u $(bart bitmask 2) grasp grasp_hybrid
136136 rm grasp.cfl grasp.hdr
137137
138138 SLICES=$(tail -n1 grasp_hybrid.hdr | cut -f3 -d" ")
139139
140140
141141 # create trajectory with 400 spokes and 2x oversampling
142 traj -G -x$READ -y$CALIB r
143 scale $SCALE r rcalib
142 bart traj -G -x$READ -y$CALIB r
143 bart scale $SCALE r rcalib
144144
145145 # create trajectory with 2064 spokes and 2x oversampling
146 traj -G -x$READ -y$(($SPOKES * $PHASES)) r
147 scale $SCALE r r2
146 bart traj -G -x$READ -y$(($SPOKES * $PHASES)) r
147 bart scale $SCALE r r2
148148
149149 # split off time dimension into index 10
150 reshape $(bitmask 2 10) $SPOKES $PHASES r2 rfull
150 bart reshape $(bart bitmask 2 10) $SPOKES $PHASES r2 rfull
151151
152152 # number of threads per slice
153153 export OMP_NUM_THREADS=$MAXTHREADS
155155 calib_slice()
156156 {
157157 # extract slice
158 slice 2 $1 grasp_hybrid grasp1-$1
158 bart slice 2 $1 grasp_hybrid grasp1-$1
159159
160160 # extract first $CALIB spokes
161 extract 1 $(($SKIP + 0)) $(($SKIP + $CALIB - 1)) grasp1-$1 grasp2-$1
161 bart extract 1 $(($SKIP + 0)) $(($SKIP + $CALIB - 1)) grasp1-$1 grasp2-$1
162162
163163 # reshape dimensions
164 reshape $(bitmask 0 1 2 3) 1 $READ $CALIB $COILS grasp2-$1 grasp3-$1
164 bart reshape $(bart bitmask 0 1 2 3) 1 $READ $CALIB $COILS grasp2-$1 grasp3-$1
165165
166166 # apply inverse nufft to first $CALIB spokes
167 nufft -i -t rcalib grasp3-$1 img-$1.coo
167 bart nufft -i -t rcalib grasp3-$1 img-$1.coo
168168 }
169169
170170 recon_slice()
171171 {
172172 # extract sensitivities for slice
173 slice 2 $1 sens sens-$1
173 bart slice 2 $1 sens sens-$1
174174
175175 # extract spokes and split-off time dim
176 extract 1 $(($SKIP + 0)) $(($SKIP + $SPOKES * $PHASES - 1)) grasp1-$1 grasp2-$1
177 reshape $(bitmask 1 2) $SPOKES $PHASES grasp2-$1 grasp1-$1
176 bart extract 1 $(($SKIP + 0)) $(($SKIP + $SPOKES * $PHASES - 1)) grasp1-$1 grasp2-$1
177 bart reshape $(bart bitmask 1 2) $SPOKES $PHASES grasp2-$1 grasp1-$1
178178
179179 # move time dimensions to dim 10 and reshape
180 transpose 2 10 grasp1-$1 grasp2-$1
181 reshape $(bitmask 0 1 2) 1 $READ $SPOKES grasp2-$1 grasp1-$1
180 bart transpose 2 10 grasp1-$1 grasp2-$1
181 bart reshape $(bart bitmask 0 1 2) 1 $READ $SPOKES grasp2-$1 grasp1-$1
182182 rm grasp2-$1.cfl grasp2-$1.hdr
183183
184184 # reconstruction with tv penality along dimension 10
185185 # old (v0.2.08):
186186 # pics -S -d5 -lv -u10. -r$REG -R$(bitmask 10) -i$ITER -t rfull grasp1-$1 sens-$1 i-$1.coo
187187 # new (v0.2.09):
188 pics -S -d5 -u10. -RT:$(bitmask 10):0:$REG -i$ITER -t rfull grasp1-$1 sens-$1 i-$1.coo
188 bart pics -S -d5 -u10. -RT:$(bart bitmask 10):0:$REG -i$ITER -t rfull grasp1-$1 sens-$1 i-$1.coo
189189
190190 # clean up temp files
191191 rm *-$1.cfl *-$1.hdr
198198 seq -w 0 $(($SLICES - 1)) | xargs -I {} -P $MAXPROC bash -c "calib_slice {}"
199199
200200 # transform back to k-space and compute sensitivities
201 join 2 img-*.coo img
202 fft -u $(bitmask 0 1 2) img ksp
201 bart join 2 img-*.coo img
202 bart fft -u $(bart bitmask 0 1 2) img ksp
203203
204204 #ecalib -S -c0.8 -m1 -r20 ksp sens
205205
206206 # transpose because we already support off-center calibration region
207207 # in dim 0 but here we might have it in 2
208 transpose 0 2 ksp ksp2
209 ecalib -S -c0.8 -m1 -r20 ksp2 sens2
210 transpose 0 2 sens2 sens
208 bart transpose 0 2 ksp ksp2
209 bart ecalib -S -c0.8 -m1 -r20 ksp2 sens2
210 bart transpose 0 2 sens2 sens
211211
212212 # loop over slices
213213 seq -w 0 $(($SLICES - 1)) | xargs -I {} -P $MAXPROC bash -c "recon_slice {}"
214214 #echo 20 | xargs -i --max-procs=$MAXPROC bash -c "recon_slice {}"
215215
216216 # join slices back together
217 join 2 i-*.coo $output
217 bart join 2 i-*.coo $output
218218
219219 # generate dicoms
220220 #for s in $(seq -w 0 $(($SLICES - 1))) ; do
221221 # for p in $(seq -w 0 $(($PHASES - 1))) ; do
222 #
223 # slice 10 $p i-$s.coo i-$p-$s.coo
224 # toimg i-$p-$s.coo $output-$p$-$s.dcm
222 # bart slice 10 $p i-$s.coo i-$p-$s.coo
223 # bart toimg i-$p-$s.coo $output.series$p.slice$s.dcm
225224 # done
226225 #done
227226
228227 } > $LOGFILE
229228
230229 exit 0
231
232