Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
#!/usr/local/bin/bash
#averages multiple repeats and simultaneously remove dodgy volumes
#to be used after regscript - for DTI images acquired at FMRIB
Usage() {
echo ""
echo "replace_and_average_fmrib - Preprocessing for DTI images acquired at FMRIB "
echo " run after regscript to average multiple repeats"
echo ""
echo "if necessary, indicate dodgy volumes to be removed"
echo ""
echo "_________________________________________________________________________"
echo "Usage: replace_and_average_fmrib <numb_acqs> volno volno ... volno "
echo ""
echo "output file will be called data"
echo "Note that the first volume is 0 and not 1"
echo ""
echo "Example: if you want to remove vols 4 and 5 from data1"
echo " vols 10 and 19 from data2"
echo " vol 40 from data3"
echo " having acquired 3 repeats, 60 directions"
echo ""
echo " to the volumes corresponding to data2 (10 and 19)"
echo " you should add the total number of volumes in each file,"
echo " in this case 63 (= 3 non-DW + 60 direc)"
echo " 126 (= 2*63) to the ones corresponding to data3 and so on..."
echo ""
echo "you should therefore type something like - "
echo " replace_and_average_fmrib 3 4 5 73 82 166"
echo "_________________________________________________________________________"
exit
}
#===================================================================
rem_vols() {
#===================================================================
# Arg_1 = input_file
# Arg_2 = num_acqs
# Arg_3 ... Arg_n dodgy_vols
input_file=$1
numb_acqs=$2
shift 2
dodgy_vols=`cat dodgy_vols`
echo "removing vols $dodgy_vols"
current_dir=`pwd`
acq=1
while [ $acq -le $numb_acqs ];do
if [ ! -e ${input_file}${acq}.hdr ]; then
echo Cant find $input_file
exit
fi
acq=`expr $acq + 1`;
done
if [ ! -e bvals ]; then
echo Cant find bvals
exit
fi
if [ ! -e bvecs ]; then
echo Cant find bvecs
exit
fi
nvols=`avwval ${input_file}1 dim4`;
acq=1
while [ $acq -le $numb_acqs ]; do
echo splitting $input_file$acq
avwsplit $input_file$acq.hdr
volume=0;
if [ $nvols -lt 10 ]; then
while [ $volume -lt $nvols ]; do
mv vol000$volume.hdr vol000${volume}_${acq}.hdr
mv vol000$volume.img vol000${volume}_${acq}.img
volume=`expr $volume + 1`
done
else
volume=0
while [ $volume -lt 10 ]; do
mv vol000${volume}.hdr vol000${volume}_${acq}.hdr
mv vol000${volume}.img vol000${volume}_${acq}.img
volume=`expr $volume + 1`
done
while [ $volume -lt $nvols ]; do
mv vol00${volume}.hdr vol000${volume}_${acq}.hdr
mv vol00${volume}.img vol000${volume}_${acq}.img
volume=`expr $volume + 1`
done
fi
acq=`expr $acq + 1`;
done
vol=0
num_dodgy_vols=`expr $#`
while [ $vol -lt $num_dodgy_vols ]; do
v=$1
shift
if [ -e vol000${v}_1.hdr ]; then
rm vol000${v}_*.hdr -f
rm vol000${v}_*.img -f
fi
if [ -e vol00${v}_1.hdr ]; then
rm vol00${v}_*.hdr -f
rm vol00${v}_*.img -f
fi
vol=`expr $vol + 1`
done
acq=1
while [ $acq -le $numb_acqs ]; do
rm ${input_file}${acq}*
avwmerge -t data$acq vol*_$acq.hdr
acq=`expr $acq + 1`;
done
matlab -nodisplay -nojvm -nosplash 1> matlab.out1 2>&1 <<EOF
addpath('/usr/people/dtiuser/etc/FMRIB_bvals_bvecs/')
remove_vols('$current_dir')
EOF
rm matlab.out1 -f
rm vol0* -f
}
#===================================================================
check_vols() {
#===================================================================
# Arg_1 = n_vols
# Arg_2 = num_acqs
n_vols=$1
numb_acqs=$2
matlab -nodisplay -nojvm -nosplash 1> matlab.out1 2>&1 <<EOF
addpath('/usr/people/dtiuser/etc/FMRIB_bvals_bvecs/')
check_vols($n_vols,$numb_acqs)
EOF
rm matlab.out1 -f
}
#===================================================================
[ "$1" = "" ] && Usage
numb_acqs=$1
if [ $# -gt 1 ]; then
shift 1
if [ $numb_acqs -lt 2 ]; then
echo "replacevols_fmrib should be used when several repeats were acquired"
echo "use remove_vols instead if you want to remove dodgy volumes from single datasets"
fi
echo -n ""> vol_list
for i in $@ ; do
vol=$i
echo -n "$vol " >> vol_list
shift
done
nvols=`avwval data1 dim4`;
n_vols=`echo $nvols`
dodgy_volumes=`cat vol_list`
echo dodgy volumes: $dodgy_volumes
check_vols $n_vols $numb_acqs
if [ -e dodgy_vols ]; then
dodgy=`cat dodgy_vols`
rem_vols data $numb_acqs $dodgy
else
echo No volumes need to be removed
fi
nvols=`avwval data1 dim4`;
echo output will have $nvols volumes
dodgy_volumes=`cat vol_list`
dodgy_volumes=`echo $dodgy_volumes`
if [ -e dodgy_vols ]; then
if [ "$dodgy_volumes" != "" ]; then
echo dogdy volumes updated taking into account removed volumes
echo dodgy volumes are now: $dodgy_volumes
fi
fi
if [ "$dodgy_volumes" != "" ]; then
acq=1
echo "">file_list
while [ $acq -le $numb_acqs ];do
echo data$acq.hdr >> file_list
acq=`expr $acq + 1`;
done
file_list=`cat file_list`
avwmerge -t bigdata $file_list
rm file_list -f
echo "0 $nvols" >average_file
acq=1
first=0
second=$nvols
while [ $acq -lt $numb_acqs ];do
first=`expr $first + $nvols`;
echo "$first $second">>average_file;
acq=`expr $acq + 1`;
done
echo "">>average_file
acq=0
n_vols=`echo $nvols`
if [ $n_vols -lt 63 ]; then
b0=0;
while [ $acq -lt $numb_acqs ];do
echo -n "$b0 " >> average_file
acq=`expr $acq + 1`;
b0=`expr $b0 + $n_vols`;
done;
else
b0=0;b0_1=1;b0_2=2;echo ""
while [ $acq -lt $numb_acqs ]; do
echo -n "$b0 $b0_1 $b0_2 " >> average_file
acq=`expr $acq + 1`;
b0=`expr $b0 + $n_vols`;
b0_1=`expr $b0_1 + $n_vols`;
b0_2=`expr $b0_2 + $n_vols`;
done;
fi
replacevols bigdata average_file $dodgy_volumes tmp_file
if [ -e tmp_file.img.gz ]; then
gunzip tmp_file.img.gz
if [ -e tmp_file.hdr.gz ]; then
gunzip tmp_file.hdr.gz
fi
fi
nvols=`avwval tmp_file dim4`;
n_vols=`echo $nvols`
volsacqs=`avwval data1 dim4`;
vols_per_acqs=`echo $volsacqs`;
rm bigdata* -f
avwroi tmp_file data 0 ${vols_per_acqs};
avwmaths data -mul 0 data;
acq=0;
while [ ${acq} -lt ${numb_acqs} ]; do
vol=0
while [ ${vol} -lt ${vols_per_acqs} ]; do
v_tmp=`expr $vol + ${vols_per_acqs} \* ${acq}`
if [ $vol -lt 10 ]; then
avwroi tmp_file vol${acq}_000${vol} $v_tmp 1;
else
avwroi tmp_file vol${acq}_00${vol} $v_tmp 1;
fi
vol=`expr $vol + 1`;
done
avwmerge -t data${acq}_all vol${acq}_*.hdr
avwmaths data${acq}_all -div ${numb_acqs} data${acq}_all;
add4d data data${acq}_all data;
rm data${acq}_all* vol${acq}* -f
acq=`expr $acq + 1`;
done
rm tmp*
rm *_all* -f
rm average_file -f
else
echo averaging the data
volsacqs=`avwval data1 dim4`;
vols_per_acqs=`echo $volsacqs`;
avwroi data1 data 0 ${vols_per_acqs};
avwmaths data -mul 0 data;
acq=1;
while [ ${acq} -le ${numb_acqs} ]; do
avwmaths data${acq} -div ${numb_acqs} data${acq};
add4d data data${acq} data;
acq=`expr $acq + 1`;
done
fi
rm dodgy_vols -f
rm vol_list -f
rm vol*_* -f
else
echo no dodgy volumes
echo averaging the data
volsacqs=`avwval data1 dim4`;
vols_per_acqs=`echo $volsacqs`;
avwroi data1 data 0 ${vols_per_acqs};
avwmaths data -mul 0 data;
acq=1;
while [ ${acq} -le ${numb_acqs} ]; do
avwmaths data${acq} -div ${numb_acqs} data${acq};
add4d data data${acq} data;
acq=`expr $acq + 1`;
done
fi
echo extracting nodif image from averaged data
avwsplit data
mv vol0000.hdr nodif.hdr -f
mv vol0000.img nodif.img -f
rm tmp* -f
rm vol* -f