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
 
   21 set_variable:  DEBUG             TEST_DEBUG        3
 
   22 set_variable:  WORKDIR           TEST_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         30                
 
   29 set_variable   RUNTIME_S         60                
 
   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    10e3               
 
   37 set_variable   DOUBLESRATE_HZ    0e3               
 
   38 set_variable   NUMBER_OF_SLICES  10                
 
   42     usage "$script [working directory]"
 
   46     1) set_variable WORKDIR       $1;;
 
   48     *) fatal "Wrong number of arguments."
 
   52 set_variable  DETECTOR             $WORKDIR/detector.detx
 
   59 set_variable  INPUT_FILE           $WORKDIR/timeslice.root
 
   60 set_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
 
   81 debug "IP address $IP_ADDRESS"
 
   95 JLigier-local.sh continue
 
  100 set_variable numberOfLines          1
 
  101 set_variable numberOfFloors         4
 
  102 set_variable floorDistance_m       36
 
  103 set_variable lineDistance_m        90
 
  104 set_variable heightOfFirstFloor_m  72
 
  105 set_variable detectorType           1
 
  107 if [[ -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 --!
 
  126 JRandomTimesliceWriter \
 
  129     -B "$SINGLESRATE_HZ $DOUBLESRATE_HZ"   \
 
  130     -n $NUMBER_OF_SLICES                   \
 
  134 set_variable  DQ_SIMULATOR               JDQSimulator
 
  135 set_variable  NUMBER_OF_DQ_SIMULATORS    ${#SOURCE_HOST}
 
  136 set_variable  NUMBER_OF_FRAMES           `JPrintDetector -a $DETECTOR -O modules | awk '/Module/ {if ($4 != 0) {print $0}}' | wc -l`
 
  139 # JDataFilter configure data
 
  141 cat>$WORKDIR/ev_configure_datafilter.txt<<EOF
 
  144 dataWriter             = ${WRITER_HOST};
 
  145 numberOfFramesPerSlice = ${NUMBER_OF_FRAMES};
 
  146 detector               = %<${DETECTOR}>%;
 
  147 triggerParameters      = writeSummary            = 1;
 
  148 triggerParameters      = writeL0                 = 1;
 
  149 queueSize              = 100000000;
 
  151 JDataFilter            = ${DATAFILTER} ${FILTER_HOST}:${PORT};
 
  152 JDataWriter            = ${DATAWRITER} ${WRITER_HOST};
 
  156 # JDQSimulator configure data.
 
  158 cat>$WORKDIR/ev_configure_dqsimulator.txt<<EOF
 
  159 numberOfFrames         = ${NUMBER_OF_FRAMES};
 
  161 inputFile              = ${INPUT_FILE};
 
  162 target                 = 0 ${FILTER_HOST}:${PORT};
 
  168 for (( 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
 
  183 cat>>$WORKDIR/driver.txt<<EOF
 
  185 process  ${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 &))';
 
  186 process  ${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 &))';
 
  192 event ev_init      { RC_CMD }
 
  193 event ev_reset     { RC_CMD }
 
  194 event 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;
 
  202 event ev_start     { RC_CMD  $RUN  $ID }
 
  206 event ev_pause     { RC_CMD }
 
  207 event ev_stop      { RC_CMD }
 
  208 event ev_reset     { RC_CMD }
 
  209 event ev_off       { RC_CMD }
 
  220     -f $WORKDIR/driver.txt    \
 
  227 for 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})."
 
  242 echo -n "clean [Y/N]? "
 
  245 if [[ $ANSWER == "Y" || $ANSWER == "y" ]]; then