55 int main(
int argc, 
char **argv)
 
   58   using namespace KM3NETDAQ;
 
   63   JMultipleFileScanner<JDAQTimesliceTypes_t> inputFile;
 
   69   JROOTClassSelector       selector;
 
   74     JParser<> zap(
"Auxiliary program to trigger time slice data.");
 
   76     zap[
'f'] = 
make_field(inputFile,      
"input file.");
 
   78     zap[
'n'] = 
make_field(numberOfEvents)      = JLimit::max();
 
   79     zap[
'a'] = 
make_field(detectorFile,   
"detector file.");
 
   82     zap[
'C'] = 
make_field(selector,       
"timeslice selector, e.g. JDAQTimesliceL1.")    = getROOTClassSelection<JDAQTimesliceTypes_t>();
 
   87   catch(
const exception &error) {
 
   88     FATAL(error.what() << endl);
 
   97   DEBUG(
"Reset time [ms] " << 
getRTS()       * 1e-6 << endl);
 
   98   DEBUG(
"Trigger"          << endl << parameters    << endl);
 
  103     load(detectorFile, detector);
 
  105   catch(
const JException& error) {
 
  111   const JModuleRouter moduleRouter(detector);
 
  128   JTimer timerCC(
"Calibration");
 
  129   JTimer timerL0(
"L0");
 
  130   JTimer timerL1(
"L1");
 
  131   JTimer timerL2(
"L2");
 
  132   JTimer timerSN(
"SN");
 
  133   JTimer timerRX(
"Timeslice router");
 
  134   JTimer timerTR(
"Trigger");
 
  135   JTimer timerTX(
"Trigger router");
 
  136   JTimer timerTW(
"Timeslice writer");
 
  137   JTimer timerSW(
"Summary writer");
 
  139   JTimesliceRouter timesliceRouter(parameters.numberOfBins);
 
  141   const JTrigger3DMuon   trigger3DMuon  (parameters);
 
  142   const JTrigger3DShower trigger3DShower(parameters);
 
  143   const JTriggerMXShower triggerMXShower(parameters, detector);
 
  153   unsigned int numberOfTriggers = 0;
 
  155   JObjectMultiplexer<JDAQTimesliceTypes_t, JDAQTimeslice> in(inputFile, selector);
 
  159   for ( ; in.hasNext() && counter != inputFile.getLimit(); ++counter) {
 
  161     STATUS(
"event: " << setw(10) << counter << 
'\r'); 
DEBUG(endl);
 
  165     DEBUG(*timeslice << endl);
 
  169     timesliceRouter.configure(*timeslice);
 
  179     for (JDAQTimeslice::const_iterator super_frame = timeslice->begin(); super_frame != timeslice->end(); ++super_frame) {
 
  181       if (!moduleRouter.hasModule(super_frame->getModuleID())) {
 
  182         ERROR(
"Missing module: " << super_frame->getModuleID() << endl);
 
  190       const JModule&   module = moduleRouter.getModule(super_frame->getModuleID()); 
 
  191       JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*super_frame, module);
 
  211       timesliceL1.push_back(
JSuperFrame1D_t(super_frame->getDAQChronometer(),
 
  212                                             super_frame->getModuleIdentifier(),
 
  213                                             module.getPosition()));
 
  215       buildL1(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
 
  223       timesliceL2.push_back(
JSuperFrame1D_t(super_frame->getDAQChronometer(),
 
  224                                             super_frame->getModuleIdentifier(),
 
  225                                             module.getPosition()));
 
  227       buildL2(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
 
  235       timesliceSN.push_back(
JSuperFrame1D_t(super_frame->getDAQChronometer(),
 
  236                                             super_frame->getModuleIdentifier(),
 
  237                                             module.getPosition()));
 
  239       buildSN(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceSN.rbegin()));
 
  249     JTriggerInput  trigger_input(timesliceL2);
 
  250     JTriggerOutput trigger_output;
 
  252     trigger3DMuon  (trigger_input, back_inserter(trigger_output));
 
  253     trigger3DShower(trigger_input, back_inserter(trigger_output));
 
  254     triggerMXShower(trigger_input, timesliceL0, back_inserter(trigger_output));
 
  256     trigger_output.merge(JEventOverlap(parameters.TMaxEvent_ns));
 
  258     numberOfTriggers += trigger_output.size();
 
  262     DEBUG(
"Number of triggers: " << trigger_output.size() << endl);
 
  264     for (JTriggerOutput::const_iterator 
event = trigger_output.begin(); 
event != trigger_output.end(); ++
event) {
 
  268       JTriggeredEvent tev(*
event, 
 
  271                           parameters.TMaxLocal_ns, 
 
  279     if (parameters.writeL0()) {
 
  288     if (parameters.writeL1()) {
 
  292       outputFile.put(JTimesliceL1<JDAQTimesliceL1>(timesliceL1, timesliceRouter, moduleRouter, parameters.TMaxLocal_ns));
 
  297     if (parameters.writeL2()) {
 
  301       outputFile.put(JTimesliceL1<JDAQTimesliceL2>(timesliceL2, timesliceRouter, moduleRouter, parameters.L2.TMaxLocal_ns));
 
  306     if (parameters.writeSN()) {
 
  310       outputFile.put(JTimesliceL1<JDAQTimesliceSN>(timesliceSN, timesliceRouter, moduleRouter, parameters.SN.TMaxLocal_ns));
 
  315     if (parameters.writeSummary()) {
 
  328     const double factor = 1.0 / (double) counter;
 
  330     for (
const JTimer* buffer[] = { &timerCC, &timerL0, &timerL1, &timerL2, &timerSN, &timerRX, &timerTR, &timerTX, &timerTW, &timerSW, NULL }, **i = buffer; *i != NULL; ++i) {
 
  331       (*i)->print(cout, factor);
 
  334     NOTICE(
"Number of trigger/slices " << numberOfTriggers << 
"/" << counter << endl);
 
  335     NOTICE(
"Trigger rate [Hz]        " << numberOfTriggers * 1.0e9 * factor / 
getFrameTime() << endl);
 
  338   JMultipleFileScanner<JMetaTypes_t> io(inputFile);
 
Utility class to parse command line options. 
 
Data structure for all trigger parameters. 
 
JBuildL2< hit_type > JBuildL2_t
 
Recording of objects on file according a format that follows from the file name extension. 
 
Structure to store the ToT mean and standard deviation of the hits produced by a nanobeacon in a sour...
 
Empty structure for specification of parser element that is initialised (i.e. 
 
Long64_t counter_type
Type definition for counter. 
 
JSuperFrame2D< hit_type > JSuperFrame2D_t
 
Data structure for detector geometry and calibration. 
 
JTimeRange getTimeRange(const Evt &event)
Get time range (i.e. 
 
Basic data structure for L0 hit. 
 
JLimit JLimit_t
Type definition of limit. 
 
JBuildL1< hit_type > JBuildL1_t
 
Basic data structure for time and time over threshold information of hit. 
 
void setDAQLongprint(const bool option)
Set DAQ print option. 
 
double getMaximalDistance(const JDetector &detector)
Get maximal distance between modules in detector. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
double getFrameTime()
Get frame time duration. 
 
const JDAQChronometer & getDAQChronometer() const 
Get DAQ chronometer. 
 
void applyHighRateVeto(const double rate_Hz)
Apply high-rate veto. 
 
Auxiliary class to set DAQ system clock parameters. 
 
void load(const JString &file_name, JDetector &detector)
Load detector from input file. 
 
JTimeslice< hit_type > JTimeslice_t
 
General purpose messaging. 
 
Scanning of objects from multiple files according a format that follows from the extension of each fi...
 
Direct access to module in detector data structure. 
 
double getRTS()
Get TDC dynamic range. 
 
Utility class to parse command line options. 
 
ROOT TTree parameter settings. 
 
2-dimensional frame with time calibrated data from one optical module. 
 
const JLimit & getLimit() const 
Get limit. 
 
KM3NeT DAQ constants, bit handling, etc. 
 
Basic data structure for L1 hit. 
 
Time slice with calibrated data. 
 
#define DEBUG(A)
Message macros. 
 
JSuperFrame1D< hit_type > JSuperFrame1D_t
 
int main(int argc, char *argv[])