Jpp
JMuonPostfit.sh
Go to the documentation of this file.
1 #!/bin/zsh
2 #
3 # \author mdejong, bofearraigh
4 #
5 script=${0##*/}
6 
7 # ------------------------------------------------------------------------------------------
8 #
9 # Utility script to plot fit results of track reconstruction chain.
10 #
11 # ------------------------------------------------------------------------------------------
12 
13 
14 if [ -z $JPP_DIR ]; then
15  echo "Variable JPP_DIR undefined."
16  exit
17 fi
18 
19 
20 source $JPP_DIR/setenv.sh $JPP_DIR
21 
22 
23 # list of applications in the processing chain
24 
25 APPLICATIONS=(prefit simplex gandalf energy start)
26 
27 set_variable DEBUG 2
28 set_variable WORKDIR ./
29 set_variable OPTION N
30 set_variable INPUT_FILE $WORKDIR/${APPLICATIONS[-1]}.root
31 #set_variable BACKGROUND
32 set_variable BACKGROUND -B
33 
34 
35 if ( do_usage $* ); then
36  usage "$script [input file [working directory]]"
37 fi
38 
39 case $# in
40  2) set_variable WORKDIR $2;&
41  1) set_variable INPUT_FILE $1;;
42 esac
43 
44 
45 # Number of prefits as a function of application (0 = all)
46 
47 typeset -A NUMBER_OF_FIT
48 
49 NUMBER_OF_FIT=( \
50  prefit 0 \
51  simplex 0 \
52  gandalf 1 \
53  energy 1 \
54  start 1)
55 
56 
57 # Fit application identifier
58 
59 typeset -A ENUMERATION
60 
61 ENUMERATION=( \
62  prefit 1 \
63  simplex 2 \
64  gandalf 3 \
65  energy 4 \
66  start 5)
67 
68 
69 # user interaction
70 
71 for APP in $APPLICATIONS[*]; do
72 
73  set_variable OUTPUT_FILE $WORKDIR/postfit\[${APP}\].root
74 
75  if [[ -f $OUTPUT_FILE ]]; then
76  rm -i $OUTPUT_FILE
77  fi
78 done
79 
80 
81 # processing
82 
83 for APP in $APPLICATIONS[*]; do
84 
85  set_variable OUTPUT_FILE $WORKDIR/postfit\[${APP}\].root
86 
87  if [[ ! -f $OUTPUT_FILE ]]; then
88 
89  JMuonPostfit \
90  -f $INPUT_FILE \
91  -o $OUTPUT_FILE \
92  -N ${NUMBER_OF_FIT[${APP}]} \
93  -A ${ENUMERATION[${APP}]} \
94  -O ${OPTION} \
95  -d ${DEBUG} --!
96  fi
97 done
98 
99 
100 if (( 1 )); then
101 
102  JPlot1D \
103  -f $WORKDIR/postfit\[prefit\].root:hx \
104  -f $WORKDIR/postfit\[simplex\].root:hx \
105  -f $WORKDIR/postfit\[gandalf\].root:hx \
106  -> "angle (best fit muon) [deg]" \
107  -\^ "number of events [a.u]" \
108  -XX \
109  -L TR -T "" \
110  -o $WORKDIR/angle.gif $BACKGROUND
111 
112 fi
113 
114 if (( 1 )); then
115 
116  QUANTILES="0.33 0.5 0.66"
117 
118  for APP in prefit simplex gandalf; do
119 
120  JQuantiles2D \
121  -f $WORKDIR/postfit\[${APP}\].root:h2 \
122  -Q "$QUANTILES" \
123  -o $WORKDIR/quantiles\[${APP}\].root
124  done
125 
126  typeset -A LABEL
127  typeset -A LOGX
128 
129  LABEL[E]="E [GeV]"
130  LABEL[LINE]="E [GeV]"
131  LABEL[LOGE]="E [GeV]"
132  LABEL[N]="number of DOMs"
133 
134  LOGX[E]="-XX"
135  LOGX[LINE]=""
136  LOGX[LOGE]="-XX"
137  LOGX[N]=""
138 
139  JPlot1D \
140  -f $WORKDIR/quantiles\[prefit\].root:h21\.\* \
141  -f $WORKDIR/quantiles\[simplex\].root:h21\.\* \
142  -f $WORKDIR/quantiles\[gandalf\].root:h21\.\* \
143  -> $LABEL[${OPTION}] $LOGX[${OPTION}] \
144  -\^ "resolution (reco muon) [deg]" \
145  -y "1e-2 1e1" \
146  -Y \
147  -L TR -T "" \
148  -o $WORKDIR/resolution.gif $BACKGROUND
149 
150 fi
151 
152 if (( 0 )); then
153 
154  JPlot1D \
155  -f $WORKDIR/postfit\[prefit].root:he \
156  -f $WORKDIR/postfit\[simplex].root:he \
157  -f $WORKDIR/postfit\[gandalf].root:he \
158  -y "0 1.1" \
159  -> "E_{true} neutrino [GeV]" \
160  -\^"efficiency" \
161  -L TR -T "" \
162  -o $WORKDIR/efficiency.gif $BACKGROUND
163 
164 fi
165 
166 
167 if (( 1 )); then
168 
169  JPlot1D \
170  -f $WORKDIR/postfit\[energy\].root:e0 \
171  -f $WORKDIR/postfit\[energy\].root:e1 \
172  -f $WORKDIR/postfit\[energy\].root:e2 \
173  -\^ "number of events [a.u.]" \
174  -> "log10(E_{fit}/GeV) muon" \
175  -XX -T "" \
176  -o $WORKDIR/energy.gif $BACKGROUND
177 
178 fi
179 
180 if (( 1 )); then
181 
182  JPlot2D \
183  -f $WORKDIR/postfit\[energy\].root:ee \
184  -O COLZ \
185  -XX -YY -T "" \
186  -> "E_{true} muon [GeV]" \
187  -< "E_{fit} muon [GeV]" \
188  -o $WORKDIR/ee.gif $BACKGROUND
189 
190 fi
191 
192 if (( 1 )); then
193 
194  JFit \
195  -f $WORKDIR/postfit\[energy\].root:er \
196  -o $WORKDIR/fit.root \
197  -F "[0]*exp(-0.5*(x-[1])*(x-[1])/([2]*[2]))" \
198  -@ "p0 = 0.8*GetMaximum" \
199  -@ "p1 = 0.0" \
200  -@ "p2 = 0.4" \
201  -x "-0.8 +0.8"
202 
203  JPlot1D \
204  -f $WORKDIR/fit.root:er \
205  -> "log10(E_{fit}/E_{true}) muon" \
206  -T "" -o $WORKDIR/er.gif $BACKGROUND
207 fi
208 
209 if (( 0 )); then
210 
211  JQuantiles2D \
212  -f postfit\[gandalf\].root:muon_angle_Enu \
213  -Q 0.5 \
214  -o $WORKDIR/median_muon_angle_Enu.root
215 
216  JPlot1D \
217  -f $WORKDIR/median_muon_angle_Enu.root:muon_angle_Enu \
218  -> "E_{true} neutrino [GeV]" \
219  -\^ "Median Ang. Resolution (reco muon w.r.t. true muon) [deg]" \
220  -T "" \
221  -o $WORKDIR/resolution_muon_angle_Enu.gif $BACKGROUND
222 fi
223 
224 if (( 0 )); then
225 
226  JQuantiles2D \
227  -f postfit\[gandalf\].root:muon_angle_Emu \
228  -Q 0.5 \
229  -o $WORKDIR/median_muon_angle_Emu.root
230 
231  JPlot1D \
232  -f $WORKDIR/median_muon_angle_Emu.root:muon_angle_Emu \
233  -> "E_{true} muon [GeV]" \
234  -\^ "Median Ang. Resolution (reco muon w.r.t. true muon) [deg]" \
235  -T "" \
236  -o $WORKDIR/resolution_muon_angle_Emu.gif $BACKGROUND
237 fi
238 
239 if (( 0 )); then
240 
241  JQuantiles2D \
242  -f postfit\[gandalf\].root:neutrino_angle_Enu \
243  -Q 0.5 \
244  -o $WORKDIR/median_neutrino_angle_Enu.root
245 
246  JPlot1D \
247  -f $WORKDIR/median_neutrino_angle_Enu.root:neutrino_angle_Enu \
248  -> "E_{true} neutrino [GeV]" \
249  -\^ "Median Ang. Resolution (reco muon w.r.t. neutrino) [deg]" \
250  -T "" \
251  -o $WORKDIR/resolution_neutrino_angle_Enu.gif $BACKGROUND
252 fi
253 
254 if (( 0 )); then
255 
256  JQuantiles2D \
257  -f postfit\[gandalf\].root:MC_angle_Enu \
258  -Q 0.5 \
259  -o $WORKDIR/median_MC_angle_Enu.root
260 
261  JPlot1D \
262  -f $WORKDIR/median_MC_angle_Enu.root:MC_angle_Enu \
263  -> "E_{true} neutrino [GeV]" \
264  -\^ "Median Ang. Resolution (true muon w.r.t. neutrino) [deg]" \
265  -T "" \
266  -o $WORKDIR/resolution_MC_angle_Enu.gif $BACKGROUND
267 fi
268 
269 if (( 1 )); then
270 
271  JPlot2D \
272  -f $WORKDIR/postfit\[start\].root:ha \
273  -O COLZ \
274  -> "R^{2} [m^{2}]" \
275  -< "z [m]" \
276  -T "" -o $WORKDIR/ha.gif $BACKGROUND
277 
278 fi
279 
280 
281 if (( 1 )); then
282 
283  JPlot2D \
284  -f $WORKDIR/postfit\[start\].root:hb \
285  -OCOLZ \
286  -> "R^{2} [m^{2}]" \
287  -< "z [m]" \
288  -T "" -o $WORKDIR/hb.gif $BACKGROUND
289 
290 fi
291 
292 
293 if (( 1 )); then
294 
295  JPlot1D \
296  -f $WORKDIR/postfit\[start\].root:hz \
297  -> "z [m]" \
298  -\^ "number of events [a.u]" \
299  -L TR -T "" \
300  -o $WORKDIR/z.gif $BACKGROUND
301 
302 fi