8 # ------------------------------------------------------------------------------------------
 
   10 #                  Utility script to plot JTriggerProcessor CPU requirements.
 
   12 # ------------------------------------------------------------------------------------------
 
   15 if [ -z $JPP_DIR ]; then
 
   16     echo "Variable JPP_DIR undefined."
 
   21 source $JPP_DIR/setenv.sh $JPP_DIR
 
   25 set_variable   WORKDIR           ./                                     
 
   26 set_variable   FRAMETIME_MS      100                                    
 
   27 set_variable   RATE_L1_HZ        500                                    
 
   28 set_variable   RECYCLING         5 100e3
 
   29 set_variable:  FORMAT            GRAPHICS_FORMAT        gif
 
   30 set_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."
 
   44 set_variable   PIPE         $WORKDIR/pipe.dat
 
   45 set_variable   CPU_TXT      $WORKDIR/cpu.txt
 
   46 set_variable   CPU_ROOT     $WORKDIR/cpu.root
 
   47 set_variable   RATE_TXT     $WORKDIR/rate.txt
 
   48 set_variable   RATE_ROOT    $WORKDIR/rate.root
 
   51 typeset -A SETUPS  # rate -> number of slices
 
   62 if [[ -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
 
  104 rm -f $CPU_TXT  $RATE_TXT   >&  /dev/null
 
  105 rm -f $CPU_ROOT $RATE_ROOT  >&  /dev/null
 
  107 for 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