]> Creatis software - clitk.git/blob - scripts/calculate_contour_stats.sh
b15caa8011d673ebef63b756b70538a1b45edecd
[clitk.git] / scripts / calculate_contour_stats.sh
1 #! /bin/bash +x 
2
3 select_contour_gui()
4 {
5   local roi_list=$@
6   roi=`zenity --list --title="Available Contours" --column="Please choose a contour:" $roi_list`
7   case $? in
8     0)
9     if [ -z $roi ]
10     then
11       zenity --warning --text="You must choose one contour."
12       select_contour $roi_list
13     else
14       rtstruct_roi_name=$roi
15     fi;;
16     1)
17     if zenity --question --text="Do you really wish to quit?"
18     then
19       exit
20     else
21       select_contour $roi_list
22     fi;;
23     -1)
24       zenity --error --text="Unexpected error. Please relaunch the application."
25       exit;;
26   esac
27 }
28
29 select_contour()
30 {
31   local roi_list=$@
32   echo "Available Contours:" 
33   for r in $roi_list; do
34     echo $r
35   done
36
37   echo "Please choose a contour number:"
38   read rtstruct_roi_number
39 }
40
41 select_roi()
42 {
43   rtstruct_roi_name_list=( `clitkDicomInfo ${rtstruct_file} | grep "3006|0026" | cut -d '[' -f 4 | sed 's/| V 3006|0026[LO] [ROI Name] \|]//'` )
44   rtstruct_roi_number_list=( `clitkDicomInfo ${rtstruct_file} | grep "3006|0022" | cut -d '[' -f 4 | sed 's/| V 3006|0026[LO] [ROI Number] \|]//'` )
45   rtstruct_roi_list=( )
46   for i in $(seq 0 1 $(( ${#rtstruct_roi_name_list[@]} - 1 ))); do
47     rtstruct_roi_list[$i]=${rtstruct_roi_number_list[$i]}:${rtstruct_roi_name_list[$i]}
48   done
49
50   if [ $gui_mode = 1 ]; then
51     select_contour_gui ${rtstruct_roi_list[@]}
52     rtstruct_roi=`echo ${rtstruct_roi_name} | cut -d ':' -f 1`
53     rtstruct_roi_name=`echo ${rtstruct_roi_name} | cut -d ':' -f 2`
54   else
55     select_contour ${rtstruct_roi_list[@]}
56     rtstruct_roi=$rtstruct_roi_number
57     rtstruct_roi_name=${rtstruct_roi_name_list[$(( $rtstruct_roi_number - 1))]}
58   fi
59 }
60
61 ############# main 
62
63 if echo $* | grep "\-h"; then
64   echo Usage: calculate_motion_amplitude.sh { RTSTRUCT_FILE REFERENCE_IMAGE | --gui }
65
66   exit 0
67 fi
68
69
70 rtstruct_roi=0
71
72 if echo $* | grep "\-\-gui" > /dev/null 2>&1; then
73   if [ $# != 1 ]; then
74     echo Invalid arguments. Type \'`basename $0` -h\' for help
75     exit -1
76   fi
77
78   gui_mode=1
79   rtstruct_file=`zenity --file-selection --title="Select RT Struct file."`
80   select_roi
81   rtstruct_ref_image=`zenity --file-selection --title="Select Reference Image."`
82 else
83   if [ $# != 2 ]; then
84     echo Invalid arguments. Type \'`basename $0` -h\' for help
85     exit -1
86   fi
87
88   gui_mode=0
89   rtstruct_file=$1
90   rtstruct_ref_image=$2
91   select_roi
92 fi
93
94
95 #echo "Processing \"${rtstruct_roi_list[$roi_struct]}\"..."
96 # create ROI mask from rtstruct
97 roi_mask=roi_${rtstruct_roi_name}.mhd
98 clitkDicomRTStruct2Image -i ${rtstruct_file} -o ${roi_mask} -j ${rtstruct_ref_image} -r ${rtstruct_roi} 2> /tmp/err.txt
99 if cat /tmp/err.txt | grep -q "No ROI"; then
100   echo Invalid contour number.
101   exit -3
102 fi
103
104 # guarantees the same sampling for roi mask and vector image
105 roi_mask2=resampled_${roi_mask}
106 clitkResampleImage -i ${roi_mask} -o ${roi_mask2} --like ${rtstruct_ref_image}
107
108 # calculate stats
109 clitkImageStatistics -i ${rtstruct_ref_image} -m ${roi_mask2} --verbose 2> /dev/null | tail -n 8 > /tmp/result.txt
110
111 if [ $gui_mode = 1 ]; then
112   cat /tmp/result.txt | zenity --text-info --title "Restuls for \"${rtstruct_roi_name}\""
113 else
114   echo "Restuls for \"${rtstruct_roi_name}\""
115   cat /tmp/result.txt 
116 fi
117
118 rm `basename $roi_mask .mhd`.{mhd,raw}
119 rm `basename $roi_mask2 .mhd`.{mhd,raw}
120 rm /tmp/err.txt
121 rm /tmp/result.txt