-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathlaunchlist-gen
executable file
·147 lines (126 loc) · 6.49 KB
/
launchlist-gen
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
#!/usr/bin/env bash
ppath=$(realpath "$BASH_SOURCE")
pdir=$(dirname "$ppath")
pname=$(basename "$ppath")
cmd="$0 $@"
set -e
. "$pdir"/generic-functions
usage() {
cat <<EOF
$pname - generates a shell script containing maper calls for each possible pairing
from a source description and a target description
Usage: $pname -src-base atlasdir/ -src-description atlases.csv [-src-cache cachedir/] \\
-tgt-base targetdir/ -tgt-description targets.csv [-tgt-cache cachedir/] \\
-output-dir distinctname -launchlist outputfile.sh \\
[-threads 1] [-loocv] [-fastmode]
EOF
}
### Check for MIRTK and NiftySeg
type mirtk >/dev/null 2>&1 || fatal "MIRTK not found. Please ensure mirtk binary is on executable path"
type seg_maths >/dev/null 2>&1 || fatal "NiftySeg not found. Please ensure seg_maths is on executable path"
srcbase=
srcdesc=
srccache=
tgtbase=
tgtdesc=
tgtcache=
outdir=$PWD
launchlist=launchlist.sh
loocv=
threads=1
fastmode=0
quicktest=
notc3=
[[ $# -lt 6 ]] && fatal "Parameter error"
while [ $# -gt 0 ]
do
case "$1" in
-src-base) srcbase=$(realpath "$2") ; shift ;;
-src-description) srcdesc=$(realpath "$2") ; shift ;;
-src-cache) srccache=$(realpath "$2") ; shift ;;
-tgt-base) tgtbase=$(realpath "$2") ; shift ;;
-tgt-description) tgtdesc=$(realpath "$2") ; shift ;;
-tgt-cache) tgtcache=$(realpath "$2") ; shift ;;
-output-dir) outdir=$(realpath "$2") ; shift ;;
-launchlist) launchlist="$2" ; shift ;;
-threads) threads="$2" ; shift ;;
-arch) arch="$2" ; shift ;;
-loocv) loocv=1 ;;
-notc3) notc3=1 ;;
-fastmode) fastmode=1 ;;
-quicktest) quicktest=1 ;;
-*)
fatal "Parameter error"
exit 1 ;;
*) break ;; # terminate while loop
esac
shift
done
[[ -e $srcbase ]] || srcbase=$(dirname "$srcdesc")
[[ -e $tgtbase ]] || tgtbase=$(dirname "$tgtdesc")
[[ -s $srcdesc ]] || fatal "Source description $srcdesc does not exist"
[[ -s $tgtdesc ]] || fatal "Target description $tgtdesc does not exist"
echo $cmd >>$launchlist-genlog.txt
qt= ; [[ $quicktest ]] && qt="-quicktest"
procs=$(nproc --all)
[[ $threads =~ [0-9]?[0-9] ]] || fatal "Threads must be a number smaller than $procs ($threads)"
[[ $threads -gt $procs ]] && fatal "Threads must be a number smaller than $procs ($threads)"
cat /dev/null >$launchlist || fatal "Could not write to $launchlist"
cseg=0
set -- $(head -n 1 "$srcdesc" | tr ',' ' ' | tr '[A-Z]' '[a-z]')
srcitemn=$#
enns=$(seq $srcitemn 7 | tr '[0-9]' 'n')
read eins zwei drei vier funf sechs sieben acht <<<$( echo $* $enns )
set -- $(head -n 1 "$tgtdesc" | tr ',' ' ' | tr '[A-Z]' '[a-z]')
tgtitemn=$#
enns=$(seq $tgtitemn 7 | tr '[0-9]' 'n')
read ett tva tre fyra fem sex sju atta <<<$( echo $* $enns)
atlasn=$(tail -n +2 "$srcdesc" | wc -l)
tail -n +2 "$tgtdesc" | grep -v ^# | grep -v -e '^[[:space:]]*$' | while IFS='\n' read tgtline ; do
tgtargc=0
unset tgtarr ; declare -A tgtarr
tgtArgs=()
read tgtarr["$ett"] tgtarr["$tva"] tgtarr["$tre"] tgtarr["$fyra"] tgtarr["$fem"] tgtarr["$sex"] tgtarr["$sju"] tgtarr["$atta"] <<<$(echo $tgtline | tr ',' ' ')
tgtid=${tgtarr["id"]}
[[ -n ${tgtarr["id"]} ]] && (( tgtargc += 1 )) && tgtArgs+=(-tgtid "${tgtarr["id"]}") && unset tgtarr["id"]
[[ -n ${tgtarr["mri"]} ]] && (( tgtargc += 1 )) && tgtArgs+=(-tgtmri "$tgtbase/${tgtarr["mri"]}") && unset tgtarr["mri"]
[[ -n ${tgtarr["brainmask"]} ]] && (( tgtargc += 1 )) && tgtArgs+=(-tgtmask "$tgtbase/${tgtarr["brainmask"]}") && unset tgtarr["brainmask"]
[[ -n ${tgtarr["onepad"]} ]] && (( tgtargc += 1 )) && tgtArgs+=(-tgtop "$tgtbase/${tgtarr["onepad"]}") && unset tgtarr["onepad"]
[[ -n ${tgtarr["tc3raw"]} ]] && (( tgtargc += 1 )) && tgtArgs+=(-tgttc3raw "$tgtbase/${tgtarr["tc3raw"]}") && unset tgtarr["tc3raw"]
[[ -n ${tgtarr["pretransformation"]} ]] && (( tgtargc += 1 )) && tgtArgs+=(-tpn "$tgtbase/${tgtarr["pretransformation"]}") && unset tgtarr["pretransformation"]
tgtlabels=""
for i in ${!tgtarr[@]} ; do
[[ $i == "n" ]] && continue
(( tgtargc += 1 ))
tgtArgs+=(-tgtlabels "$i:$tgtbase/${tgtarr["$i"]}")
done
[[ $tgtargc -gt $tgtitemn ]] && fatal "CSV items do not match header in $tgtdesc"
tail -n +2 "$srcdesc" | grep -v ^# | grep -v -e '^[[:space:]]*$' | while IFS='\n' read srcline ; do
unset srcarr ; declare -A srcarr
maperArgs=("${tgtArgs[@]}" $qt -atlasn "$atlasn" -output-dir "$outdir" -threads "$threads")
srcargc=0
read srcarr["$eins"] srcarr["$zwei"] srcarr["$drei"] srcarr["$vier"] srcarr["$funf"] srcarr["$sechs"] srcarr["$sieben"] srcarr["$acht"] <<<$(echo $srcline | tr ',' ' ')
[[ $loocv ]] && [[ $tgtid == ${srcarr["id"]} ]] && (( atlasn -= 1 )) && continue
[[ -n ${srcarr["id"]} ]] && (( srcargc += 1 )) && maperArgs+=(-srcid "${srcarr["id"]}") && unset srcarr["id"]
[[ -n ${srcarr["mri"]} ]] && (( srcargc += 1 )) && maperArgs+=(-srcmri "$srcbase/${srcarr["mri"]}") && unset srcarr["mri"]
[[ -n ${srcarr["brainmask"]} ]] && (( srcargc += 1 )) && maperArgs+=(-srcmask "$srcbase/${srcarr["brainmask"]}") && unset srcarr["brainmask"]
[[ -n ${srcarr["onepad"]} ]] && (( srcargc += 1 )) && maperArgs+=(-srcop "$srcbase/${srcarr["onepad"]}") && unset srcarr["onepad"]
[[ -n ${srcarr["tc3raw"]} ]] && (( srcargc += 1 )) && maperArgs+=(-srctc3raw "$srcbase/${srcarr["tc3raw"]}") && unset srcarr["tc3raw"]
[[ -n ${srcarr["pretransformation"]} ]] && (( srcargc += 1 )) && maperArgs+=(-spn "$srcbase/${srcarr["pretransformation"]}") && unset srcarr["pretransformation"]
srclabels=""
for i in ${!srcarr[@]} ; do
[[ $i == "n" ]] && continue
(( srcargc += 1 ))
maperArgs+=(-srclabels "$i:$srcbase/${srcarr["$i"]}")
done
[[ $srcargc -gt $srcitemn ]] && fatal "CSV items do not match header in $srcdesc"
[[ -n "$srccache" ]] && maperArgs+=(-srccache "$srccache")
[[ -n "$tgtcache" ]] && maperArgs+=(-tgtcache "$tgtcache")
[[ $notc3 == 1 ]] && maperArgs+=(-notc3)
if [[ ! $fastmode ]] ; then
$pdir/maper -dry-run "${maperArgs[@]}" >/dev/null
fi
printf "%q " "$pdir"/maper ${maperArgs[@]} | sed 's/^[[:blank:]]*//; s/[[:blank:]]*$//' >>$launchlist
printf "\n" >>$launchlist
done
done