62int main(
int argc, 
char **argv)
 
   69  JLimit_t&              numberOfEvents = inputFile.getLimit();
 
   74  JToTRange_t            totRange_ns;
 
   79  int                    preTriggerThreshold;
 
   85    JParser<> zap(
"Example application to study supernova detection background");
 
   96    zap[
'P'] = 
make_field(preTriggerThreshold) = 4;
 
  101  catch(
const exception &error) {
 
  102    FATAL(error.what() << endl);
 
  127  pts->configure(inputFile);
 
  132  int    fEnd   = pts->rbegin()->getFrameIndex();
 
  133  int    fStart = pts->begin( )->getFrameIndex(); 
 
  137  if (fEnd > inputFile.getUpperLimit()) {
 
  138    fEnd = fStart + inputFile.getUpperLimit();
 
  141  int fLength = 1 + fEnd - fStart;
 
  143  NOTICE(
"begin | end | length = " << fStart << 
" | " << fEnd << 
" | " << fLength << endl);
 
  147    FATAL(
"FATAL: inconsistent TTree indexing" << endl);
 
  158  const int    nx   = fLength;
 
  159  const double xmin = fStart;
 
  160  const double xmax = fEnd + 1;
 
  162  const int    ny   = NUMBER_OF_PMTS + 1; 
 
  163  const double ymin = -0.5;
 
  164  const double ymax = ymin + ny;
 
  166  typedef JManager <string, TH2D>  JManager2D_t;
 
  167  typedef JManager <string, TH1D>  JManager1D_t;
 
  169  JManager2D_t MT(
new TH2D(
mul_p   , NULL, nx, xmin, xmax, ny, ymin, ymax));
 
  170  JManager1D_t ST(
new TH1D(
status_p, NULL, nx, xmin, xmax));
 
  178  TH1D* h_vtr = 
new TH1D(
"VetoTimeRange",
"VetoTimeRange", 10000, 0, 10000);
 
  184  for (; evIn.hasNext(); ) {
 
  186    STATUS(
"event: " << setw(10) << evIn.getCounter() << 
'\r'); 
DEBUG(endl);
 
  190    if (!runNumber) { runNumber = 
event->getRunNumber(); }
 
  192    JVeto vp(*event, hitRouter);
 
  194    triggeredEvents[
event->getFrameIndex()].push_back(vp);
 
  200  STATUS(triggeredEvents.size() << 
" JDAQEvents loaded in veto buffer." << endl);
 
  202  TParameter<int> RUNNR(
"RUNNR", runNumber);
 
  211  for ( ; pts->hasNext() && counter != inputFile.getLimit(); ++counter) {
 
  213    STATUS(
"timeslice: " << setw(10) << counter << 
'\r'); 
DEBUG(endl);
 
  225    if (triggeredEvents.count(fIndex)) { 
 
  226      veto = triggeredEvents.at(fIndex);
 
  239    double fractionActivePMTs = 0;
 
  241    int nDOMs = timeslice->size();
 
  243    for (JDAQTimeslice::const_iterator frame = timeslice->begin(); frame != timeslice->end(); ++frame) {
 
  245        int moduleID = frame->getModuleID();
 
  247        fractionActivePMTs += ((double) frame->countActiveChannels());
 
  249        JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*frame,
 
  255        JSuperFrame1D_t& data = JSuperFrame1D_t::multiplex(buffer);
 
  261        TH1D* h2dt = 
new TH1D(
"H2DT", 
"H2DT", 100, -TMax_ns, +TMax_ns); 
 
  263        for (vector<JHitR0>::const_iterator p = data.begin(); p != data.end(); ) {
 
  265          vector<JHitR0>::const_iterator q = p;
 
  267          while (++q != data.end() && q->getT() - p->getT() <= TMax_ns) {}
 
  273          MT[
"RAW"]->Fill(fIndex, m);
 
  277          if (selector != 
"JDAQTimesliceSN" && timeDifferences && m > 1) { 
 
  279            for (vector<JHitR0>::const_iterator __p = p; __p != q; ++__p) {
 
  280              for (vector<JHitR0>::const_iterator __q = __p; ++__q != q; ) {
 
  282                h2dt->Fill(dt, 1.0/W);
 
  293        if (h2dt->GetEntries() > 0) {
 
  295          TF1 f(
"f", 
"[0]*exp(-0.5*(x-[1])*(x-[1])/([2]*[2]))/(TMath::Sqrt(2*TMath::Pi())*[2]) + [3]");
 
  297          f.SetParameter(0, h2dt->GetMaximum());
 
  298          f.SetParameter(1, h2dt->GetMean());
 
  299          f.SetParameter(2, h2dt->GetRMS() * 0.25);
 
  300          f.SetParameter(3, h2dt->GetMinimum());
 
  302          h2dt->Fit(&f, 
"Q", 
"same");
 
  304          double nb = h2dt->GetNbinsX();
 
  305          double bg_v = f.GetParameter(3) * nb;
 
  306          double sg = h2dt->GetSumOfWeights() - bg_v;
 
  310          MT[
"FIT"]->Fill(fIndex, 2, sg);
 
  320    fractionActivePMTs /= (NUMBER_OF_PMTS * nDOMs);
 
  322    ST[
"PMT"]->Fill(fIndex, fractionActivePMTs);
 
  326    JDataSN preTrigger(TMax_ns, preTriggerThreshold);
 
  328    preTrigger(timeslice, moduleRouter, totSelector_ns);
 
  348    for (vector<double>::const_iterator p = m_a1.begin(); p != m_a1.end(); p++) {
 
  349      MT[
"TA1"]->Fill(fIndex, *p);
 
  354    for (vector<double>::const_iterator p = m_av.begin(); p != m_av.end(); p++) {
 
  355      MT[
"TAV"]->Fill(fIndex, *p);