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