7 # ------------------------------------------------------------------------------------------
 
    9 #         Example script to run JDataFilter and JDataWriter using JDQSimulator(s)
 
   11 # ------------------------------------------------------------------------------------------
 
   14 if [ -z $JPP_DIR ]; then
 
   15     echo "Variable JPP_DIR undefined."
 
   19 source $JPP_DIR/setenv.sh $JPP_DIR
 
   22 set_variable   WORKDIR           ${TMPDIR:-/tmp}/                            
 
   23 set_variable   IP_ADDRESS        `get_ip_address`                 
 
   25 set_variable   MESSAGE_SERVER    localhost                        
 
   26 set_variable   MESSAGE_LOGGER    localhost                        
 
   28 set_variable   TIMEOUT_S         10                               
 
   29 set_variable   RUNTIME_S         30                               
 
   30 set_variable   PORT              5551                             
 
   31 set_array      SOURCE_HOST       $IP_ADDRESS                      $IP_ADDRESS  $IP_ADDRESS
 
   32 set_variable   FILTER_HOST       $IP_ADDRESS                      
 
   33 set_variable   WRITER_HOST       $IP_ADDRESS                      
 
   34 set_variable   DATAFILTER        F001/F001                        
 
   35 set_variable   DATAWRITER        W000/W000                        
 
   36 set_variable   SINGLESRATE_HZ    0e3                              
 
   37 set_variable   DOUBLESRATE_HZ    2e3                              
 
   38 set_variable   NUMBER_OF_SLICES  10                               
 
   40 set_variable   DETECTOR          $JPP_DATA/km3net_reference.detx  
 
   41 set_variable   LOGGER_OUTPUT     $WORKDIR/logger.txt              
 
   44     usage "$script [detector file [logger file [working directory]]]"
 
   48     3) set_variable WORKDIR       $3;&
 
   49     2) set_variable LOGGER_OUTPUT $2;&
 
   50     1) set_variable DETECTOR      $1;;
 
   52     *) fatal "Wrong number of arguments."
 
   55 set_variable  ID                   `JPrintDetector -a $JPP_DATA/km3net_reference.detx -O identifier | sed 's/Detector//'`
 
   61 set_variable  INPUT_FILE           $WORKDIR/timeslice.root
 
   62 set_variable  OUTPUT_FILE          $WORKDIR/KM3NeT_${ID}_${RUN}.root
 
   67 if [[ ! -f $DETECTOR ]]; then
 
   68     JDetector.sh $DETECTOR
 
   74 if ( ! reuse_file $INPUT_FILE ); then
 
   76     JRandomTimesliceWriter \
 
   79         -B "$SINGLESRATE_HZ $DOUBLESRATE_HZ"   \
 
   80         -n $NUMBER_OF_SLICES                   \
 
   87 if [[ -f $OUTPUT_FILE ]]; then;
 
   92 set_variable  DQ_SIMULATOR               JDQSimulator
 
   93 set_variable  NUMBER_OF_DQ_SIMULATORS    ${#SOURCE_HOST}
 
   94 set_variable  NUMBER_OF_FRAMES           `JPrintDetector -a $DETECTOR -O modules | awk '/Module/ {if ($4 != 0) {print $0}}' | wc -l`
 
   97 # JDataFilter configure data
 
   99 cat>$WORKDIR/ev_configure_datafilter.txt<<EOF
 
  102 dataWriter             = ${WRITER_HOST};
 
  103 numberOfFramesPerSlice = ${NUMBER_OF_FRAMES};
 
  104 detector               = %<${DETECTOR}>%;
 
  105 triggerParameters      = trigger3DMuon.enabled   = 1;
 
  106 triggerParameters      = trigger3DShower.enabled = 1;
 
  107 triggerParameters      = writeSummary            = 1;
 
  108 triggerParameters      = writeSN                 = 1;
 
  109 triggerParameters      = SN.numberOfHits = 4; SN.TMaxLocal_ns = 10.0; SN.ctMin = 0.0;
 
  111 queueSize              = 100000000;
 
  113 JDataFilter            = ${DATAFILTER} ${FILTER_HOST}:${PORT};
 
  114 JDataWriter            = ${DATAWRITER} ${WRITER_HOST};
 
  117 # JDQSimulator configure data.
 
  119 cat>$WORKDIR/ev_configure_dqsimulator.txt<<EOF
 
  120 numberOfFrames         = ${NUMBER_OF_FRAMES};
 
  122 inputFile              = ${INPUT_FILE};
 
  123 target                 = 0 ${FILTER_HOST}:${PORT};
 
  129 rm -f $WORKDIR/driver.txt
 
  131 for (( i = 1; $i <= $NUMBER_OF_DQ_SIMULATORS ; ++i )); do
 
  133     let "index = ${#SOURCE_HOST}  -  $i % ${#SOURCE_HOST}"
 
  135     echo "source = 0 $DQ_SIMULATOR/$i;"                           >> $WORKDIR/ev_configure_dqsimulator.txt
 
  137     echo "process  $DQ_SIMULATOR/$i  $SOURCE_HOST[$index]         \
 
  138         (setenv ROOTSYS $ROOTSYS && source $JPP_DIR/setenv.csh $JPP_DIR && ($DQ_SIMULATOR     \
 
  143         </dev/null >&/dev/null &));"                               >> $WORKDIR/driver.txt
 
  146 let "HALF_RUNTIME_S = ${RUNTIME_S} / 2 + 1"
 
  148 cat>>$WORKDIR/driver.txt<<EOF
 
  150 process  ${DATAFILTER}  $FILTER_HOST  ssh $FILTER_HOST  "(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 &))";
 
  151 process  ${DATAWRITER}  $WRITER_HOST  ssh $FILTER_HOST  "(setenv ROOTSYS $ROOTSYS && source $JPP_DIR/setenv.csh $JPP_DIR && (JDataWriter  -H \$SERVER\$  -M \$LOGGER\$  -d $DEBUG  -u ${DATAWRITER}            </dev/null >&/dev/null &))";
 
  157 event ev_init      { RC_CMD }
 
  160     RC_DFLTR  %<$WORKDIR/ev_configure_datafilter.txt>%
 
  161     RC_DQSIM  %<$WORKDIR/ev_configure_dqsimulator.txt>% 
 
  162     RC_DWRT   path=$WORKDIR;  update_s=10;  logger_s=5;
 
  165 event ev_start     { RC_CMD  $RUN  $ID }
 
  167 sleep $HALF_RUNTIME_S
 
  168 message RC_ALRT Test;
 
  169 sleep $HALF_RUNTIME_S
 
  171 event ev_pause     { RC_CMD }
 
  172 event ev_stop      { RC_CMD }
 
  173 event ev_reset     { RC_CMD }
 
  174 event ev_off       { RC_CMD }
 
  179 JLigier.sh $MESSAGE_SERVER continue
 
  180 JLigier.sh $MESSAGE_LOGGER continue
 
  181 JLigier.sh $WRITER_HOST    continue
 
  184 if [[ -n "$LOGGER_OUTPUT" ]]; then
 
  185     JLogger.sh $MESSAGE_LOGGER $LOGGER_OUTPUT
 
  195     -f $WORKDIR/driver.txt    \
 
  208 JStopDAQ.sh $MESSAGE_SERVER $MESSAGE_LOGGER
 
  211 ssh $WRITER_HOST "killall JDataWriter"
 
  212 ssh $FILTER_HOST "killall JDataFilter"