8# ------------------------------------------------------------------------------------------
 
   10#                  Utility script to plot JTriggerProcessor CPU requirements.
 
   12# ------------------------------------------------------------------------------------------
 
   15if [ -z $JPP_DIR ]; then
 
   16    echo "Variable JPP_DIR undefined."
 
   21source $JPP_DIR/setenv.sh $JPP_DIR
 
   25set_variable   WORKDIR           ./                                     
 
   26set_variable   FRAMETIME_MS      100                                    
 
   27set_variable   RATE_L1_HZ        500                                    
 
   28set_variable   RECYCLING         5 100e3
 
   29set_variable:  FORMAT            GRAPHICS_FORMAT        gif
 
   30set_variable+  BATCH             GRAPHICS_BATCH         -B
 
   33    usage "$script <detector file> <trigger file> [working directory]"
 
   37    3) set_variable  WORKDIR   $3;&
 
   38    2) set_variable  TRIGGER   $2;
 
   39       set_variable  DETECTOR  $1;;
 
   40    *) fatal "Wrong number of arguments."
 
   44set_variable   PIPE         $WORKDIR/pipe.dat
 
   45set_variable   CPU_TXT      $WORKDIR/cpu.txt
 
   46set_variable   CPU_ROOT     $WORKDIR/cpu.root
 
   47set_variable   RATE_TXT     $WORKDIR/rate.txt
 
   48set_variable   RATE_ROOT    $WORKDIR/rate.root
 
   51typeset -A SETUPS  # rate -> number of slices
 
   62if [[ -f $DETECTOR ]] && [[ -f $TRIGGER ]]; then
 
   64    echo "Detector: $DETECTOR"
 
   65    echo "Trigger parameters:"
 
   68    for RATE_L0_HZ NUMBER_OF_SLICES in ${(kv)SETUPS}; do
 
   70        LOGGER_FILE=$WORKDIR/trigger_${RATE_L0_HZ}.log
 
   72        if [[ ! -f $LOGGER_FILE ]]; then
 
   77            echo "Generating random background at ${RATE_L0_HZ} Hz."
 
   79            nohup JRandomTimesliceWriter \
 
   82                  -B "$RATE_L0_HZ $RATE_L1_HZ"   \
 
   83                  -n $NUMBER_OF_SLICES           \
 
   85                  -d $DEBUG > /dev/null 2>&1 &
 
   87            echo Processing random data.
 
   96                -d $DEBUG > $LOGGER_FILE 2>&1
 
  104rm -f $CPU_TXT  $RATE_TXT   >&  /dev/null
 
  105rm -f $CPU_ROOT $RATE_ROOT  >&  /dev/null
 
  107for RATE_L0_HZ in `echo ${(k)SETUPS} | tr ' ' '\n' | sort -g`; do
 
  109    LOGGER_FILE=$WORKDIR/trigger_${RATE_L0_HZ}.log
 
  111    if [[ -f $LOGGER_FILE ]]; then
 
  113        let "TOTAL_CPU = 0.0"
 
  115        for KEY in "Calibration" "L0" "L1" "L2" "Timeslice router" "Trigger" "Trigger router"; do
 
  117            ELAPSED_TIME=`awk -v key="$KEY" '$0 == key,/CPU/ { if ($3 == "elapsed") print $1 }' $LOGGER_FILE`
 
  119            let "TOTAL_CPU += $ELAPSED_TIME / $FRAMETIME_MS"
 
  122        TRIGGER_RATE_HZ=`awk '/Trigger rate \[Hz\]/ { print $4 }' $LOGGER_FILE`
 
  124        echo "$(($RATE_L0_HZ * 1e-3)) $TOTAL_CPU"       >> $CPU_TXT
 
  125        echo "$(($RATE_L0_HZ * 1e-3)) $TRIGGER_RATE_HZ" >> $RATE_TXT
 
  142    -o cpu.$FORMAT            $BATCH
 
  154    -\^ "Trigger rate [Hz]"   \
 
  157    -o rate.$FORMAT           $BATCH