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