8# ------------------------------------------------------------------------------------------
10# Utility script to determine muon energy correction base on Monte Carlo simulations.
12# ------------------------------------------------------------------------------------------
14if [ -z $JPP_DIR ]; then
15 echo "Variable JPP_DIR undefined."
19source $JPP_DIR/setenv.sh $JPP_DIR
22source reconstruction.sh
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
35 usage "$script <detector> <option> [working directory]"\
36 "\nPossible options: run fit interpolate"
40 3) set_variable WORKDIR $3;&
41 2) set_variable OPTION $2;
42 set_variable DETECTOR $1;;
43 *) fatal "Wrong number of arguments."
46if [[ $OPTION != "run" && $OPTION != "fit" && $OPTION != "interpolate" ]]; then
47 fatal "Invalid option $OPTION."
50if [[ ! -d $WORKDIR ]]; then
54let "XMIN = ${LOGE%% *}"
55let "XMAX = ${LOGE##* }"
57if [[ $OPTION == "run" ]]; then
59 if [[ ! -f $WORKDIR/generator.root ]]; then
61 eval `JPrintDetector -a $DETECTOR -O CAN`
63 let "RADIUS_M = $CAN_RADIUS_M + 200.0"
65 let "ZMAX_M = $CAN_ZMAX_M + 200.0"
68 -C "$CAN_X_M $CAN_Y_M $RADIUS_M $ZMIN_M $ZMAX_M" \
71 -n $NUMBER_OF_EVENTS \
72 -o $WORKDIR/generator.root \
76 if [[ ! -f $WORKDIR/sirene.root ]]; then
78 JSirene.sh $DETECTOR $WORKDIR/generator.root $WORKDIR/sirene.root
80 rm -f $WORKDIR/generator.root
83 if [[ ! -f $WORKDIR/trigger_efficiency.root ]]; then
85 set_variable TRIGGEREFFICIENCY_TRIGGERED_EVENTS_ONLY
87 cat>$WORKDIR/trigger_parameters.txt<<EOF
88trigger3DMuon.enabled = 1;
89trigger3DMuon.numberOfHits = 5;
90trigger3DMuon.numberOfModules = 5;
91trigger3DMuon.gridAngle_deg = 10;
97 JTriggerEfficiency.sh $DETECTOR $DETECTOR $WORKDIR/sirene.root $WORKDIR/trigger_efficiency.root $WORKDIR/trigger_parameters.txt $JPP_DATA/PMT_parameters.txt
99 rm -f $WORKDIR/sirene.root
102 if (( 0 )) && [[ ! -f $WORKDIR/jmuon.root ]]; then
104 set_variable RECONSTRUCTION_NUMBER_OF_THREADS 10
106 JARCAMuonReconstruction.sh $DETECTOR $WORKDIR/trigger_efficiency.root $WORKDIR/%.root $JPP_DATA/PMT_parameters.txt
108 rm -f $WORKDIR/trigger_efficiency.root
109 rm -f $WORKDIR/jmuon.offline.root
112 if (( 1 )) && [[ ! -f $WORKDIR/jmuon.root ]]; then
114 set_variable PDF $JPP_DATA/J%p.dat
115 set_variable NUMBER_OF_THREADS 10
116 set_variable RATE_HZ 6.0e3
118 typeset -A PARAMETERS
119 typeset -a APPLICATIONS
124 -f $WORKDIR/trigger_efficiency.root \
125 -o $WORKDIR/jmcevt.root \
128 rm -f $WORKDIR/trigger_efficiency.root
130 APPLICATIONS+=$JMCEVT
144 -f $WORKDIR/jmcevt.root \
145 -o $WORKDIR/jenergy.root \
147 -@ `make_equation PARAMETERS` \
148 -P $JPP_DATA/PMT_parameters.txt \
149 -N ${NUMBER_OF_THREADS} \
152 rm -f $WORKDIR/jmcevt.root
154 APPLICATIONS+=$JMUONENERGY
157 -f $WORKDIR/jenergy.root \
158 -o $WORKDIR/jmuon.root \
159 -A "$APPLICATIONS[*]" \
162 rm -f $WORKDIR/jenergy.root
166if [[ $OPTION == "fit" || $OPTION == "interpolate" ]]; then
168 if ( ! reuse_file $WORKDIR/energy_correction.root ); then
169 set_variable INPUT_FILE $WORKDIR/jmuon.root
171 set_variable INPUT_FILE $WORKDIR/energy_correction.root
174 if [[ $OPTION == "fit" ]]; then
176 let "X0 = 0.5 * ($XMIN + $XMAX)" # central value
177 let "XR = ($XMAX - $XMIN)" # range
179 X="(x - $X0) / $XR" # normalisation
181 P0="(1.0)" # Legendre polynomials
183 P2="(0.5*(3*$X*$X - 1.0))"
184 P3="(0.5*$X*(5*$X*$X* - 3.0))"
188 -o $WORKDIR/energy_correction.root \
189 -F "[0]*$P0 + [1]*$P1 + [2]*$P2 + [3]*$P3" \
198 elif [[ $OPTION == "interpolate" ]]; then
202 -o $WORKDIR/energy_correction.root \
209 -@ "color = 1; style = 2" \
210 -p "$XMIN $XMIN $XMAX $XMAX" \
211 -o $WORKDIR/line.root
214 -f $WORKDIR/energy_correction.root:h2 \
215 -f $WORKDIR/line.root:\.\* \
217 -< "E_{true} [GeV]" \
223 -o ExE.$FORMAT $BATCH
227 -f $WORKDIR/energy_correction.root:"py\[.*\]" \
230 -\^ "number of events [a.u]" \
235 -f $WORKDIR/energy_correction.root:h1 \
236 -f $WORKDIR/line.root:\.\* \
240 -> "log(E_{fit}/GeV)" \
241 -\^ "log(E_{true}/GeV)" \
246 rm -f $WORKDIR/line.root
248 echo result stored in $WORKDIR/energy_correction.root