Jpp  15.0.2
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JEvtReweightMupageParameterScan.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 to evaluate MUPAGE reweightings
11 #
12 # ------------------------------------------------------------------------------------------
13 
14 
15 if [ -z $JPP_DIR ]; then
16  echo "Variable JPP_DIR undefined."
17  exit
18 fi
19 
20 source $JPP_DIR/setenv.sh $JPP_DIR
21 
23 set_variable IFS $'\n'
24 
25 set_variable: DEBUG REWEIGHT_MUPAGE_DEBUG 2
26 
27 set_variable+ BATCH_PROCESSING REWEIGHT_MUPAGE_BATCH_PROCESSING 1
28 set_variable+ BATCH_LOGGING REWEIGHT_MUPAGE_BATCH_LOGGING 1
29 set_variable: QUEUE_SIZE REWEIGHT_MUPAGE_QUEUE_SIZE 3
30 set_variable: QUEUE_NAME REWEIGHT_MUPAGE_QUEUE_NAME /tmp/queue
31 set_variable: JOB_SIZE REWEIGHT_MUPAGE_JOB_SIZE 1
32 
33 set_variable: TEST_TYPE1D REWEIGHT_MUPAGE_TEST_TYPE1D 0
34 set_variable: TEST_TYPE1D_PARAMETERS REWEIGHT_MUPAGE_TEST_TYPE1D_PARAMETERS 0.05
35 set_variable: TEST_TYPE2D REWEIGHT_MUPAGE_TEST_TYPE2D 2
36 set_variable: TEST_TYPE2D_PARAMETERS REWEIGHT_MUPAGE_TEST_TYPE2D_PARAMETERS 0.05
37 
38 set_variable: SCRATCHDIR REWEIGHT_MUPAGE_SCRATCHDIR /tmp
39 
40 set_variable: N_TRIGGERED_HITS_RANGE REWEIGHT_MUPAGE_N_TRIGGERED_HITS_RANGE "20 $((2**31))"
41 set_variable: COSTH_RANGE REWEIGHT_MUPAGE_COSTH_RANGE "-1.0 1.0"
42 set_variable: ENERGY_RANGE REWEIGHT_MUPAGE_ENERGY_RANGE "0.0 $((2.0**31))"
43 
46 set_array PARAMETERS "1.0"
47 
48 if do_usage $*; then
49  usage "$script <detector file> <input file>+ [working directory [reweighting formula [parameter setting]+]]"
50 fi
51 
52 case $# in
53  5) set_array PARAMETERS $5;&
59 
60  while [[ ! -d ${argv[${INDEX_WORKDIR}]} ]]; do
62  done
63 
64  set_variable DETX_FILE ${argv[1]}
65  set_array INPUT_FILES ${argv[2, $(( INDEX_WORKDIR - 1 )) ]}
66  set_variable WORKDIR ${argv[ $(( INDEX_WORKDIR )) ]}
67  set_variable FORMULA ${argv[ $(( INDEX_WORKDIR + 1 )) ]}
68  set_array PARAMETERS ${argv[ $(( INDEX_WORKDIR + 2 )), -1]}
69 esac
70 
71 
72 # Determine number of parameters in given formula
73 
74 set_variable N_PAR $(echo -n ${FORMULA} | grep -oP "(^|[^x])\[[0-9]*\]" | cut -d'[' -f2- | sort -u | wc -l)
75 set_variable N_PARSETS $(( ${#PARAMETERS} / N_PAR ))
76 
77 # Check input
78 
79 if (( ${#PARAMETERS} % N_PAR != 0 )); then
80  fatal "Number of input parameters (= ${#PARAMETERS}) is incompatible with given formula: ${FORMULA}"
81 fi
82 
83 set_array MC_MERGE_FILES $(find ${WORKDIR} -maxdepth 1 -name "*.merge.root")
84 
85 if (( ${#MC_MERGE_FILES} != 0 )); then
86 
87  echo "----------------------------"
88  printf '%s\n' ${MC_MERGE_FILES[@]}
89  echo "----------------------------"
90 
91  echo "Remove the above regular files? (y/n)"
92 
93  read REUSE_MC_MERGE_FILES
94 
95  if [[ ${REUSE_MC_MERGE_FILES} == "y" || ${REUSE_MC_MERGE_FILES} == "Y" ||
96  ${REUSE_MC_MERGE_FILES} == "yes" || ${REUSE_MC_MERGE_FILES} == "Yes" || ${REUSE_MC_MERGE_FILES} == "YES" ]]; then
97 
99  fi
100 fi
101 
102 
103 # Initialise local batch processor
104 
105 if [[ ${BATCH_PROCESSING} == 1 ]]; then
106 
107  if ( is_CCNikhef ); then
108 
109  echo "Submitting reweighting and histogram comparison jobs to nikhef-stbc batch queue: ${QUEUE_NAME}..."
110 
111  if [[ ${SCRATCHDIR} == "/tmp" ]]; then
112  fatal "Please specify a valid directory for local \'scratch\' files other than \"/tmp\""
113  fi
114 
115  elif ( is_CCLyon ); then
116 
117  fatal "No batch-processing option available yet for CC-Lyon."
118 
119  else
120 
121  echo "Submitting reweighting and histogram comparison jobs to local batch queue: ${QUEUE_NAME}..."
122 
123  source qlib.sh
124 
125  $JPP_DIR/examples/scripts/mkqueue.sh ${QUEUE_NAME} ${QUEUE_SIZE} "start"
126  fi
127 fi
128 
129 
130 # Divide into DAQ- and MC-files
131 
132 echo "Dividing into DAQ- and MC-files..."
133 
134 for INPUT_FILE in ${INPUT_FILES[@]}; do
135 
136  if [[ "$(JPrintHeader -f ${INPUT_FILE} -k simul --)" != " 0" ]]; then # MC-file
138  else # DAQ-file
139  set_array INPUT_DAQ_FILES ${INPUT_DAQ_FILES[@]} ${INPUT_FILE}
140  fi
141 done
142 
143 
144 # Process DAQ-files
145 
146 set_variable DAQ_POSTFIT_FILE ${WORKDIR}/DAQ.postfit.root
147 
148 if ( ! reuse_file ${DAQ_POSTFIT_FILE} ); then
149 
150  # Create histograms
151 
153 
154  JAAMuonPostfit \
155  -f "${INPUT_DAQ_FILES[*]}" \
156  -o ${DAQ_POSTFIT_FILE} \
157  -a ${DETX_FILE} \
158  -@energyRange="${ENERGY_RANGE}" \
159  -@coszenithRange="${COSTH_RANGE}" \
160  -@triggeredHitsRange="${N_TRIGGERED_HITS_RANGE}" \
161  -W 2 \
162  -d ${DEBUG} --!
163 
164  timer_stop
165  timer_print
166 fi
167 
168 
169 # Create histogram comparison ASCII steering file
170 
171 set_array NAMES ${(f)$(JPrintName -f ${DAQ_POSTFIT_FILE}:.)}
172 
173 set_variable STEERING_FILE ${WORKDIR}/steeringfile.txt
174 
175 rm -f ${STEERING_FILE}
176 
177 unset HISTOGRAMS1D
178 unset HISTOGRAMS2D
179 
180 for NAME in ${NAMES[@]}; do
181 
182  set_variable BINFRAC $(JPrintResult \
183  -f ${DAQ_POSTFIT_FILE}:^${NAME}\$ \
184  -F "GetNcells / ((GetNbinsX+2)*(GetNbinsY+2))" \
185  -O "%f" --)
186 
187  if [[ ${NAME} != "META" && ${NAME} != "TObject" ]]; then
188 
189  if (( BINFRAC > 1.0 )); then
190  warning "Cannot perform comparison test for histogram ${NAME} with >2 dimensions; skip."
191  elif (( BINFRAC < 1.0 )); then
192  echo "${NAME}\$ ${TEST_TYPE1D} ${TEST_TYPE1D_PARAMETERS}" >> ${STEERING_FILE}
193  set_array HISTOGRAMS1D ${HISTOGRAMS1D[@]} ${NAME}
194  else
195  echo "${NAME}\$ ${TEST_TYPE2D} ${TEST_TYPE2D_PARAMETERS}" >> ${STEERING_FILE}
196  set_array HISTOGRAMS2D ${HISTOGRAMS2D[@]} ${NAME}
197  fi
198  fi
199 done
200 
201 
202 # Merge MC-files
203 
204 set_array MC_MERGE_FILES $(find ${WORKDIR} -maxdepth 1 -name "*.merge.root")
205 set_variable MC_MERGE_FILE ${WORKDIR}/\%.merge.root
206 
207 if [[ ${#MC_MERGE_FILES} == 0 ]]; then
208 
209  JMergeEvt \
210  -f "${INPUT_MC_FILES[*]}" \
211  -o ${MC_MERGE_FILE} \
212  -d ${DEBUG} --!
213 fi
214 
215 set_array MC_MERGE_FILES $(find ${WORKDIR} -maxdepth 1 -name "*.merge.root")
216 
217 
218 # Process MC-files with standard weights
219 
220 unset STANDARD_OUTPUT
221 
222 for MC_MERGE_FILE in ${MC_MERGE_FILES[@]}; do
223 
224  echo "Submitting histogram comparison job for ${MC_MERGE_FILE:t}"
225 
226  set_variable EXEC_FILE ${SCRATCHDIR}/${MC_MERGE_FILE:t:r}.sh
227 
228  cat >> ${EXEC_FILE} <<EOF
229 #!/bin/zsh
230 
232 
233 JAAMuonPostfit \\
234  -f ${MC_MERGE_FILE} \\
235  -o ${MC_MERGE_FILE:r}.postfit.root \\
236  -a ${DETX_FILE} \\
237  -@energyRange="${ENERGY_RANGE}" \\
238  -@coszenithRange="${COSTH_RANGE}" \\
239  -@triggeredHitsRange="${N_TRIGGERED_HITS_RANGE}" \\
240  -W 2 \\
241  -d ${DEBUG} --! ${BATCH_LOGGING:+&> ${MC_MERGE_FILE:r}.postfit.log}
242 
243 timer_stop
244 timer_print ${BATCH_LOGGING:+&>> ${MC_MERGE_FILE:r}.postfit.log}
245 
247 
248 JZebraMantis \\
249  -a ${DAQ_POSTFIT_FILE} \\
250  -b ${MC_MERGE_FILE:r}.postfit.root \\
251  -s ${STEERING_FILE} \\
252  -o ${MC_MERGE_FILE:r}.postfit.comparison.root \\
253  -t ${MC_MERGE_FILE:r}.postfit.comparison.txt \\
254  -d ${DEBUG} --! ${BATCH_LOGGING:++&> ${MC_MERGE_FILE:r}.postfit.comparison.log}
255 
256 timer_stop
257 timer_print ${BATCH_LOGGING:+&>> ${MC_MERGE_FILE:r}.postfit.comparison.log}
258 
259 rm -f ${EXEC_FILE}
260 EOF
261 
262  chmod +x ${EXEC_FILE}
263 
264  if [[ ${BATCH_PROCESSING} == 1 ]]; then
265 
266  if ( is_CCNikhef ); then
267 
268  qsub \
269  -N ${EXEC_FILE:t:r}.${USER} \
270  -q ${QUEUE_NAME} \
271  -o ${SCRATCHDIR} \
272  -e ${SCRATCHDIR} \
273  -j oe \
274  ${EXEC_FILE}
275  else
276 
277  puts_queue ${QUEUE_NAME} ${EXEC_FILE}
278  fi
279 
280  else
281 
282  zsh ${EXEC_FILE}
283  fi
284 
285  set_array STANDARD_OUTPUT ${MC_MERGE_FILE:r}.postfit.comparison.root
286 done
287 
288 
289 # Process MC-files with redefined weights
290 
291 unset REWEIGHTED_OUTPUT
292 typeset -A REWEIGHTED_OUTPUT
293 
294 for MC_MERGE_FILE in ${MC_MERGE_FILES[@]}; do
295 
296  if [[ -f ${MC_MERGE_FILE:r}.reweighting.comparison.meta.txt ]]; then
297  rm -i ${MC_MERGE_FILE:r}.reweighting.comparison.meta.txt
298  fi
299 
300  for (( i = 1; i <= ${N_PARSETS}; ++i )); do
301 
302  unset PARSET
303 
304  for (( j = 0; j < N_PAR; ++j )); do
305  PARSET+=" p${j}=${PARAMETERS[$(((i-1)*N_PAR + j + 1))]};"
306  done
307 
308  set_variable OUTPUT_FILE ${MC_MERGE_FILE:r}.reweighting.${i}.root
309 
310  if (( i % JOB_SIZE == 1 )); then
311 
312  if (( i + JOB_SIZE - 1 <= N_PARSETS )); then
313  set_variable EXEC_FILE ${SCRATCHDIR}/${MC_MERGE_FILE:t:r}.reweighting.${i}.$((i+JOB_SIZE-1)).sh
314  else
315  set_variable EXEC_FILE ${SCRATCHDIR}/${MC_MERGE_FILE:t:r}.reweighting.${i}.${N_PARSETS}.sh
316  fi
317 
318  set_variable START_JOB 1
319  unset SUBMIT_JOB
320 
321  elif (( i % JOB_SIZE == 0 || i == N_PARSETS )); then
322 
323  set_array JOBRANGE ${${(s/./)EXEC_FILE}[-3,-2]}
324 
325  echo "Submitting reweighting jobs ${JOBRANGE[1]} to ${JOBRANGE[2]} for ${MC_MERGE_FILE:t}"
326 
327  unset START_JOB
328  set_variable SUBMIT_JOB 1
329 
330  else
331 
332  unset START_JOB
333  unset SUBMIT_JOB
334  fi
335 
336  cat >> ${EXEC_FILE} <<EOF
337 ${START_JOB:+#!/bin/zsh}
338 
340 
341 JEvtReweightMupage \\
342  -f ${MC_MERGE_FILE} \\
343  -o ${OUTPUT_FILE} \\
344  -F "${FORMULA}" \\
345  -@ "${PARSET}" \\
346  -d ${DEBUG} --! ${BATCH_LOGGING:+&> ${OUTPUT_FILE:r}.log 2>&1}
347 
348 timer_stop
349 timer_print ${BATCH_LOGGING:+&>> ${OUTPUT_FILE:r}.log 2>&1}
350 
352 
353 JAAMuonPostfit \\
354  -f ${OUTPUT_FILE} \\
355  -o ${OUTPUT_FILE:r}.postfit.root \\
356  -a ${DETX_FILE} \\
357  -@energyRange="${ENERGY_RANGE}" \\
358  -@coszenithRange="${COSTH_RANGE}" \\
359  -@triggeredHitsRange="${N_TRIGGERED_HITS_RANGE}" \\
360  -W 4 \\
361  -d ${DEBUG} --! ${BATCH_LOGGING:+&> ${OUTPUT_FILE:r}.postfit.log}
362 
363 timer_stop
364 timer_print ${BATCH_LOGGING:+&>> ${OUTPUT_FILE:r}.postfit.log 2>&1}
365 
367 
368 JZebraMantis \\
369  -a ${DAQ_POSTFIT_FILE} \\
370  -b ${OUTPUT_FILE:r}.postfit.root \\
371  -s ${STEERING_FILE} \\
372  -o ${OUTPUT_FILE:r}.postfit.comparison.root \\
373  -t ${OUTPUT_FILE:r}.postfit.comparison.txt \\
374  -d ${DEBUG} --! ${BATCH_LOGGING:+&> ${OUTPUT_FILE:r}.postfit.comparison.log}
375 
376 echo "${OUTPUT_FILE:r}.postfit.comparison.txt; ${FORMULA}; ${PARSET}" >> ${WORKDIR}/comparisonResults.meta.txt
377 
378 timer_stop
379 timer_print ${BATCH_LOGGING:+&>> ${OUTPUT_FILE:r}.postfit.comparison.log 2>&1}
380 
381 ${SUBMIT_JOB:+rm -f ${EXEC_FILE}}
382 EOF
383 
384  if (( ${+SUBMIT_JOB} )); then
385 
386  if [[ ${BATCH_PROCESSING} == 1 ]]; then
387 
388  chmod +x ${EXEC_FILE}
389 
390  if ( is_CCNikhef ); then
391 
392  qsub \
393  -N ${EXEC_FILE:t:r}.${USER} \
394  -q ${QUEUE_NAME} \
395  -o ${SCRATCHDIR} \
396  -e ${SCRATCHDIR} \
397  -j oe \
398  ${EXEC_FILE}
399  else
400 
401  puts_queue ${QUEUE_NAME} ${EXEC_FILE}
402  fi
403 
404  else
405 
406  zsh ${EXEC_FILE}
407  fi
408  fi
409  done
410 done
411 
412 
413 set_variable IFS ${IFS0}
414 
415 
then set_array JOBRANGE
then fatal Please specify a valid directory for local scratch files other than tmp fi elif(is_CCLyon)
std::istream & read(std::istream &in, JTestSummary &summary, const char delimiter= ' ')
Read test summary.
then JMuonPostfit f
then usage $script< detector file >< inputfile > nUtility script to create PDF and CDF of transition time distribution fi case set_variable WORKDIR
Definition: JLegolas.sh:31
set_variable INPUT_FILE
then echo Submitting reweighting and histogram comparison jobs to nikhef stbc batch queue
then echo Enter input within $TIMEOUT_S seconds echo n User name
Definition: JCookie.sh:42
then JShowerPostfit f $INPUT_FILE o $OUTPUT_FILE N
exit
Definition: JPizza.sh:36
data_type r[M+1]
Definition: JPolint.hh:742
*set_variable INDEX_WORKDIR
next weights
Definition: JConvertDusj.sh:45
set_variable DETX_FILE
function puts_queue()
Definition: qlib.sh:34
then echo
const int n
Definition: JPolint.hh:660
then timer_start(JRandomTimesliceWriter-a ${DETECTOR}-o ${PIPE}-n ${NUMBER_OF_SLICES}-P ${PMT_FILE}-d ${DEBUG}-S ${SEED}-B"$BACKGROUND_HZ"-N"$RECYCLING"--!&&for((i=0;$i!=10;++i));do;echo 'EOF' > $PIPE;usleep 100000;done &&rm-f $PIPE)&JTimesliceReprocessor-a $
then echo Variable JPP_DIR undefined exit fi source $JPP_DIR setenv sh $JPP_DIR &dev null set_variable
Definition: JAcoustics.sh:20
then printf warning
Q DAQ
Definition: JDataQuality.sh:52
do $DIR JTransitTime o
Definition: JTransitTime.sh:44
then awk F
* usage
set_array INPUT_FILES
&set_variable FORMULA
&set_variable OUTPUT_FILE
then JMuonMCEvt f $INPUT_FILE o $INTERMEDIATE_FILE d
Definition: JMuonPath.sh:47
then JCalibrateToT a
Definition: JTuneHV.sh:116
then usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
int j
Definition: JPolint.hh:666
fi set_array MC_MERGE_FILES(find ${WORKDIR}-maxdepth 1-name"*.merge.root") if(($
then set_variable EXEC_FILE
then echo Variable JPP_DIR undefined exit fi source $JPP_DIR setenv sh $JPP_DIR set_variable IFS0
double u[N+1]
Definition: JPolint.hh:739
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY source JAcoustics sh $DETECTOR_ID CHECK_EXIT_CODE typeset A TRIPODS get_tripods $WORKDIR tripod txt TRIPODS for EMITTER in
Definition: JCanberra.sh:41
set_variable NUMBER_OF_ITERATIONS set_variable EPSILON cat acoustics_fit_parameters txt<< EOF $CONFIGURATION[*]Nmin=3;sigma_s=100.0e-6;stdev=10.0;mestimator=0;fixStrings=0;EOF for STRING in $STRINGS[*];do#fit stretching and(z) position of given string set_variable DETECTOR_TMP/tmp/detector_A.datx JEditDetector-a $DETECTOR-o $DETECTOR_TMP-r $STRING JEditDetector-a $DETECTOR-o $DETECTOR-k $STRING for MUL in 0.005 0.001;do DX_M=0.2 for((N=0;$N< $NUMBER_OF_ITERATIONS;++N));do CHI2[3]=$CHI2[1] fitPositionOfString $STRING Z $DX_M fitStretchingOfString $STRING $MUL if(($CHI2[3]-$CHI2[1]< $EPSILON));then break fi done if(($N >=$NUMBER_OF_ITERATIONS));then printf"warning: reached maximum number of iterations %d - converenge %7.3f\n"$N $(($CHI2[3]-$CHI2[1])) fi done JMergeDetector-a $DETECTOR-a $DETECTOR_TMP-o $DETECTOR rm-f $DETECTOR_TMP JConvertDetectorFormat-a $DETECTOR-o $DETECTOR-r-d 0 > &dev null done
then usage $script< detector file >< inputfile > fi case set_array PARAMETERS
version
Definition: JCalibratePMT.sh:7
source $JPP_DIR setenv csh $JPP_DIR eval JShellParser o a A
then set_array INPUT_MC_FILES
then usage $script< string identifier >< detectorfile > event file(toashort file)+" "\nNote that the event files and toashort files should be one-to-one related." fi if (( $