102{
  106 
  108 
  110  JLimit_t&              numberOfEvents = inputFile.getLimit();
 
  113  JPeriod                is_periodic;
  114  int                    numberOfHits;
  115  int                    numberOfColumns;
  118 
  119  try { 
  120 
  121    JParser<> zap(
"Example program to search for spurious hits.");
 
  122    
  123    zap[
'f'] = 
make_field(inputFile,         
"input file).");
 
  126    zap[
'T'] = 
make_field(ToT_ns,            
"time-over-threshold range [ns]");
 
  127    zap[
'p'] = 
make_field(is_periodic,       
"periodicity");
 
  128    zap[
'M'] = 
make_field(numberOfHits,      
"minimum number of hits for periodicity");
 
  129    zap[
'N'] = 
make_field(numberOfColumns,   
"number of columns for printing")            = 5;
 
  132    
  133    zap(argc, argv);
  134  }
  135  catch(const exception& error) {
  136    FATAL(error.what() << endl);
 
  137  }
  138 
  139 
  141 
  142  for (
counter_type counter = 0; in.hasNext() && counter != inputFile.getLimit(); ++counter) {
 
  143 
  144    STATUS(
"event: " << setw(10) << counter << 
'\r'); 
DEBUG(endl);
 
  145 
  147 
  148    for (JDAQTimeslice::const_iterator frame = timeslice->begin(); frame != timeslice->end(); ++frame) {
  149 
  150      
  151 
  154 
  155      buffer2D_type buffer(numeric_limits<JDAQHit::JPMT_t>::max(), buffer1D_type());
  156 
  158        buffer[hit->getPMT()].push_back(*hit);
  159      }
  160 
  161      
  162 
  164 
  166 
  167        if (!buffer[pmt].empty()) {
  168 
  170 
  171          for (buffer1D_type::iterator i = buffer[pmt].begin(); i != buffer[pmt].end(); ) {
  172 
  173            if (ToT_ns(i->getToT())) {
  174 
  175              buffer1D_type::iterator p = i;
  176 
  177              for (++p; p != buffer[pmt].end() && ToT_ns(p->getToT()) && is_periodic(*i, *p); ++p) {}
  178 
  179              if (
distance(i, p) >= numberOfHits) {
 
  180                top[id].push_back(*i);
  181              }
  182 
  183              i = p;
  184 
  185            } else {
  186 
  187              ++i;
  188            }
  189          }
  190        }
  191      }
  192 
  193 
  195 
  197 
  198          if (veto.count(i->first) == 0) {
  199 
  200            const int pmt = i->first.getPMTAddress();
  201 
  203                 << setw(9) << i->first.getModuleID() << 
'.' << 
FILL(2,
'0') << i->first.getPMTAddress()   << 
FILL() << 
' ' 
  204                 << setw(1) << frame->testHighRateVeto(pmt) 
  205                 << setw(1) << frame->testFIFOStatus  (pmt)  << endl;
  206 
  207            int count = 0;
  208 
  209            string eol = "";
  210 
  212 
  213              const bool has_pmt  =  (hit->getPMT() == i->first.getPMTAddress());
  214              const bool has_hit  =  (find(i->second.begin(), i->second.end(), *hit) != i->second.end());
  215 
  216              if (has_pmt) {
  217 
  218                if (has_hit) {
  219                  eol = "*";
  220                }
  221                
  222                cout << setw(10) << hit->getT() << 
' ' << setw(3) << (int) hit->getToT() << 
' ' << 
RESET;
 
  223 
  224                if ((++count % numberOfColumns) == 0) {
  225 
  226                  cout << eol << endl;
  227 
  228                  eol = "";
  229                }
  230              }
  231            }
  232 
  233            cout << endl << "press any key to continue> " << flush;
  234          
  236 
  237            cout << endl;
  238          }
  239        }
  240      }
  241    }
  242  }
  244}
#define DEBUG(A)
Message macros.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
 
Auxiliary class for multiplexing object iterators.
 
Utility class to parse command line options.
 
General purpose class for object reading from a list of file names.
 
Enable unbuffered terminal input.
 
char get()
Get single character.
 
int getRunNumber() const
Get run number.
 
int getFrameIndex() const
Get frame index.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
std::set< JROOTClassSelector > getROOTClassSelection(const bool option=false)
Get ROOT class selection.
 
Long64_t counter_type
Type definition for counter.
 
KM3NeT DAQ data structures and auxiliaries.
 
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
 
Auxiliary data structure for sequence of same character.
 
Type definition of range.
 
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.
 
static counter_type max()
Get maximum counter value.