Jpp 19.3.0-rc.2
the software that should make you happy
Loading...
Searching...
No Matches
examples/JDataFilter/JDataFilter.sh
Go to the documentation of this file.
1#!/usr/bin/env zsh
2#
3# \author rbruijn
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 2
22set_variable 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 10
29set_variable RUNTIME_S 30
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 0e3
37set_variable DOUBLESRATE_HZ 2e3
38set_variable NUMBER_OF_SLICES 10
39
40set_variable DETECTOR $JPP_DATA/km3net_reference.detx
41set_variable LOGGER_OUTPUT $WORKDIR/logger.txt
42
43if do_usage $*; then
44 usage "$script [detector file [logger file [working directory]]]"
45fi
46
47case $# in
48 3) set_variable WORKDIR $3;&
49 2) set_variable LOGGER_OUTPUT $2;&
50 1) set_variable DETECTOR $1;;
51 0) ;;
52 *) fatal "Wrong number of arguments."
53esac
54
55set_variable ID `JPrintDetector -a $JPP_DATA/km3net_reference.detx -O identifier | sed 's/Detector//'`
56set_variable RUN 1001
57
58typeset -Z 8 ID
59typeset -Z 8 RUN
60
61set_variable INPUT_FILE $WORKDIR/timeslice.root
62set_variable OUTPUT_FILE $WORKDIR/KM3NeT_${ID}_${RUN}.root
63
64
65# Create detector
66
67if [[ ! -f $DETECTOR ]]; then
68 JDetector.sh $DETECTOR
69fi
70
71
72# Create input data
73
74if ( ! reuse_file $INPUT_FILE ); then
75
76 JRandomTimesliceWriter \
77 -a $DETECTOR \
78 -o $INPUT_FILE \
79 -B "$SINGLESRATE_HZ $DOUBLESRATE_HZ" \
80 -n $NUMBER_OF_SLICES \
81 -d1 --!
82fi
83
84
85# Remove output data
86
87if [[ -f $OUTPUT_FILE ]]; then;
88 rm -i $OUTPUT_FILE
89fi
90
91
92set_variable DQ_SIMULATOR JDQSimulator
93set_variable NUMBER_OF_DQ_SIMULATORS ${#SOURCE_HOST}
94set_variable NUMBER_OF_FRAMES `JPrintDetector -a $DETECTOR -O modules | awk '/Module/ {if ($4 != 0) {print $0}}' | wc -l`
95
96
97# JDataFilter configure data
98
99cat>$WORKDIR/ev_configure_datafilter.txt<<EOF
100logger_s = 5;
101update_s = 10;
102dataWriter = ${WRITER_HOST};
103numberOfFramesPerSlice = ${NUMBER_OF_FRAMES};
104detector = %<${DETECTOR}>%;
105triggerParameters = trigger3DMuon.enabled = 1;
106triggerParameters = trigger3DShower.enabled = 1;
107triggerParameters = writeSummary = 1;
108triggerParameters = writeSN = 1;
109triggerParameters = SN.numberOfHits = 4; SN.TMaxLocal_ns = 10.0; SN.ctMin = 0.0;
110c_sizeL1 = 10;
111queueSize = 100000000;
112path = $WORKDIR;
113JDataFilter = ${DATAFILTER} ${FILTER_HOST}:${PORT};
114JDataWriter = ${DATAWRITER} ${WRITER_HOST};
115EOF
116
117# JDQSimulator configure data.
118
119cat>$WORKDIR/ev_configure_dqsimulator.txt<<EOF
120numberOfFrames = ${NUMBER_OF_FRAMES};
121numberOfEvents = 1;
122inputFile = ${INPUT_FILE};
123target = 0 ${FILTER_HOST}:${PORT};
124EOF
125
126
127# Driver input.
128
129rm -f $WORKDIR/driver.txt
130
131for (( i = 1; $i <= $NUMBER_OF_DQ_SIMULATORS ; ++i )); do
132
133 let "index = ${#SOURCE_HOST} - $i % ${#SOURCE_HOST}"
134
135 echo "source = 0 $DQ_SIMULATOR/$i;" >> $WORKDIR/ev_configure_dqsimulator.txt
136
137 echo "process $DQ_SIMULATOR/$i $SOURCE_HOST[$index] \
138 (setenv ROOTSYS $ROOTSYS && source $JPP_DIR/setenv.csh $JPP_DIR && ($DQ_SIMULATOR \
139 -u \$NAME\$ \
140 -H \$SERVER\$ \
141 -M \$LOGGER\$ \
142 -d $DEBUG \
143 </dev/null >&/dev/null &));" >> $WORKDIR/driver.txt
144done
145
146let "HALF_RUNTIME_S = ${RUNTIME_S} / 2 + 1"
147
148cat>>$WORKDIR/driver.txt<<EOF
149
150process ${DATAFILTER} $FILTER_HOST ssh $FILTER_HOST "(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 &))";
151process ${DATAWRITER} $WRITER_HOST ssh $FILTER_HOST "(setenv ROOTSYS $ROOTSYS && source $JPP_DIR/setenv.csh $JPP_DIR && (JDataWriter -H \$SERVER\$ -M \$LOGGER\$ -d $DEBUG -u ${DATAWRITER} </dev/null >&/dev/null &))";
152
153print
154
155enter
156
157event ev_init { RC_CMD }
158
159event ev_configure {
160 RC_DFLTR %<$WORKDIR/ev_configure_datafilter.txt>%
161 RC_DQSIM %<$WORKDIR/ev_configure_dqsimulator.txt>%
162 RC_DWRT path=$WORKDIR; update_s=10; logger_s=5;
163}
164
165event ev_start { RC_CMD $RUN $ID }
166
167sleep $HALF_RUNTIME_S
168message RC_ALRT Test;
169sleep $HALF_RUNTIME_S
170
171event ev_pause { RC_CMD }
172event ev_stop { RC_CMD }
173event ev_reset { RC_CMD }
174event ev_off { RC_CMD }
175
176EOF
177
178
179JLigier.sh $MESSAGE_SERVER continue
180JLigier.sh $MESSAGE_LOGGER continue
181JLigier.sh $WRITER_HOST continue
182
183
184if [[ -n "$LOGGER_OUTPUT" ]]; then
185 JLogger.sh $MESSAGE_LOGGER $LOGGER_OUTPUT
186fi
187
188
189# Go!
190
191JDAQDriver \
192 -H $MESSAGE_SERVER \
193 -M $MESSAGE_LOGGER \
194 -t $TIMEOUT_S \
195 -f $WORKDIR/driver.txt \
196 -d $DEBUG \
197 -c
198
199
200# Tests
201
202JPrintTree \
203 -f $OUTPUT_FILE
204
205
206# Clean
207
208JStopDAQ.sh $MESSAGE_SERVER $MESSAGE_LOGGER
209
210
211ssh $WRITER_HOST "killall JDataWriter"
212ssh $FILTER_HOST "killall JDataFilter"
213killall JDQSimulator