Jpp
JTriggerReprocessor.cc
Go to the documentation of this file.
1 
2 #include <string>
3 #include <iostream>
4 #include <iomanip>
5 
6 #include "evt/Head.hh"
7 #include "evt/Evt.hh"
8 #include "evt/Hit.hh"
9 #include "JDAQ/JDAQ.hh"
10 #include "JDAQ/JDAQClock.hh"
11 #include "JDAQ/JDAQTimeslice.hh"
12 #include "JDAQ/JDAQEvent.hh"
13 #include "JDAQ/JDAQSummaryslice.hh"
14 #include "JDAQ/JDAQEvaluator.hh"
15 
16 #include "JDetector/JDetector.hh"
19 
20 #include "JTrigger/JHit.hh"
21 #include "JTrigger/JHitToolkit.hh"
24 #include "JTrigger/JTimeslice.hh"
25 #include "JTrigger/JHitL0.hh"
26 #include "JTrigger/JHitL1.hh"
27 #include "JTrigger/JBuildL1.hh"
28 #include "JTrigger/JBuildL2.hh"
32 #include "JTrigger/JTriggerBits.hh"
36 #include "JTrigger/JTimesliceL1.hh"
39 
41 #include "JSupport/JTreeScanner.hh"
43 #include "JSupport/JSupport.hh"
44 #include "JSupport/JMeta.hh"
46 
47 #include "Jeep/JParser.hh"
48 #include "Jeep/JMessage.hh"
49 
50 
51 /**
52  * \file
53  * Auxiliary program to re-trigger KM3NETDAQ::JDAQEvent data.
54  * \author mdejong
55  */
56 int main(int argc, char **argv)
57 {
58  using namespace std;
59  using namespace JPP;
60  using namespace KM3NETDAQ;
61 
62  typedef JAllTypes_t typelist;
63 
64  JSingleFileScanner<JDAQEvent> inputFile;
65  JFileRecorder<typelist> outputFile;
66  JLimit_t& numberOfEvents = inputFile.getLimit();
67  string detectorFile;
68  JTriggerParameters parameters;
69  bool reuse_parameters;
70  int debug;
71 
72  try {
73 
74  JParser<> zap("Auxiliary program to re-trigger event data.");
75 
76  zap['f'] = make_field(inputFile);
77  zap['o'] = make_field(outputFile) = "trigger_reprocessor.root";
78  zap['n'] = make_field(numberOfEvents) = JLimit::max();
79  zap['a'] = make_field(detectorFile);
80  zap['@'] = make_field(parameters) = JPARSER::initialised();
81  zap['U'] = make_field(reuse_parameters);
82  zap['d'] = make_field(debug) = 0;
83 
84  zap(argc, argv);
85  }
86  catch(const exception &error) {
87  FATAL(error.what() << endl);
88  }
89 
90 
91  cout.tie(&cerr);
92 
94 
95  DEBUG("Frame time [ms] " << getFrameTime() * 1e-6 << endl);
96  DEBUG("Reset time [ms] " << getRTS() * 1e-6 << endl);
97  DEBUG("Trigger" << endl << parameters << endl);
98 
99  JDetector detector;
100 
101  try {
102  load(detectorFile, detector);
103  }
104  catch(const JException& error) {
105  FATAL(error);
106  }
107 
108  if (reuse_parameters) {
109 
110  try {
111 
112  parameters = getTriggerParameters(inputFile);
113 
114  NOTICE("Set trigger parameters from input." << endl);
115  }
116  catch(const JException& error) {
117  FATAL("No trigger parameters from input." << endl);
118  }
119  }
120 
121  parameters.set(getMaximalDistance(detector));
122 
123  const JModuleRouter moduleRouter(detector);
124 
125  if (parameters.writeSummary()) { WARNING("Discard writeSummary option during reprocesing of data." << endl); }
126  if (parameters.writeL1()) { WARNING("Discard writeL1 option during reprocesing of data." << endl); }
127  if (parameters.writeL2()) { WARNING("Discard writeL2 option during reprocesing of data." << endl); }
128  if (parameters.writeSN()) { WARNING("Discard writeSN option during reprocesing of data." << endl); }
129 
130  //typedef JHit hit_type;
131  //typedef int hit_type;
132  typedef double hit_type;
133 
134  typedef JSuperFrame1D<hit_type> JSuperFrame1D_t;
135  typedef JSuperFrame2D<hit_type> JSuperFrame2D_t;
136  typedef JTimeslice <hit_type> JTimeslice_t;
137  typedef JBuildL1 <hit_type> JBuildL1_t;
138  typedef JBuildL2 <hit_type> JBuildL2_t;
139 
140  const JBuildL1_t buildL1(parameters);
141  const JBuildL2_t buildL2(parameters.L2);
142 
143  JTimesliceRouter timesliceRouter(parameters.numberOfBins);
144 
145  const JTrigger3DMuon trigger3DMuon (parameters);
146  const JTrigger3DShower trigger3DShower(parameters);
147  const JTriggerMXShower triggerMXShower(parameters, detector);
148 
149 
150  outputFile.open();
151 
152  if (!outputFile.is_open()) FATAL("Error opening file " << outputFile << endl);
153 
154  outputFile.put(JMeta(argc, argv));
155  outputFile.put(parameters);
156 
157 
159 
160  JTreeScanner<JDAQSummaryslice, JDAQEvaluator> scan(inputFile);
161 
162  if (scan.getEntries() == 0) {
163  FATAL("No summary data." << endl);
164  }
165 
166  while (inputFile.hasNext()) {
167 
168  STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl);
169 
170  JDAQEvent* evt = inputFile.next();
171  Long64_t index = scan.find(*evt);
172  JDAQSummaryslice* summary = scan.getEntry(index);
173 
174  if (evt->getFrameIndex() != summary->getFrameIndex()) {
175  DEBUG("Frame indices " << evt->getFrameIndex() << " != " << summary->getFrameIndex() << endl);
176  }
177 
178  JDAQTimeslice timeslice(*evt, *summary);
179 
180  DEBUG(timeslice << endl);
181 
182  timesliceRouter.configure(timeslice);
183 
184 
185  JTimeslice_t timesliceL0(timeslice.getDAQChronometer());
186  JTimeslice_t timesliceL1(timeslice.getDAQChronometer());
187  JTimeslice_t timesliceL2(timeslice.getDAQChronometer());
188 
189  for (JDAQTimeslice::const_iterator super_frame = timeslice.begin(); super_frame != timeslice.end(); ++super_frame) {
190 
191  if (!moduleRouter.hasModule(super_frame->getModuleID())) {
192  ERROR("Missing module: " << super_frame->getModuleID() << endl);
193  continue;
194  }
195 
196  // calibration
197 
198  const JModule& module = moduleRouter.getModule(super_frame->getModuleID());
199  JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*super_frame, module);
200 
201  // Apply high-rate veto
202 
203  buffer.applyHighRateVeto(parameters.highRateVeto_Hz);
204 
205  // L0
206 
207  timesliceL0.push_back(JSuperFrame1D_t(buffer));
208 
209  // L1
210 
211  timesliceL1.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
212  super_frame->getModuleIdentifier(),
213  module.getPosition()));
214 
215  buildL1(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
216 
217  // L2
218 
219  timesliceL2.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
220  super_frame->getModuleIdentifier(),
221  module.getPosition()));
222 
223  buildL2(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
224  }
225 
226 
227  // Trigger
228 
229  JTriggerInput trigger_input(timesliceL2);
230  JTriggerOutput trigger_output;
231 
232  trigger3DMuon (trigger_input, back_inserter(trigger_output));
233  trigger3DShower(trigger_input, back_inserter(trigger_output));
234  triggerMXShower(trigger_input, timesliceL0, back_inserter(trigger_output));
235 
236  trigger_output.merge(JEventOverlap(parameters.TMaxEvent_ns));
237 
238  DEBUG("Number of triggers: " << trigger_output.size() << endl);
239 
240  for (JTriggerOutput::const_iterator event = trigger_output.begin(); event != trigger_output.end(); ++event) {
241 
242  JTriggeredEvent tev(*event,
243  timesliceRouter,
244  moduleRouter,
245  parameters.TMaxLocal_ns,
246  getTimeRange(parameters));
247 
248  tev.setCounter(evt->getCounter());
249 
250  outputFile.put(tev);
251  }
252  }
253  STATUS(endl);
254 
255  JSingleFileScanner<JRemove<typelist, JDAQEvent>::typelist> io(inputFile);
256 
257  io >> outputFile;
258 
259  outputFile.close();
260 }
JMeta.hh
JDAQ.hh
JSUPPORT::getTriggerParameters
JTriggerParameters getTriggerParameters(const JMultipleFileScanner_t &file_list)
Get trigger parameters.
Definition: JTriggerParametersSupportkit.hh:148
JTRIGGER::JTriggerParameters::numberOfBins
int numberOfBins
number of bins for lookup table of timeslice
Definition: JTriggerParameters.hh:324
KM3NETDAQ::JDAQEvent
DAQ Event.
Definition: JDAQEvent.hh:34
JTriggerParameters.hh
JSingleFileScanner.hh
JDETECTOR::getMaximalDistance
double getMaximalDistance(const JDetector &detector)
Get maximal distance between modules in detector.
Definition: JDetectorToolkit.hh:76
JFileRecorder.hh
JSuperFrame2D.hh
JAANET::getTimeRange
JTimeRange getTimeRange(const Evt &event)
Get time range (i.e.
Definition: JAAnetToolkit.hh:134
JTrigger3DMuon.hh
JTriggeredEvent.hh
JMessage.hh
KM3NETDAQ::getRTS
double getRTS()
Get TDC dynamic range.
Definition: JDAQClock.hh:173
JTRIGGER::JTriggerParameters::set
void set(const double DMax_m=0.0)
Set dependent trigger parameters.
Definition: JTriggerParameters.hh:141
JTRIGGER::JTriggerParameters::TMaxLocal_ns
double TMaxLocal_ns
maximal time difference between L0 hits for L1
Definition: JTriggerParameters.hh:322
JTRIGGER::JTriggerParameters
Data structure for all trigger parameters.
Definition: JTriggerParameters.hh:116
KM3NETDAQ::JDAQTriggerCounter::getCounter
JTriggerCounter_t getCounter() const
Get trigger counter.
Definition: JDAQTriggerCounter.hh:98
JTriggerToolkit.hh
JTimeslice.hh
JPARSER::initialised
Empty structure for specification of parser element that is initialised (i.e.
Definition: JParser.hh:63
JDETECTOR::load
void load(const JString &file_name, JDetector &detector)
Load detector from input file.
Definition: JDetectorToolkit.hh:456
JTRIGGER::JTriggerParameters::TMaxEvent_ns
double TMaxEvent_ns
maximal time before and after event for snapshot
Definition: JTriggerParameters.hh:323
KM3NETDAQ::JDAQChronometer::getFrameIndex
int getFrameIndex() const
Get frame index.
Definition: JDAQChronometer.hh:132
JSUPPORT::JLimit_t
JLimit JLimit_t
Type definition of limit.
Definition: JLimit.hh:215
KM3NETDAQ::JDAQTimeslice
Data time slice.
Definition: JDAQTimeslice.hh:36
JPARSER::JParser
Utility class to parse command line options.
Definition: JParser.hh:1493
JDAQClock.hh
NOTICE
#define NOTICE(A)
Definition: JMessage.hh:64
JDAQTimeslice.hh
JTreeScanner.hh
JTriggerBits.hh
JTRIGGER::JTriggerParameters::L2
JL2Parameters L2
L2 processing.
Definition: JTriggerParameters.hh:327
JDAQSummaryslice.hh
KM3NETDAQ::getFrameTime
double getFrameTime()
Get frame time duration.
Definition: JDAQClock.hh:162
JSupport.hh
JPP
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Definition: JAAnetToolkit.hh:37
JBuildL1.hh
ERROR
#define ERROR(A)
Definition: JMessage.hh:66
JTriggerMXShower.hh
WARNING
#define WARNING(A)
Definition: JMessage.hh:65
JTRIGGER::JTriggerParameters::writeL2
JPrescaler writeL2
write JDAQTimeslice with L2 data
Definition: JTriggerParameters.hh:334
debug
int debug
debug level
Definition: JSirene.cc:59
KM3NETDAQ::JDAQTriggerCounter::next
JTriggerCounter_t next()
Increment trigger counter.
Definition: JDAQTriggerCounter.hh:120
JHitToolkit.hh
JTimesliceL1.hh
JSUPPORT::JLimit::getLimit
const JLimit & getLimit() const
Get limit.
Definition: JLimit.hh:73
JEventOverlap.hh
KM3NETDAQ::JDAQSummaryslice
Data summary slice.
Definition: JDAQSummaryslice.hh:31
JHit.hh
JModuleRouter.hh
JLANG::JTypeList
Type list.
Definition: JTypeList.hh:22
STATUS
#define STATUS(A)
Definition: JMessage.hh:63
JBuildL2.hh
JParser.hh
JDetectorToolkit.hh
JTriggerParametersSupportkit.hh
JHitL1.hh
JTimesliceRouter.hh
JTRIGGER::JTriggerParameters::writeSummary
JPrescaler writeSummary
write JDAQSummaryslice
Definition: JTriggerParameters.hh:331
JTRIGGER::JTriggerParameters::highRateVeto_Hz
double highRateVeto_Hz
high-rate veto [Hz]
Definition: JTriggerParameters.hh:319
make_field
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1954
JTrigger3DShower.hh
KM3NETDAQ::JDAQChronometer::getDAQChronometer
const JDAQChronometer & getDAQChronometer() const
Get DAQ chronometer.
Definition: JDAQChronometer.hh:88
JSuperFrame1D.hh
JSUPPORT::JMeta
Auxiliary class for ROOT I/O of application specific meta data.
Definition: JMeta.hh:71
DEBUG
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
std
Definition: jaanetDictionary.h:36
JTRIGGER::JTriggerParameters::writeSN
JPrescaler writeSN
write JDAQTimeslice with SN data
Definition: JTriggerParameters.hh:335
KM3NETDAQ
KM3NeT DAQ data structures and auxiliaries.
Definition: DataQueue.cc:39
JDAQEvent.hh
KM3NETDAQ::setDAQLongprint
void setDAQLongprint(const bool option)
Set DAQ print option.
Definition: JDAQPrint.hh:28
JTRIGGER::JTriggerParameters::writeL1
JPrescaler writeL1
write JDAQTimeslice with L1 data
Definition: JTriggerParameters.hh:333
JDAQEvaluator.hh
JDetector.hh
JHitL0.hh
FATAL
#define FATAL(A)
Definition: JMessage.hh:67
outputFile
string outputFile
Definition: JDAQTimesliceSelector.cc:37
JEEP::debug_t
debug
Definition: JMessage.hh:29
main
int main(int argc, char **argv)
Definition: JTriggerReprocessor.cc:56