Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
JARCAEnergyCorrection.sh
Go to the documentation of this file.
1#!/usr/bin/env zsh
2#
3# \author mdejong
4#
5version=1.0
6script=${0##*/}
7
8# ------------------------------------------------------------------------------------------
9#
10# Utility script to determine muon energy correction base on Monte Carlo simulations.
11#
12# ------------------------------------------------------------------------------------------
13
14if [ -z $JPP_DIR ]; then
15 echo "Variable JPP_DIR undefined."
16 exit
17fi
18
19source $JPP_DIR/setenv.sh $JPP_DIR
20source $JPP_DIR/externals/km3net-dataformat/definitions/reconstruction.sh
21
22zmodload zsh/mathfunc
23
24set_variable DEBUG 2
25set_variable WORKDIR ./
26set_variable: NUMBER_OF_EVENTS RECONSTRUCTION_NUMBER_OF_EVENTS 100000
27set_variable: NUMBER_OF_BINS RECONSTRUCTION_NUMBER_OF_BINS 30
28set_variable: LOGE RECONSTRUCTION_LOGE 2.5 9.0
29set_variable: FORMAT GRAPHICS_FORMAT gif
30set_variable+ BATCH GRAPHICS_BATCH -B
31
32if do_usage $*; then
33 usage "$script <detector> <option> [working directory]"\
34 "\nPossible options: run fit interpolate"
35fi
36
37case $# in
38 3) set_variable WORKDIR $3;&
39 2) set_variable OPTION $2;
40 set_variable DETECTOR $1;;
41 *) fatal "Wrong number of arguments."
42esac
43
44if [[ $OPTION != "run" && $OPTION != "fit" && $OPTION != "interpolate" ]]; then
45 fatal "Invalid option $OPTION."
46fi
47
48if [[ ! -d $WORKDIR ]]; then
49 mkdir -p $WORKDIR
50fi
51
52let "XMIN = ${LOGE%% *}"
53let "XMAX = ${LOGE##* }"
54
55if [[ $OPTION == "run" ]]; then
56
57 if [[ ! -f $WORKDIR/generator.root ]]; then
58
59 eval `JPrintDetector -a $DETECTOR -O CAN`
60
61 let "RADIUS_M = $CAN_RADIUS_M + 200.0"
62 let "ZMIN_M = 0.0"
63 let "ZMAX_M = $CAN_ZMAX_M + 200.0"
64
65 JGenerator \
66 -C "$CAN_X_M $CAN_Y_M $RADIUS_M $ZMIN_M $ZMAX_M" \
67 -E "$LOGE" \
68 -P 13 \
69 -n $NUMBER_OF_EVENTS \
70 -o $WORKDIR/generator.root \
71 -d $DEBUG
72 fi
73
74 if [[ ! -f $WORKDIR/sirene.root ]]; then
75
76 JSirene.sh $DETECTOR $WORKDIR/generator.root $WORKDIR/sirene.root
77
78 rm -f $WORKDIR/generator.root
79 fi
80
81 if [[ ! -f $WORKDIR/trigger_efficiency.root ]]; then
82
83 set_variable TRIGGEREFFICIENCY_TRIGGERED_EVENTS_ONLY
84
85 cat>$WORKDIR/trigger_parameters.txt<<EOF
86trigger3DMuon.enabled = 1;
87trigger3DMuon.numberOfHits = 5;
88trigger3DMuon.numberOfModules = 5;
89trigger3DMuon.gridAngle_deg = 10;
90ctMin = 0.0;
91TMaxLocal_ns = 15.0;
92writeSummary = 100;
93EOF
94
95 JTriggerEfficiency.sh $DETECTOR $DETECTOR $WORKDIR/sirene.root $WORKDIR/trigger_efficiency.root $WORKDIR/trigger_parameters.txt $JPP_DATA/PMT_parameters.txt
96
97 rm -f $WORKDIR/sirene.root
98 fi
99
100 if (( 0 )) && [[ ! -f $WORKDIR/jmuon.root ]]; then
101
102 set_variable RECONSTRUCTION_NUMBER_OF_THREADS 10
103
104 JARCAMuonReconstruction.sh $DETECTOR $WORKDIR/trigger_efficiency.root $WORKDIR/%.root $JPP_DATA/PMT_parameters.txt
105
106 rm -f $WORKDIR/trigger_efficiency.root
107 rm -f $WORKDIR/jmuon.offline.root
108 fi
109
110 if (( 1 )) && [[ ! -f $WORKDIR/jmuon.root ]]; then
111
112 set_variable PDF $JPP_DATA/J%p.dat
113 set_variable NUMBER_OF_THREADS 10
114 set_variable RATE_HZ 6.0e3
115
116 typeset -A PARAMETERS
117 typeset -a APPLICATIONS
118
119 APPLICATIONS=()
120
121 JMuonMCEvt \
122 -f $WORKDIR/trigger_efficiency.root \
123 -o $WORKDIR/jmcevt.root \
124 -d $DEBUG --!
125
126 rm -f $WORKDIR/trigger_efficiency.root
127
128 APPLICATIONS+=$JMCEVT
129
130 PARAMETERS=(
131 roadWidth_m 300.0
132 R_Hz $RATE_HZ
133 EMin_log 0.0
134 EMax_log 8.0
135 TMin_ns -50.0
136 TMax_ns +450.0
137 mestimator 1
138 numberOfPrefits 1)
139
140 eval JMuonEnergy \
141 -a $DETECTOR \
142 -f $WORKDIR/jmcevt.root \
143 -o $WORKDIR/jenergy.root \
144 -P $PDF \
145 -@ `make_equation PARAMETERS` \
146 -N ${NUMBER_OF_THREADS} \
147 -d $DEBUG --!
148
149 rm -f $WORKDIR/jmcevt.root
150
151 APPLICATIONS+=$JMUONENERGY
152
153 JHistory \
154 -f $WORKDIR/jenergy.root \
155 -o $WORKDIR/jmuon.root \
156 -A "$APPLICATIONS[*]" \
157 -d $DEBUG --!
158
159 rm -f $WORKDIR/jenergy.root
160 fi
161fi
162
163if [[ $OPTION == "fit" || $OPTION == "interpolate" ]]; then
164
165 if ( ! reuse_file $WORKDIR/energy_correction.root ); then
166 set_variable INPUT_FILE $WORKDIR/jmuon.root
167 else
168 set_variable INPUT_FILE $WORKDIR/energy_correction.root
169 fi
170
171 if [[ $OPTION == "fit" ]]; then
172
173 let "X0 = 0.5 * ($XMIN + $XMAX)" # central value
174 let "XR = ($XMAX - $XMIN)" # range
175
176 X="(x - $X0) / $XR" # normalisation
177
178 P0="(1.0)" # Legendre polynomials
179 P1="($X)"
180 P2="(0.5*(3*$X*$X - 1.0))"
181 P3="(0.5*$X*(5*$X*$X* - 3.0))"
182
183 JEnergyCorrection \
184 -f $INPUT_FILE \
185 -o $WORKDIR/energy_correction.root \
186 -F "[0]*$P0 + [1]*$P1 + [2]*$P2 + [3]*$P3" \
187 -@ "p0 = 0.0" \
188 -@ "p1 = 1.0" \
189 -@ "p2 = 0.0" \
190 -@ "p3 = 0.0" \
191 -N $NUMBER_OF_BINS \
192 -x "$LOGE" \
193 -d $DEBUG --!
194
195 elif [[ $OPTION == "interpolate" ]]; then
196
197 JEnergyCorrection \
198 -f $INPUT_FILE \
199 -o $WORKDIR/energy_correction.root \
200 -N $NUMBER_OF_BINS \
201 -x "$LOGE" \
202 -d $DEBUG --!
203 fi
204
205 JLine \
206 -@ "color = 1; style = 2" \
207 -p "$XMIN $XMIN $XMAX $XMAX" \
208 -o $WORKDIR/line.root
209
210 JPlot2D \
211 -f $WORKDIR/energy_correction.root:h2 \
212 -f $WORKDIR/line.root:\.\* \
213 -> "E_{fit} [GeV]" \
214 -< "E_{true} [GeV]" \
215 -XX \
216 -YY \
217 -Z \
218 -O COLZ \
219 -T "" \
220 -o ExE.$FORMAT $BATCH
221
222 JPlot1D \
223 -w 1200x600 \
224 -f $WORKDIR/energy_correction.root:"py\[.*\]" \
225 -XX \
226 -> "E [GeV]" \
227 -\^ "number of events [a.u]" \
228 -T "" \
229 -o E1.$FORMAT $BATCH
230
231 JPlot1D \
232 -f $WORKDIR/energy_correction.root:h1 \
233 -f $WORKDIR/line.root:\.\* \
234 -y "$LOGE" \
235 -XX \
236 -YY \
237 -> "log(E_{fit}/GeV)" \
238 -\^ "log(E_{true}/GeV)" \
239 -G XY \
240 -T "" \
241 -o E2.$FORMAT $BATCH
242
243 rm -f $WORKDIR/line.root
244
245 echo result stored in $WORKDIR/energy_correction.root
246fi