68   JMultipleFileScanner<JDAQTimesliceTypes_t> inputFile;
 
   74   JROOTClassSelector       selector;
 
   79     JParser<> zap(
"Auxiliary program to trigger time slice data.");
 
   81     zap[
'f'] = 
make_field(inputFile,      
"input file.");
 
   83     zap[
'n'] = 
make_field(numberOfEvents)      = JLimit::max();
 
   84     zap[
'a'] = 
make_field(detectorFile,   
"detector file.");
 
   87     zap[
'C'] = 
make_field(selector,       
"timeslice selector, e.g. JDAQTimesliceL1.")    = getROOTClassSelection<JDAQTimesliceTypes_t>();
 
   92   catch(
const exception &error) {
 
   93     FATAL(error.what() << endl);
 
  101   DEBUG(
"Reset time [ms] " << 
getRTS()       * 1e-6 << endl);
 
  102   DEBUG(
"Trigger"          << endl << parameters    << endl);
 
  107     load(detectorFile, detector);
 
  109   catch(
const JException& error) {
 
  115   const JModuleRouter moduleRouter(detector);
 
  119   typedef double        hit_type;
 
  121   typedef JSuperFrame1D<hit_type>   JSuperFrame1D_t;
 
  122   typedef JSuperFrame2D<hit_type>   JSuperFrame2D_t;
 
  123   typedef JTimeslice   <hit_type>   JTimeslice_t;
 
  124   typedef JBuildL1     <hit_type>   JBuildL1_t;
 
  125   typedef JBuildL2     <hit_type>   JBuildL2_t;
 
  127   const JBuildL1_t buildL1(parameters);
 
  128   const JBuildL2_t buildL2(parameters.
L2);
 
  129   const JBuildL2_t buildSN(parameters.
SN);
 
  131   JTimer timerCC(
"Calibration");
 
  132   JTimer timerL0(
"L0");
 
  133   JTimer timerL1(
"L1");
 
  134   JTimer timerL2(
"L2");
 
  135   JTimer timerSN(
"SN");
 
  136   JTimer timerRX(
"Timeslice router");
 
  137   JTimer timerTR(
"Trigger");
 
  138   JTimer timerTX(
"Trigger router");
 
  139   JTimer timerTW(
"Timeslice writer");
 
  140   JTimer timerSW(
"Summary writer");
 
  142   JTimesliceRouter timesliceRouter(parameters.
numberOfBins);
 
  144   const JTriggerNB       triggerNB      (parameters);
 
  145   const JTrigger3DMuon   trigger3DMuon  (parameters);
 
  146   const JTrigger3DShower trigger3DShower(parameters);
 
  147   const JTriggerMXShower triggerMXShower(parameters, detector);
 
  157   unsigned int numberOfTriggers = 0;
 
  159   JObjectMultiplexer<JDAQTimesliceTypes_t, JDAQTimeslice> in(inputFile, selector);
 
  163   for ( ; in.hasNext() && counter != inputFile.getLimit(); ++counter) {
 
  165     STATUS(
"event: " << setw(10) << counter << 
'\r'); 
DEBUG(endl);
 
  169     DEBUG(*timeslice << endl);
 
  173     timesliceRouter.configure(*timeslice);
 
  184     for (JDAQTimeslice::const_iterator super_frame = timeslice->begin(); super_frame != timeslice->end(); ++super_frame) {
 
  186       if (!moduleRouter.hasModule(super_frame->getModuleID())) {
 
  187         ERROR(
"Missing module: " << super_frame->getModuleID() << endl);
 
  195       const JModule&   module = moduleRouter.getModule(super_frame->getModuleID()); 
 
  196       JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*super_frame, module);
 
  208       timesliceL0.push_back(JSuperFrame1D_t(buffer));
 
  216         JSuperFrame2D_t::iterator __end = partition(buffer.begin(), buffer.end(), parameters.
triggerNB.
pmts); 
 
  218         if (buffer.begin() != __end) {
 
  220           timesliceNB.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
 
  221                                                 super_frame->getModuleIdentifier(),
 
  222                                                 module.getPosition()));
 
  224           buildL1(buffer.begin(), __end , back_inserter(*timesliceNB.rbegin()));
 
  232       timesliceL1.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
 
  233                                             super_frame->getModuleIdentifier(),
 
  234                                             module.getPosition()));
 
  236       buildL1(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
 
  244       timesliceL2.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
 
  245                                             super_frame->getModuleIdentifier(),
 
  246                                             module.getPosition()));
 
  248       buildL2(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
 
  256       timesliceSN.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
 
  257                                             super_frame->getModuleIdentifier(),
 
  258                                             module.getPosition()));
 
  260       buildSN(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceSN.rbegin()));
 
  270       const JTriggerInput  trigger_input(timesliceNB);
 
  272       for (JTriggerInput::const_iterator hit = trigger_input.begin(); hit != trigger_input.end(); ++hit) {
 
  274         JTriggeredEvent tev(timesliceNB.getDAQChronometer(),
 
  289     JTriggerInput  trigger_input(timesliceL2);
 
  290     JTriggerOutput trigger_output;
 
  292     trigger3DMuon  (trigger_input, back_inserter(trigger_output));
 
  293     trigger3DShower(trigger_input, back_inserter(trigger_output));
 
  294     triggerMXShower(trigger_input, timesliceL0, back_inserter(trigger_output));
 
  296     trigger_output.merge(JEventOverlap(parameters.
TMaxEvent_ns));
 
  298     numberOfTriggers += trigger_output.size();
 
  302     DEBUG(
"Number of triggers: " << trigger_output.size() << endl);
 
  304     for (JTriggerOutput::const_iterator event = trigger_output.begin(); 
event != trigger_output.end(); ++event) {
 
  308       JTriggeredEvent tev(*event, 
 
  332       outputFile.put(JTimesliceL1<JDAQTimesliceL1>(timesliceL1, timesliceRouter, moduleRouter, parameters.
TMaxLocal_ns));
 
  341       outputFile.put(JTimesliceL1<JDAQTimesliceL2>(timesliceL2, timesliceRouter, moduleRouter, parameters.
L2.
TMaxLocal_ns));
 
  350       outputFile.put(JTimesliceL1<JDAQTimesliceSN>(timesliceSN, timesliceRouter, moduleRouter, parameters.
SN.
TMaxLocal_ns));
 
  368     const double factor = 1.0 / (double) counter;
 
  370     for (
const JTimer* buffer[] = { &timerCC, &timerL0, &timerL1, &timerL2, &timerSN, &timerRX, &timerTR, &timerTX, &timerTW, &timerSW, NULL }, **i = buffer; *i != NULL; ++i) {
 
  371       (*i)->print(cout, factor);
 
  374     NOTICE(
"Number of trigger/slices " << numberOfTriggers << 
"/" << counter << endl);
 
  375     NOTICE(
"Trigger rate [Hz]        " << numberOfTriggers * 1.0e9 * factor / 
getFrameTime() << endl);
 
  378   JMultipleFileScanner<JMetaTypes_t> io(inputFile);