Jpp  master_rocky-40-g5f0272dcd
the software that should make you happy
JARCAEnergyCorrection.sh
Go to the documentation of this file.
1 #!/bin/zsh
2 #
3 # \author mdejong
4 #
5 version=1.0
6 script=${0##*/}
7 
8 # ------------------------------------------------------------------------------------------
9 #
10 # Utility script to determine muon energy correction base on Monte Carlo simulations.
11 #
12 # ------------------------------------------------------------------------------------------
13 
14 if [ -z $JPP_DIR ]; then
15  echo "Variable JPP_DIR undefined."
16  exit
17 fi
18 
19 source $JPP_DIR/setenv.sh $JPP_DIR
20 
21 zmodload zsh/mathfunc
22 
23 set_variable DEBUG 2
24 set_variable WORKDIR ${TMPDIR:-/tmp}/
25 set_variable NUMBER_OF_RUNS 10
26 set_variable NUMBER_OF_BINS 40
27 set_variable RANGE_LOGE 3.0 6.5
28 set_variable: FORMAT GRAPHICS_FORMAT gif
29 set_variable+ BATCH GRAPHICS_BATCH -B
30 
31 if do_usage $*; then
32  usage "$script <working directory> <option>"\
33  "\nPossible options: run fit interpolate"
34 fi
35 
36 if (( $# != 2 )); then
37  fatal "Wrong number of arguments."
38 fi
39 
40 set_variable WORKDIR $argv[1]
41 set_variable OPTION $argv[2]
42 
43 if [[ $OPTION != "run" && $OPTION != "fit" && $OPTION != "interpolate" ]]; then
44  fatal "Invalid option $OPTION."
45 fi
46 
47 mkdir -p $WORKDIR
48 
49 if [[ $OPTION == "run" ]]; then
50 
51  set_variable DETECTOR $WORKDIR/detector.detx
52 
53  if [[ ! -f $DETECTOR ]]; then
54  JDetector.sh $DETECTOR
55  fi
56 
57  for (( i = 1; $i <= $NUMBER_OF_RUNS; ++i )); do
58  JSirene.sh $DETECTOR $JPP_DATA/genhen.km3net_wpd_V2_0.evt.gz $WORKDIR/sirene_${i}.root
59  JTriggerEfficiency.sh $DETECTOR $DETECTOR $WORKDIR/sirene_${i}.root $WORKDIR/trigger_efficiency_${i}.root
60  JARCAMuonReconstruction.sh $DETECTOR $WORKDIR/trigger_efficiency_${i}.root $WORKDIR/%_${i}.root $JPP_DATA/PMT_parameters.txt
61  done
62 fi
63 
64 if [[ $OPTION == "fit" || $OPTION == "interpolate" ]]; then
65 
66  if ( ! reuse_file $WORKDIR/energy_correction.root ); then
67 
68  set_array INPUT_FILES `ls $WORKDIR/jchain.arca_*.root`
69 
70  if (( ${#INPUT_FILES} == 0 )); then
71  fatal "No input file in directory $WORKDIR"
72  fi
73 
74  else
75 
76  set_array INPUT_FILES `ls $WORKDIR/energy_correction.root`
77  fi
78 
79  if [[ $OPTION == "fit" ]]; then
80 
81  JEnergyCorrection \
82  -f "$INPUT_FILES[*]" \
83  -o $WORKDIR/energy_correction.root \
84  -F "[0] + [1]*x + [2]*x*x + [3]*x*x*x" \
85  -@ "p0 = 0.0" \
86  -@ "p1 = 1.0" \
87  -@ "p2 = 0.0" \
88  -@ "p3 = 0.0" \
89  -N $NUMBER_OF_BINS \
90  -x "$RANGE_LOGE" \
91  -d $DEBUG --!
92 
93  elif [[ $OPTION == "interpolate" ]]; then
94 
95  JEnergyCorrection \
96  -f "$INPUT_FILES[*]" \
97  -o $WORKDIR/energy_correction.root \
98  -N $NUMBER_OF_BINS \
99  -x "$RANGE_LOGE" \
100  -d $DEBUG --!
101  fi
102 
103  JPlot2D \
104  -f $WORKDIR/energy_correction.root:h2 \
105  -> "E_{fit} [GeV]" \
106  -< "E_{true} [GeV]" \
107  -XX \
108  -YY \
109  -Z \
110  -O COLZ \
111  -T "" \
112  -o ExE.$FORMAT $BATCH
113 
114  set_variable YMIN 0
115  set_variable YMAX `JPrintResult -f $WORKDIR/energy_correction.root:h1 -F "GetMaximum + 0.5"`
116 
117  JPlot1D \
118  -f $WORKDIR/energy_correction.root:h1 \
119  -y "$YMIN $YMAX" \
120  -> "log(E_{fit}/GeV)" \
121  -\^ "log(E_{true}/GeV)" \
122  -T "" \
123  -o E.$FORMAT $BATCH
124 
125  echo result stored in $WORKDIR/energy_correction.root
126 fi