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