Jpp  master_rocky
the software that should make you happy
JQAQC.sh
Go to the documentation of this file.
1 #!/bin/zsh
2 #
3 # \author mdejong
4 #
5 script=${0##*/}
6 version=1.0
7 doxygen=JDATABASE::JRunQuality
8 
9 if [ -z $JPP_DIR ]; then
10  echo "Variable JPP_DIR undefined."
11  exit
12 fi
13 
14 source $JPP_DIR/setenv.sh $JPP_DIR >& /dev/null
15 
16 # Auxiliary script to produce QA/QC data.
17 #
18 # The output data are uploaded to the database with a tool that is part of the km3pipe package.
19 # The locally produced data as well as the uploaded data can be viewed with applications/scripts JDataMonitor[.sh] and JDataQuality[.sh].
20 #
21 # Note that if the list of values is extended, the include file JRunQuality.hh should accordingly be updated.
22 
23 
24 
25 set_variable: DEBUG QAQC_DEBUG 0
26 set_variable: VERSION QAQC_VERSION D_1.0.0
27 set_variable: WORKDIR QAQC_WORKDIR ${TMPDIR:-/tmp}/.$$
28 
29 TRIGGER_PARAMETERS=(
30  trigger3DMuon.enabled
31  trigger3DShower.enabled
32  triggerMXShower.enabled
33  triggerNB.enabled
34  writeL0.prescale
35  writeL1.prescale
36  writeL2.prescale
37  writeSN.prescale)
38 
39 TRIGGERS=(`JPrintTriggerBits`)
40 
41 DAQ=(
42  JDAQTimeslice
43  JDAQTimesliceL0
44  JDAQTimesliceL1
45  JDAQTimesliceL2
46  JDAQTimesliceSN
47  JDAQSummaryslice
48  JDAQEvent)
49 
50 typeset -a PARAMETERS
51 
52 PARAMETERS=(
53  GIT JPP nb_of_meta UUID
54  detector run livetime_s UTCMin_s UTCMax_s
55  ${TRIGGER_PARAMETERS[*]}
56  ${DAQ[*]}
57  JTriggerReprocessor
58  ${TRIGGERS[*]}
59  in_sync out_sync DAQ WR HRV FIFO
60  PMTs MEAN_Rate_Hz RMS_Rate_Hz
61  hrv_fifo_failures duplic_timeslices
62  Acoustics AHRS
63  in_usync out_usync
64  event_duration)
65 
66 if do_usage $*; then
67  usage \
68  "$script (input file)+ <QA/QC file>" \
69  "\nAuxiliary script to produce the following QA/QC data:\n" \
70  ${PARAMETERS//\.*} \
71  "\nSee also: $JPP_PAGES/ Search \"JRunQuality\""
72 fi
73 
74 if (( $# < 2 )); then
75  fatal "Wrong number of arguments."
76 fi
77 
78 set_array INPUT_FILES ${argv[1,-2]}
79 set_variable QAQC_FILE ${argv[-1]:a}
80 
81 for (( i = 1; $i <= ${#INPUT_FILES}; i += 1 )); do
82  if [[ -f $INPUT_FILES[$i] ]]; then
83  INPUT_FILES[$i]=${INPUT_FILES[$i]:a}
84  fi
85 done
86 
87 mkdir -p ${WORKDIR}
88 pushd ${WORKDIR}
89 
90 set_variable ACOUSTICS_DEBUG ${DEBUG}
91 set_variable COMPASS_DEBUG ${DEBUG}
92 set_variable DETECTOR detector.detx # detector used during data taking
93 
94 JCookie.sh
95 CHECK_EXIT_CODE
96 
97 if [[ ! -s $QAQC_FILE ]]; then
98  echo ${PARAMETERS//\.*/} > $QAQC_FILE
99 fi
100 
101 for INPUT_FILE in ${INPUT_FILES[*]}; do
102 
103  debug "Processing $INPUT_FILE"
104 
105  # determine values
106 
107  JPrintMeta -v |& awk '/version/ { print $2 }' | read GIT_VERSION
108  CHECK_EXIT_CODE
109  debug "GIT version $GIT_VERSION"
110 
111  set_array DAQ_VERSION `JPrintMeta -f ${INPUT_FILE} -k GIT`
112  debug "DAQ version $DAQ_VERSION[*]"
113 
114  echo ${(s/./)DAQ_VERSION[1]} | read DAQ_MAJOR DAQ_MINOR DAQ_PATCH
115 
116  if [[ -z $DAQ_VERSION[1] ]]; then
117  JPrintMeta -f ${INPUT_FILE} -k SVN | read DAQ_VERSION
118  fi
119 
120  getUUID -f ${INPUT_FILE} -d 0 | read UUID
121  CHECK_EXIT_CODE
122 
123  set_array DAQ_HEADER `JPrintDAQHeader -f ${INPUT_FILE} -d 0`
124  set_variable DETECTOR_ID ${DAQ_HEADER[1]}
125  set_variable RUN ${DAQ_HEADER[2]}
126 
127  JDetectorDB -D ${DETECTOR_ID} -r ${RUN} -o ${DETECTOR} -d ${DEBUG} # install detector file as-is for a.o. JTriggerReprocessor
128  CHECK_EXIT_CODE
129 
130  if [[ "$DAQ_MAJOR" != [0-9][0-9]* ]] || (( $DAQ_MAJOR <= 12 )); then # Jpp-version dependence
131  JEditDetector \
132  -a ${DETECTOR} \
133  -P "-1 -1 set UDP_COUNTER_DISABLE" \
134  -P "-1 -1 set UDP_TRAILER_DISABLE" \
135  -o ${DETECTOR} \
136  -d ${DEBUG}
137  fi
138 
139  JAHRSCalibration.sh ${DETECTOR_ID} # install AHRS calibration file
140  CHECK_EXIT_CODE
141 
142  set_array LIVETIME_S `getLivetime -f ${INPUT_FILE} -d 0`
143  set_array UTC_S `getUTC -f ${INPUT_FILE} -d 0`
144 
145  {{ JTriggerMonitor -f ${INPUT_FILE} -d ${DEBUG} -Q 3 3>&1 1>&4 } | read -A TRIGGER_MONITOR } 4>&1
146  CHECK_EXIT_CODE
147 
148  set_variable OUTPUT_FILE KM3NeT_${(l:8::0::0:)DETECTOR_ID}_${(l:8::0::0:)RUN}_reprocessor.root
149 
150  JTriggerReprocessor \
151  -a ${DETECTOR} \
152  -f ${INPUT_FILE} \
153  -o ${OUTPUT_FILE} \
154  -U \
155  -C -\.\* \
156  -d ${DEBUG}
157  CHECK_EXIT_CODE
158 
159  JPrintTree -f ${OUTPUT_FILE} -@ "type = JDAQEvent" -k number_of_entries | read TRIGGER_REPROCESSOR
160 
161  {{ JTurbot \
162  -f ${INPUT_FILE} \
163  -a ${DETECTOR} \
164  -o /dev/null \
165  -d ${DEBUG} \
166  -Q 3 3>&1 1>&4 } | read -A TURBOT } 4>&1
167  CHECK_EXIT_CODE
168 
169  {{ JSummaryMonitor -f ${INPUT_FILE} -t 50000 -d ${DEBUG} -Q 3 3>&1 1>&4 } | read -A SUMMARY_MONITOR } 4>&1
170  CHECK_EXIT_CODE
171 
172  JAcousticsTriggerProcessor.sh ${DETECTOR} ${RUN}
173 
174  if (( $? == 0 )); then
175 
176  set_variable OUTPUT_FILE KM3NeT_${(l:8::0::0:)DETECTOR_ID}_${(l:8::0::0:)RUN}_event.root
177 
178  NUMBER_OF_ACOUSTICS_EVENTS=(`JPrintTree -f ${OUTPUT_FILE} -@ "type = JACOUSTICS::JEvent" -k number_of_entries`)
179  else
180  NUMBER_OF_ACOUSTICS_EVENTS=(0)
181  fi
182 
183  JAHRS.sh ${DETECTOR_ID} ${RUN}
184 
185  if (( $? == 0 )); then
186 
187  set_variable OUTPUT_FILE KM3NeT_${(l:8::0::0:)DETECTOR_ID}_${(l:8::0::0:)RUN}_ahrs.root
188 
189  {{ JAHRSMonitor \
190  -a ${DETECTOR} \
191  -f ${OUTPUT_FILE} \
192  -c ahrs_calibration.txt \
193  -q 0.2 \
194  -d ${DEBUG} \
195  -Q 3 3>&1 1>&4 } | read -A AHRS_MONITOR } 4>&1
196  else
197  AHRS_MONITOR=(0,0)
198  fi
199 
200  set_variable OUTPUT_FILE KM3NeT_${(l:8::0::0:)DETECTOR_ID}_${(l:8::0::0:)RUN}_trigger.root
201 
202  JTriggerProcessor \
203  -a ${DETECTOR} \
204  -f ${INPUT_FILE} \
205  -C JDAQTimesliceSN \
206  -@ "trigger3DMuon.enabled = 1" \
207  -@ "trigger3DMuon.numberOfHits = 3" \
208  -@ "trigger3DMuon.numberOfModules = 3" \
209  -@ "trigger3DMuon.gridAngle_deg = 10" \
210  -@ "trigger3DMuon.TMaxExtra_ns = 500.0e3" \
211  -@ "TMaxEvent_ns = 500.0e3" \
212  -@ "TMaxLocal_ns = 20.0" \
213  -@ "L2.numberOfHits = 4" \
214  -@ "L2.TMaxLocal_ns = 20.0" \
215  -@ "L2.ctMin = 0.0" \
216  -o ${OUTPUT_FILE} \
217  -d ${DEBUG}
218  CHECK_EXIT_CODE
219 
220  {{ JSquid \
221  -a ${DETECTOR} \
222  -f ${OUTPUT_FILE} \
223  -o /dev/null \
224  -d ${DEBUG} \
225  -Q 3 3>&1 1>&4 } | read -A SQUID } 4>&1
226 
227  {{ JMermaid \
228  -a ${DETECTOR} \
229  -f ${INPUT_FILE} \
230  -o /dev/null \
231  -d ${DEBUG} \
232  -Q 3 3>&1 1>&4 } | read -A MERMAID } 4>&1
233 
234  # print values
235 
236  printf " %12s" ${GIT_VERSION} >> $QAQC_FILE
237  printf " %12s" ${DAQ_VERSION[1]:-\?} >> $QAQC_FILE
238  printf " %1d" ${#DAQ_VERSION} >> $QAQC_FILE
239  printf " %s" ${UUID:-\?} >> $QAQC_FILE
240  printf " %8d" ${DAQ_HEADER[1,2]} >> $QAQC_FILE
241  printf " %9.1f" ${LIVETIME_S[1]} >> $QAQC_FILE
242  printf " %12.1f" ${UTC_S[1,2]} >> $QAQC_FILE
243 
244  for KEY in ${TRIGGER_PARAMETERS[*]}; do
245 
246  JPrintTriggerParameters -f ${INPUT_FILE} -k $KEY -d 0 | read VALUE
247 
248  printf " %4d" ${VALUE:-0} >> $QAQC_FILE
249  done
250 
251  for KEY in ${DAQ[*]}; do
252 
253  JPrintTree -f ${INPUT_FILE} -@ "type = $KEY" -k number_of_entries | read VALUE
254 
255  printf " %8d" ${VALUE:-0} >> $QAQC_FILE
256  done
257 
258  printf " %8d" ${TRIGGER_REPROCESSOR:-0} >> $QAQC_FILE
259  printf " %8d" ${TRIGGER_MONITOR[*]} >> $QAQC_FILE
260  printf " %4d" ${TURBOT[1,2]} >> $QAQC_FILE
261  printf " %7.5f" ${SUMMARY_MONITOR[1,4]} >> $QAQC_FILE
262  printf " %8.1f" ${SUMMARY_MONITOR[5]} >> $QAQC_FILE
263  printf " %7.0f" ${SUMMARY_MONITOR[6,7]} >> $QAQC_FILE
264  printf " %8d" ${SUMMARY_MONITOR[8]} >> $QAQC_FILE
265  printf " %8d" ${SUMMARY_MONITOR[9]} >> $QAQC_FILE
266  printf " %4d" ${NUMBER_OF_ACOUSTICS_EVENTS[1]} >> $QAQC_FILE
267  printf " %5d" ${AHRS_MONITOR[1]} >> $QAQC_FILE
268  printf " %8.3f" ${AHRS_MONITOR[2]} >> $QAQC_FILE
269  printf " %4d" ${SQUID[1,2]} >> $QAQC_FILE
270  printf " %8d" ${MERMAID[1]} >> $QAQC_FILE
271  printf "\n" >> $QAQC_FILE
272 done
273 
274 popd
275 
276 rm -rf ${WORKDIR}