Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JTuneHV.sh
Go to the documentation of this file.
1 #!/bin/zsh
2 #
3 # \author bjung
4 #
5 version=1.0
6 script=${0##*/}
7 
8 # ------------------------------------------------------------------------------------------------
9 #
10 # Utility script for finding PMT supply voltages corresponding to the nominal gain setting.
11 #
12 # ------------------------------------------------------------------------------------------------
13 
14 
15 if [ -z $JPP_DIR ]; then
16  echo "Variable JPP_DIR undefined."
17  exit
18 fi
19 
20 
21 source $JPP_DIR/setenv.sh $JPP_DIR
22 
24 set_variable NPE 1
25 set_variable FIT_RANGE 0.0 -1.0 # Invalid fit-range such that ToT-fit is conducted around histogram maximum (see JFitToT.hh)
27 set_variable OUTPUT_JSON $OUTPUT_DIR/HVtuning.json
28 set_variable OUTPUT_ROOT $OUTPUT_DIR/HVtuning.root
29 set_variable FIT_OPTIONS "RME"
30 set_variable PMT_DEFAULT "%.gain=0.25"
31 set_variable SELECTOR "JDAQTimesliceL0"
32 set_variable TESTTYPE "HV-TUNING-SEA-GAIN-v1"
33 set_variable TESTPRODUCT ""
34 
35 
36 if ( do_usage $* ); then
37  usage "$script <detector file> <input files> [output directory] [json output] [root output] [test type] [test product] [timeslice selector] [default PMT parameter file]"
38 fi
39 
40 case $# in
41  9) set_variable PMT_DEFAULT $9;&
42  8) set_variable SELECTOR $8;&
43  7) set_variable TESTPRODUCT $7;&
44  6) set_variable TESTTYPE $6;&
45  5) set_variable OUTPUT_ROOT $5;&
46  4) set_variable OUTPUT_JSON $4;&
47  3) set_variable OUTPUT_DIR $3;&
50  *) fatal "Wrong number of arguments.";;
51 esac
52 
53 
54 # Define directories
55 set_variable PMT_DIR $OUTPUT_DIR/PMTfiles
56 set_variable K40_DIR $OUTPUT_DIR/caldata
57 set_variable TOT_DIR $OUTPUT_DIR/fitdata
58 set_variable FIG_DIR $OUTPUT_DIR/figures
59 set_variable FAILED_FIG_DIR $FIG_DIR/failed
60 set_variable EXTRAP_FIG_DIR $FIG_DIR/extrapolations
61 
62 # Create directories
63 OUTPUT_DIRS=( $PMT_DIR $K40_DIR $TOT_DIR $FIG_DIR $FAILED_FIG_DIR $EXTRAP_FIG_DIR)
64 for DIR in $OUTPUT_DIRS; do
65  if [[ ! -d ${DIR} ]]; then
66  echo "Creating output directory: ${DIR}"
67  mkdir -p ${DIR}
68  fi
69 done
70 
71 # Fit gain-values
72 HVTUNING_INPUT=""
73 FILEPATHS=($(echo $INPUT_FILES))
74 for FILEPATH in "${FILEPATHS[@]}"; do
75 
76  set_variable FILENAME ${FILEPATH##*/}
77  set_variable PREFIX ${FILENAME%.*}
78  set_variable DETID ${${PREFIX#*_}%_*}
79  set_variable RUNID ${PREFIX##*_}
80  if [ -z $PREFIX ] || [ -z $DETID ] || [ -z $RUNID ]; then
81  echo "WARNING: $FILEPATH does not contain correct prefix (i.e. KM3NeT_{DETID}_{RUNID}); skip."
82  continue;
83  fi
84 
85  set_variable OUTPUT_PMT $PMT_DIR/${PREFIX}_PMT.txt
86  set_variable OUTPUT_CALTOT $K40_DIR/${PREFIX}_calToT.root
87  set_variable OUTPUT_FITTOT $TOT_DIR/${PREFIX}_fitToT.root
88 
89  if ( ! reuse_file $OUTPUT_PMT ); then
90 
91  echo "Removing ${OUTPUT_PMT}"
92  rm $OUTPUT_PMT
93 
94  if [ ! -z $PMT_DEFAULT ]; then
95  if [ -f $PMT_DEFAULT ]; then
96  cp $PMT_DEFAULT $OUTPUT_PMT
97  else
98  echo $PMT_DEFAULT > $OUTPUT_PMT
99  fi
100  fi
101  fi
102 
103  if (( 1 )); then
104 
105  JCalibrateToT \
106  -a ${DETECTOR_FILE} \
107  -f ${FILEPATH} \
108  -C ${SELECTOR} \
109  -o ${OUTPUT_CALTOT} --!
110 
111  fi
112 
113 
114  if (( 1 )); then
115 
116  JFitToT \
117  -w \
118  -a ${DETECTOR_FILE} \
119  -f ${OUTPUT_CALTOT} \
120  -o ${OUTPUT_FITTOT} \
121  -P ${OUTPUT_PMT} \
122  -x ${FIT_RANGE} \
123  -O "${FIT_OPTIONS}" \
124  -d ${DEBUG} --!
125  fi
126 
127  HVTUNING_INPUT+="$RUNID $OUTPUT_FITTOT "
128 done
129 
130 
131 # Fit high-voltage values
132 if (( 1 )); then
133 
134  set_variable OUTPUT_LOG "${OUTPUT_DIR}/${OUTPUT_JSON%.*}.log"
135 
136  JTuneHV \
137  -f ${HVTUNING_INPUT} \
138  -O "${OUTPUT_DIR}/${OUTPUT_JSON}" \
139  -o "${OUTPUT_DIR}/${OUTPUT_ROOT}" \
140  -D ${DETID} \
141  -T "${TESTTYPE}" \
142  -P "${TESTPRODUCT}" \
143  -d ${DEBUG} --! 2>&1 | tee ${OUTPUT_LOG}
144 fi
145 
146 
147 # Summarize warnings
148 if (( 1 )); then
149  echo "Summarizing output..."
150 
151  set_variable OUTPUT_LOG "${OUTPUT_DIR}/${OUTPUT_JSON%.*}.log"
152  set_variable SUMMARY_LOG "${OUTPUT_DIR}/${OUTPUT_JSON%.*}_summary.log"
153 
154  if ( ! reuse_file $SUMMARY_LOG ); then
155 
156  if [ -f $SUMMARY_LOG ]; then
157  rm $SUMMARY_LOG
158  fi
159 
160  set_variable N_TOTAL $(grep -c "HAMA" ${OUTPUT_LOG})
161  set_variable N_FAILED $(grep -c "Setting closest values\!" ${OUTPUT_LOG})
162  set_variable N_SUCCESS $(( N_TOTAL - N_FAILED ))
163 
164  echo "##### Summary log-file #####" >> ${SUMMARY_LOG}
165  echo "### Statistics ###" >> ${SUMMARY_LOG}
166  echo "Number of evaluated PMTs: ${N_TOTAL}" >> ${SUMMARY_LOG}
167  echo "Number of failed evaluations: ${N_FAILED}" >> ${SUMMARY_LOG}
168  echo "Number of successful evaluations: ${N_SUCCESS}\n" >> ${SUMMARY_LOG}
169 
170  set_variable FAILED ""
171  set_variable FAILED_EXTRAP ""
172  set_variable SUCCESS_EXTRAP ""
173 
174  FAILED_SERIAL=()
175  FAILED_LOCATION=()
176  EXTRAP_SERIAL=()
177  EXTRAP_LOCATION=()
178 
179  while read LINE; do
180  if [[ $LINE =~ "WARNING" ]]; then
181  if [[ $LINE =~ "Setting closest values\!" ]]; then
182  FAILED+="$PREVIOUS\n"
183  FAILED_SERIAL+=("${${PREVIOUS##*a.k.a. }% /*}")
184  FAILED_LOCATION+=("${${PREVIOUS##*/ }%)*}")
185  elif [[ $LINE =~ "Extrapolation failed" ]]; then
186  FAILED_EXTRAP+="${PREVIOUS}\n"
187  EXTRAP_SERIAL+=("${${PREVIOUS##*a.k.a. }% /*}")
188  EXTRAP_LOCATION+=("${${PREVIOUS##*/ }%)*}")
189  elif [[ $LINE =~ "Extrapolation successful" ]]; then
190  read NEXT
191  SUCCESS_EXTRAP+="${PREVIOUS} (HV,G) = (${NEXT})\n"
192  EXTRAP_SERIAL+=("${${PREVIOUS##*a.k.a. }% /*}")
193  EXTRAP_LOCATION+=("${${PREVIOUS##*/ }%)*}")
194  fi
195  fi
196 
197  set_variable PREVIOUS ${LINE}
198  done < $OUTPUT_LOG
199 
200  echo "### List of failed evaluations ###" >> ${SUMMARY_LOG}
201  echo "${FAILED}\n" >> ${SUMMARY_LOG}
202  echo "### List of failed extrapolations ###" >> ${SUMMARY_LOG}
203  echo "${FAILED_EXTRAP}\n" >> ${SUMMARY_LOG}
204  echo "### List of successful extrapolations ###" >> ${SUMMARY_LOG}
205  echo "${SUCCESS_EXTRAP}\n" >> ${SUMMARY_LOG}
206  fi
207 
208  # Plot (log10|HV|, log10(G))-diagrams for failed evaluations
209  if (( 1 )); then
210  for INDEX in `seq 1 "${#FAILED_SERIAL[@]}"`; do
211 
212  set_variable SERIALID ${FAILED_SERIAL[$INDEX]}
213  set_variable LOCATION ${FAILED_LOCATION[$INDEX]}
214 
215  JPlot1D \
216  -f "${OUTPUT_DIR}/${OUTPUT_ROOT}:${SERIALID}" \
217  -o "${FAILED_FIG_DIR}/HVxG_${SERIALID}.png" \
218  -x "2.85 3.18" \
219  -y "-1.0 +0.3" \
220  -\> "Log_{10}(|HV| / 1V)" \
221  -\^ "Log_{10}(G)" \
222  -T "${SERIALID} / ${LOCATION}" \
223  -B -d ${DEBUG} --!
224  done
225 
226  for INDEX in `seq 1 "${#EXTRAP_SERIAL[@]}"`; do
227 
228  set_variable SERIALID ${EXTRAP_SERIAL[$INDEX]}
229  set_variable LOCATION ${EXTRAP_LOCATION[$INDEX]}
230 
231  JPlot1D \
232  -f "${OUTPUT_DIR}/${OUTPUT_ROOT}:${SERIALID}" \
233  -o "${EXTRAP_FIG_DIR}/HVxG_${SERIALID}.png" \
234  -x "2.85 3.18" \
235  -y "-1.0 +0.3" \
236  -\> "Log_{10}(|HV| / 1V)" \
237  -\^ "Log_{10}(G)" \
238  -T "${SERIALID} / ${LOCATION}" \
239  -B -d ${DEBUG} --!
240  done
241  fi
242 fi
243 
244 
245 
246 # Create transfer file
247 if (( 0 )); then
248 
249  echo "Creating transfer file..."
250  set_variable OUTPUT_TRANSFER "${OUTPUT_DIR}/${OUTPUT_JSON%.*}.transfer"
251 
252  if ( ! reuse_file $OUTPUT_TRANSFER ); then
253 
254  if [ -f $OUTPUT_TRANSFER ]; then
255  rm $OUTPUT_TRANSFER
256  fi
257 
258  set_variable CONTENT_STRING "Content-Disposition: form-data; name="
259  set_variable SEPARATOR "--BLOBLO123"
260 
261  echo "Username:"
262  read USRNAME
263 
264  echo "Password:"
265  read PASSWRD
266 
267  echo "${SEPARATOR}\n${CONTENT_STRING}\"usr\"\n\n${USRNAME}" >> $OUTPUT_TRANSFER
268  echo "${SEPARATOR}\n${CONTENT_STRING}\"pwd\"\n\n${PASSWRD}" >> $OUTPUT_TRANSFER
269  echo "${SEPARATOR}\n${CONTENT_STRING}\"mode\"\n\nsrv" >> $OUTPUT_TRANSFER
270  echo "${SEPARATOR}\n${CONTENT_STRING}\"jsonfile\"; filename=\"data.json\"\n" >> $OUTPUT_TRANSFER
271 
272  cat "${OUTPUT_DIR}/${OUTPUT_JSON}" >> $OUTPUT_TRANSFER
273  echo "\n${SEPARATOR}" >> $OUTPUT_TRANSFER
274 
275  unix2dos $OUTPUT_TRANSFER
276  fi
277 fi
278 
279 
280 
281 
data_type w[N+1][M+1]
Definition: JPolint.hh:708
do echo Generating $dir eval D
Definition: JDrawLED.sh:50
void set_variable(const std::string &name, const std::string &value)
Set environment variable.
bool read(Vec &v, std::istream &is)
Read a Vec(tor) from a stream.
Definition: io_ascii.hh:139
then usage for INPUT_FILE in $INPUT_FILES[*]
then JPlot1D f $WORKDIR postfit[prefit\] root
esac print_variable DETECTOR INPUT_FILE OUTPUT_FILE CDF for TYPE in
Definition: JSirene.sh:45
exit
Definition: JPizza.sh:36
fi set_variable OUTPUT_PMT $PMT_DIR
Definition: JTuneHV.sh:85
do echo Generating $dir eval DIR
Definition: JPlotNPE1D.sh:52
fi JEventTimesliceWriter a
is
Definition: JDAQCHSM.chsm:167
DETECTOR_FILE
Definition: JHistHDE.sh:15
*fatal Wrong number of arguments esac if[!-d ${OUTPUT_DIR}]
then JPizza f
Definition: JPizza.sh:46
then echo Variable JPP_DIR undefined exit fi source $JPP_DIR setenv sh $JPP_DIR set_variable DEBUG set_variable NPE set_variable FIT_RANGE set_variable OUTPUT_DIR tmp set_variable OUTPUT_JSON $OUTPUT_DIR HVtuning json set_variable OUTPUT_ROOT $OUTPUT_DIR HVtuning root set_variable FIT_OPTIONS RME set_variable PMT_DEFAULT gain
Definition: JTuneHV.sh:30
then echo
then usage $script(input file)+" fi if (( $ fatal "Invalid number of arguments." fi JCookie.sh set_array INPUT_FILES $argv[1
do montage tile geometry tmp
do set_variable OUTPUT_DIRECTORY $WORKDIR T
then print_variable DETECTOR INPUT_FILE INTERMEDIATE_FILE check_input_file $DETECTOR $INPUT_FILE check_output_file $INTERMEDIATE_FILE $OUTPUT_FILE JMCEvt f $INPUT_FILE o $INTERMEDIATE_FILE d
Definition: JPath.sh:52
then usage $script[input file[working directory[option]]] nWhere option can be LINE
Definition: JMuonPostfit.sh:37
&set_variable SELECTOR
* usage
then fatal Not enough arguments fi set_variable DETECTOR $argv[1] INPUT_FILES
JDAQPMTIdentifier PMT
Command line options.
nlohmann::json json
static const double C
Speed of light in vacuum [m/ns].
Definition: JConstants.hh:22
version
Definition: JCalibratePMT.sh:7
then $DIR JPlotNPE PDG P
Definition: JPlotNPE-PDG.sh:60
esac done
Definition: JAddHDE.sh:21
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
&set_variable OUTPUT_DIR