xtract 16 KB
Newer Older
Saad Jbabdi's avatar
Saad Jbabdi committed
1
2
3
4
5
6
#!/bin/bash

#   Copyright (C) 2019 University of Oxford
#
#   SHCOPYRIGHT

7
# Written by Saad Jbabdi, Stam Sotiropoulos & Shaun Warrington (based on Marius de Groot autoPtx code)
Saad Jbabdi's avatar
Saad Jbabdi committed
8
9
# Protocols created by Rogier Mars et al.

10
# Location of probtrackx2_gpu binary
Saad Jbabdi's avatar
Saad Jbabdi committed
11
12
ptxbin_gpu=$FSLDIR/bin/probtrackx2_gpu

Saad Jbabdi's avatar
Saad Jbabdi committed
13
# Location of xtract data
14
datadir=$FSLDIR/data/xtract_data
Saad Jbabdi's avatar
Saad Jbabdi committed
15
16
17
18

Usage() {
    cat << EOF

19
Usage:
20
    xtract -bpx <bedpostX_dir> -out <outputDir> -species <SPECIES> [options]
21
    xtract -bpx <bedpostX_dir> -out <outputDir> -species CUSTOM -str <file> -p <folder> -stdref <reference> [options]
22
    xtract -list
Saad Jbabdi's avatar
Saad Jbabdi committed
23
24
25

    Compulsory arguments:

26
27
       -bpx <folder>                          Path to bedpostx folder
       -out <folder>                          Path to output folder
28
29
30
31
32
33
       -species <SPECIES>                     One of HUMAN or MACAQUE or CUSTOM

    If -species CUSTOM:
      -str <file>                            Structures file (format: format: <tractName> [samples=1], 1 means 1000, '#' to skip lines)
      -p <folder>                            Protocols folder (all masks in same standard space)
      -stdref <reference>                    Standard space reference image
Saad Jbabdi's avatar
Saad Jbabdi committed
34
35

    Optional arguments:
36
37
       -list                                  List the tract names used in XTRACT
       -str <file>                            Structures file (format: <tractName> per line OR format: <tractName> [samples=1], 1 means 1000, '#' to skip lines)
38
       -p <folder>                            Protocols folder (all masks in same standard space) (Default=$FSLDIR/data/xtract_data/<SPECIES>)
39
       -stdwarp <std2diff> <diff2std>         Standard2diff and Diff2standard transforms (Default=bedpostx_dir/xfms/{standard2diff,diff2standard})
40
       -stdref <reference>                    Standard space reference image (Default = $FSLDIR/data/standard/MNI152_T1_1mm [HUMAN], $datadir/standard/F99/mri/struct_brain [MACAQUE])
41
42
43
44
45
46
47
48
49
       -gpu                                   Use GPU version
       -res <mm>                              Output resolution (Default=same as in protocol folders unless '-native' used)
       -ptx_options <options.txt>	            Pass extra probtrackx2 options as a text file to override defaults, e.g. --steplength=0.2 --distthresh=10)

       And EITHER:
       -native                                Run tractography in native (diffusion) space

       OR:
       -ref <refimage> <diff2ref> <ref2diff>  Reference image for running tractography in reference space, Diff2Reference and Reference2Diff transforms
Saad Jbabdi's avatar
Saad Jbabdi committed
50
51
52
53
54

EOF
    exit 1
}

Saad Jbabdi's avatar
Saad Jbabdi committed
55
56
57
58
Splash (){

cat <<EOF

59
 __  _______ ____      _    ____ _____
Saad Jbabdi's avatar
Saad Jbabdi committed
60
 \ \/ /_   _|  _ \    / \  / ___|_   _|
61
62
63
64
  \  /  | | | |_) |  / _ \| |     | |
  /  \  | | |  _ <  / ___ \ |___  | |
 /_/\_\ |_| |_| \_\/_/   \_\____| |_|

Saad Jbabdi's avatar
Saad Jbabdi committed
65
66
67
68
69
70
EOF

}

Splash

Saad Jbabdi's avatar
Saad Jbabdi committed
71
72
73
74
75
76
77
78
79
[ "$1" = "" ] && Usage


# Set default options
bpx=""
out=""
str=""
p=""
std2diff=""
80
ptx_opts=""
81
stdref=""
Saad Jbabdi's avatar
Saad Jbabdi committed
82
83
gpu=0
nat=0
84
85
86
ref=""
diff2ref=""
ref2diff=""
Saad Jbabdi's avatar
Saad Jbabdi committed
87
88
spec=""
res=-1
89
90
list=0
seedget=0 # if user specifies -str and format is <tractName>, try to get nseeds from default structureList (i.e. if using a subset of XTRACT tracts)
Saad Jbabdi's avatar
Saad Jbabdi committed
91
92
93
94
95
96
97
98

# Parse command-line arguments
while [ ! -z "$1" ];do
    case "$1" in
	-bpx) bpx=$2;shift;;
	-out) out=$2;shift;;
	-str) str=$2;shift;;
	-p)   p=$2;shift;;
Saad Jbabdi's avatar
Saad Jbabdi committed
99
	-species) spec=$2;shift;;  # converts to uppercase
Saad Jbabdi's avatar
Saad Jbabdi committed
100
	-stdwarp) std2diff=$2;diff2std=$3;shift;shift;;
101
  -stdref) stdref=$2;shift;;
Saad Jbabdi's avatar
Saad Jbabdi committed
102
103
	-gpu) gpu=1;;
	-native) nat=1;;
104
  -ref) ref=$2;diff2ref=$3;ref2diff=$4;shift;shift;shift;;
Saad Jbabdi's avatar
Saad Jbabdi committed
105
	-res) res=$2;shift;;
106
  -list) list=1;shift;;
107
108
	-ptx_options) ptx_opts=`cat $2`;shift;;

Saad Jbabdi's avatar
Saad Jbabdi committed
109
110
111
112
	*) echo "Unknown option '$1'";exit 1;;
    esac
    shift
done
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132

# list argument
if [ "$list" -eq 1 ];then
    tractNames=""
    echo ""
    echo "Tract names:"
    while read structstring; do
      struct=`echo $structstring | awk '{print $1}'`
      if [ "${struct:0:1}" == "#" ];then
    	foo=0
      elif [ "$struct" == "" ];then
    	foo=0
      else
      tractNames="${tractNames} ${struct},"
      fi
    done < $datadir/Human/structureList
    echo ${tractNames%,}
    exit 1
fi

Saad Jbabdi's avatar
Saad Jbabdi committed
133
134
135
136
137
138
139
140
141
142
143
144
# Default warps
if [ "$std2diff" == "" ];then
    std2diff=$bpx/xfms/standard2diff
    diff2std=$bpx/xfms/diff2standard
    if [ `$FSLDIR/bin/imtest $std2diff` -eq 0 ];then
	echo "Image $std2diff not found."
	exit 1
    fi
    if [ `$FSLDIR/bin/imtest $diff2std` -eq 0 ];then
	echo "Image $diff2std not found."
	exit 1
    fi
145
146
147
148
149
150
151
152
153
154
155
156
157
elif [ ! "$ref" == "" ];then
    if [ "$diff2ref" == "" ] || [ "$ref2diff" == "" ];then
  echo "If running in ref space, you must specify '-ref <refimage> <diff2ref> <ref2diff>'"
  exit 1
    fi
    if [ `$FSLDIR/bin/imtest $diff2ref` -eq 0 ];then
  echo "Image $diff2ref not found."
  exit 1
    fi
    if [ `$FSLDIR/bin/imtest $ref2diff` -eq 0 ];then
  echo "Image $ref2diff not found."
  exit 1
    fi
Saad Jbabdi's avatar
Saad Jbabdi committed
158
159
fi

Saad Jbabdi's avatar
Saad Jbabdi committed
160
echo SPECIES $spec
Saad Jbabdi's avatar
Saad Jbabdi committed
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183

# GPU stuff
if [ $gpu -eq 0 ];then
    ptxbin=$FSLDIR/bin/probtrackx2
else
    # Temp location of CUDA code
    ptxbin=${ptxbin_gpu}
fi

# Check compulsory arguments
errflag=0
if [ "$bpx" == "" ];then
    echo "Must set compulsory argument '-bpx'"
    errflag=1
elif [ ! -d $bpx ];then
    echo "Bedpostx folder $bpx not found"
    errflag=1
fi
if [ "$out" == "" ];then
    echo "Must set compulsory argument '-out'"
    errflag=1
fi

184
# Check which species and protocols to run
Saad Jbabdi's avatar
Saad Jbabdi committed
185
if [ "$spec" == "" ];then
186
187
188
  echo "Must set compulsory argument '-species'"
  errflag=1
elif [ "$spec" == "HUMAN" ];then
189
190
191
    if [ "$stdref" == "" ];then
        stdref=$FSLDIR/data/standard/MNI152_T1_1mm
    fi
192
193
194
195
196
197
198
199
200
201
202
    strdef=$datadir/Human/structureList
    if [ "$p" == "" ];then
      p=$datadir/Human
      if [ "$str" == "" ];then
        str=$p/structureList
      fi
    elif [ ! "$p" == "" ];then
      if [ "$str" == "" ];then
        echo "If selecting a protocol folder, must set argument '-str'"
        errflag=1
      fi
Saad Jbabdi's avatar
Saad Jbabdi committed
203
    fi
204
elif [ "$spec" == "MACAQUE" ];then
205
206
207
    if [ "$stdref" == "" ];then
        stdref=$datadir/standard/F99/mri/struct_brain
    fi
208
    strdef=$datadir/Macaque/structureList
Saad Jbabdi's avatar
Saad Jbabdi committed
209
    if [ "$p" == "" ];then
210
211
212
213
214
215
216
217
218
      p=$datadir/Macaque
      if [ "$str" == "" ];then
        str=$p/structureList
      fi
    elif [ ! "$p" == "" ];then
      if [ "$str" == "" ];then
        echo "If selecting a protocol folder, must set argument '-str'"
        errflag=1
      fi
Saad Jbabdi's avatar
Saad Jbabdi committed
219
    fi
220
221
222
223
224
225
226
227
228
229
230
231
232
elif [ "$spec" == "CUSTOM" ];then
    if [ "$stdref" == "" ];then
        echo "If -species CUSTOM, must set argument '-stdref'"
        errflag=1
    fi
    if [ "$p" == "" ];then
        echo "If -species CUSTOM, must set argument '-p'"
        errflag=1
    fi
    if [ "$str" == "" ];then
        echo "If -species CUSTOM, must set argument '-str'"
        errflag=1
    fi
Saad Jbabdi's avatar
Saad Jbabdi committed
233
else
234
    echo "Species must be one of HUMAN or MACAQUE or CUSTOM"
235
236
237
    errflag=1
fi

238
239
240
241
242
# Check that -stdref, -str and -p exist
if [ ! `$FSLDIR/bin/imtest $stdref` -eq 1 ];then
  echo "Standard space reference image '-stdref' $stdref not found"
  errflag=1
fi
243
244
245
246
247
248
249
250
251
if [ ! -d $p ];then
  echo "Protocol folder $p not found"
  errflag=1
fi
if [ ! -f $str ];then
  echo "Structures files $str not found"
  errflag=1
fi

252
253
254
255
256
257
if [ "$errflag" -eq 1 ];then
    echo ""
    echo "Exit without doing anything.."
    exit 1
fi

258
# Check -str file format
259
if [ "$spec" == "HUMAN" ] || [ "$spec" == "MACAQUE" ];then
260
261
262
263
264
265
266
267
tchk=()
if [ ! "$str" == "$strdef" ];then
  while read structstring; do
    struct=`echo $structstring | awk '{print $1}'`
    if [ "${struct:0:1}" == "#" ];then
  	foo=0
    elif [ "$struct" == "" ];then
  	foo=0
Saad Jbabdi's avatar
Saad Jbabdi committed
268
    else
269
270
271
272
273
      if [ "`echo $structstring | awk '{print $2}'`" == "" ];then
      tchk+=("1") # if empty, then 1 - get nseeds from default -str file
      else
      tchk+=("0")
      fi
Saad Jbabdi's avatar
Saad Jbabdi committed
274
    fi
275
276
277
278
279
280
281
282
283
284
285
  done < $str
  IFS=$'\n'; tchk=($(sort <<<"${tchk[*]}")); unset IFS
  if [ ! "${tchk[0]}" -eq "${tchk[${#tchk[@]}-1]}" ];then
    echo ""
    echo "-str file format is inconsistent. Format should be either:"
    echo "<tractName> per line"
    echo "OR"
    echo "<tractName> [samples=1] per line"
    echo "samples=1, 1 means 1000. Use '#' to skip lines"
    errflag=1
  elif [ ${tchk[0]} -eq 1 ];then
286
    echo " -- getting 'nsamples' from default structure file"
287
288
    seedget=1
  fi
Saad Jbabdi's avatar
Saad Jbabdi committed
289
fi
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
elif [ "$spec" == "CUSTOM" ];then
# add in check for str file format, user must provide number of seeds
  while read structstring; do
    struct=`echo $structstring | awk '{print $1}'`
    if [ "${struct:0:1}" == "#" ];then
    foo=0
    elif [ "$struct" == "" ];then
    foo=0
    else
      if [ "`echo $structstring | awk '{print $2}'`" == "" ];then
      echo "If using -species CUSTOM -str file format must follow:"
      echo "<tractName> [samples=1] per line"
      echo "samples=1, 1 means 1000. Use '#' to skip lines"
      errflag=1
      fi
    fi
  done < $str
fi
Saad Jbabdi's avatar
Saad Jbabdi committed
308

309
310
311
312
313
314
315
# Check space option
if [ $nat -eq 1 ] && [ ! "$ref" == "" ];then
    echo "You have selected the native space and ref space options"
    echo "Must select EITHER '-native', '-ref <refimage> <diff2ref> <ref2diff>', OR use the default standard space"
    errflag=1
fi

Saad Jbabdi's avatar
Saad Jbabdi committed
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
if [ "$errflag" -eq 1 ];then
    echo ""
    echo "Exit without doing anything.."
    exit 1
fi

# Create output folders
mkdir -p $out
mkdir -p $out/logs
mkdir -p $out/tracts

# Set common ptx options
opts=" -s $bpx/merged -m $bpx/nodif_brain_mask -V 1"
opts=" $opts --loopcheck --forcedir --opd --ompl --seedref=$stdref --sampvox=1 --randfib=1 "

331
332
333
# Add any user-defined ptx options
opts=" $opts $ptx_opts"

334
335
336
337
338
339
340
341
342
343
344
if [ "$nat" -eq 0 ] && [ "$ref" == "" ];then
    opts="$opts --seedref=$stdref --xfm=$std2diff --invxfm=$diff2std "
elif [ ! "$ref" == "" ]; then
    opts="$opts --seedref=$ref --xfm=$ref2diff --invxfm=$diff2ref "
fi

# If running in reference space, combine std2diff and diff2ref for std2ref
if [ ! "$ref" == "" ];then
    echo " -- combining standard-to-diffusion and diffusion-to-reference transforms"
    std2ref=$out/standard2ref
    $FSLDIR/bin/convertwarp -o $std2ref -r $ref --warp1=$std2diff --warp2=$diff2ref
Saad Jbabdi's avatar
Saad Jbabdi committed
345
346
347
348
349
350
351
fi

# Loop over structures
commands=$out/commands.txt
rm -rf $commands
echo "Preparing submission script..."
while read structstring; do
352
353
354
  struct=`echo $structstring | awk '{print $1}'`
  # skip empty lines and lines that start with '#'
  if [ "${struct:0:1}" == "#" ];then
Saad Jbabdi's avatar
Saad Jbabdi committed
355
356
357
	# do nothing
	foo=0
	#echo "----- Skip line $structstring -----"
358
  elif [ "$struct" == "" ];then
Saad Jbabdi's avatar
Saad Jbabdi committed
359
360
361
	# do nothing
	foo=0
	#echo "----- Skip empty line -----"
362
  else
Saad Jbabdi's avatar
Saad Jbabdi committed
363
364
365
	#echo "autoTrack $struct"
	mkdir -p $out/tracts/$struct

366
367
368
369
370
371
372
373
374
375
376
  # if running a subset of tracts and -str format is <tractName>, check for nseed in str file
  if [ "$seedget" -eq 1 ]; then
      nseed=`grep -w ${struct} $strdef | awk '{print $2}'`
      if [ "$nseed" == "" ];then
        echo "Couldn't find number of samples for '$struct'. Exiting now."
        exit 1
      fi
  else
	    nseed=`echo $structstring | awk '{print $2}'`
	    if [ "$nseed" == "" ];then nseed=1; fi
  fi
Saad Jbabdi's avatar
Saad Jbabdi committed
377
	nseed=$(echo "scale=0; 1000 * ${nseed} / 1"|bc)
378

Saad Jbabdi's avatar
Saad Jbabdi committed
379
380
	maskdir=$p/$struct

381
382
	#  DEALING WITH RESAMPLING --
	# Pick space to run tractography in (diffusion or standard)
Saad Jbabdi's avatar
Saad Jbabdi committed
383
	if [ "$nat" -eq 1 ];then
384
	    echo "${struct} -- transforming masks into native space"
Saad Jbabdi's avatar
Saad Jbabdi committed
385
386
387
388
389
390
391
	    mkdir -p $out/masks/$struct
	    for m in seed stop exclude;do
		if [ `$FSLDIR/bin/imtest $maskdir/$m` -eq 1 ];then
		    $FSLDIR/bin/applywarp -i $maskdir/$m -o $out/masks/$struct/$m -w $std2diff -r $bpx/nodif_brain_mask -d float
		    $FSLDIR/bin/fslmaths $out/masks/$struct/$m -thr 0.1 -bin $out/masks/$struct/$m -odt char
		fi
		eval "${m}=$out/masks/$struct/$m"
392
	    done
393
394
395
396
397
398
399
400
401
402
  elif [ ! "$ref" == "" ];then
      echo "${struct} -- transforming masks into ref space"
      mkdir -p $out/masks/$struct
      for m in seed stop exclude;do
    if [ `$FSLDIR/bin/imtest $maskdir/$m` -eq 1 ];then
        $FSLDIR/bin/applywarp -i $maskdir/$m -o $out/masks/$struct/$m -w $std2ref -r $ref -d float
        $FSLDIR/bin/fslmaths $out/masks/$struct/$m -thr 0.1 -bin $out/masks/$struct/$m -odt char
    fi
    eval "${m}=$out/masks/$struct/$m"
      done
Saad Jbabdi's avatar
Saad Jbabdi committed
403
	else
404
	    for m in seed stop exclude;do
Saad Jbabdi's avatar
Saad Jbabdi committed
405
406
407
408
		if [ $res -gt 0 ];then
		    # Resample at a different resolution
		    mkdir -p $out/masks/$struct
		    if [ `$FSLDIR/bin/imtest $maskdir/$m` -eq 1 ];then
409
			$FSLDIR/bin/flirt -in $maskdir/$m -out $out/masks/$struct/$m -applyisoxfm $res -ref $maskdir/$m
Saad Jbabdi's avatar
Saad Jbabdi committed
410
			$FSLDIR/bin/fslmaths $out/masks/$struct/$m -thr 0.1 -bin $out/masks/$struct/$m -odt char
411
412
		    fi
		    eval "${m}=$out/masks/$struct/$m"
Saad Jbabdi's avatar
Saad Jbabdi committed
413
414
415
416
		else
		    eval "${m}=$maskdir/$m"
		fi
	    done
417
	fi
Saad Jbabdi's avatar
Saad Jbabdi committed
418
419
420
421
422
423
424
425
426
427
428

	# Deal with targets (in cases where there may be more than one)
	targets=`imglob $maskdir/target*`
	targetfile=$out/tracts/$struct/targets.txt
	if [ "$nat" -eq 1 ];then
	    for tfile in $targets;do
		t=`basename $tfile`
		$FSLDIR/bin/applywarp -i $tfile -o $out/masks/$struct/$t -w $std2diff -r $bpx/nodif_brain_mask -d float
		$FSLDIR/bin/fslmaths $out/masks/$struct/$t -thr 0.1 -bin $out/masks/$struct/$t -odt char
	    done
	    echo $out/masks/$struct/target* > $targetfile
429
430
431
432
433
434
435
  elif [ ! "$ref" == "" ];then
      for tfile in $targets;do
    t=`basename $tfile`
    $FSLDIR/bin/applywarp -i $tfile -o $out/masks/$struct/$t -w $std2ref -r $ref -d float
    $FSLDIR/bin/fslmaths $out/masks/$struct/$t -thr 0.1 -bin $out/masks/$struct/$t -odt char
      done
      echo $out/masks/$struct/target* > $targetfile
Saad Jbabdi's avatar
Saad Jbabdi committed
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
	else
	    if [ $res -gt 0 ];then
		# Resample at a different resolution
		for tfile in $targets;do
		    t=`basename $tfile`
		    $FSLDIR/bin/flirt -in $tfile -out $out/masks/$struct/$t -applyisoxfm $res -ref $tfile
		    $FSLDIR/bin/fslmaths $out/masks/$struct/$t -thr 0.1 -bin $out/masks/$struct/$t -odt char
		done
		echo $out/masks/$struct/target* > $targetfile
	    else
		echo $targets > $targetfile
	    fi
	fi

	# Get generic options
	o=$opts
452

Saad Jbabdi's avatar
Saad Jbabdi committed
453
454
455
456
457
458
459
460
461
462
        # Add inclusion/exclusion masks
	if [ `$FSLDIR/bin/imtest $stop` -eq 1 ];then
	    o="$o --stop=$stop"
	fi
	if [ `$FSLDIR/bin/imtest $exclude` -eq 1 ];then
	    o="$o --avoid=$exclude"
	fi

	# Add seed/target
	o1="$o --nsamples=$nseed -x $seed "
463

Saad Jbabdi's avatar
Saad Jbabdi committed
464
465
466
467
468
469
470
	if [ "x${targets}" != "x" ];then #Add waypoints if there are any
       	    o1=" $o1 --waypoints=$targetfile "
	fi

        # Outputs
	o1=" $o1 -o density --dir=$out/tracts/$struct"

471
472

	# Does the protocol define a second run with inverted seed / target masks?
Saad Jbabdi's avatar
Saad Jbabdi committed
473
474
475
476
477
478
479
480
481
482
483
484
485
486
	if [ -e $maskdir/invert ]; then  #Invert-mode
	    if 	[ `$FSLDIR/bin/imtest $maskdir/target.nii.gz` -eq 1 ];then 	# Check if a target.nii.gz image exists when invert option has been selected.
		mkdir -p $out/tracts/$struct/tractsInv
		if [ `$FSLDIR/bin/imtest $out/masks/$struct/target.nii.gz` -eq 1 ]; then
		    target=$out/masks/$struct/target
		else
		    target=$maskdir/target
		fi
		o2="$o --nsamples=$nseed -x ${target} --waypoints=$seed -o density --dir=$out/tracts/$struct/tractsInv"

		# merge runs for forward and inverted tractography runs and then normalise (create commands but don't execute)
		mergecmd="$FSLDIR/bin/fslmaths $out/tracts/$struct/density -add $out/tracts/$struct/tractsInv/density $out/tracts/$struct/sum_density"

		#Add waypoints (create command but don't execute)
487
488
		addcmd="echo \"scale=5; \`cat $out/tracts/$struct/waytotal\` + \`cat $out/tracts/$struct/tractsInv/waytotal\` \"|bc > $out/tracts/$struct/sum_waytotal"

Saad Jbabdi's avatar
Saad Jbabdi committed
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
		# Waypoint normalisation (create command but don't execute)
		normcmd="$FSLDIR/bin/fslmaths $out/tracts/$struct/sum_density -div \`cat $out/tracts/$struct/sum_waytotal\` $out/tracts/$struct/densityNorm"

		# Append to command list
		echo "$ptxbin $o1; $ptxbin $o2; $mergecmd; $addcmd; $normcmd" >> $commands
	    else
		echo "Invert Option selected, but more than one target defined! A 'target.nii.gz' is expected. Exiting now"
		exit 1
	    fi
	else  	#No invert-mode
	    # Waypoint normalisation (create command but don't execute)
	    normcmd="$FSLDIR/bin/fslmaths $out/tracts/$struct/density -div \`cat $out/tracts/$struct/waytotal\` $out/tracts/$struct/densityNorm"

	    # Append to command list
	    echo "$ptxbin $o1; $normcmd" >> $commands
	fi
    fi

done < $str

chmod +x $commands

if [ "x$SGE_ROOT" != "x" ]; then  # Submit all commands to run in parallel on the cluster
    # One job per tract for a CPU cluster, one job for all tracts for a GPU cluster.
    if [ $gpu -eq 0 ];then
514
	fsl_sub -T 2160 -q long.q -l $out/logs -N xtract -t $commands
Saad Jbabdi's avatar
Saad Jbabdi committed
515
    else
516
	fsl_sub -T 300 -q $FSLGECUDAQ -l $out/logs -N xtract $commands
Saad Jbabdi's avatar
Saad Jbabdi committed
517
518
519
520
521
522
    fi
else   # If no SGE, run locally
    sh $commands
fi

#EOF