Jpp  master_rocky-43-ge265d140c
the software that should make you happy
software/JDataFilter/JDataFilter.sh
Go to the documentation of this file.
1 #!/bin/zsh
2 #
3 # \author mdejong
4 #
5 script=${0##*/}
6 
7 # ------------------------------------------------------------------------------------------
8 #
9 # Example script to run JDataFilter and JDataWriter using JDQSimulator(s)
10 #
11 # ------------------------------------------------------------------------------------------
12 
13 
14 if [ -z $JPP_DIR ]; then
15  echo "Variable JPP_DIR undefined."
16  exit
17 fi
18 
19 source $JPP_DIR/setenv.sh $JPP_DIR
20 
21 set_variable: DEBUG TEST_DEBUG 3
22 set_variable: WORKDIR TEST_WORKDIR ${TMPDIR:-/tmp}/
23 set_variable IP_ADDRESS `get_ip_address`
24 
25 set_variable MESSAGE_SERVER localhost
26 set_variable MESSAGE_LOGGER localhost
27 
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
39 
40 
41 if do_usage $*; then
42  usage "$script [working directory]"
43 fi
44 
45 case $# in
46  1) set_variable WORKDIR $1;;
47  0) ;;
48  *) fatal "Wrong number of arguments."
49 esac
50 
51 
52 set_variable DETECTOR $WORKDIR/detector.detx
53 set_variable ID 1000
54 set_variable RUN 1001
55 
56 typeset -Z 8 ID
57 typeset -Z 8 RUN
58 
59 set_variable INPUT_FILE $WORKDIR/timeslice.root
60 set_variable OUTPUT_FILE $WORKDIR/KM3NeT_${ID}_${RUN}.root
61 
62 
63 function 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 
81 debug "IP address $IP_ADDRESS"
82 
83 JDataFilter -h!
84 JDQSimulator -h!
85 JDataWriter -h!
86 
87 
88 # Clean
89 
90 clean
91 
92 
93 # Continue server
94 
95 JLigier-local.sh continue
96 
97 
98 # Create detector
99 
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
106 
107 if [[ -f $DETECTOR ]]; then
108  echo "Detector $DETECTOR aleady exists; remove to overwrite."
109  exit
110 fi
111 
112 JDetector \
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 
126 JRandomTimesliceWriter \
127  -a $DETECTOR \
128  -o $INPUT_FILE \
129  -B "$SINGLESRATE_HZ $DOUBLESRATE_HZ" \
130  -n $NUMBER_OF_SLICES \
131  -d1 --!
132 
133 
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`
137 
138 
139 # JDataFilter configure data
140 
141 cat>$WORKDIR/ev_configure_datafilter.txt<<EOF
142 logger_s = 5;
143 update_s = 10;
144 dataWriter = ${WRITER_HOST};
145 numberOfFramesPerSlice = ${NUMBER_OF_FRAMES};
146 detector = %<${DETECTOR}>%;
147 triggerParameters = writeSummary = 1;
148 triggerParameters = writeL0 = 1;
149 queueSize = 100000000;
150 path = $WORKDIR;
151 JDataFilter = ${DATAFILTER} ${FILTER_HOST}:${PORT};
152 JDataWriter = ${DATAWRITER} ${WRITER_HOST};
153 EOF
154 
155 
156 # JDQSimulator configure data.
157 
158 cat>$WORKDIR/ev_configure_dqsimulator.txt<<EOF
159 numberOfFrames = ${NUMBER_OF_FRAMES};
160 numberOfEvents = 1;
161 inputFile = ${INPUT_FILE};
162 target = 0 ${FILTER_HOST}:${PORT};
163 EOF
164 
165 
166 # Driver input.
167 
168 for (( 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
181 done
182 
183 cat>>$WORKDIR/driver.txt<<EOF
184 
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 &))';
187 
188 print
189 
190 enter
191 
192 event ev_init { RC_CMD }
193 event ev_reset { RC_CMD }
194 event ev_init { RC_CMD }
195 
196 event 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 
202 event ev_start { RC_CMD $RUN $ID }
203 
204 sleep $RUNTIME_S
205 
206 event ev_pause { RC_CMD }
207 event ev_stop { RC_CMD }
208 event ev_reset { RC_CMD }
209 event ev_off { RC_CMD }
210 
211 EOF
212 
213 
214 # Go!
215 
216 JDAQDriver \
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 
227 for 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
237 done
238 
239 
240 # Clean
241 
242 echo -n "clean [Y/N]? "
243 read ANSWER
244 
245 if [[ $ANSWER == "Y" || $ANSWER == "y" ]]; then
246  clean
247 fi