62 int main(
int argc,
char **argv)
71 JLimit_t& numberOfEvents = inputFile.getLimit();
82 JParser<> zap(
"Auxiliary program to trigger time slice data.");
84 zap[
'f'] =
make_field(inputFile,
"input file.");
86 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
87 zap[
'a'] =
make_field(detectorFile,
"detector file.");
90 zap[
'C'] =
make_field(selector,
"timeslice selector, e.g. JDAQTimesliceL1.") = getROOTClassSelection<JDAQTimesliceTypes_t>();
96 catch(
const exception &error) {
97 FATAL(error.what() << endl);
110 DEBUG(
"Reset time [ms] " <<
getRTS() * 1e-6 << endl);
111 DEBUG(
"Trigger" << endl << parameters << endl);
124 if (parameters.disableHighRateVeto) {
126 NOTICE(
"Disabling high-rate veto of all PMTs." << endl);
145 const JBuildL1_t buildL1(parameters);
146 const JBuildL2_t buildL2(parameters.L2);
147 const JBuildL2_t buildSN(parameters.SN);
148 const JBuildL2_t buildNB(parameters.NB);
150 JTimer timerCC(
"Calibration");
155 JTimer timerRX(
"Timeslice router");
156 JTimer timerTR(
"Trigger");
157 JTimer timerTX(
"Trigger router");
158 JTimer timerTW(
"Timeslice writer");
159 JTimer timerSW(
"Summary writer");
176 unsigned int numberOfTriggers = 0;
182 for ( ; in.
hasNext() && counter != inputFile.getLimit(); ++counter) {
184 STATUS(
"event: " << setw(10) << counter <<
'\r');
DEBUG(endl);
188 DEBUG(*timeslice << endl);
203 for (JDAQTimeslice::const_iterator super_frame = timeslice->begin(); super_frame != timeslice->end(); ++super_frame) {
205 if (moduleRouter.
hasModule(super_frame->getModuleID())) {
212 JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*super_frame, module);
218 buffer.applyHighRateVeto(parameters.highRateVeto_Hz);
224 timesliceL0.push_back(JSuperFrame1D_t(buffer));
230 if (parameters.triggerNB.enabled) {
232 JSuperFrame2D_t::iterator __end = partition(buffer.begin(), buffer.end(), parameters.triggerNB.pmts);
234 if (buffer.begin() != __end) {
236 timesliceNB.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
237 super_frame->getModuleIdentifier(),
240 JSuperFrame1D_t zbuf;
242 buildL1(buffer.begin(), __end , back_inserter(zbuf));
244 buildNB(buffer.begin() , __end, zbuf, back_inserter(*timesliceNB.rbegin()));
252 timesliceL1.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
253 super_frame->getModuleIdentifier(),
256 buildL1(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
264 timesliceL2.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
265 super_frame->getModuleIdentifier(),
268 buildL2(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
276 timesliceSN.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
277 super_frame->getModuleIdentifier(),
280 buildSN(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceSN.rbegin()));
288 if (parameters.triggerNB.enabled) {
294 for (JTriggerInput::const_iterator hit = trigger_input.begin(); hit != trigger_input.end(); ++hit) {
296 if (parameters.triggerNB.write()) {
303 parameters.TMaxLocal_ns,
304 parameters.triggerNB.DMax_m,
319 trigger3DMuon (trigger_input, back_inserter(trigger_output));
320 trigger3DShower(trigger_input, back_inserter(trigger_output));
321 triggerMXShower(trigger_input, timesliceL0, back_inserter(trigger_output));
325 numberOfTriggers += trigger_output.size();
329 DEBUG(
"Number of triggers: " << trigger_output.size() << endl);
331 for (JTriggerOutput::const_iterator event = trigger_output.begin(); event != trigger_output.end(); ++event) {
338 parameters.TMaxLocal_ns,
346 if (parameters.writeL0()) {
355 if (parameters.writeL1()) {
364 if (parameters.writeL2()) {
373 if (parameters.writeSN()) {
382 if (parameters.writeSummary()) {
395 const double factor = 1.0 / (double) counter;
397 for (
const JTimer* p : { &timerCC, &timerL0, &timerL1, &timerL2, &timerSN, &timerRX, &timerTR, &timerTX, &timerTW, &timerSW }) {
398 p->print(cout, factor);
401 NOTICE(
"Number of trigger/slices " << numberOfTriggers <<
"/" << counter << endl);
402 NOTICE(
"Trigger rate [Hz] " << numberOfTriggers * 1.0e9 * factor /
getFrameTime() << endl);
KM3NeT DAQ constants, bit handling, etc.
Data structure for detector geometry and calibration.
Recording of objects on file according a format that follows from the file name extension.
Basic data structure for L0 hit.
Basic data structure for L1 hit.
General purpose messaging.
#define DEBUG(A)
Message macros.
Direct access to module in detector data structure.
Scanning of objects from multiple files according a format that follows from the extension of each fi...
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
ROOT TTree parameter settings of various packages.
int main(int argc, char **argv)
Basic data structure for time and time over threshold information of hit.
void merge(const JMatch_t &match)
Merge events.
Router for direct addressing of module data in detector data structure.
const JModule & getModule(const JObjectID &id) const
Get module parameters.
bool hasModule(const JObjectID &id) const
Has module.
Data structure for a composite optical module.
Auxiliary class for CPU timing and usage.
const JPosition3D & getPosition() const
Get position.
Auxiliary class for multiplexing object iterators.
virtual bool hasNext() override
Check availability of next element.
virtual const pointer_type & next() override
Get next element.
Utility class to parse command line options.
General purpose class for object reading from a list of file names.
1-dimensional frame with time calibrated data from one optical module.
2-dimensional frame with time calibrated data from one optical module.
Auxiliary class to build JDAQTimeslice for L1 timeslice.
Time slice with calibrated data.
JTriggerbit_t getTriggerBit() const
Get the trigger bit.
Auxiliary class to build JDAQEvent for a triggered event.
const JDAQChronometer & getDAQChronometer() const
Get DAQ chronometer.
Auxiliary class to set DAQ system clock parameters.
void set(const JDAQClock_t clock)
Set clock type.
JTimeRange getTimeRange(const Evt &event)
Get time range (i.e. time between earliest and latest hit) of Monte Carlo event.
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.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Long64_t counter_type
Type definition for counter.
KM3NeT DAQ data structures and auxiliaries.
double getFrameTime()
Get frame time duration.
void setDAQLongprint(const bool option)
Set DAQ print option.
double getRTS()
Get TDC dynamic range.
JTriggerMask_t getTriggerMask(const unsigned int bit)
Convert trigger bit to trigger mask.
static const int HIGH_RATE_VETO_DISABLE
Enable (disable) use of high-rate veto test if this status bit is 0 (1);.
Match of two events considering overlap in time.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Auxiliary class to select ROOT class based on class name.
Auxiliary class for defining the range of iterations of objects.
Router for fast addressing of hits in KM3NETDAQ::JDAQTimeslice data structure as a function of the op...
void configure(const JDAQTimeslice ×lice)
Configure.