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);