67 using namespace KM3NETDAQ;
83 JParser<> zap(
"Auxiliary program to trigger time slice data.");
85 zap[
'f'] =
make_field(inputFile,
"input file.");
87 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
88 zap[
'a'] =
make_field(detectorFile,
"detector file.");
91 zap[
'C'] =
make_field(selector,
"timeslice selector, e.g. JDAQTimesliceL1.") = getROOTClassSelection<JDAQTimesliceTypes_t>();
96 catch(
const exception &error) {
97 FATAL(error.what() << endl);
105 DEBUG(
"Reset time [ms] " <<
getRTS() * 1e-6 << endl);
123 typedef double hit_type;
135 JTimer timerCC(
"Calibration");
140 JTimer timerRX(
"Timeslice router");
141 JTimer timerTR(
"Trigger");
142 JTimer timerTX(
"Trigger router");
143 JTimer timerTW(
"Timeslice writer");
144 JTimer timerSW(
"Summary writer");
167 DEBUG(
"Input file has no Monte Carlo header.");
170 unsigned int numberOfTriggers = 0;
176 for ( ;
in.hasNext() && counter != inputFile.getLimit(); ++counter) {
178 STATUS(
"event: " << setw(10) << counter <<
'\r');
DEBUG(endl);
182 DEBUG(*timeslice << endl);
186 timesliceRouter.configure(*timeslice);
197 for (JDAQTimeslice::const_iterator super_frame = timeslice->begin(); super_frame != timeslice->end(); ++super_frame) {
199 if (moduleRouter.hasModule(super_frame->getModuleID())) {
205 const JModule& module = moduleRouter.getModule(super_frame->getModuleID());
206 JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*super_frame, module);
212 buffer.applyHighRateVeto(
parameters.highRateVeto_Hz);
218 timesliceL0.push_back(JSuperFrame1D_t(buffer));
226 JSuperFrame2D_t::iterator __end = partition(buffer.begin(), buffer.end(),
parameters.triggerNB.pmts);
228 if (buffer.begin() != __end) {
230 timesliceNB.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
231 super_frame->getModuleIdentifier(),
234 buildL1(buffer.begin(), __end , back_inserter(*timesliceNB.rbegin()));
242 timesliceL1.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
243 super_frame->getModuleIdentifier(),
246 buildL1(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
254 timesliceL2.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
255 super_frame->getModuleIdentifier(),
258 buildL2(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
266 timesliceSN.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
267 super_frame->getModuleIdentifier(),
270 buildSN(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceSN.rbegin()));
284 for (JTriggerInput::const_iterator hit = trigger_input.begin(); hit != trigger_input.end(); ++hit) {
309 trigger3DMuon (trigger_input, back_inserter(trigger_output));
310 trigger3DShower(trigger_input, back_inserter(trigger_output));
311 triggerMXShower(trigger_input, timesliceL0, back_inserter(trigger_output));
315 numberOfTriggers += trigger_output.size();
319 DEBUG(
"Number of triggers: " << trigger_output.size() << endl);
321 for (JTriggerOutput::const_iterator event = trigger_output.begin();
event != trigger_output.end(); ++event) {
385 const double factor = 1.0 / (double) counter;
387 for (
const JTimer* buffer[] = { &timerCC, &timerL0, &timerL1, &timerL2, &timerSN, &timerRX, &timerTR, &timerTX, &timerTW, &timerSW, NULL }, **i = buffer; *i != NULL; ++i) {
388 (*i)->print(cout, factor);
391 NOTICE(
"Number of trigger/slices " << numberOfTriggers <<
"/" << counter << endl);
392 NOTICE(
"Trigger rate [Hz] " << numberOfTriggers * 1.0e9 * factor /
getFrameTime() << endl);
Utility class to parse command line options.
JTriggerMask_t getTriggerMask(const unsigned int bit)
Convert trigger bit to trigger mask.
Data structure for a composite optical module.
Auxiliary class to select ROOT class based on class name.
Router for direct addressing of module data in detector data structure.
esac print_variable DETECTOR INPUT_FILE OUTPUT_FILE CDF for TYPE in
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Long64_t counter_type
Type definition for counter.
Auxiliary class for multiplexing object iterators.
1-dimensional frame with time calibrated data from one optical module.
JTimeRange getTimeRange(const Evt &event)
Get time range (i.e. time between earliest and latest hit) of Monte Carlo event.
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
void setDAQLongprint(const bool option)
Set DAQ print option.
Auxiliary class for defining the range of iterations of objects.
double getMaximalDistance(const JDetector &detector)
Get maximal distance between modules in detector.
Exception for null pointer operation.
void merge(const JMatch_t &match)
Merge events.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Router for fast addressing of hits in KM3NETDAQ::JDAQTimeslice data structure as a function of the op...
double getFrameTime()
Get frame time duration.
Auxiliary class for CPU timing and usage.
const JDAQChronometer & getDAQChronometer() const
Get DAQ chronometer.
Auxiliary class to build JDAQEvent for a triggered event.
Auxiliary class to set DAQ system clock parameters.
void load(const JString &file_name, JDetector &detector)
Load detector from input file.
const JPosition3D & getPosition() const
Get position.
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred ...
Auxiliary class to build JDAQTimeslice for L1 timeslice.
double getRTS()
Get TDC dynamic range.
General purpose class for object reading from a list of file names.
2-dimensional frame with time calibrated data from one optical module.
const JLimit & getLimit() const
Get limit.
Match of two events considering overlap in time.
Time slice with calibrated data.
#define DEBUG(A)
Message macros.