Jpp 19.3.0-rc.5
the software that should make you happy
Loading...
Searching...
No Matches
JCalibratePMT.sh
Go to the documentation of this file.
1#!/usr/bin/env zsh
2#
3# \author rgruiz, mdejong
4#
5script=${0##*/}
6
7# ------------------------------------------------------------------------------------------
8#
9# Script to run complete PMT calibration.
10#
11# ------------------------------------------------------------------------------------------
12
13if [ -z $JPP_DIR ]; then
14 echo "Variable JPP_DIR undefined."
15 exit
16fi
17
18source $JPP_DIR/setenv.sh $JPP_DIR
19
20set_variable: WORKDIR CALIBRATION_WORKDIR ./
21set_variable: DEBUG CALIBRATION_DEBUG 2
22set_variable+ OPTION CALIBRATION_OPTION -A
23set_variable+ ANGLE_DEPENDENCE CALIBRATION_ANGLE_DEPENDENCE -D
24set_variable+ NOISE_DEPENDENCE CALIBRATION_NOISE_DEPENDENCE -B
25set_variable: TEROSTAT_R1 CALIBRATION_TEROSTAT_R1 1.0
26set_variable: BELL_SHAPE CALIBRATION_BELL_SHAPE 2.0
27set_variable: QE_MAX CALIBRATION_QEMAX 2.0
28set_variable: MU CALIBRATION_MU 0.25
29set_variable: TOT_MIN_NS CALIBRATION_TOT_MIN_NS 0.0
30set_variable: TOT_MAX_NS CALIBRATION_TOT_MAX_NS 35.0
31
32if do_usage $*; then
33 usage "$script <detector_file> (input file)+ <PMT parameters file>"
34fi
35
36if (( $# < 3 )); then
37 fatal "Wrong number of arguments."
38fi
39
40set_variable DETECTOR $argv[1]
41set_array INPUT_FILES $argv[2,-2]
42set_variable PMT_FILE $argv[-1]
43
44if [[ ! -d $WORKDIR ]]; then
45 mkdir -p $WORKDIR
46fi
47
48JCookie.sh
49
50eval `JPrintDetector -a $DETECTOR -O IDENTIFIER`
51eval `JPrintDetector -a $DETECTOR -O SUMMARY`
52
53debug "$DETECTOR $DETECTOR_ID"
54
55if [[ "$DETECTOR_ID" != [1-9][0-9]* ]]; then
56 fatal "Invalid detector identifier \"$DETECTOR_ID\"."
57fi
58
59# evaluate inputs
60
61set_variable RUNSETUPID
62typeset -a RANGE
63
64RANGE[1]=99999999
65RANGE[2]=0
66
67for INPUT_FILE in $INPUT_FILES[*]; do
68
69 JPrintDAQHeader -f $INPUT_FILE | read ID RUN FRAME_INDEX UTC
70
71 if (( $DETECTOR_ID != $ID )); then
72 fatal "Inconsistent detector identifier $DETECTOR_ID != $ID."
73 fi
74
75 JRuns -D $DETECTOR_ID -@ "RUN = $RUN" -F RUNSETUPID | read SETUP
76
77 debug "Run $RUN -> $SETUP."
78
79 if (( $RUN < $RANGE[1] )); then; RANGE[1]=$RUN; fi
80 if (( $RUN > $RANGE[2] )); then; RANGE[2]=$RUN; fi
81
82 if [[ -z "$SETUP" ]]; then
83 fatal "Missing setup identifier for run $RUN."
84 fi
85 if [[ -n "$RUNSETUPID" && $RUNSETUPID != $SETUP ]]; then
86 fatal "Inconsistent run setup identifiers $RUNSETUPID != $SETUP $RUN."
87 fi
88
89 set_variable RUNSETUPID $SETUP
90done
91
92
93# data selection
94
95for DAQ_TIMESLICE in JDAQTimesliceL1 JDAQTimeslice; do
96
97 VALUES=(`JPrintTree -f${^INPUT_FILES} -@ "type = ${DAQ_TIMESLICE}" -k number_of_entries`)
98
99 if [[ -n "$VALUES" ]] && (( ${#VALUES} == ${#INPUT_FILES} )); then
100 break
101 fi
102done
103
104if [[ -z "$VALUES" ]] || (( ${#VALUES} != ${#INPUT_FILES} )); then
105 fatal "No valid data in input file(s)."
106fi
107
108
109# PMT threshold
110
111JPMTThreshold \
112 -D $DETECTOR_ID \
113 -r $RANGE[1] \
114 -P $PMT_FILE \
115 --!
116
117
118# PMT TTS function
119
120JPMTTTS \
121 -D $DETECTOR_ID \
122 -P $PMT_FILE \
123 --!
124
125
126# PMT gain and gain spread
127
128set_variable OUTPUT_FILE $WORKDIR/KM3NeT_${(l:8::0::0:)DETECTOR_ID}_${(l:8::0::0:)RANGE[1]}-${(l:8::0::0:)RANGE[2]}_%.root
129
130JCalibrateToT \
131 -a $DETECTOR \
132 -f${^INPUT_FILES} \
133 -o ${OUTPUT_FILE/\%/calibratetot} \
134 -C $DAQ_TIMESLICE \
135 -d $DEBUG --!
136
137CHECK_EXIT_CODE
138
139JMergeCalibrateToT \
140 -f ${OUTPUT_FILE/\%/calibratetot} \
141 -o ${OUTPUT_FILE/\%/mergetot} \
142 -d $DEBUG --!
143
144CHECK_EXIT_CODE
145
146JFitToT \
147 -a $DETECTOR \
148 -f ${OUTPUT_FILE/\%/mergetot} \
149 -o ${OUTPUT_FILE/\%/fittot} \
150 -P $PMT_FILE \
151 -w \
152 -x "$TOT_MIN_NS $TOT_MAX_NS" \
153 -d $DEBUG --!
154
155CHECK_EXIT_CODE
156
157
158# PMT QE
159
160JCalibrateK40 \
161 -a $DETECTOR \
162 -f${^INPUT_FILES} \
163 -o ${OUTPUT_FILE/\%/calibratek40} \
164 -C $DAQ_TIMESLICE \
165 -d $DEBUG --!
166
167CHECK_EXIT_CODE
168
169JMergeCalibrateK40 \
170 -f ${OUTPUT_FILE/\%/calibratek40} \
171 -o ${OUTPUT_FILE/\%/mergek40} \
172 -d $DEBUG --!
173
174CHECK_EXIT_CODE
175
176JFitK40 \
177 -@ "TEROSTAT_R1 = $TEROSTAT_R1" \
178 -@ "BELL_SHAPE = $BELL_SHAPE" \
179 -a $DETECTOR \
180 -f ${OUTPUT_FILE/\%/mergek40} \
181 -o ${OUTPUT_FILE/\%/fitk40} \
182 -P $PMT_FILE \
183 -w \
184 $OPTION \
185 $ANGLE_DEPENDENCE \
186 $NOISE_DEPENDENCE \
187 -d $DEBUG --!
188
189CHECK_EXIT_CODE
190
191
192# final corrections.
193
194JEditPMTParameters \
195 -P $PMT_FILE \
196 -E $MU \
197 -T "$TOT_MIN_NS $TOT_MAX_NS" \
198 -Q "0.0 $QE_MAX" \
199 -o $PMT_FILE \
200 -d $DEBUG --!
201