Jpp 20.0.0-195-g190c9e876
the software that should make you happy
Loading...
Searching...
No Matches
JTriggerReprocessor.cc File Reference

Auxiliary program to re-trigger KM3NETDAQ::JDAQEvent data. More...

#include <string>
#include <iostream>
#include <iomanip>
#include "km3net-dataformat/offline/Head.hh"
#include "km3net-dataformat/offline/MultiHead.hh"
#include "km3net-dataformat/offline/Evt.hh"
#include "km3net-dataformat/offline/Hit.hh"
#include "km3net-dataformat/online/JDAQ.hh"
#include "km3net-dataformat/online/JDAQClock.hh"
#include "JDAQ/JDAQTimesliceIO.hh"
#include "JDAQ/JDAQEventIO.hh"
#include "JDAQ/JDAQSummarysliceIO.hh"
#include "JDAQ/JDAQEvaluator.hh"
#include "JDetector/JDetector.hh"
#include "JDetector/JDetectorToolkit.hh"
#include "JDetector/JModuleRouter.hh"
#include "JTrigger/JHit.hh"
#include "JTrigger/JHitToolkit.hh"
#include "JTrigger/JSuperFrame1D.hh"
#include "JTrigger/JSuperFrame2D.hh"
#include "JTrigger/JTimeslice.hh"
#include "JTrigger/JHitL0.hh"
#include "JTrigger/JHitL1.hh"
#include "JTrigger/JBuildL1.hh"
#include "JTrigger/JBuildL2.hh"
#include "JTrigger/JTrigger3DShower.hh"
#include "JTrigger/JTriggerMXShower.hh"
#include "JTrigger/JTrigger3DMuon.hh"
#include "JTrigger/JTriggerNB.hh"
#include "JTrigger/JTriggerBits.hh"
#include "JTrigger/JEventOverlap.hh"
#include "JTrigger/JTimesliceRouter.hh"
#include "JTrigger/JTriggeredEvent.hh"
#include "JTrigger/JTimesliceL1.hh"
#include "JTrigger/JTriggerParameters.hh"
#include "JTrigger/JTriggerToolkit.hh"
#include "JLang/JPipe.hh"
#include "JROOT/JROOTClassSelector.hh"
#include "JSupport/JSingleFileScanner.hh"
#include "JSupport/JTreeScanner.hh"
#include "JSupport/JFileRecorder.hh"
#include "JSupport/JSupport.hh"
#include "JSupport/JMeta.hh"
#include "JSupport/JTriggerParametersSupportkit.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Auxiliary program to re-trigger KM3NETDAQ::JDAQEvent data.

Author
mdejong

Definition in file JTriggerReprocessor.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 62 of file JTriggerReprocessor.cc.

63{
64 using namespace std;
65 using namespace JPP;
66 using namespace KM3NETDAQ;
67
68 typedef JAllTypes_t typelist;
69
72 JLimit_t& numberOfEvents = inputFile.getLimit();
73 string detectorFile;
74 JTriggerParameters parameters;
75 bool reuse_parameters;
76 bool snapshot;
78 int debug;
79
80 try {
81
82 JParser<> zap("Auxiliary program to re-trigger event data.");
83
84 zap['f'] = make_field(inputFile, "input file.");
85 zap['o'] = make_field(outputFile, "output file.") = "trigger_reprocessor.root";
86 zap['n'] = make_field(numberOfEvents) = JLimit::max();
87 zap['a'] = make_field(detectorFile, "detector file.");
88 zap['@'] = make_field(parameters, "trigger parameters") = JPARSER::initialised();
89 zap['U'] = make_field(reuse_parameters, "reuse trigger parameters from input file.");
90 zap['S'] = make_field(snapshot, "use snapshot hits instead of triggered hits.");
91 zap['C'] = make_field(selection, "selection of data types for output.") = JPARSER::initialised();
92 zap['d'] = make_field(debug, "debug flag.") = 1;
93
94 zap(argc, argv);
95 }
96 catch(const exception &error) {
97 FATAL(error.what() << endl);
98 }
99
100
102
104
105 try {
106 load(detectorFile, detector);
107 }
108 catch(const JException& error) {
109 FATAL(error);
110 }
111
112 if (reuse_parameters) {
113
114 try {
115
116 parameters = getTriggerParameters(inputFile);
117
118 NOTICE("Set trigger parameters from input." << endl);
119 }
120 catch(const JException& error) {
121 FATAL("No trigger parameters from input." << endl);
122 }
123 }
124
125 // detector
126
127 if (parameters.disableHighRateVeto) {
128
129 NOTICE("Disabling high-rate veto of all PMTs." << endl);
130
131 detector.setPMTStatus(HIGH_RATE_VETO_DISABLE);
132 }
133
134 parameters.set(getMaximalDistance(detector));
135
136 parameters.triggerNB.write.prescale = 1;
137
138 DEBUG("Frame time [ms] " << getFrameTime() * 1e-6 << endl);
139 DEBUG("Reset time [ms] " << getRTS() * 1e-6 << endl);
140 DEBUG("Trigger" << endl << parameters << endl);
141
142 const JModuleRouter moduleRouter(detector);
143
144 if (parameters.writeSummary()) { WARNING("Discard writeSummary option during reprocesing of data." << endl); }
145 if (parameters.writeL1()) { WARNING("Discard writeL1 option during reprocesing of data." << endl); }
146 if (parameters.writeL2()) { WARNING("Discard writeL2 option during reprocesing of data." << endl); }
147 if (parameters.writeSN()) { WARNING("Discard writeSN option during reprocesing of data." << endl); }
148
149 //typedef JHit hit_type;
150 //typedef int hit_type;
151 typedef double hit_type;
152
153 typedef JSuperFrame1D<hit_type> JSuperFrame1D_t;
154 typedef JSuperFrame2D<hit_type> JSuperFrame2D_t;
155 typedef JTimeslice <hit_type> JTimeslice_t;
156 typedef JBuildL1 <hit_type> JBuildL1_t;
157 typedef JBuildL2 <hit_type> JBuildL2_t;
158
159 const JBuildL1_t buildL1(parameters);
160 const JBuildL2_t buildL2(parameters.L2);
161 const JBuildL2_t buildSN(parameters.SN);
162 const JBuildL2_t buildNB(parameters.NB);
163
164 JTimesliceRouter timesliceRouter(parameters.numberOfBins);
165
166 const JTriggerNB triggerNB (parameters);
167 const JTrigger3DMuon trigger3DMuon (parameters);
168 const JTrigger3DShower trigger3DShower(parameters);
169 const JTriggerMXShower triggerMXShower(parameters, detector);
170
171
172 outputFile.open();
173
174 if (!outputFile.is_open()) {
175 FATAL("Error opening file " << outputFile << endl);
176 }
177
178 outputFile.put(JMeta(argc, argv));
179 outputFile.put(parameters);
180
181
183
185
186 if (scan.getEntries() == 0) {
187 FATAL("No summary data." << endl);
188 }
189
190 while (inputFile.hasNext()) {
191
192 STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl);
193
194 JDAQEvent* evt = inputFile.next();
195 Long64_t index = scan.find(*evt);
196 JDAQSummaryslice* summary = scan.getEntry(index);
197
198 if (evt->getFrameIndex() != summary->getFrameIndex()) {
199 ERROR("Frame indices " << evt->getFrameIndex() << " != " << summary->getFrameIndex() << endl);
200 }
201
202 JDAQTimeslice timeslice(*evt, *summary, snapshot);
203
204 DEBUG(timeslice << endl);
205
206 timesliceRouter.configure(timeslice);
207
208
209 JTimeslice_t timesliceL0(timeslice.getDAQChronometer());
210 JTimeslice_t timesliceL1(timeslice.getDAQChronometer());
211 JTimeslice_t timesliceL2(timeslice.getDAQChronometer());
212 JTimeslice_t timesliceSN(timeslice.getDAQChronometer());
213 JTimeslice_t timesliceNB(timeslice.getDAQChronometer());
214
215 for (JDAQTimeslice::const_iterator super_frame = timeslice.begin(); super_frame != timeslice.end(); ++super_frame) {
216
217 if (moduleRouter.hasModule(super_frame->getModuleID())) {
218
219 // calibration
220
221 const JModule& module = moduleRouter.getModule(super_frame->getModuleID());
222 JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*super_frame, module);
223
224 // Apply high-rate veto
225
226 buffer.applyHighRateVeto(parameters.highRateVeto_Hz);
227
228 // L0
229
230 timesliceL0.push_back(JSuperFrame1D_t(buffer));
231
232 DEBUG("L0 " << setw(8) << timesliceL0.rbegin()->getModuleID() << ' ' << setw(8) << timesliceL0.rbegin()->size() << LAMBDA([ps = timesliceL0.rbegin()](ostream& out) { for (const auto& i : *ps) { out << " " << i; } }) << endl);
233
234 // Nano-beacon trigger
235
236 if (parameters.triggerNB.enabled) {
237
238 JSuperFrame2D_t::iterator __end = partition(buffer.begin(), buffer.end(), parameters.triggerNB.pmts);
239
240 if (buffer.begin() != __end) {
241
242 timesliceNB.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
243 super_frame->getModuleIdentifier(),
244 module.getPosition()));
245
246
247 JSuperFrame1D_t zbuf;
248
249 buildL1(buffer.begin(), __end, back_inserter(zbuf));
250
251 buildNB(buffer.begin(), __end, zbuf, back_inserter(*timesliceNB.rbegin()));
252 }
253 }
254
255 // L1
256
257 timesliceL1.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
258 super_frame->getModuleIdentifier(),
259 module.getPosition()));
260
261 buildL1(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
262
263 DEBUG("L1 " << setw(8) << timesliceL1.rbegin()->getModuleID() << ' ' << setw(8) << timesliceL1.rbegin()->size() << LAMBDA([ps = timesliceL1.rbegin()](ostream& out) { for (const auto& i : *ps) { out << " " << i; } }) << endl);
264
265 // L2
266
267 timesliceL2.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
268 super_frame->getModuleIdentifier(),
269 module.getPosition()));
270
271 buildL2(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
272
273 DEBUG("L2 " << setw(8) << timesliceL2.rbegin()->getModuleID() << ' ' << setw(8) << timesliceL2.rbegin()->size() << LAMBDA([ps = timesliceL2.rbegin()](ostream& out) { for (const auto& i : *ps) { out << " " << i; } }) << endl);
274
275 // SN
276 {
277 JTimeslice_t::value_type tv(super_frame->getDAQChronometer(),
278 super_frame->getModuleIdentifier(),
279 module.getPosition());
280
281 buildSN(buffer, *timesliceL1.rbegin(), back_inserter(tv));
282
283 if (!tv.empty()) {
284
285 timesliceSN.push_back(tv);
286
287 DEBUG("SN " << setw(8) << timesliceSN.rbegin()->getModuleID() << ' ' << setw(8) << timesliceSN.rbegin()->size() << LAMBDA([ps = timesliceL0.rbegin()](ostream& out) { for (const auto& i : *ps) { out << " " << i; } }) << endl);
288 }
289 }
290 }
291 }
292
293
294 // Trigger
295
296 if (parameters.triggerNB.enabled) {
297
298 const JTriggerInput trigger_input(timesliceNB);
299
300 for (JTriggerInput::const_iterator hit = trigger_input.begin(); hit != trigger_input.end(); ++hit) {
301
302 if (parameters.triggerNB.write()) {
303
304 JTriggeredEvent tev(timesliceNB.getDAQChronometer(),
305 getTriggerMask(triggerNB.getTriggerBit()),
306 *hit,
307 timesliceRouter,
308 moduleRouter,
309 parameters.TMaxLocal_ns,
310 parameters.triggerNB.DMax_m,
311 getTimeRange(parameters.triggerNB));
312
313 outputFile.put(tev);
314 }
315 }
316 }
317
318 JTriggerInput trigger_input(timesliceL2);
319 JTriggerOutput trigger_output;
320
321 trigger3DMuon (trigger_input, back_inserter(trigger_output));
322 trigger3DShower(trigger_input, back_inserter(trigger_output));
323 triggerMXShower(trigger_input, timesliceL0, back_inserter(trigger_output));
324
325 trigger_output.merge(JEventOverlap(parameters.TMaxEvent_ns));
326
327 DEBUG("Number of triggers: " << trigger_output.size() << endl);
328
329 for (JTriggerOutput::const_iterator event = trigger_output.begin(); event != trigger_output.end(); ++event) {
330
331 JTriggeredEvent tev(*event,
332 timesliceRouter,
333 moduleRouter,
334 parameters.TMaxLocal_ns,
335 getTimeRange(parameters));
336
337 tev.setCounter(evt->getCounter());
338
339 outputFile.put(tev);
340 }
341 }
342 STATUS(endl);
343
344 JSingleFileScanner<typelist> io(inputFile);
345
346 selection.remove<JDAQEvent>();
347
348 io | JValve<typelist>(selection) | outputFile;
349
350 outputFile.close();
351}
string outputFile
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define STATUS(A)
Definition JMessage.hh:63
#define NOTICE(A)
Definition JMessage.hh:64
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:74
#define WARNING(A)
Definition JMessage.hh:65
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
void merge(const JMatch_t &match)
Merge events.
Detector data structure.
Definition JDetector.hh:96
Router for direct addressing of module data in detector data structure.
Data structure for a composite optical module.
Definition JModule.hh:76
const JPosition3D & getPosition() const
Get position.
General exception.
Definition JException.hh:24
Auxiliary class for selection of data type.
Definition JValve.hh:23
Utility class to parse command line options.
Definition JParser.hh:1698
Object writing to file.
Object reading from a list of files.
virtual bool hasNext() override
Check availability of next element.
counter_type getCounter() const
Get counter.
virtual const pointer_type & next() override
Get next element.
Template definition for direct access of elements in ROOT TChain.
1-dimensional frame with time calibrated data from one optical module.
2-dimensional frame with time calibrated data from one optical module.
Data structure for input to trigger algorithm.
Nano-beacon trigger.
Definition JTriggerNB.hh:21
Auxiliary class to build KM3NETDAQ::JDAQEvent for a triggered event.
int getFrameIndex() const
Get frame index.
JTriggerCounter_t getCounter() const
Get trigger counter.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
double getMaximalDistance(const JDetector &detector, const bool option=false)
Get maximal distance between modules in detector.
@ debug_t
debug
Definition JMessage.hh:29
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
std::set< JROOTClassSelector > getROOTClassSelection(const bool option=false)
Get ROOT class selection.
JTriggerParameters getTriggerParameters(const JMultipleFileScanner_t &file_list)
Get trigger parameters.
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39
double getFrameTime()
Get frame time duration.
Definition JDAQClock.hh:162
void setDAQLongprint(const bool option)
Set DAQ print option.
Definition JDAQPrint.hh:28
double getRTS()
Get TDC dynamic range.
Definition JDAQClock.hh:173
static const int HIGH_RATE_VETO_DISABLE
Enable (disable) use of high-rate veto test if this status bit is 0 (1);.
Definition pmt_status.hh:14
Detector file.
Definition JHead.hh:227
Match of two events considering overlap in time and position.
Transmission with position.
Definition JBillabong.cc:70
Type list.
Definition JTypeList.hh:23
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition JParser.hh:68
Auxiliary class for ROOT class selection.
void remove()
Remove data type.
Auxiliary class for defining the range of iterations of objects.
Definition JLimit.hh:45
static counter_type max()
Get maximum counter value.
Definition JLimit.hh:128
Auxiliary class for ROOT I/O of application specific meta data.
Definition JMeta.hh:72
Router for fast addressing of hits in KM3NETDAQ::JDAQTimeslice data structure as a function of the op...
Auxiliary data structure to convert (lambda) function to printable object.
Definition JManip.hh:726