1#!/bin/tcsh -f 2 3set stat = 0 4set RNS = `3dnewid -fun` 5set log = /tmp/${RNS}.RL.log 6 7if ("$1" == "" || "$1" == '-h' || "$1" == '-help') then 8 goto HELP 9endif 10 11goto PARSE 12RETURN_PARSE: 13 14GETLABELS: 15 #Get the labels and values of the grouped labels 16 if (1) then 17 set llist = (`@MakeLabelTable -labeltable $grpd_labeltable -all_labels`) 18 set vlist = (`@MakeLabelTable -labeltable $grpd_labeltable -all_keys`) 19 endif 20 if ($#llist == 0) then 21 echo "Error: Have no labels" 22 goto BEND 23 endif 24 25 #Get labeltable of label_dset 26 @MakeLabelTable -labeltable_of_dset $label_dset > /tmp/${RNS}.__lt.niml.lt 27 if ($status) then 28 echo "Failed to get labeltable of $label_dset" 29 goto BEND 30 endif 31 32 set noglob 33 set com = 0 34 set c = 1 35 foreach ll ($llist) 36 #use range, easier than getting each value 37 set rng = `@MakeLabelTable -word_label_match \ 38 -labeltable /tmp/${RNS}.__lt.niml.lt -rkeys $ll` 39 if ( $status == 0) then 40 set com = ("$com" + "$vlist[$c]*within(a,$rng[1],$rng[2])" ) 41 else 42 echo "Key $ll not found in labeltable of $label_dset, ignoring it" 43 endif 44 @ c ++ 45 end 46 47 if ($mask_dset != '') then 48 3dcalc -a $label_dset -b $mask_dset \ 49 -expr "step(b)*($com)" -prefix $grpd_labprefix >>& $log 50 if ($status) then 51 echo "3dcalc command failed" 52 cat $log 53 goto BEND 54 endif 55 else 56 3dcalc -a $label_dset -expr "($com)" -prefix $grpd_labprefix >>& $log 57 if ($status) then 58 echo "3dcalc command failed" 59 cat $log 60 goto BEND 61 endif 62 endif 63 64 65 3drefit -labeltable $grpd_labeltable $grpd_labprefix >>& $log 66 67 #Now combine the probabilities 68 if ($p_dset != '') then 69 set v = `@GetAfniView $p_dset` 70 if (`@CheckForAfniDset /tmp/${RNS}.__gg$v` > 0) \rm -f /tmp/${RNS}.__gg* 71 foreach ll ($llist) 72 #Get all labels from /tmp/${RNS}.__lt.niml.lt 73 set llset = `@MakeLabelTable -labeltable /tmp/${RNS}.__lt.niml.lt \ 74 -word_label_match -match_label $ll` 75 echo "Notice: labels $llset map to grouped label $ll" 76 set subsel = "" 77 set psets = '' 78 set c = 1 79 while ($c <= $#llset) 80 set att = `3dAttribute -quote -ssep ';' \ 81 BRICK_LABS $p_dset | \ 82 tr ';' '\n' | \ 83 sed "s/^'//g" | sed "s/'"'$//g' ` 84 echo $att | \grep -w $llset[$c] >>& $log 85 if ($status) then 86 echo "Ignoring label $llset[$c], not in $p_dset ..." 87 else 88 foreach attr ($att) 89 echo $attr | \grep -w $llset[$c] >>& $log 90 if ($status) then 91 else 92 set subsel = ($subsel $attr) 93 set psets = ("$psets" $p_dset'['$attr']') 94 endif 95 end 96 endif 97 98 @ c ++ 99 end 100 if ($#subsel > 1) then 101 #a little slow a selection process, but safe 102 3dbucket -overwrite -prefix /tmp/${RNS}.__tt $psets >>& $log 103 if ($status) goto BEND 104 3dTstat -max \ 105 -overwrite -prefix /tmp/${RNS}.__ttm \ 106 /tmp/${RNS}.__tt$v >>& $log 107 if ($status) goto BEND 108 3drefit -sublabel 0 "p.$ll" /tmp/${RNS}.__ttm$v >>& $log 109 3dbucket -aglueto /tmp/${RNS}.__gg$v \ 110 /tmp/${RNS}.__ttm$v >>& $log 111 if ($status) goto BEND 112 endif 113 unset noglob 114 if ( `@CheckForAfniDset /tmp/${RNS}.__tt$v+orig` >= 2) \ 115 \rm -f /tmp/${RNS}.__tt* 116 set noglob 117 end 118 if (`@CheckForAfniDset /tmp/${RNS}.__gg$v` >= 2) then 119 #calc sum 120 3dTstat -sum -prefix /tmp/${RNS}.__ss /tmp/${RNS}.__gg$v >>& $log 121 if ($status) then 122 echo "Something went wrong" 123 goto BEND 124 endif 125 set mbs = `3dBrickStat -min -max /tmp/${RNS}.__ss$v` 126 set mbs[1] = `ccalc -i "isnegative($mbs[1])"` 127 set mbs[2] = `ccalc -i "step(isnegative($mbs[2])+iszero($mbs[2]))"` 128 if ($mbs[1] == 1 && $mbs[2] == 1) then 129 echo "WARNING: Log p being grouped the STUPID way" 130 echo "YOU SHOULD BE DOING THE grouping in 3dGenPriors" 131 goto BEND 132 #scale 133 3dcalc -overwrite -a /tmp/${RNS}.__gg$v \ 134 -b /tmp/${RNS}.__ss$v -expr "bool(b)*(1-a/b)" \ 135 -prefix $grpd_pprefix >>& $log 136 else 137 #scale 138 3dcalc -overwrite -a /tmp/${RNS}.__gg$v \ 139 -b /tmp/${RNS}.__ss$v -expr "step(b)*a/b" \ 140 -prefix $grpd_pprefix >>& $log 141 endif 142 unset noglob 143 \rm -f /tmp/${RNS}.__gg* /tmp/${RNS}.__ss* /tmp/${RNS}.__tt* 144 set noglob 145 endif 146 endif 147 148 unset noglob 149 150goto END 151 152PARSE: 153 set grpd_labeltable = '' 154 set llist = '' 155 set Narg = $# 156 set label_dset = '' 157 set p_dset = '' 158 set mask_dset = '' 159 set grpd_labprefix = '' 160 set grpd_pprefix = '' 161 set verb = 0 162 set cnt = 1 163 while ($cnt <= $Narg) 164 if ("$argv[$cnt]" == "-d" || "$argv[$cnt]" == "-echo") then 165 set NxtInd = $cnt 166 set verb = 1 167 set echo 168 endif 169 170 if ("$argv[$cnt]" == "-verb") then 171 set NxtInd = $cnt 172 set verb = 1 173 endif 174 175 if ("$argv[$cnt]" == "-grouped_labeltable") then 176 set SubLoc = $cnt 177 if ($SubLoc == $Narg) then 178 echo "Need file after -grouped_labeltable" 179 goto BEND 180 else 181 @ cnt ++ 182 set grpd_labeltable = `@NoExt "$argv[$cnt]" .niml .niml.lt` 183 set grpd_labeltable = $grpd_labeltable.niml.lt 184 if (! -f $grpd_labeltable) then 185 echo "Error $grpd_labeltable not found" 186 goto BEND 187 endif 188 set NxtInd = $cnt 189 endif 190 endif 191 192 #Do not allow for labels to be given separately 193 if (0 && "$argv[$cnt]" == "-labels") then 194 set nneed = `ccalc -i $cnt + 1` 195 if ($nneed > $Narg) then 196 echo "Need at least 1 values after -labels" 197 goto BEND 198 else 199 @ cnt ++ 200 set llist = '' 201 while ($argv[$cnt] !~ -* && $cnt <= $Narg) 202 set llist = ($llist $argv[$cnt]) 203 @ cnt ++ 204 end 205 if ($argv[$cnt] =~ -*) @ cnt -- 206 set NxtInd = $cnt 207 endif 208 endif 209 210 if ("$argv[$cnt]" == "-labdset") then 211 if ($cnt > $Narg) then 212 echo "Need a dset after -labdset" 213 goto BEND 214 endif 215 @ cnt ++ 216 set label_dset = $argv[$cnt] 217 if (`@CheckForAfniDset $label_dset` < 2) then 218 echo "-labdset $label_dset not found" 219 goto BEND 220 endif 221 set NxtInd = $cnt 222 endif 223 224 if ("$argv[$cnt]" == "-pdset") then 225 if ($cnt > $Narg) then 226 echo "Need a dset after -pdset" 227 goto BEND 228 endif 229 @ cnt ++ 230 set p_dset = $argv[$cnt] 231 if (`@CheckForAfniDset $p_dset` < 2) then 232 echo "-pdset $p_dset not found" 233 goto BEND 234 endif 235 set NxtInd = $cnt 236 endif 237 238 if ("$argv[$cnt]" == "-mask") then 239 if ($cnt > $Narg) then 240 echo "Need a dset after -mask" 241 goto BEND 242 endif 243 @ cnt ++ 244 set mask_dset = $argv[$cnt] 245 if (`@CheckForAfniDset $mask_dset` < 2) then 246 echo "-mask $mask_dset not found" 247 goto BEND 248 endif 249 set NxtInd = $cnt 250 endif 251 252 if ("$argv[$cnt]" == "-grpd_labprefix") then 253 if ($cnt > $Narg) then 254 echo "Need a prefix after -grpd_labprefix" 255 goto BEND 256 endif 257 @ cnt ++ 258 set grpd_labprefix = $argv[$cnt] 259 if (`@CheckForAfniDset $grpd_labprefix` > 0) then 260 echo "-grpd_labprefix $grpd_labprefix exists already" 261 goto BEND 262 endif 263 set NxtInd = $cnt 264 endif 265 if ("$argv[$cnt]" == "-grpd_pprefix") then 266 if ($cnt > $Narg) then 267 echo "Need a prefix after -grpd_pprefix" 268 goto BEND 269 endif 270 @ cnt ++ 271 set grpd_pprefix = $argv[$cnt] 272 if (`@CheckForAfniDset $grpd_pprefix` > 0) then 273 echo "-grpd_pprefix $grpd_pprefix exists already" 274 goto BEND 275 endif 276 set NxtInd = $cnt 277 endif 278 @ cnt ++ 279 end 280 281 @ NxtInd ++ 282 if ( $NxtInd > $#argv ) then 283 set others_list = ( ) 284 else 285 set others_list = ( $argv[$NxtInd-$#argv] ) 286 endif 287 288 if ($#others_list > 0) then 289 echo "Options $others_list not understood" 290 goto BEND 291 endif 292 if ($grpd_labeltable == '') then 293 echo "Have not grouped_labeltable" 294 goto BEND 295 endif 296 297 if (0) then 298 echo "Have:" 299 echo $llist 300 echo $llistmin 301 echo $llistmax 302 endif 303 304 goto RETURN_PARSE 305 306HELP: 307 echo "" 308 echo "Script used to create a label table " 309 echo "" 310 echo "Usage: `basename $0` <-grouped_labeltable LABELTABLE> " 311 echo " <-labdset DSET> <-grpd_grpd_labprefix PREFIX>" 312 echo " -grouped_labeltable LABELTABLE: Name of label table providing" 313 echo " grouped categories" 314 echo "" 315 echo "Example 1:" 316 echo " @RegroupLabels -grouped_labeltable Classes.niml.lt \" 317 echo " -labdset s01.test.cls+orig.HEAD \" 318 echo " -grpd_labprefix s01.test.cls3+orig \" 319 echo " -pdset s01.test.clsp+orig \" 320 echo " -grpd_pprefix s01.test.clsp3+orig" 321 echo "" 322 323 goto END 324 325BEND: 326 if ( -f $log) cat $log 327 set stat = 1 328 goto END 329 330END: 331if ($stat == 0 && -f /tmp/${RNS}.__lt.niml.lt) \rm -f /tmp/${RNS}.__lt.niml.lt 332if ($stat == 0 && -f $log) \rm /tmp/${RNS}.RL.log 333exit $stat 334