52   using namespace KM3NETDAQ;
 
   60   int                numberOfTimeslices;
 
   63   JROOTClassSelector selector;
 
   68     JParser<> zap(
"Example program to search for correlations between triggered events and timeslice data.");
 
   73     zap[
'n'] = 
make_field(numberOfEvents)      = JLimit::max();
 
   76     zap[
'N'] = 
make_field(numberOfTimeslices)  = 100;
 
   79     zap[
'C'] = 
make_field(selector)            = 
"", getROOTClassSelection<JDAQTimesliceTypes_t>();
 
   84   catch(
const exception& error) {
 
   85     FATAL(error.what() << endl);
 
   94     load(detectorFile, detector);
 
   96   catch(
const JException& error) {
 
  100   const JDAQHitRouter router(detector);
 
  102   const double TMax_ns = max(binWidth_ns, 
getMaximalTime(detector));
 
  106   JBuildL0<hit_type> buildL0;
 
  107   JBuildL1<hit_type> buildL1(TMaxLocal_ns, 
true);
 
  112   const Double_t xmin = -(numberOfTimeslices + 1) * 
getFrameTime() - 0.5*binWidth_ns;
 
  113   const Double_t xmax = +(numberOfTimeslices + 1) * 
getFrameTime() + 0.5*binWidth_ns;
 
  114   const Int_t    nx   = (Int_t) ((xmax - xmin) / binWidth_ns);
 
  116   JManager_t manager(
new TH1D(
"M_%", NULL, nx, xmin, xmax));
 
  120   JSinglePointer< JTreeScannerInterface<JDAQTimeslice> > ps;
 
  124   if (selector == 
"") {
 
  126     if ((ps = 
new JTreeScanner< JAssertConversion<JDAQTimesliceSN, JDAQTimeslice> >(inputFile))->getEntries() != 0 ||
 
  127         (ps = 
new JTreeScanner< JAssertConversion<JDAQTimesliceL2, JDAQTimeslice> >(inputFile))->getEntries() != 0 ||
 
  128         (ps = 
new JTreeScanner< JAssertConversion<JDAQTimesliceL1, JDAQTimeslice> >(inputFile))->getEntries() != 0 ||
 
  129         (ps = 
new JTreeScanner< JAssertConversion<JDAQTimeslice,   JDAQTimeslice> >(inputFile))->getEntries() != 0 ||
 
  130         (ps = 
new JTreeScanner< JAssertConversion<JDAQTimesliceL0, JDAQTimeslice> >(inputFile))->getEntries() != 0) {
 
  132       FATAL(
"No timeslice data." << endl);
 
  135     NOTICE(
"Selected class " << ps->getClassName() << endl);
 
  141     ps->configure(inputFile);
 
  149   for (JTreeScanner<JDAQEvent> in(inputFile.getFilename(), inputFile.getLimit()); in.hasNext(); ) {
 
  151     STATUS(
"event: " << setw(10) << in.getCounter() << 
'\r'); 
DEBUG(endl);
 
  160       t0 += 
getTime(*hit, router.getPMT(*hit));
 
  166     buffer[
event->getFrameIndex()].push_back(t0);
 
  171   while (ps->hasNext()) {
 
  173     STATUS(
"event: " << setw(10) << ps->getCounter() << 
'\r'); 
DEBUG(endl);
 
  177     map_type::const_iterator p = buffer.lower_bound(timeslice->
getFrameIndex() - numberOfTimeslices);
 
  178     map_type::const_iterator q = buffer.upper_bound(timeslice->
getFrameIndex() + numberOfTimeslices);
 
  180     int number_of_events = 0;
 
  182     for (map_type::const_iterator i = p; i != q; ++i) {
 
  183       number_of_events += i->second.size();
 
  186     if (number_of_events == 0) {
 
  190     for (JDAQTimeslice::const_iterator frame = timeslice->begin(); frame != timeslice->end(); ++frame) {
 
  194       buildL1(*frame, router.getModule(frame->getModuleID()), back_inserter(data));
 
  196       TH1D* h1 = manager[frame->getModuleID()];
 
  200         const double t1 = *hit + frame->getFrameIndex() * 
getFrameTime();
 
  202         for (map_type::const_iterator i = p; i != q; ++i) {
 
  203           for (map_type::mapped_type::const_iterator j = i->second.begin(); j != i->second.end(); ++j) {
 
  205             const double t0 = *j;
 
  217     JPMTParametersMap parameters;
 
  220       parameters.load(pmtFile.c_str());
 
  222     catch(
const JException& error) {}
 
  224     TF1 f1(
"f1", 
"[0]*exp(-0.5*(x-[1])*(x-[1])/([2]*[2])) + [3]");
 
  232     for (JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
 
  236       JManager_t::iterator p = manager.find(module->getID());
 
  238       if (p != manager.end()) {
 
  240         TH1D* h1       = p->second;
 
  242         if (h1->GetEntries() != 0) {
 
  248           Double_t sigma = 250.0;    
 
  251           for (
int i = 1; i != h1->GetNbinsX(); ++i) {
 
  253             const Double_t x = h1->GetBinCenter (i);
 
  254             const Double_t y = h1->GetBinContent(i);
 
  264           ymin /= h1->GetNbinsX();
 
  266           f1.SetParameter(0, ymax);
 
  267           f1.SetParameter(1, x0);
 
  268           if (binWidth_ns < sigma) 
 
  269             f1.SetParameter(2, sigma);
 
  271             f1.FixParameter(2, binWidth_ns/sqrt(12.0));
 
  272           f1.SetParameter(3, ymin);
 
  276           h1->Fit(&f1, option.c_str(), 
"same", x0 - 5 * sigma, x0 + 5 * sigma);
 
  278           status = (fabs(f1.GetParameter(1)) <= 0.5*
getFrameTime() &&
 
  279                     f1.GetParameter(0)       >= f1.GetParameter(3));
 
  282         if (h1->GetEntries() != 0) {
 
  289           for (Int_t i = 1, ns = -(numberOfTimeslices + 1); i <= h1->GetNbinsX(); ++i) {
 
  291             const Double_t x = h1->GetBinCenter (i);
 
  292             const Double_t y = h1->GetBinContent(i);
 
  294             while (x > (ns + 1) * 
getFrameTime() - TMax_ns) { ++ns; }
 
  305             const Double_t y = bg.getTotal() * i->second.getCount() / bg.getCount();
 
  306             const Double_t P = TMath::PoissonI(i->second.getTotal(), y);
 
  308             if (i->second.getTotal() > y && P < Pmin)
 
  314           if (sn.size() != 1) {
 
  316             ERROR(
"Module " << setw(8) << module->getID() << 
" number of peaks " << sn.size() << 
" != 1" << endl);
 
  319               WARNING(
"Peak at " << setw(4) << i->first << 
" [frame time] S/N = "  
  320                       << 
FIXED(7,1) << i->second.getTotal()                                 << 
" / " 
  321                       << 
FIXED(7,1) << bg.getTotal() * i->second.getCount() / bg.getCount() << endl);
 
  325           status &= (sn.size()         == 1 && 
 
  326                      sn.begin()->first == 0);
 
  332         NOTICE(
"Module " << module->getID() << 
" set QEs of all PMTs to zero." << endl);
 
  335           parameters[JPMTIdentifier(module->getID(), pmt)].QE = 0.0;
 
  340     ofstream out(pmtFile.c_str());
 
  342     parameters.comment.add(
JMeta(argc, argv));
 
  344     out << parameters << endl;
 
Utility class to parse command line options. 
 
Auxiliary class to manage set of histograms. 
 
Structure to store the ToT mean and standard deviation of the hits produced by a nanobeacon in a sour...
 
Auxiliary class for a type holder. 
 
Auxiliary data structure for floating point format specification. 
 
double getTime(const Hit &hit)
Get true time of hit. 
 
int getFrameIndex() const 
Get frame index. 
 
JLimit JLimit_t
Type definition of limit. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
double getFrameTime()
Get frame time duration. 
 
void load(const JString &file_name, JDetector &detector)
Load detector from input file. 
 
double getMaximalTime(const JDetector &detector)
Get maximal time between modules in detector following causality. 
 
const JLimit & getLimit() const 
Get limit. 
 
static const int NUMBER_OF_PMTS
Total number of PMTs in module. 
 
JTriggerCounter_t next()
Increment trigger counter. 
 
#define DEBUG(A)
Message macros.