64   using namespace KM3NETDAQ;
 
   72   int                numberOfTimeslices;
 
   83     JParser<> zap(
"Example program to search for correlations between triggered events and timeslice data.");
 
   88     zap[
'n'] = 
make_field(numberOfEvents)      = JLimit::max();
 
   91     zap[
'N'] = 
make_field(numberOfTimeslices)  = 100;
 
   94     zap[
'C'] = 
make_field(selector)            = 
"", getROOTClassSelection<JDAQTimesliceTypes_t>();
 
  100     zap.read(argc, argv);
 
  102   catch(
const exception& error) {
 
  103     FATAL(error.what() << endl);
 
  129   const Double_t xmin = -(numberOfTimeslices + 1) * 
getFrameTime() - 0.5*binWidth_ns;
 
  130   const Double_t xmax = +(numberOfTimeslices + 1) * 
getFrameTime() + 0.5*binWidth_ns;
 
  131   const Int_t    nx   = (Int_t) ((xmax - xmin) / binWidth_ns);
 
  133   JManager_t manager(
new TH1D(
"M_%", NULL, nx, xmin, xmax));
 
  141   if (selector == 
"") {
 
  149       FATAL(
"No timeslice data." << endl);
 
  152     NOTICE(
"Selected class " << ps->getClassName() << endl);
 
  158     ps->configure(inputFile);
 
  179   ps->setLimit(inputFile.getLimit());
 
  186   map_type peaksPerDoms;
 
  194   for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  195     oosDomsId[module->getID()] = 
false;
 
  201       STATUS(
"event: " << setw(10) << 
in.getCounter() << 
'\r'); 
DEBUG(endl);
 
  208       bool test_OOS = 
false; 
 
  211         t0 += 
getTime(*hit, router.getPMT(*hit));
 
  213         if(oosDomsId[hit->getModuleID()]) {
 
  219       if(test_OOS) 
continue; 
 
  224       buffer[
event->getFrameIndex()].push_back(t0);
 
  231     while (ps->hasNext()) {
 
  233       STATUS(
"event: " << setw(10) << ps->getCounter() << 
'\r'); 
DEBUG(endl);
 
  237       map_type::const_iterator p = buffer.lower_bound(timeslice->
getFrameIndex() - numberOfTimeslices);
 
  238       map_type::const_iterator q = buffer.upper_bound(timeslice->
getFrameIndex() + numberOfTimeslices);
 
  240       int number_of_events = 0;
 
  242       for (map_type::const_iterator i = p; i != q; ++i) {
 
  243         number_of_events += i->second.size();
 
  246       if (number_of_events == 0) {
 
  250       for (JDAQTimeslice::const_iterator frame = timeslice->begin(); frame != timeslice->end(); ++frame) {
 
  254         buildL1(*frame, router.getModule(frame->getModuleID()), back_inserter(data));
 
  256         TH1D* 
h1 = manager[frame->getModuleID()];
 
  260           const double t1 = *hit + frame->getFrameIndex() * 
getFrameTime();
 
  262           for (map_type::const_iterator i = p; i != q; ++i) {
 
  263             for (map_type::mapped_type::const_iterator 
j = i->second.begin(); 
j != i->second.end(); ++
j) {
 
  265               const double t0 = *
j;
 
  278     Double_t most_OOS_peak = 0;
 
  279     Int_t most_OOS_ID = 0;
 
  281     TF1 f1(
"f1", 
"[0]*exp(-0.5*(x-[1])*(x-[1])/([2]*[2])) + [3]");
 
  289     for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  293       status2[module->getID()] = DEFAULT;
 
  295       JManager_t::iterator p = manager.find(module->getID());
 
  297       if (p == manager.end() || p->second->GetEntries() == 0) {
 
  299         status2[module->getID()] = NODATA;
 
  304       TH1D* h1       = p->second;
 
  310       Double_t sigma = 250.0;    
 
  313       for (
int i = 1; i != h1->GetNbinsX(); ++i) {
 
  315         const Double_t 
x = h1->GetBinCenter (i);
 
  316         const Double_t y = h1->GetBinContent(i);
 
  326       ymin /= h1->GetNbinsX();
 
  328       f1.SetParameter(0, ymax);
 
  329       f1.SetParameter(1, x0);
 
  330       if (binWidth_ns < sigma) 
 
  331         f1.SetParameter(2, sigma);
 
  333         f1.FixParameter(2, binWidth_ns/sqrt(12.0));
 
  334       f1.SetParameter(3, ymin);
 
  338       h1->Fit(&f1, option.c_str(), 
"same", x0 - 5 * sigma, x0 + 5 * sigma);
 
  340       status = (fabs(f1.GetParameter(1)) <= 0.5*
getFrameTime() && 
 
  341                 f1.GetParameter(0)       >= f1.GetParameter(3)); 
 
  343       if (status) status2[module->getID()] = IN_SYNC;
 
  350       for (Int_t i = 1, ns = -(numberOfTimeslices + 1); i <= h1->GetNbinsX(); ++i) {
 
  352         const Double_t x = h1->GetBinCenter (i);
 
  353         const Double_t y = h1->GetBinContent(i);
 
  355         while (x > (ns + 1) * 
getFrameTime() - TMax_ns) { ++ns; }
 
  363       DEBUG(
"Module " << setw(8) << module->getID() << endl);
 
  368         const Double_t 
P = TMath::PoissonI(i->second.getTotal(), y);
 
  370         DEBUG(
"Peak at " << setw(4) << i->first << 
" [frame time] " 
  372               << 
FIXED(7,1) << i->second.getTotal() << 
" / " 
  373               << 
FIXED(7,1) << y                    << 
' ' 
  376         if (P < Pmin && i->second.getTotal() > y) 
 
  382       if (!(sn.size()         == 1 &&
 
  383             sn.begin()->first == 0)) {
 
  385         WARNING(
"Module " << setw(8) << module->getID() << 
" number of peaks " << sn.size() << endl);
 
  389           const Double_t noise = bg.
getTotal() * i->second.getCount() / bg.
getCount();
 
  391           WARNING(
"Peak at " << setw(4) << i->first << 
" [frame time] " 
  393                   << 
FIXED(7,1) << i->second.getTotal()                                 << 
" / " 
  394                   << 
FIXED(7,1) << noise << endl);
 
  396           peaksPerDoms[module->getID()].push_back(sn.size());
 
  397           peaksPerDoms[module->getID()].push_back(i->first);
 
  398           peaksPerDoms[module->getID()].push_back(i->second.getTotal());
 
  399           peaksPerDoms[module->getID()].push_back(noise);
 
  402         status2[module->getID()] = (sn.size() == 1 ? OUT_SYNC : 
ERROR);
 
  409         if ((f1.GetParameter(0) > most_OOS_peak) && !(oosDomsId[module->getID()])){
 
  411           most_OOS_peak = f1.GetParameter(0);
 
  412           most_OOS_ID = module->getID();
 
  417     if (most_OOS_ID != 0) {
 
  418       oosDomsId[most_OOS_ID] = 
true;
 
  421       for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  422         manager[module->getID()]->Reset(
"ICESM");
 
  424       peaksPerDoms.clear();
 
  432   NOTICE(
"Managing non-working and OOS DOMs." << endl);
 
  438       parameters.
load(pmtFile.c_str());
 
  444       if (i->second != IN_SYNC) {
 
  446         NOTICE(
"Module " << setw(8) << i->first << 
" set QEs of all PMTs to zero." << endl);
 
  454     ofstream out(pmtFile.c_str());
 
  458     out << parameters << endl;
 
  469     ofstream stream(peaks);
 
  471     stream << 
"#DOM NB_PEAKS TIMESLICE_SHIFT SIGNAL NOISE\n";
 
  473     for (map_type::const_iterator dom = peaksPerDoms.begin(); dom != peaksPerDoms.end(); ++dom) {
 
  474       stream << dom->first << 
"  ";
 
  476       for (map_type::mapped_type::const_iterator data = dom->second.begin(); data != dom->second.end(); ++data) {
 
  478         ((i%4 == 0) ? stream << 
"\n" : stream <<  
"  ");
 
  490     if (i->second == IN_SYNC) {
 
  493     if (i->second != IN_SYNC &&
 
  494         i->second != NODATA) {
 
  499   NOTICE(
"Number of modules out/in sync " << nout << 
'/' << nin << endl);
 
  501   QAQC(nin << 
' ' << nout << endl);
 
Utility class to parse command line options. 
 
Auxiliary class to select ROOT class based on class name. 
 
*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
 
then for HISTOGRAM in h0 h1
 
Auxialiary class to assert type conversion. 
 
Auxiliary class for a type holder. 
 
Auxiliary data structure for floating point format specification. 
 
double getTime(const Hit &hit)
Get true time of hit. 
 
Template definition for direct access of elements in ROOT TChain. 
 
Simple wrapper around JModuleRouter class for direct addressing of PMT data in detector data structur...
 
int getFrameIndex() const 
Get frame index. 
 
The template JSinglePointer class can be used to hold a pointer to an object. 
 
Auxiliary class for defining the range of iterations of objects. 
 
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
double getFrameTime()
Get frame time duration. 
 
Auxiliary class for map of PMT parameters. 
 
double getMaximalTime(const double R_Hz)
Get maximal time for given rate. 
 
Auxiliary class to select JTreeScanner based on ROOT class name. 
 
void load(const char *file_name)
Load from input file. 
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file. 
 
#define QAQC(A)
QA/QC output macro. 
 
then usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
 
Auxiliary data structure for L1 build parameters. 
 
const JLimit & getLimit() const 
Get limit. 
 
static const int NUMBER_OF_PMTS
Total number of PMTs in module. 
 
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
 
Auxiliary data structure for floating point format specification. 
 
int qaqc
QA/QC file descriptor.