8# ------------------------------------------------------------------------------------------
 
   10#    Utility script to determine muon energy correction base on Monte Carlo simulations.
 
   12# ------------------------------------------------------------------------------------------
 
   14if [ -z $JPP_DIR ]; then
 
   15    echo "Variable JPP_DIR undefined."
 
   19source $JPP_DIR/setenv.sh $JPP_DIR
 
   20source $JPP_DIR/externals/km3net-dataformat/definitions/reconstruction.sh
 
   25set_variable   WORKDIR            ./
 
   26set_variable:  NUMBER_OF_EVENTS   RECONSTRUCTION_NUMBER_OF_EVENTS   100000
 
   27set_variable:  NUMBER_OF_BINS     RECONSTRUCTION_NUMBER_OF_BINS     30
 
   28set_variable:  LOGE               RECONSTRUCTION_LOGE               2.5 9.0
 
   29set_variable:  FORMAT             GRAPHICS_FORMAT        gif
 
   30set_variable+  BATCH              GRAPHICS_BATCH         -B
 
   33    usage "$script <detector> <option> [working directory]"\
 
   34          "\nPossible options: run fit interpolate"
 
   38    3) set_variable WORKDIR     $3;&
 
   39    2) set_variable OPTION      $2;
 
   40       set_variable DETECTOR    $1;;
 
   41    *) fatal "Wrong number of arguments."
 
   44if [[ $OPTION != "run" && $OPTION != "fit" && $OPTION != "interpolate" ]]; then
 
   45    fatal "Invalid option $OPTION."
 
   48if [[ ! -d $WORKDIR ]]; then
 
   52let "XMIN = ${LOGE%% *}"
 
   53let "XMAX = ${LOGE##* }"
 
   55if [[ $OPTION == "run" ]]; then
 
   57    if [[ ! -f $WORKDIR/generator.root ]]; then
 
   59        eval `JPrintDetector -a $DETECTOR -O CAN`
 
   61        let "RADIUS_M = $CAN_RADIUS_M + 200.0"
 
   63        let "ZMAX_M   = $CAN_ZMAX_M   + 200.0"
 
   66            -C "$CAN_X_M $CAN_Y_M $RADIUS_M $ZMIN_M $ZMAX_M"   \
 
   69            -n $NUMBER_OF_EVENTS                               \
 
   70            -o $WORKDIR/generator.root                         \
 
   74    if [[ ! -f $WORKDIR/sirene.root ]]; then
 
   76        JSirene.sh                  $DETECTOR             $WORKDIR/generator.root           $WORKDIR/sirene.root
 
   78        rm -f  $WORKDIR/generator.root
 
   81    if [[ ! -f $WORKDIR/trigger_efficiency.root ]]; then
 
   83        set_variable  TRIGGEREFFICIENCY_TRIGGERED_EVENTS_ONLY
 
   85        cat>$WORKDIR/trigger_parameters.txt<<EOF
 
   86trigger3DMuon.enabled           =  1;
 
   87trigger3DMuon.numberOfHits      =  5;
 
   88trigger3DMuon.numberOfModules   =  5;
 
   89trigger3DMuon.gridAngle_deg     = 10;
 
   95        JTriggerEfficiency.sh       $DETECTOR  $DETECTOR  $WORKDIR/sirene.root              $WORKDIR/trigger_efficiency.root  $WORKDIR/trigger_parameters.txt  $JPP_DATA/PMT_parameters.txt
 
   97        rm -f  $WORKDIR/sirene.root
 
  100    if (( 0 )) && [[ ! -f $WORKDIR/jmuon.root ]]; then
 
  102        set_variable  RECONSTRUCTION_NUMBER_OF_THREADS    10
 
  104        JARCAMuonReconstruction.sh  $DETECTOR             $WORKDIR/trigger_efficiency.root  $WORKDIR/%.root                   $JPP_DATA/PMT_parameters.txt
 
  106        rm -f  $WORKDIR/trigger_efficiency.root
 
  107        rm -f  $WORKDIR/jmuon.offline.root
 
  110    if (( 1 )) && [[ ! -f $WORKDIR/jmuon.root ]]; then
 
  112        set_variable  PDF                  $JPP_DATA/J%p.dat
 
  113        set_variable  NUMBER_OF_THREADS    10
 
  114        set_variable  RATE_HZ              6.0e3
 
  116        typeset -A PARAMETERS
 
  117        typeset -a APPLICATIONS
 
  122            -f $WORKDIR/trigger_efficiency.root          \
 
  123            -o $WORKDIR/jmcevt.root                      \
 
  126        rm -f  $WORKDIR/trigger_efficiency.root
 
  128        APPLICATIONS+=$JMCEVT
 
  142             -f $WORKDIR/jmcevt.root        \
 
  143             -o $WORKDIR/jenergy.root       \
 
  145             -@ `make_equation PARAMETERS`  \
 
  146             -N ${NUMBER_OF_THREADS}        \
 
  149        rm -f   $WORKDIR/jmcevt.root
 
  151        APPLICATIONS+=$JMUONENERGY
 
  154            -f $WORKDIR/jenergy.root       \
 
  155            -o $WORKDIR/jmuon.root         \
 
  156            -A "$APPLICATIONS[*]"          \
 
  159        rm -f  $WORKDIR/jenergy.root
 
  163if [[ $OPTION == "fit" || $OPTION == "interpolate" ]]; then
 
  165    if ( ! reuse_file $WORKDIR/energy_correction.root ); then
 
  166        set_variable  INPUT_FILE  $WORKDIR/jmuon.root
 
  168        set_variable  INPUT_FILE  $WORKDIR/energy_correction.root
 
  171    if   [[ $OPTION == "fit" ]]; then
 
  173        let "X0 = 0.5 * ($XMIN + $XMAX)"                 # central value
 
  174        let "XR = ($XMAX - $XMIN)"                       # range
 
  176        X="(x - $X0) / $XR"                              # normalisation
 
  178        P0="(1.0)"                                       # Legendre polynomials
 
  180        P2="(0.5*(3*$X*$X - 1.0))"
 
  181        P3="(0.5*$X*(5*$X*$X* - 3.0))"
 
  185            -o $WORKDIR/energy_correction.root           \
 
  186            -F "[0]*$P0 + [1]*$P1 + [2]*$P2 + [3]*$P3"   \
 
  195    elif [[ $OPTION == "interpolate" ]]; then
 
  199            -o $WORKDIR/energy_correction.root           \
 
  206        -@ "color = 1; style = 2"                        \
 
  207        -p "$XMIN $XMIN $XMAX $XMAX"                     \
 
  208        -o $WORKDIR/line.root
 
  211        -f  $WORKDIR/energy_correction.root:h2           \
 
  212        -f  $WORKDIR/line.root:\.\*                      \
 
  214        -< "E_{true} [GeV]"                             \
 
  220        -o ExE.$FORMAT                                   $BATCH
 
  224        -f $WORKDIR/energy_correction.root:"py\[.*\]"    \
 
  227        -\^ "number of events [a.u]"                     \
 
  232        -f  $WORKDIR/energy_correction.root:h1           \
 
  233        -f  $WORKDIR/line.root:\.\*                      \
 
  237        -> "log(E_{fit}/GeV)"                           \
 
  238        -\^ "log(E_{true}/GeV)"                          \
 
  243    rm -f  $WORKDIR/line.root
 
  245    echo result stored in $WORKDIR/energy_correction.root