Jpp 21.0.0-rc.1-88-g0130508c4
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 1.55
27set_variable: QE_MAX CALIBRATION_QEMAX 2.0
28set_variable: MU CALIBRATION_MU 0.205644
29set_variable: TOT_MIN_NS CALIBRATION_TOT_MIN_NS 0.0
30set_variable: TOT_MAX_NS CALIBRATION_TOT_MAX_NS 35.0
31set_variable: NOMINAL_QE CALIBRATION_NOMINAL_QE 0.93
32
33if do_usage $*; then
34 usage "$script <detector_file> (input file)+ <PMT parameters file>"
35fi
36
37if (( $# < 3 )); then
38 fatal "Wrong number of arguments."
39fi
40
41set_variable DETECTOR $argv[1]
42set_array INPUT_FILES $argv[2,-2]
43set_variable PMT_FILE $argv[-1]
44
45if [[ ! -d $WORKDIR ]]; then
46 mkdir -p $WORKDIR
47fi
48
49JCookie.sh
50
51eval `JPrintDetector -a $DETECTOR -O IDENTIFIER`
52eval `JPrintDetector -a $DETECTOR -O SUMMARY`
53
54debug "$DETECTOR $DETECTOR_ID"
55
56if [[ "$DETECTOR_ID" != [1-9][0-9]* ]]; then
57 fatal "Invalid detector identifier \"$DETECTOR_ID\"."
58fi
59
60# evaluate inputs
61
62set_variable RUNSETUPID
63typeset -a RANGE
64
65RANGE[1]=99999999
66RANGE[2]=0
67
68for INPUT_FILE in $INPUT_FILES[*]; do
69
70 JPrintDAQHeader -f $INPUT_FILE | read ID RUN FRAME_INDEX UTC
71
72 if (( $DETECTOR_ID != $ID )); then
73 fatal "Inconsistent detector identifier $DETECTOR_ID != $ID."
74 fi
75
76 JRuns -D $DETECTOR_ID -@ "RUN = $RUN" -F RUNSETUPID | read SETUP
77
78 debug "Run $RUN -> $SETUP."
79
80 if (( $RUN < $RANGE[1] )); then; RANGE[1]=$RUN; fi
81 if (( $RUN > $RANGE[2] )); then; RANGE[2]=$RUN; fi
82
83 if [[ -z "$SETUP" ]]; then
84 fatal "Missing setup identifier for run $RUN."
85 fi
86 if [[ -n "$RUNSETUPID" && $RUNSETUPID != $SETUP ]]; then
87 fatal "Inconsistent run setup identifiers $RUNSETUPID != $SETUP $RUN."
88 fi
89
90 set_variable RUNSETUPID $SETUP
91done
92
93
94# data selection
95
96for DAQ_TIMESLICE in JDAQTimesliceL1 JDAQTimeslice; do
97
98 VALUES=(`JPrintTree -f${^INPUT_FILES} -@ "type = ${DAQ_TIMESLICE}" -k number_of_entries`)
99
100 if [[ -n "$VALUES" ]] && (( ${#VALUES} == ${#INPUT_FILES} )); then
101 break
102 fi
103done
104
105if [[ -z "$VALUES" ]] || (( ${#VALUES} != ${#INPUT_FILES} )); then
106 fatal "No valid data in input file(s)."
107fi
108
109
110# PMT threshold
111
112JPMTThreshold \
113 -D $DETECTOR_ID \
114 -r $RANGE[1] \
115 -P $PMT_FILE \
116 --!
117
118
119# PMT TTS function
120
121JPMTTTS \
122 -D $DETECTOR_ID \
123 -P $PMT_FILE \
124 --!
125
126
127# PMT gain and gain spread
128
129set_variable OUTPUT_FILE $WORKDIR/KM3NeT_${(l:8::0::0:)DETECTOR_ID}_${(l:8::0::0:)RANGE[1]}-${(l:8::0::0:)RANGE[2]}_%.root
130
131JCalibrateToT \
132 -a $DETECTOR \
133 -f${^INPUT_FILES} \
134 -o ${OUTPUT_FILE/\%/calibratetot} \
135 -C $DAQ_TIMESLICE \
136 -d $DEBUG --!
137
138CHECK_EXIT_CODE
139
140JMergeCalibrateToT \
141 -f ${OUTPUT_FILE/\%/calibratetot} \
142 -o ${OUTPUT_FILE/\%/mergetot} \
143 -d $DEBUG --!
144
145CHECK_EXIT_CODE
146
147JFitToT \
148 -a $DETECTOR \
149 -f ${OUTPUT_FILE/\%/mergetot} \
150 -o ${OUTPUT_FILE/\%/fittot} \
151 -P $PMT_FILE \
152 -w \
153 -x "$TOT_MIN_NS $TOT_MAX_NS" \
154 -d $DEBUG --!
155
156CHECK_EXIT_CODE
157
158
159# PMT QE
160
161JCalibrateK40 \
162 -a $DETECTOR \
163 -f${^INPUT_FILES} \
164 -o ${OUTPUT_FILE/\%/calibratek40} \
165 -C $DAQ_TIMESLICE \
166 -d $DEBUG --!
167
168CHECK_EXIT_CODE
169
170JMergeCalibrateK40 \
171 -f ${OUTPUT_FILE/\%/calibratek40} \
172 -o ${OUTPUT_FILE/\%/mergek40} \
173 -d $DEBUG --!
174
175CHECK_EXIT_CODE
176
177for STRING in $STRINGS; do
178
179 JEditDetector \
180 -a $DETECTOR \
181 -k $STRING \
182 -o detector.$STRING.datx
183
184 JSelectPMTParameters \
185 -P $PMT_FILE \
186 -a detector.$STRING.datx \
187 -o PMT.$STRING.txt
188
189 nohup JFitK40 \
190 -@ "TEROSTAT_R1 = $TEROSTAT_R1" \
191 -@ "BELL_SHAPE = $BELL_SHAPE" \
192 -a detector.$STRING.datx \
193 -f ${OUTPUT_FILE/\%/mergek40} \
194 -o ${OUTPUT_FILE/\%/fitk40.$STRING} \
195 -P PMT.$STRING.txt \
196 -T "A B C D E F" \
197 -X TR.$STRING.txt \
198 -Q ${NOMINAL_QE} \
199 -w \
200 $OPTION \
201 $ANGLE_DEPENDENCE \
202 $NOISE_DEPENDENCE \
203 -d $DEBUG --! >& detector.$STRING.log &
204
205done
206
207wait
208
209CHECK_EXIT_CODE
210
211for STRING in $STRINGS; do
212 nohup JFitK40 \
213 -@ "TEROSTAT_R1 = $TEROSTAT_R1" \
214 -@ "BELL_SHAPE = $BELL_SHAPE" \
215 -a detector.$STRING.datx \
216 -f ${OUTPUT_FILE/\%/mergek40} \
217 -o ${OUTPUT_FILE/\%/fitk40.$STRING} \
218 -P PMT.$STRING.txt \
219 -X TR.$STRING.txt \
220 -w \
221 $OPTION \
222 $ANGLE_DEPENDENCE \
223 $NOISE_DEPENDENCE \
224 -d $DEBUG --! >>& detector.$STRING.log &
225done
226
227wait
228
229CHECK_EXIT_CODE
230
231cat detector.${^STRINGS}.log
232
233JMergeDetector \
234 -adetector.${^STRINGS}.datx \
235 -o $DETECTOR
236
237JMergePMTParameters \
238 -PPMT.${^STRINGS}.txt \
239 -o $PMT_FILE
240
241rm -f detector.${^STRINGS}.datx >& /dev/null
242rm -f detector.${^STRINGS}.log >& /dev/null
243rm -f PMT.${^STRINGS}.txt >& /dev/null
244
245# final corrections.
246
247JEditPMTParameters \
248 -P $PMT_FILE \
249 -E $MU \
250 -T "$TOT_MIN_NS $TOT_MAX_NS" \
251 -Q "0.0 $QE_MAX" \
252 -o $PMT_FILE \
253 -d $DEBUG --!
254