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);
107 DEBUG(
"Reset time [ms] " <<
getRTS() * 1e-6 << endl);
138 JTimer timerCC(
"Calibration");
143 JTimer timerRX(
"Timeslice router");
144 JTimer timerTR(
"Trigger");
145 JTimer timerTX(
"Trigger router");
146 JTimer timerTW(
"Timeslice writer");
147 JTimer timerSW(
"Summary writer");
170 DEBUG(
"Input file has no Monte Carlo header.");
173 unsigned int numberOfTriggers = 0;
179 for ( ;
in.hasNext() && counter != inputFile.getLimit(); ++counter) {
181 STATUS(
"event: " << setw(10) << counter <<
'\r');
DEBUG(endl);
185 DEBUG(*timeslice << endl);
189 timesliceRouter.configure(*timeslice);
200 for (JDAQTimeslice::const_iterator super_frame = timeslice->begin(); super_frame != timeslice->end(); ++super_frame) {
202 if (moduleRouter.hasModule(super_frame->getModuleID())) {
208 const JModule& module = moduleRouter.getModule(super_frame->getModuleID());
209 JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*super_frame, module);
215 buffer.applyHighRateVeto(
parameters.highRateVeto_Hz);
221 timesliceL0.push_back(JSuperFrame1D_t(buffer));
229 JSuperFrame2D_t::iterator __end = partition(buffer.begin(), buffer.end(),
parameters.triggerNB.pmts);
231 if (buffer.begin() != __end) {
233 timesliceNB.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
234 super_frame->getModuleIdentifier(),
237 JSuperFrame1D_t zbuf;
239 buildL1(buffer.begin(), __end , back_inserter(zbuf));
241 buildNB(buffer.begin() , __end, zbuf, back_inserter(*timesliceNB.rbegin()));
249 timesliceL1.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
250 super_frame->getModuleIdentifier(),
253 buildL1(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
261 timesliceL2.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
262 super_frame->getModuleIdentifier(),
265 buildL2(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
273 timesliceSN.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
274 super_frame->getModuleIdentifier(),
277 buildSN(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceSN.rbegin()));
291 for (JTriggerInput::const_iterator hit = trigger_input.begin(); hit != trigger_input.end(); ++hit) {
316 trigger3DMuon (trigger_input, back_inserter(trigger_output));
317 trigger3DShower(trigger_input, back_inserter(trigger_output));
318 triggerMXShower(trigger_input, timesliceL0, back_inserter(trigger_output));
322 numberOfTriggers += trigger_output.size();
326 DEBUG(
"Number of triggers: " << trigger_output.size() << endl);
328 for (JTriggerOutput::const_iterator event = trigger_output.begin();
event != trigger_output.end(); ++event) {
392 const double factor = 1.0 / (double) counter;
394 for (
const JTimer* p : { &timerCC, &timerL0, &timerL1, &timerL2, &timerSN, &timerRX, &timerTR, &timerTX, &timerTW, &timerSW }) {
395 p->print(cout, factor);
398 NOTICE(
"Number of trigger/slices " << numberOfTriggers <<
"/" << counter << endl);
399 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.
Router for fast addressing of hits in KM3NETDAQ::JDAQTimeslice data structure as a function of the op...
Auxiliary class to select ROOT class based on class name.
Router for direct addressing of module data in detector data structure.
*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.
void merge(const JMatch_t &match)
Merge events.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
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.
const JPosition3D & getPosition() const
Get position.
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred ...
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
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.
then usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
2-dimensional frame with time calibrated data from one optical module.
const JLimit & getLimit() const
Get limit.
do set_variable DETECTOR_TXT $WORKDIR detector
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY source JAcoustics sh $DETECTOR_ID CHECK_EXIT_CODE typeset A TRIPODS get_tripods $WORKDIR tripod txt TRIPODS for EMITTER in
Match of two events considering overlap in time.
Time slice with calibrated data.