Jpp 19.3.0-rc.3
the software that should make you happy
Loading...
Searching...
No Matches
software/JDataFilter/JDataFilter.sh
Go to the documentation of this file.
1#!/usr/bin/env zsh
2#
3# \author mdejong
4#
5script=${0##*/}
6
7# ------------------------------------------------------------------------------------------
8#
9# Example script to run JDataFilter and JDataWriter using JDQSimulator(s)
10#
11# ------------------------------------------------------------------------------------------
12
13
14if [ -z $JPP_DIR ]; then
15 echo "Variable JPP_DIR undefined."
16 exit
17fi
18
19source $JPP_DIR/setenv.sh $JPP_DIR
20
21set_variable: DEBUG TEST_DEBUG 3
22set_variable: WORKDIR TEST_WORKDIR ${TMPDIR:-/tmp}/
23set_variable IP_ADDRESS `get_ip_address`
24
25set_variable MESSAGE_SERVER localhost
26set_variable MESSAGE_LOGGER localhost
27
28set_variable TIMEOUT_S 30
29set_variable RUNTIME_S 60
30set_variable PORT 5551
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
39
40
41if do_usage $*; then
42 usage "$script [working directory]"
43fi
44
45case $# in
46 1) set_variable WORKDIR $1;;
47 0) ;;
48 *) fatal "Wrong number of arguments."
49esac
50
51
52set_variable DETECTOR $WORKDIR/detector.detx
53set_variable ID 1000
54set_variable RUN 1001
55
56typeset -Z 8 ID
57typeset -Z 8 RUN
58
59set_variable INPUT_FILE $WORKDIR/timeslice.root
60set_variable OUTPUT_FILE $WORKDIR/KM3NeT_${ID}_${RUN}.root
61
62
63function clean()
64{
65 rm -f $DETECTOR
66 rm -f $INPUT_FILE
67 rm -f $OUTPUT_FILE
68
69 rm -f $WORKDIR/ev_configure_datafilter.txt
70 rm -f $WORKDIR/ev_configure_dqsimulator.txt
71 rm -f $WORKDIR/driver.txt
72
73 killall JDQSimulator >& /dev/null
74 killall JDataFilter >& /dev/null
75 killall JDataWriter >& /dev/null
76
77 return 0;
78}
79
80
81debug "IP address $IP_ADDRESS"
82
83JDataFilter -h!
84JDQSimulator -h!
85JDataWriter -h!
86
87
88# Clean
89
90clean
91
92
93# Continue server
94
95JLigier-local.sh continue
96
97
98# Create detector
99
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
106
107if [[ -f $DETECTOR ]]; then
108 echo "Detector $DETECTOR aleady exists; remove to overwrite."
109 exit
110fi
111
112JDetector \
113 -D $ID \
114 -@ "detectorType = $detectorType" \
115 -@ "numberOfLines = $numberOfLines" \
116 -@ "numberOfFloors = $numberOfFloors" \
117 -@ "floorDistance_m = $floorDistance_m" \
118 -@ "lineDistance_m = $lineDistance_m" \
119 -z $heightOfFirstFloor_m \
120 -f footprint.txt \
121 -o $DETECTOR -d 1 --!
122
123
124# Create input data
125
126JRandomTimesliceWriter \
127 -a $DETECTOR \
128 -o $INPUT_FILE \
129 -B "$SINGLESRATE_HZ $DOUBLESRATE_HZ" \
130 -n $NUMBER_OF_SLICES \
131 -d1 --!
132
133
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`
137
138
139# JDataFilter configure data
140
141cat>$WORKDIR/ev_configure_datafilter.txt<<EOF
142logger_s = 5;
143update_s = 10;
144dataWriter = ${WRITER_HOST};
145numberOfFramesPerSlice = ${NUMBER_OF_FRAMES};
146detector = %<${DETECTOR}>%;
147triggerParameters = writeSummary = 1;
148triggerParameters = writeL0 = 1;
149queueSize = 100000000;
150path = $WORKDIR;
151JDataFilter = ${DATAFILTER} ${FILTER_HOST}:${PORT};
152JDataWriter = ${DATAWRITER} ${WRITER_HOST};
153EOF
154
155
156# JDQSimulator configure data.
157
158cat>$WORKDIR/ev_configure_dqsimulator.txt<<EOF
159numberOfFrames = ${NUMBER_OF_FRAMES};
160numberOfEvents = 1;
161inputFile = ${INPUT_FILE};
162target = 0 ${FILTER_HOST}:${PORT};
163EOF
164
165
166# Driver input.
167
168for (( i = 1; $i <= $NUMBER_OF_DQ_SIMULATORS ; ++i )); do
169
170 let "index = ${#SOURCE_HOST} - $i % ${#SOURCE_HOST}"
171
172 echo "source = 0 $DQ_SIMULATOR/$i;" >> $WORKDIR/ev_configure_dqsimulator.txt
173
174 echo "process $DQ_SIMULATOR/$i $SOURCE_HOST[$index] \
175 csh -c '(setenv ROOTSYS $ROOTSYS && source $JPP_DIR/setenv.csh $JPP_DIR && ($DQ_SIMULATOR \
176 -u \$NAME\$ \
177 -H \$SERVER\$ \
178 -M \$LOGGER\$ \
179 -d $DEBUG \
180 </dev/null >&/dev/null &))';" >> $WORKDIR/driver.txt
181done
182
183cat>>$WORKDIR/driver.txt<<EOF
184
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 &))';
187
188print
189
190enter
191
192event ev_init { RC_CMD }
193event ev_reset { RC_CMD }
194event ev_init { RC_CMD }
195
196event ev_configure {
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;
200}
201
202event ev_start { RC_CMD $RUN $ID }
203
204sleep $RUNTIME_S
205
206event ev_pause { RC_CMD }
207event ev_stop { RC_CMD }
208event ev_reset { RC_CMD }
209event ev_off { RC_CMD }
210
211EOF
212
213
214# Go!
215
216JDAQDriver \
217 -H $MESSAGE_SERVER \
218 -M $MESSAGE_LOGGER \
219 -t $TIMEOUT_S \
220 -f $WORKDIR/driver.txt \
221 -d $DEBUG \
222 -c
223
224
225# Check processes
226
227for PROCESS in JDQSimulator JDataFilter JDataWriter; do
228
229 set_variable PID `ps h -o "%p" -C $PROCESS`
230
231 debug "Check $PROCESS (${PID})."
232
233 if [[ -n "$PID" ]] then
234 error "$PROCESS still running (${PID})."
235 kill -9 $PID
236 fi
237done
238
239
240# Clean
241
242echo -n "clean [Y/N]? "
243read ANSWER
244
245if [[ $ANSWER == "Y" || $ANSWER == "y" ]]; then
246 clean
247fi