7# ------------------------------------------------------------------------------------------
 
    9#         Example script to run JDataFilter and JDataWriter using JDQSimulator(s)
 
   11# ------------------------------------------------------------------------------------------
 
   14if [ -z $JPP_DIR ]; then
 
   15    echo "Variable JPP_DIR undefined."
 
   19source $JPP_DIR/setenv.sh $JPP_DIR
 
   21set_variable:  DEBUG             TEST_DEBUG        3
 
   22set_variable:  WORKDIR           TEST_WORKDIR      ${TMPDIR:-/tmp}/
 
   23set_variable   IP_ADDRESS        `get_ip_address`  
 
   25set_variable   MESSAGE_SERVER    localhost         
 
   26set_variable   MESSAGE_LOGGER    localhost         
 
   28set_variable   TIMEOUT_S         30                
 
   29set_variable   RUNTIME_S         60                
 
   31set_array      SOURCE_HOST       $IP_ADDRESS       $IP_ADDRESS  $IP_ADDRESS
 
   32set_variable   FILTER_HOST       $IP_ADDRESS       
 
   33set_variable   WRITER_HOST       $IP_ADDRESS       
 
   34set_variable   DATAFILTER        F001/F001         
 
   35set_variable   DATAWRITER        W000/W000         
 
   36set_variable   SINGLESRATE_HZ    10e3               
 
   37set_variable   DOUBLESRATE_HZ    0e3               
 
   38set_variable   NUMBER_OF_SLICES  10                
 
   42    usage "$script [working directory]"
 
   46    1) set_variable WORKDIR       $1;;
 
   48    *) fatal "Wrong number of arguments."
 
   52set_variable  DETECTOR             $WORKDIR/detector.detx
 
   59set_variable  INPUT_FILE           $WORKDIR/timeslice.root
 
   60set_variable  OUTPUT_FILE          $WORKDIR/KM3NeT_${ID}_${RUN}.root
 
   69    rm -f $WORKDIR/ev_configure_datafilter.txt
 
   70    rm -f $WORKDIR/ev_configure_dqsimulator.txt
 
   71    rm -f $WORKDIR/driver.txt
 
   73    killall JDQSimulator   >& /dev/null
 
   74    killall JDataFilter    >& /dev/null
 
   75    killall JDataWriter    >& /dev/null
 
   81debug "IP address $IP_ADDRESS"
 
   95JLigier-local.sh continue
 
  100set_variable numberOfLines          1
 
  101set_variable numberOfFloors         4
 
  102set_variable floorDistance_m       36
 
  103set_variable lineDistance_m        90
 
  104set_variable heightOfFirstFloor_m  72
 
  105set_variable detectorType           1
 
  107if [[ -f $DETECTOR ]]; then
 
  108    echo "Detector $DETECTOR aleady exists; remove to overwrite."
 
  114    -@ "detectorType    = $detectorType"     \
 
  115    -@ "numberOfLines   = $numberOfLines"    \
 
  116    -@ "numberOfFloors  = $numberOfFloors"   \
 
  117    -@ "floorDistance_m = $floorDistance_m"  \
 
  118    -@ "lineDistance_m  = $lineDistance_m"   \
 
  119    -z $heightOfFirstFloor_m                 \
 
  121    -o $DETECTOR -d 1 --!
 
  126JRandomTimesliceWriter \
 
  129    -B "$SINGLESRATE_HZ $DOUBLESRATE_HZ"   \
 
  130    -n $NUMBER_OF_SLICES                   \
 
  134set_variable  DQ_SIMULATOR               JDQSimulator
 
  135set_variable  NUMBER_OF_DQ_SIMULATORS    ${#SOURCE_HOST}
 
  136set_variable  NUMBER_OF_FRAMES           `JPrintDetector -a $DETECTOR -O modules | awk '/Module/ {if ($4 != 0) {print $0}}' | wc -l`
 
  139# JDataFilter configure data
 
  141cat>$WORKDIR/ev_configure_datafilter.txt<<EOF
 
  144dataWriter             = ${WRITER_HOST};
 
  145numberOfFramesPerSlice = ${NUMBER_OF_FRAMES};
 
  146detector               = %<${DETECTOR}>%;
 
  147triggerParameters      = writeSummary            = 1;
 
  148triggerParameters      = writeL0                 = 1;
 
  149queueSize              = 100000000;
 
  151JDataFilter            = ${DATAFILTER} ${FILTER_HOST}:${PORT};
 
  152JDataWriter            = ${DATAWRITER} ${WRITER_HOST};
 
  156# JDQSimulator configure data.
 
  158cat>$WORKDIR/ev_configure_dqsimulator.txt<<EOF
 
  159numberOfFrames         = ${NUMBER_OF_FRAMES};
 
  161inputFile              = ${INPUT_FILE};
 
  162target                 = 0 ${FILTER_HOST}:${PORT};
 
  168for (( i = 1; $i <= $NUMBER_OF_DQ_SIMULATORS ; ++i )); do
 
  170    let "index = ${#SOURCE_HOST}  -  $i % ${#SOURCE_HOST}"
 
  172    echo "source = 0 $DQ_SIMULATOR/$i;"                            >> $WORKDIR/ev_configure_dqsimulator.txt
 
  174    echo "process  $DQ_SIMULATOR/$i  $SOURCE_HOST[$index]         \
 
  175        csh -c '(setenv ROOTSYS $ROOTSYS && source $JPP_DIR/setenv.csh $JPP_DIR && ($DQ_SIMULATOR     \
 
  180        </dev/null >&/dev/null &))';"                              >> $WORKDIR/driver.txt
 
  183cat>>$WORKDIR/driver.txt<<EOF
 
  185process  ${DATAFILTER}  $FILTER_HOST  csh -c '(setenv ROOTSYS $ROOTSYS && source $JPP_DIR/setenv.csh $JPP_DIR && (JDataFilter  -H \$SERVER\$  -M \$LOGGER\$  -d $DEBUG  -u ${DATAFILTER}  -P $PORT  </dev/null >&/dev/null &))';
 
  186process  ${DATAWRITER}  $WRITER_HOST  csh -c '(setenv ROOTSYS $ROOTSYS && source $JPP_DIR/setenv.csh $JPP_DIR && (JDataWriter  -H \$SERVER\$  -M \$LOGGER\$  -d $DEBUG  -u ${DATAWRITER}            </dev/null >&/dev/null &))';
 
  192event ev_init      { RC_CMD }
 
  193event ev_reset     { RC_CMD }
 
  194event ev_init      { RC_CMD }
 
  197    RC_DFLTR  %<$WORKDIR/ev_configure_datafilter.txt>%
 
  198    RC_DQSIM  %<$WORKDIR/ev_configure_dqsimulator.txt>% 
 
  199    RC_DWRT   path=$WORKDIR;  update_s=10;  logger_s=5;
 
  202event ev_start     { RC_CMD  $RUN  $ID }
 
  206event ev_pause     { RC_CMD }
 
  207event ev_stop      { RC_CMD }
 
  208event ev_reset     { RC_CMD }
 
  209event ev_off       { RC_CMD }
 
  220    -f $WORKDIR/driver.txt    \
 
  227for PROCESS in JDQSimulator JDataFilter JDataWriter; do
 
  229    set_variable  PID  `ps h -o "%p" -C $PROCESS`
 
  231    debug "Check $PROCESS (${PID})."
 
  233    if [[ -n "$PID" ]] then
 
  234        error "$PROCESS still running (${PID})."
 
  242echo -n "clean [Y/N]? "
 
  245if [[ $ANSWER == "Y" || $ANSWER == "y" ]]; then