Jpp  master_rocky-43-ge265d140c
the software that should make you happy
examples/JAcoustics/plot-canberra.sh
Go to the documentation of this file.
1 #!/bin/zsh
2 script=${0##*/}
3 
4 zmodload zsh/mathfunc
5 
6 if [ -z $JPP_DIR ]; then
7  echo "Variable JPP_DIR undefined."
8  exit
9 fi
10 
11 source $JPP_DIR/setenv.sh $JPP_DIR >& /dev/null
12 
13 set_variable: DEBUG ACOUSTICS_DEBUG 2
14 set_variable: WORKDIR ACOUSTICS_WORKDIR ./
15 set_variable FORMULA "[0] * exp(-0.5 * (x-[1])*(x-[1]) / ([2]*[2]))"
16 set_variable NUMBER_OF_ENTRIES 100
17 set_variable TMIN_MS -1.0
18 set_variable TMAX_MS +1.0
19 set_variable RANGE 0-18
20 set_variable: FORMAT GRAPHICS_FORMAT gif
21 set_variable+ BATCH GRAPHICS_BATCH -B
22 
23 if do_usage $*; then
24  usage "$script <detector file> <input file> [<lower floor>-<upper floor>]"\
25  "\nInput file corresponds to the output of JKatoomba[.sh]."
26 fi
27 
28 case $# in
29  3) set_variable RANGE $argv[3];&
30  2) set_variable DETECTOR $argv[1];
31  set_variable INPUT_FILE $argv[2];;
32  *) fatal "Wrong number of arguments."
33 esac
34 
35 eval `JPrintDetector -a $DETECTOR -O IDENTIFIER`
36 eval `JPrintDetector -a $DETECTOR -O SUMMARY`
37 
38 set_variable FIRST_FLOOR ${RANGE%%-*}
39 set_variable LAST_FLOOR ${RANGE##*-}
40 
41 JAcoustics.sh $DETECTOR_ID
42 
43 JCanberra.sh $DETECTOR $INPUT_FILE $WORKDIR/canberra\[%\].root
44 
45 source JAcousticsToolkit.sh
46 
47 CHECK_EXIT_CODE
48 
49 typeset -Z 4 STRING
50 typeset -Z 2 FLOOR
51 
52 typeset -A EMITTERS
53 
54 get_tripods+ $WORKDIR/tripod.txt EMITTERS
55 get_transmitters+ $WORKDIR/transmitter.txt EMITTERS
56 
57 kill_child_processes_at_exit
58 
59 attach getModule -a $DETECTOR
60 
61 for STRING in $STRINGS[*]; do
62 
63  echo -n "Creating graphics for string $STRING.."
64 
65  HISTOGRAMS=()
66 
67  for EMITTER in ${(@k)EMITTERS}; do
68 
69  set_variable STRING_TXT $WORKDIR/string_${STRING}\[${EMITTER}\].txt
70  set_variable STRING_ROOT $WORKDIR/string_${STRING}\[${EMITTER}\].root
71 
72  rm -f $STRING_TXT
73 
74  for (( FLOOR = $FIRST_FLOOR; $FLOOR <= $LAST_FLOOR; FLOOR += 1 )); do
75 
76  sput $STRING $FLOOR
77  sget MODULE
78 
79  set_variable N `JPrintResult -f $WORKDIR/canberra\[$EMITTER\].root:${MODULE} -F GetEntries`
80 
81  if [[ -n "$N" ]] && (( $N >= $NUMBER_OF_ENTRIES )); then
82 
83  set_array Q `JPrintQuantiles -f $WORKDIR/canberra\[$EMITTER\].root:${MODULE} -Q "0.33 0.50 0.66"`
84 
85  let "XMIN = $Q[2] - 5.0*($Q[3] - $Q[1])"
86  let "XMAX = $Q[2] + 5.0*($Q[3] - $Q[1])"
87 
88  JFit \
89  -f $WORKDIR/canberra\[$EMITTER\].root:${MODULE} \
90  -F "$FORMULA" \
91  -@ "p0 = GetMaximum" \
92  -@ "p1 = $Q[2]" \
93  -@ "p2 = 0.5*($Q[3] - $Q[1])" \
94  -x "$XMIN $XMAX" \
95  -O L \
96  -o $WORKDIR/fit.root \
97  -d $DEBUG
98 
99  if ( `JPrintFit -f $WORKDIR/fit.root:\.\* -@p0 >& /dev/null` ); then
100 
101  set_array P1 `JPrintFit -f $WORKDIR/fit.root:\.\* -@p1`
102  set_array P2 `JPrintFit -f $WORKDIR/fit.root:\.\* -@p2`
103 
104  ((P1[1] = $P1[1] * 1.0e3)) # [ms]
105  ((P2[1] = abs($P2[1]) * 1.0e3)) # [ms]
106 
107  printf "%2d %9.6f %9.6f\n" $FLOOR $P1[1] $P2[1] >> $STRING_TXT
108  fi
109 
110  rm -f $WORKDIR/fit.root
111  fi
112  done
113 
114  rm -f $STRING_TXT
115 
116  JGraph \
117  -f $STRING_TXT \
118  -o $STRING_ROOT
119 
120  HISTOGRAMS+=(${STRING_ROOT})
121  done
122 
123  JPlot1D \
124  -f${^HISTOGRAMS}":.*" \
125  -w 800x400 \
126  -x "-0.5 18.5" \
127  -y "$TMIN_MS $TMAX_MS" \
128  -> "floor" \
129  -\^ "#Deltat [ms]" \
130  -N "X 505" \
131  -T "[$STRING]" \
132  -L TR \
133  -o $WORKDIR/string_${STRING}.$FORMAT $BATCH
134 
135  echo " -> $WORKDIR/string_${STRING}.$FORMAT"
136 
137  rm -f $HISTOGRAMS[*]
138 done
139 
140 detach
141 
142 # summary plots
143 
144 HISTOGRAMS=()
145 
146 for EMITTER in ${(@k)EMITTERS}; do
147  HISTOGRAMS+=("$WORKDIR/canberra[${EMITTER}].root")
148 done
149 
150 JOpera1D \
151  -f${^HISTOGRAMS}":.*toa" \
152  -u Add \
153  -o $WORKDIR/sum.root >& /dev/null
154 
155 set_array Q `JPrintQuantiles -f $WORKDIR/sum.root:\.\* -Q "0.33 0.50 0.66"`
156 
157 JFit \
158  -f $WORKDIR/sum.root:\.\* \
159  -F "$FORMULA" \
160  -@ "p0 = GetMaximum" \
161  -@ "p1 = $Q[2]" \
162  -@ "p2 = 0.5*($Q[3] - $Q[1])" \
163  -o $WORKDIR/fit.root \
164  -d $DEBUG
165 
166 let "XMIN = $TMIN_MS * 1.0e-3"
167 let "XMAX = $TMAX_MS * 1.0e-3"
168 
169 JPlot1D \
170  -f $WORKDIR/fit.root:\.\* \
171  -> "#Deltat [s]" \
172  -x "$XMIN $XMAX" \
173  -N "X 505" \
174  -T "" \
175  -s 0 \
176  -o $WORKDIR/canberra.$FORMAT $BATCH
177 
178 rm -f $WORKDIR/sum.root $WORKDIR/fit.root
179 rm -f $WORKDIR/p1.{txt,root}
180 rm -f $WORKDIR/p2.{txt,root}
181 
182 for STRING in $STRINGS[*]; do
183  for EMITTER in ${(@k)EMITTERS}; do
184 
185  set_variable STRING_TXT
186 
187  awk '{ print $2 }' $WORKDIR/string_${STRING}\[${EMITTER}\].txt >> $WORKDIR/p1.txt
188  awk '{ print $3 }' $WORKDIR/string_${STRING}\[${EMITTER}\].txt >> $WORKDIR/p2.txt
189  done
190 done
191 
192 $JPP_DIR/examples/JGizmo/JHistogram1D \
193  -x "200 $TMIN_MS $TMAX_MS" \
194  -f $WORKDIR/p1.txt \
195  -o $WORKDIR/p1.root
196 
197 $JPP_DIR/examples/JGizmo/JHistogram1D \
198  -x "200 0.0 0.2" \
199  -f $WORKDIR/p2.txt \
200  -o $WORKDIR/p2.root
201 
202 typeset -A X_LABEL
203 
204 X_LABEL[p1]="#Deltat [ms]"
205 X_LABEL[p2]="#sigma [ms]"
206 
207 for P in p1 p2; do
208 
209  JPlot1D \
210  -f $WORKDIR/${P}.root:\.\* \
211  -> "$X_LABEL[${P}]" \
212  -\^ "number of modules" \
213  -N "X 505" \
214  -T "" \
215  -s 1110 \
216  -o $WORKDIR/${P}.$FORMAT $BATCH
217 done
218 
219 rm -f $WORKDIR/p1.{txt,root}
220 rm -f $WORKDIR/p2.{txt,root}