Jpp  master_rocky-40-g5f0272dcd
the software that should make you happy
JEvtReweightParameterScan.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 gSeaGen 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 source $JPP_DIR/software/scripts/qlib.sh
22 
23 
24 set_variable IFS0 ${IFS}
25 
26 set_variable: DEBUG REWEIGHTING_DEBUG 2
27 
28 set_variable+ BATCH_PROCESSING REWEIGHTING_BATCH_PROCESSING 1
29 set_variable+ BATCH_LOGGING REWEIGHTING_BATCH_LOGGING 1
30 set_variable: BATCH_QUEUE_SIZE REWEIGHTING_BATCH_QUEUE_SIZE 3
31 set_variable: BATCH_QUEUE_NAME REWEIGHTING_BATCH_QUEUE_NAME ${TMPDIR:-/tmp}/queue
32 set_variable: BATCH_JOB_SIZE REWEIGHTING_BATCH_JOB_SIZE 1
33 
34 set_variable: TEST_TYPE1D REWEIGHTING_TEST_TYPE1D 0
35 set_variable: TEST_TYPE1D_PARAMETERS REWEIGHTING_TEST_TYPE1D_PARAMETERS "0.05 UWCHI2/NDF"
36 set_variable: TEST_TYPE2D REWEIGHTING_TEST_TYPE2D 0
37 set_variable: TEST_TYPE2D_PARAMETERS REWEIGHTING_TEST_TYPE2D_PARAMETERS "0.05 UWCHI2/NDF"
38 
39 set_variable: N_TRIGGERED_HITS_RANGE REWEIGHTING_N_TRIGGERED_HITS_RANGE "0 $((2**31))"
40 set_variable: CONTAINMENT_VOLUME REWEIGHTING_CONTAINMENT_VOLUME "0.0 0.0 $((2**31)) -$((2**31)) $((2**31))"
41 set_variable: COSTH_RANGE REWEIGHTING_COSTH_RANGE "-1.0 1.0"
42 set_variable: ENERGY_RANGE REWEIGHTING_ENERGY_RANGE "0.0 $((2.0**31))"
43 
44 set_variable: RECOTYPE REWEIGHTING_RECOTYPE "track"
45 set_variable: LIVETIME REWEIGHTING_LIVETIME $(( 5 * 365.25 * 24. * 3600. )) # Default livetime of 5 years
46 
47 set_variable: POSTFIT_APP REWEIGHTING_POSTFIT_APP JAAPostfit
48 
49 set_variable DEFAULT_OSCPARAMETERS_FILE ${JPP_DATA}/oscillation_parameters_NO.txt
50 set_variable OSCPARAMETERS_GRID_FILE ""
51 set_variable WORKDIR ${TMPDIR:-/tmp}
52 
53 
54 if do_usage $*; then
55  usage "$script <detector file> <input file>+ <weight factor file list> [default oscillation parameter file [oscillation parameter grid file [working directory]]]\n" \
56  "Note that if more than one input file is given all optional parameters need to be specified."
57 fi
58 
59 case $# in
60  7) set_variable WORKDIR $7;&
61  6) set_variable OSCPARAMETERS_GRID_FILE $6;&
62  5) set_variable DEFAULT_OSCPARAMETERS_FILE $5;&
63  4) set_variable OSCPROBTABLE $4;
64  set_variable WEIGHT_FACTOR_FILELIST $3;
65  set_array INPUT_FILES $2;
66  set_variable DETX_FILE $1;;
67  *) set_variable DETX_FILE ${argv[1]}
68  set_array INPUT_FILES ${argv[2,-6]}
69  set_variable REWEIGHTING_INPUTS_FILE ${argv[-5]}
70  set_variable OSCPROBTABLE ${argv[-4]}
71  set_variable DEFAULT_OSCPARAMETERS_FILE ${argv[-3]}
72  set_variable OSCPARAMETERS_GRID_FILE ${argv[-2]}
73  set_variable WORKDIR ${argv[-1]}
74 esac
75 
76 
77 # Function to write job identifier to file
78 #
79 # \param output_file output file
80 #
81 write_jobID() {
82 
83  local output_file=$1
84 
85  if (( ${+BATCH_PROCESSING} )); then
86 
87  if [[ -z $EXEC_FILE ]]; then fatal "write_jobID(): Variable EXEC_FILE undefined"; fi
88 
89  if ( is_CCNikhef ); then
90  local jobid=$(qstat -u $USER -f | grep -B1 "${EXEC_FILE:t:r}.${USER}" | grep -oP "Job Id: [0-9]+" | tail -1 | cut -d' ' -f3)
91  else
92  local jobid=$(ps | grep "${EXEC_FILE:t:r}" | tail -1 | tr -s ' ' | cut -d' ' -f2)
93  fi
94 
95  echo ${jobid} >> ${output_file}
96  fi
97 }
98 
99 
100 # Set neutrino labels
101 
102 typeset -A NULABELS
103 set_array NULABELS \
104  -16 "anutau" \
105  -14 "anumu" \
106  -12 "anue" \
107  12 "nue" \
108  14 "numu" \
109  16 "nutau"
110 
111 
112 # Initialise local batch processor
113 
114 if [[ ${BATCH_PROCESSING} == 1 ]]; then
115 
116  if ( is_CCNikhef ); then
117 
118  notice "Submitting reweighting and histogram comparison jobs to nikhef-stbc batch queue: ${BATCH_QUEUE_NAME}..."
119 
120  if [[ ${WORKDIR} == "/tmp" ]]; then
121  fatal "Please specify a valid directory for local \'scratch\' files other than \"${TMPDIR:-/tmp}\""
122  fi
123 
124  elif ( is_CCLyon ); then
125 
126  fatal "No batch-processing option available yet for CC-Lyon."
127 
128  else
129 
130  notice "Submitting reweighting and histogram comparison jobs to local batch queue: ${BATCH_QUEUE_NAME}..."
131 
132  $JPP_DIR/examples/scripts/mkqueue.sh ${BATCH_QUEUE_NAME} ${BATCH_QUEUE_SIZE} "start"
133  fi
134 fi
135 
136 
137 # Initialize job ID file
138 
139 set_variable JOBID_FILE ${WORKDIR}/reweighting.jobIDs.txt
140 rm -f $JOBID_FILE
141 touch $JOBID_FILE
142 
143 
144 # Compile oscillation parameters files
145 
146 if [[ -s $OSCPARAMETERS_GRID_FILE ]]; then
147 
148  $JPP_DIR/examples/JOscProb/JWriteOscParametersGrid \
149  -@ ${OSCPARAMETERS_GRID_FILE} \
150  -o ${WORKDIR}/oscillation_parameters.\%.txt \
151  -w '%' \
152  -d ${DEBUG} --!
153 
154  CHECK_EXIT_CODE
155 fi
156 
157 set_variable OSCPARAMETERS_FILE_LIST ${WORKDIR}/oscillation_parameters.files
158 
159 echo ${DEFAULT_OSCPARAMETERS_FILE} > ${OSCPARAMETERS_FILE_LIST}
160 ls ${WORKDIR}/oscillation_parameters.*.txt >> ${OSCPARAMETERS_FILE_LIST}
161 
162 
163 # Retrieve MC files
164 
165 set_array MC_MERGE_FILES $(find ${WORKDIR} -maxdepth 1 -name "*merge.root")
166 
167 if (( ${#MC_MERGE_FILES} != 0 )); then
168 
169  echo "----------------------------"
170  printf '%s\n' ${MC_MERGE_FILES[@]}
171  echo "----------------------------"
172 
173  echo "Remove the above regular files? (y/n)"
174 
175  read REMOVE_MC_MERGE_FILES
176 
177  if [[ ${REMOVE_MC_MERGE_FILES} == "y" || ${REMOVE_MC_MERGE_FILES} == "Y" ||
178  ${REMOVE_MC_MERGE_FILES} == "yes" || ${REMOVE_MC_MERGE_FILES} == "Yes" || ${REMOVE_MC_MERGE_FILES} == "YES" ]]; then
179  rm -f ${MC_MERGE_FILES[@]}
180  fi
181 fi
182 
183 
184 # Divide into DAQ- and MC-files
185 
186 notice "Dividing into DAQ- and MC-files..."
187 
188 set_variable INPUT_MC_FILELIST ${WORKDIR}/MC.files
189 set_variable INPUT_DAQ_FILELIST ${WORKDIR}/DAQ.files
190 
191 rm -f ${INPUT_MC_FILELIST} ${INPUT_DAQ_FILELIST}
192 touch ${INPUT_MC_FILELIST} ${INPUT_DAQ_FILELIST}
193 
194 for INPUT_FILE in ${INPUT_FILES[@]}; do
195 
196  if [[ "$(JPrintHeader -f ${INPUT_FILE} -k simul --)" != " 0" ]]; then # MC-file
197  set_variable OUTPUT_FILE ${INPUT_MC_FILELIST}
198  else # DAQ-files
199  set_variable OUTPUT_FILE ${INPUT_DAQ_FILELIST}
200  fi
201 
202  if [[ ${INPUT_FILE:e} == "files" ]]; then
203  cat ${INPUT_FILE} >> ${OUTPUT_FILE}
204  else
205  echo ${INPUT_FILE} >> ${OUTPUT_FILE}
206  fi
207 done
208 
209 set_variable N_MC_FILES $(cat $INPUT_MC_FILELIST | wc -l)
210 set_variable N_DAQ_FILES $(cat $INPUT_DAQ_FILELIST | wc -l)
211 
212 if (( $N_MC_FILES == 0 )); then
213  fatal "No MC input files specified!"
214 fi
215 
216 
217 # Merge MC-files
218 
219 if (( ${#MC_MERGE_FILES} == 0 )); then
220 
221  timer_start
222 
223  $JPP_DIR/examples/JAAnet/JSortEvt \
224  -f ${INPUT_MC_FILELIST} \
225  -o ${WORKDIR}/\%.merge.root \
226  -d ${DEBUG} --! ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
227 
228  CHECK_EXIT_CODE
229 
230  timer_stop
231  timer_print ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
232 
233  set_array MC_MERGE_FILES $(find ${WORKDIR} -maxdepth 1 -name "*merge.root")
234 fi
235 
236 
237 if (( N_DAQ_FILES > 0 )); then
238 
239  set_array INPUT_REFERENCE_FILES $(cat ${INPUT_DAQ_FILELIST})
240  set_array INPUT_REWEIGHTING_FILES ${MC_MERGE_FILES[@]}
241 else
242 
243  configure_job \
244  ${WORKDIR}/split_events.job\%.sh 1
245 
246  exec 3> ${EXEC_FILE}
247 
248  cat <<EOF >&3
249 #!/bin/zsh
250 
251 source ${JPP_DIR}/setenv.sh ${JPP_DIR} > /dev/null
252 EOF
253 
254  for MC_MERGE_FILE in ${MC_MERGE_FILES[@]}; do
255 
256  set_variable N_EVENTS \
257  $(JPrintTree -f ${MC_MERGE_FILE} -@ "type = Evt" -k number_of_entries)
258  set_variable N1 $(( N_EVENTS / 2 ))
259  set_variable N2 $(( N_EVENTS - N1 ))
260 
261  set_variable INPUT_REFERENCE_FILE ${MC_MERGE_FILE:r}.part1.root
262  set_variable INPUT_REWEIGHTING_FILE ${MC_MERGE_FILE:r}.part2.root
263 
264  cat <<EOF >&3
265 
266 timer_start
267 
268 if [[ ! -f ${INPUT_REFERENCE_FILE} || ! -f ${INPUT_REWEIGHTING_FILE} ]]; then
269 
270  rm -f ${INPUT_REFERENCE_FILE} ${INPUT_REWEIGHTING_FILE}
271 
272  \${JPP_DIR}/examples/JAAnet/JSplitEvt \
273  -f ${MC_MERGE_FILE} \
274  -o "${INPUT_REFERENCE_FILE} ${INPUT_REWEIGHTING_FILE}" \
275  -d ${DEBUG} --!
276 fi
277 
278 timer_stop
279 timer_print ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
280 
281 ${SUBMIT_JOB+rm -f ${EXEC_FILE}}
282 EOF
283 
284  set_array INPUT_REFERENCE_FILES \
285  ${INPUT_REFERENCE_FILES[@]} ${INPUT_REFERENCE_FILE}
286  set_array INPUT_REWEIGHTING_FILES \
287  ${INPUT_REWEIGHTING_FILES[@]} ${INPUT_REWEIGHTING_FILE}
288  done
289 
290  exec 3>&-
291 
292  submit_job \
293  ${EXEC_FILE} ${(z)${BATCH_PROCESSING:+${BATCH_QUEUE_NAME} ${WORKDIR}}}
294 
295  write_jobID ${JOBID_FILE}
296 
297  reset_job_config
298 fi
299 
300 
301 # Process reference files and create histogram comparison steering file
302 
303 set_variable STEERING_FILE ${WORKDIR}/steeringfile.txt
304 set_variable REFERENCE_POSTFIT_FILE ${WORKDIR}/reference.postfit.root
305 set_variable REFERENCE_POSTFIT_FILE_SCALED ${REFERENCE_POSTFIT_FILE:r}.scaled.root
306 
307 if ( ! reuse_file ${REFERENCE_POSTFIT_FILE} ); then
308 
309  rm -f $STEERING_FILE
310  touch $STEERING_FILE
311 
312  set_array PREREQUISITES $(cat $JOBID_FILE)
313 
314  configure_job \
315  ${WORKDIR}/${REFERENCE_POSTFIT_FILE:t:r}.job\%.sh 1
316 
317  exec 3> ${EXEC_FILE}
318 
319  cat <<EOF >&3
320 #!/bin/zsh
321 
322 source ${JPP_DIR}/setenv.sh ${JPP_DIR} > /dev/null
323 
324 timer_start
325 
326 ${POSTFIT_APP} \\
327  -f "${INPUT_REFERENCE_FILES[*]}" \\
328  -o ${REFERENCE_POSTFIT_FILE} \\
329  -a ${DETX_FILE} \\
330  -P ${OSCPROBTABLE} \\
331  -# ${DEFAULT_OSCPARAMETERS_FILE} \\
332  -@ "${(k)NULABELS}; 3;" \\
333  -%energyRange="${ENERGY_RANGE}" \\
334  -%coszenithRange="${COSTH_RANGE}" \\
335  -%containmentVolume="${CONTAINMENT_VOLUME}" \\
336  -%triggeredHitsRange="${N_TRIGGERED_HITS_RANGE}" \\
337  -R ${RECOTYPE} -W \\
338  -d ${DEBUG} --! ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
339 
340 CHECK_EXIT_CODE
341 
342 JScale1D \\
343  -f ${REFERENCE_POSTFIT_FILE}:. \\
344  -o ${REFERENCE_POSTFIT_FILE_SCALED} \\
345  -F ${LIVETIME} \\
346  -d ${DEBUG} --! ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
347 
348 CHECK_EXIT_CODE
349 
350 mv ${REFERENCE_POSTFIT_FILE_SCALED} ${REFERENCE_POSTFIT_FILE}
351 
352 timer_stop
353 timer_print ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
354 
355 set_array NAMES \$(JPrintName -f ${REFERENCE_POSTFIT_FILE}:.)
356 
357 for NAME in \${NAMES[@]}; do
358 
359  set_variable BINFRAC \
360  \$(JPrintResult \
361  -f ${REFERENCE_POSTFIT_FILE}:^\${NAME}\$ \
362  -F "GetNcells / ((GetNbinsX+2)*(GetNbinsY+2))" \
363  -O "%f" --)
364 
365  if [[ \${NAME} != "META" && \${NAME} != "TObject" ]]; then
366 
367  if (( BINFRAC > 1.0 )); then
368  warning "Cannot perform comparison test for histogram \${NAME} with >2 dimensions; skip."
369  elif (( BINFRAC < 1.0 )); then
370  echo "\${NAME}\$ ${TEST_TYPE1D} ${TEST_TYPE1D_PARAMETERS}" >> ${STEERING_FILE}
371  else
372  echo "\${NAME}\$ ${TEST_TYPE2D} ${TEST_TYPE2D_PARAMETERS}" >> ${STEERING_FILE}
373  fi
374  fi
375 done
376 
377 rm -f ${EXEC_FILE}
378 EOF
379 
380  exec 3>&-
381 
382  submit_job \
383  ${EXEC_FILE} ${(z)${BATCH_PROCESSING:+${BATCH_QUEUE_NAME} ${WORKDIR} $PREREQUISITES[@]}}
384 
385  write_jobID ${JOBID_FILE}
386 
387  reset_job_config
388 fi
389 
390 
391 # Process MC-files with standard weights
392 
393 set_variable DEFAULT_POSTFIT_FILE ${WORKDIR}/default.postfit.root
394 set_variable DEFAULT_COMPARISON_FILE ${DEFAULT_POSTFIT_FILE:r}.comparison.root
395 
396 if ( ! reuse_file ${DEFAULT_COMPARISON_FILE} ); then
397 
398  notice "Submitting default histogram comparison jobs"
399 
400  configure_job \
401  ${WORKDIR}/${DEFAULT_COMPARISON_FILE:t:r}.job\%.sh 1
402 
403  exec 3> ${EXEC_FILE}
404 
405  cat <<EOF >&3
406 #!/bin/zsh
407 
408 source ${JPP_DIR}/setenv.sh ${JPP_DIR} > /dev/null
409 
410 EOF
411 
412  unset DEFAULT_POSTFIT_FILES
413 
414  for (( i=1; i<=${#INPUT_REWEIGHTING_FILES}; ++i )); do
415 
416  set_variable INPUT_FILE ${INPUT_REWEIGHTING_FILES[$i]}
417  set_variable POSTFIT_FILE ${INPUT_FILE:r}.postfit.root
418  set_variable POSTFIT_FILE_SCALED ${POSTFIT_FILE:r}.scaled.root
419 
420  rm -f ${POSTFIT_FILE} ${COMPARISON_FILE}
421 
422  cat <<EOF >&3
423 timer_start
424 
425 ${POSTFIT_APP} \\
426  -f ${INPUT_FILE} \\
427  -o ${POSTFIT_FILE} \\
428  -a ${DETX_FILE} \\
429  -P ${OSCPROBTABLE} \\
430  -# ${DEFAULT_OSCPARAMETERS_FILE} \\
431  -@ "${(k)NULABELS}; 3;" \\
432  -%energyRange="${ENERGY_RANGE}" \\
433  -%coszenithRange="${COSTH_RANGE}" \\
434  -%containmentVolume="${CONTAINMENT_VOLUME}" \\
435  -%triggeredHitsRange="${N_TRIGGERED_HITS_RANGE}" \\
436  -R ${RECOTYPE} -W \\
437  -d ${DEBUG} --! ${BATCH_LOGGING:+&>> ${LOG_FILE}}
438 
439 CHECK_EXIT_CODE
440 
441 JScale1D \\
442  -f ${POSTFIT_FILE}:. \\
443  -o ${POSTFIT_FILE_SCALED} \\
444  -F ${LIVETIME} \\
445  -d ${DEBUG} --! ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
446 
447 CHECK_EXIT_CODE
448 
449 mv ${POSTFIT_FILE_SCALED} ${POSTFIT_FILE}
450 
451 timer_stop
452 timer_print ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
453 EOF
454 
455  set_array DEFAULT_POSTFIT_FILES \
456  ${DEFAULT_POSTFIT_FILES[@]} ${POSTFIT_FILE}
457  done
458 
459  cat <<EOF >&3
460 
461 hadd -v 0 -f ${DEFAULT_POSTFIT_FILE} ${DEFAULT_POSTFIT_FILES[@]}
462 
463 timer_start
464 
465 JZebraMantis \\
466  -a ${REFERENCE_POSTFIT_FILE} \\
467  -b ${DEFAULT_POSTFIT_FILE} \\
468  -s ${STEERING_FILE} \\
469  -o ${DEFAULT_COMPARISON_FILE} \\
470  -t ${DEFAULT_COMPARISON_FILE:r}.txt \\
471  -d ${DEBUG} --! ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
472 
473 CHECK_EXIT_CODE
474 
475 timer_stop
476 timer_print ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
477 
478 rm -f ${EXEC_FILE}
479 EOF
480 
481  exec 3>&-
482 
483  submit_job \
484  ${EXEC_FILE} ${(z)${BATCH_PROCESSING:+${BATCH_QUEUE_NAME} ${WORKDIR} ${REFERENCE_POSTFIT_JOBID}}}
485 
486  write_jobID ${JOBID_FILE}
487 
488  reset_job_config
489 fi
490 
491 
492 # Process MC-files with redefined weights
493 
494 set_array PREREQUISITES $(cat $JOBID_FILE)
495 
496 set_variable META_FILE ${WORKDIR}/comparisonResults.meta.txt
497 set_variable JOBID_FILE ${WORKDIR}/reweighting.jobIDs.txt
498 
499 rm -f ${META_FILE} ${JOBID_FILE}
500 
501 integer n=1
502 
503 while read -u 3 WEIGHT_FACTOR_FILE; do
504 
505  notice "Submitting reweighting job ${n}"
506 
507  while read -u 4 OSCPARAMETERS_FILE; do
508 
509  set_variable REWEIGHTED_POSTFIT_FILE ${WORKDIR}/reweighting.${n}.postfit.root
510  set_variable REWEIGHTED_COMPARISON_FILE ${REWEIGHTED_POSTFIT_FILE:r}.comparison.root
511 
512  configure_job \
513  ${WORKDIR}/reweighting.job\%.sh ${BATCH_JOB_SIZE}
514 
515  if (( ${+START_JOB} )); then
516 
517  exec 5> ${EXEC_FILE}
518 
519  cat <<EOF >&5
520 #!/bin/zsh
521 
522 source ${JPP_DIR}/setenv.sh ${JPP_DIR} > /dev/null
523 EOF
524  fi
525 
526  for (( j=1; j<=${#INPUT_REWEIGHTING_FILES}; ++j )); do
527 
528  set_variable INPUT_FILE ${INPUT_REWEIGHTING_FILES[$j]}
529  set_variable REWEIGHTED_FILE ${INPUT_FILE:r}.reweighting.${n}.root
530  set_variable POSTFIT_FILE ${REWEIGHTED_FILE:r}.postfit.root
531  set_variable POSTFIT_FILE_SCALED ${POSTFIT_FILE:r}.scaled.root
532 
533  set_array POSTFIT_FILES \
534  ${POSTFIT_FILES[@]} ${POSTFIT_FILE}
535 
536  cat <<EOF >&5
537 
538 set_array PRIMARIES \\
539  \$(JPrintHeader -f ${INPUT_FILE} -k primary -- | cut -d'=' -f2)
540 
541 set_array PRIMARIES \\
542  \${PRIMARIES[@]} \\
543  \$(JPrintHeader -f ${INPUT_FILE} -k flux -- | cut -d' ' -f3)
544 
545 unset DO_REWEIGHTING
546 
547 for PRIMARY in \${PRIMARIES[@]}; do
548  if [[ "${NUTYPES[@]}" =~ "\${PRIMARY}" ]]; then
549  set_variable DO_REWEIGHTING
550  break
551  fi
552 done
553 
554 if (( \${+DO_REWEIGHTING} )); then
555 
556  timer_start
557 
558  JEvtReweight \\
559  -f ${INPUT_FILE} \\
560  -o ${REWEIGHTED_FILE} \\
561  -P ${OSCPROBTABLE} \\
562  -@ ${OSCPARAMETERS_FILE} \\
563  -% ${WEIGHT_FACTOR_FILE} \\
564  -d ${DEBUG} --! ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
565 
566  CHECK_EXIT_CODE
567 
568  timer_stop
569  timer_print ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
570 
571  timer_start
572 
573  ${POSTFIT_APP} \\
574  -f ${REWEIGHTED_FILE} \\
575  -o ${POSTFIT_FILE} \\
576  -a ${DETX_FILE} \\
577  -P ${OSCPROBTABLE} \\
578  -%energyRange="${ENERGY_RANGE}" \\
579  -%coszenithRange="${COSTH_RANGE}" \\
580  -%containmentVolume="${CONTAINMENT_VOLUME}" \\
581  -%triggeredHitsRange="${N_TRIGGERED_HITS_RANGE}" \\
582  -R ${RECOTYPE} -W \\
583  -d ${DEBUG} --! ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
584 
585  CHECK_EXIT_CODE
586 
587  JScale1D \\
588  -f ${POSTFIT_FILE}:. \\
589  -o ${POSTFIT_FILE_SCALED} \\
590  -F ${LIVETIME} \\
591  -d ${DEBUG} --! ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
592 
593  CHECK_EXIT_CODE
594 
595  mv ${POSTFIT_FILE_SCALED} ${POSTFIT_FILE}
596 
597  timer_stop
598  timer_print ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
599 
600 else # This file does not correspond to any of the given primaries
601 
602  ln -fv ${INPUT_FILE} ${REWEIGHTED_FILE}
603  ln -fv ${INPUT_FILE:r}.postfit.root ${POSTFIT_FILE}
604 fi
605 
606 rm -f ${REWEIGHTED_FILE}
607 EOF
608  done
609 
610  cat <<EOF >&5
611 
612 hadd -v 0 -f ${REWEIGHTED_POSTFIT_FILE} ${POSTFIT_FILES[@]}
613 
614 timer_start
615 
616 JZebraMantis \\
617  -a ${REFERENCE_POSTFIT_FILE} \\
618  -b ${REWEIGHTED_POSTFIT_FILE} \\
619  -s ${STEERING_FILE} \\
620  -o ${REWEIGHTED_COMPARISON_FILE} \\
621  -t ${REWEIGHTED_COMPARISON_FILE:r}.txt \\
622  -d ${DEBUG} --! ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
623 
624  CHECK_EXIT_CODE
625 
626 timer_stop
627 timer_print ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
628 
629 ${SUBMIT_JOB+#rm -f ${EXEC_FILE}}
630 EOF
631 
632  if (( ${+SUBMIT_JOB} )); then
633 
634  exec 5>&-
635 
636  submit_job \
637  ${EXEC_FILE} ${(z)${BATCH_PROCESSING:+${BATCH_QUEUE_NAME} ${WORKDIR} ${PREREQUISITES[@]}}}
638 
639  write_jobID ${JOBID_FILE}
640 
641  unset POSTFIT_FILES
642  fi
643 
644  echo "${REWEIGHTED_COMPARISON_FILE:r}.txt\t${OSCPARAMETERS_FILE}\t${WEIGHT_FACTOR_FILE}" >> ${META_FILE}
645 
646  (( ++n ))
647 
648  done 4< ${OSCPARAMETERS_FILE_LIST}
649 
650 done 3< ${WEIGHT_FACTOR_FILELIST}
651 
652 reset_job_config
653 
654 set_variable IFS ${IFS0}