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