8 # ------------------------------------------------------------------------------------------ 
   10 #                         Utility script to evaluate MUPAGE reweightings 
   12 # ------------------------------------------------------------------------------------------ 
   15 if [ -z $JPP_DIR ]; 
then 
   16     echo "Variable JPP_DIR undefined." 
   20 source $JPP_DIR/setenv.sh $JPP_DIR
 
   27 set_variable+    BATCH_PROCESSING         REWEIGHT_MUPAGE_BATCH_PROCESSING                1
 
   28 set_variable+    BATCH_LOGGING            REWEIGHT_MUPAGE_BATCH_LOGGING                   1
 
   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
 
   38 set_variable:    SCRATCHDIR               REWEIGHT_MUPAGE_SCRATCHDIR                      ${
TMPDIR:-/tmp}
 
   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))" 
   46 set_array        PARAMETERS                                                               
"1.0" 
   49     usage "$script <detector file> <input file>+ [working directory [reweighting formula [parameter setting]+]]" 
   66 # Determine number of parameters in given formula 
   77     fatal 
"Number of input parameters (= ${N_PARS}) is incompatible with given formula: ${FORMULA}" 
   84     echo  "----------------------------"     
   86     echo  "----------------------------" 
   88     echo  "Remove the above regular files? (y/n)" 
   90     read   REMOVE_MC_MERGE_FILES
 
   92     if [[ ${REMOVE_MC_MERGE_FILES} == 
"y"   || ${REMOVE_MC_MERGE_FILES} == 
"Y"   ||
 
   93           ${REMOVE_MC_MERGE_FILES} == 
"yes" || ${REMOVE_MC_MERGE_FILES} == 
"Yes" || ${REMOVE_MC_MERGE_FILES} == 
"YES" ]]; 
then 
  100 # Initialise local batch processor 
  102 if [[ ${BATCH_PROCESSING} == 1 ]]; 
then 
  104     if   ( is_CCNikhef ); 
then 
  106         echo "Submitting reweighting and histogram comparison jobs to nikhef-stbc batch queue: ${QUEUE_NAME}..." 
  108         if [[ ${SCRATCHDIR} == 
"${TMPDIR:-/tmp}" ]]; 
then 
  109             fatal 
"Please specify a valid directory for local \'scratch\' files other than \"${TMPDIR:-/tmp}\"" 
  114         fatal 
"No batch-processing option available yet for CC-Lyon." 
  118         echo "Submitting reweighting and histogram comparison jobs to local batch queue: ${QUEUE_NAME}..." 
  122         $JPP_DIR/examples/scripts/mkqueue.sh  ${QUEUE_NAME}  ${QUEUE_SIZE}  
"start" 
  127 # Divide into DAQ- and MC-files 
  129 echo "Dividing into DAQ- and MC-files..." 
  133     if [[ 
"$(JPrintHeader -f ${INPUT_FILE} -k simul --)" != 
" 0" ]]; 
then # MC-
file 
  136         set_array INPUT_DAQ_FILES         ${INPUT_DAQ_FILES[@]} ${
INPUT_FILE}
 
  141     fatal 
"No MC input files specified!" 
  144 if (( ${#INPUT_DAQ_FILES} <= 0 )); 
then 
  145     fatal 
"No DAQ input files specified!" 
  160         -
f "${INPUT_DAQ_FILES[*]}"                                                         \
 
  163         -@energyRange=
"${ENERGY_RANGE}"                                                    \
 
  164         -@coszenithRange=
"${COSTH_RANGE}"                                                  \
 
  165         -@triggeredHitsRange=
"${N_TRIGGERED_HITS_RANGE}"                                   \
 
  174 # Create histogram comparison ASCII steering file 
  180 rm -
f ${STEERING_FILE}
 
  185 for NAME 
in ${NAMES[@]}; 
do 
  189                                                 -
F "GetNcells / ((GetNbinsX+2)*(GetNbinsY+2))"  \
 
  192     if [[ ${NAME} != 
"META" && ${NAME} != 
"TObject" ]]; 
then 
  194         if   (( BINFRAC > 1.0 )); 
then 
  195             warning "Cannot perform comparison test for histogram ${NAME} with >2 dimensions; skip." 
  197             echo "${NAME}\$   ${TEST_TYPE1D}   ${TEST_TYPE1D_PARAMETERS}" >> ${STEERING_FILE}
 
  198             set_array HISTOGRAMS1D        ${HISTOGRAMS1D[@]} ${NAME}
 
  200             echo "${NAME}\$   ${TEST_TYPE2D}   ${TEST_TYPE2D_PARAMETERS}" >> ${STEERING_FILE}
 
  201             set_array HISTOGRAMS2D        ${HISTOGRAMS2D[@]} ${NAME}        
 
  214         -
f "${INPUT_MC_FILES[*]}"                                                          \
 
  215         -
o  ${MC_MERGE_FILE}                                                               \
 
  222 # Process MC-files with standard 
weights 
  224 unset STANDARD_OUTPUT
 
  228     echo "Submitting histogram comparison job for ${MC_MERGE_FILE:t}"    
  241     -
f ${MC_MERGE_FILE}                                                                    \\
 
  242     -
o ${MC_MERGE_FILE:
r}.postfit.root                                                     \\
 
  244     -@energyRange=
"${ENERGY_RANGE}"                                                        \\
 
  245     -@coszenithRange=
"${COSTH_RANGE}"                                                      \\
 
  246     -@triggeredHitsRange=
"${N_TRIGGERED_HITS_RANGE}"                                       \\
 
  248     -
d ${
DEBUG} --! ${BATCH_LOGGING:+&> ${LOG_FILE}}
 
  251 timer_print ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
 
  257     -b ${MC_MERGE_FILE:
r}.postfit.root                                                     \\
 
  258     -s ${STEERING_FILE}                                                                    \\
 
  259     -
o ${MC_MERGE_FILE:
r}.postfit.comparison.root                                          \\
 
  260     -t ${MC_MERGE_FILE:
r}.postfit.comparison.txt                                           \\
 
  261     -
d ${
DEBUG} --! ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
 
  264 timer_print ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
 
  271     if [[ ${BATCH_PROCESSING} == 1 ]]; 
then 
  273         if ( is_CCNikhef ); 
then 
  294     set_array STANDARD_OUTPUT             ${MC_MERGE_FILE:
r}.postfit.comparison.root
 
  298 # Process MC-files with redefined weights 
  300 unset      REWEIGHTED_OUTPUT
 
  301 typeset -
A REWEIGHTED_OUTPUT
 
  308     if [[ -
f ${MC_MERGE_FILE:
r}.reweighting.comparison.meta.txt ]]; 
then 
  309         rm -i ${MC_MERGE_FILE:
r}.reweighting.comparison.meta.txt
 
  312     while read PARAMETERS; 
do 
  314         if [[ ${${(z)PARAMETERS}[1]} == 
"#" ]]; 
then continue; fi # skip comments
 
  317             fatal 
"Parameterset (${PARAMETERS}) is incompatible with given formula (${FORMULA})" 
  323             PARSET+=
" p${j}=$(printf '%.2e' ${${(z)PARAMETERS}[$((j+1))]});" 
  328         if (( i % JOB_SIZE == 1 )); 
then 
  345             echo "Submitting reweighting jobs ${JOBRANGE[1]} to ${JOBRANGE[2]} for ${MC_MERGE_FILE:t}" 
  359 ${START_JOB:+#!/bin/zsh}
 
  361 ${START_JOB:+
"if [ -z ${JPP_DIR} ]; then echo \"Variable JPP_DIR undefined.\"; exit; fi"}
 
  363 ${START_JOB:+
"source ${JPP_DIR}/setenv.sh ${JPP_DIR}"}
 
  367 JEvtReweightMupage \\
 
  368     -
f  ${MC_MERGE_FILE}                                                                   \\
 
  372     -
d  ${
DEBUG} --! ${BATCH_LOGGING:+&> ${LOG_FILE} 2>&1}
 
  375 timer_print ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
 
  383     -@energyRange=
"${ENERGY_RANGE}"                                                        \\
 
  384     -@coszenithRange=
"${COSTH_RANGE}"                                                      \\
 
  385     -@triggeredHitsRange=
"${N_TRIGGERED_HITS_RANGE}"                                       \\
 
  387     -
d ${
DEBUG} --! ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
 
  390 timer_print ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
 
  397     -s ${STEERING_FILE}                                                                    \\
 
  400     -
d ${
DEBUG} --! ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
 
  403 timer_print ${BATCH_LOGGING:+&>> ${LOG_FILE} 2>&1}
 
  409         if (( ${+SUBMIT_JOB} )); 
then 
  411             if [[ ${BATCH_PROCESSING} == 1 ]]; 
then          
  415                 if ( is_CCNikhef ); 
then 
  437         echo "${OUTPUT_FILE:r}.postfit.comparison.txt; ${FORMULA}; ${PARSET}" >> ${
WORKDIR}/comparisonResults.meta.txt
 
  445     rm -
f ${SCRATCHDIR}/reweighting.jobIDs.txt
 
  446     printf 
'%s\n' ${
JOBIDS[@]} > ${SCRATCHDIR}/reweighting.jobIDs.txt
 
esac set_variable N_FPAR(echo-n ${FORMULA}|grep-oP"(^|[^x])\[[0-9]*\]"|cut-d'['-f2-|sort-u|wc-l) set_variable N_PARS $(($(wc-w< $
 
std::istream & read(std::istream &in, JTestSummary &summary, const char delimiter= ' ')
Read test summary. 
 
then set_variable PMT_FILE set_variable DAQ_FILE set_variable OUTPUT_FILE set_variable DETECTOR else fatal Wrong number of arguments fi set_variable RUNBYRUN file
 
then JLigier sh continue fi cat
 
then echo Submitting reweighting and histogram comparison jobs to nikhef stbc batch queue
 
grep set_variable N_PARSETS(($(wc-l< ${PARAMETER_FILE})-$(grep"#"${PARAMETER_FILE}|wc-l))) if((N_PARS%N_FPAR!=0))
 
then echo Enter input within $TIMEOUT_S seconds echo n User name
 
o $QUALITY_ROOT d $DEBUG!JPlot1D f
 
then JShowerPostfit f $INPUT_FILE o $OUTPUT_FILE N
 
&set_array INPUT_FILES set_variable DETX_FILE
 
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 usage $script< detector file >< inputfile > fi case set_variable PARAMETER_FILE
 
then echo Variable JPP_DIR undefined exit fi source $JPP_DIR setenv sh $JPP_DIR &dev null set_variable
 
then echo Variable JPP_DIR undefined exit fi source $JPP_DIR setenv sh $JPP_DIR if do_usage *then usage $script[(input file)+] fi set_variable DEBUG set_variable WORKDIR TMPDIR
 
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 ${TMPDIR:-/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 echo Variable JPP_DIR undefined exit fi source $JPP_DIR setenv sh $JPP_DIR &dev null set_variable DEBUG set_variable WORKDIR
 
then JConvertDetectorFormat a $DETECTOR[1] o
 
skip elif((BINFRAC< 1.0))
 
do sput $STRING $FLOOR sget MODULE INPUT_FILES
 
&set_variable OUTPUT_FILE
 
then JMuonMCEvt f $INPUT_FILE o $INTERMEDIATE_FILE d
 
then usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
 
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
 
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
 
source $JPP_DIR setenv csh $JPP_DIR &dev null eval JShellParser o a A
 
then set_array INPUT_MC_FILES
 
then fatal No DAQ input files specified fi set_variable DAQ_POSTFIT_FILE