1#!/bin/tcsh -fe
2
3set stdir = $PWD
4set stat = 0
5
6goto PARSE
7RET_PARSE:
8
9CHECKS:
10if ( `@CheckForAfniDset $involume` < 2) then
11   echo "Can't find $involume"
12   goto BEND
13endif
14
15if (! -d $odir) mkdir -p $odir
16if (! -d $odir) then
17   echo "Failed to create $odir"
18   goto END
19endif
20
21set uid = `3dAttribute IDCODE_STRING $involume | sed 's/~$//g'`
22if ( ! -f $odir/anat.nii ) then
23   3dcopy $involume $odir/anat.nii
24endif
25
26if ( $inmask != "" && ( ! -f $odir/anat.ns.nii ) ) then
27   3dcalc -a $involume -b $inmask -expr 'a*step(b)' -prefix $odir/anat.ns.nii
28endif
29
30cd $odir
31
32SPAT_PRIORS:
33if ( ! -f loc.priP+orig.HEAD) then
34   if ( ! -f anat.ns.nii ) then
35      3dSkullStrip -input anat.nii -orig_vol -prefix anat.ns.nii
36   endif
37   @GetSpatialPriors anat.ns.nii loc.priP+orig
38endif
39
40SIGS:
41if ( ! -f sigs+orig.HEAD && \
42      ("$priors" == "SVM" || "$priors" == "PROB") ) then
43   @CalculateSignatures -input anat.nii  \
44                        -stat median MAD P2skew \
45                        -statlabel medMADskew \
46                        -local 1 2 3 4 6 8 10 13 16 19 \
47                        -mask anat.nii \
48                        -spnorm2 -max_vox 5 \
49                        -odir LocSt
50   3dTcat   -prefix ./sigs   \
51                  LocSt/anat.sc5.median+orig \
52                  LocSt/anat.sc5.MAD+orig'[0..8]'  \
53                  LocSt/anat.sc5.P2skew+orig
54endif
55
56PRIORS:
57if ( "$priors" == "SVM" || "$priors" == "PROB") then
58   if ( ! -d ${priors}_priors) mkdir ${priors}_priors
59   if ( ! -f sig.${priors}.priP+orig.HEAD) then
60      3dSignatures \
61            -verb 1  -uidp Joe.${priors}.${uid} \
62            -labeltable $train_path/melabs.DepthSubClasses.niml.lt \
63            -class_labels  CSF.l1 CSF.l2 CSF.l3 \
64                      GM.l1  GM.l2  GM.l3 \
65                      WM.l1  WM.l2  WM.l3 \
66                      Out.l1 Out.l2 Out.l3 \
67            -method ${priors} \
68            -odir ./${priors}_priors   \
69            -train_suffix $train_path/train_station/train.${priors}.12class.1 \
70            -reuse_train \
71            -test_SF Joe sigs+orig.HEAD \
72            -grouped_labeltable $train_path/orig.niml.lt
73
74      3dcopy ${priors}_priors/Joe.test.${PP}.gcls+orig.HEAD  \
75                  ./sig.${priors}.priC
76      3dcopy ${priors}_priors/Joe.test.${PP}.gclsp+orig.HEAD  \
77                  ./sig.${priors}.priP
78   endif
79endif
80
81AFNI_SEG:
82   if (${smeth} != 'AFNI') goto AFNI_SEG_END
83   set sgs = ()
84   if ( -f goldseg+orig.HEAD) set sgs = ($sgs '-gold goldseg+orig')
85   if ( -f goldbias+orig.HEAD) set sgs = ($sgs '-gold_bias goldbias+orig')
86   echo "3dSeg $priors priors  only"
87   if ( ! -f anat.pst.${priors}.nii) then
88      set osd = Joe.$priors
89      if ($priors == 'SVM' || $priors == 'PROB') then
90         3dSeg   -anat anat.nii     \
91                 -mask anat.ns.nii   \
92                 $sgs   \
93                 -classes 'CSF ; GM ; WM' \
94                 -bias_classes 'GM ; WM' -bias_fwhm 25 \
95                 -mixfrac UNI -overwrite    \
96                 -main_N 5 -Bmrf 0  \
97                 -cset sig.${priors}.priC+orig \
98                 -priCgA sig.${priors}.priP+orig'[0,1,2]' \
99                 -wA 1.0  -debug 1 \
100                 -prefix $osd
101       else if ($priors == 'NONE') then
102         3dSeg   -anat anat.nii     \
103                 -mask anat.ns.nii   \
104                 $sgs   \
105                 -classes 'CSF ; GM ; WM' \
106                 -bias_classes 'GM ; WM' -bias_fwhm 25 \
107                 -mixfrac UNI -overwrite    \
108                 -main_N 5 -Bmrf 0  \
109                 -debug 1 \
110                 -prefix $osd
111       else
112         echo "Bad prior option $priors"
113         goto BEND
114       endif
115       3dAFNItoNIFTI -prefix anat.uni.${priors}.nii  ${osd}/AnatUB+orig
116       3dAFNItoNIFTI -prefix anat.seg.${priors}.nii  ${osd}/Classes+orig
117       3dAFNItoNIFTI -float -prefix anat.pst.${priors}.nii ${osd}/Posterior+orig
118   endif
119   AFNI_SEG_END:
120
121SPM_SEG:
122   if (${smeth} != 'SPM') goto SPM_SEG_END
123   @SPM_seg -subj Joe -input anat.nii -mask anat.ns.nii \
124            -labeltable $train_path/orig.niml.lt
125   #3dAFNItoNIFTI -prefix ../anat.uni.SPM.nii AnatUB.SPM.nii
126   #3dAFNItoNIFTI -prefix ../anat.seg.SPM.nii Classes.SPM.nii
127   SPM_SEG_END:
128
129FSL_SEG:
130   if (${smeth} != 'FSL') goto FSL_SEG_END
131   set osd = Joe.FSL
132   if ( ! -f $osd/AnatUB.FAST.nii) then
133      if ( ! -d $osd) mkdir -p $osd
134      echo "fast on anat.ns.nii ..."
135      fast -n 3 -g -b -B -o fst anat.ns.nii
136      gzip -d fst*
137      3drefit -sublabel 0 FSL-FAST fst_restore.nii
138      mv fst* $osd
139      cd $osd
140      mv fst_seg.nii Classes.FAST.nii
141      mv fst_bias.nii Bias.FAST.nii
142      mv fst_restore.nii AnatUB.FAST.nii
143      #3dAFNItoNIFTI -prefix ../anat.uni.FAST.nii AnatUB.FAST.nii
144      #3dAFNItoNIFTI -prefix ../anat.seg.FAST.nii Classes.FAST.nii
145      cd -
146   endif
147   FSL_SEG_END:
148
149goto END
150
151
152PARSE:
153set Narg = $#
154set cnt = 1
155set starttime=`date`
156set inmask = ""
157set involume = ""
158set odir = './segscr'
159set priors = 'SVM'
160set smeth = 'AFNI'
161set train_path = /Volumes/Data/ziad/SUMA_test_dirs/3dSignatures
162if ("$1" == '') goto HELP
163while ($cnt <= $Narg)
164   set donext = 1
165
166   if ($donext && "$argv[$cnt]" == "-help" || "$argv[$cnt]" == "-h") then
167      goto HELP
168   endif
169
170   if ($donext && "$argv[$cnt]" == "-echo") then
171      set echo
172      set donext = 0
173   endif
174
175   if ($donext && "$argv[$cnt]" == "-svm") then
176      set priors = 'SVM'
177      set donext = 0
178   endif
179
180   if ($donext && "$argv[$cnt]" == "-prob") then
181      set priors = 'PROB'
182      set donext = 0
183   endif
184
185   if ($donext && "$argv[$cnt]" == "-nopri") then
186      set priors = 'NONE'
187      set donext = 0
188   endif
189
190   if ($donext && "$argv[$cnt]" == "-afni") then
191      set smeth = 'AFNI'
192      set donext = 0
193   endif
194
195   if ($donext && "$argv[$cnt]" == "-spm") then
196      set smeth = 'SPM'
197      set donext = 0
198   endif
199
200   if ($donext && "$argv[$cnt]" == "-fsl") then
201      set smeth = 'FSL'
202      set donext = 0
203   endif
204
205   if ($donext && "$argv[$cnt]" == "-mask") then
206      if ($cnt == $Narg) then
207         echo "Need mask volume after -mask"
208         goto END
209      else
210         @ cnt ++
211         set inmask = $argv[$cnt]
212         set donext = 0
213      endif
214   endif
215
216   if ($donext && "$argv[$cnt]" == "-input") then
217      if ($cnt == $Narg) then
218         echo "Need volume for segmentation after -input"
219         goto END
220      else
221         @ cnt ++
222         set involume = "$argv[$cnt]"
223         set donext = 0
224      endif
225   endif
226
227   if ($donext && "$argv[$cnt]" == "-odir") then
228      if ($cnt == $Narg) then
229         echo "Need directory after -odir"
230         goto END
231      else
232         @ cnt ++
233         set odir = "$argv[$cnt]"
234         set donext = 0
235      endif
236   endif
237
238  if ($donext) then
239      echo "Parameter $argv[$cnt] not understood"
240      goto BEND
241   else
242      @ cnt ++
243   endif
244
245end
246
247if ($priors == 'SVM') then
248   set PP = 'S'
249else if ($priors == 'PROB') then
250   set PP = 'P'
251else
252   set PP = ''
253endif
254
255goto RET_PARSE
256
257HELP:
258echo "@3dSeg -input anat+orig"
259echo "@3dSeg -svm -input anat+orig -mask anat.ns+orig"
260echo "@3dSeg -prob -input anat+orig -mask anat.ns+orig"
261echo "@3dSeg -fast -input anat+orig -mask anat.ns+orig"
262echo "@3dSeg -fsl -input anat+orig -mask anat.ns+orig"
263echo "@3dSeg -nopri -input anat+orig -mask anat.ns+orig"
264goto END
265
266BEND:
267set stat = 1
268goto END
269
270END:
271cd $stdir
272exit $stat
273
274
275
276
277