#include #include #include #include "TROOT.h" #include "TFile.h" #include "TGraph.h" #include "JSupport/JMultipleFileScanner.hh" #include "JTools/JQuantile.hh" #include "JROOT/JRootToolkit.hh" #include "JROOT/JManager.hh" #include "JAcoustics/JEvent.hh" #include "JAcoustics/JSupport.hh" #include "Jeep/JPrint.hh" #include "Jeep/JParser.hh" #include "Jeep/JMessage.hh" /** * \file * * Example program to monitor acoustic events. * \author mdejong */ int main(int argc, char **argv) { using namespace std; using namespace JPP; JMultipleFileScanner inputFile; JLimit_t& numberOfEvents = inputFile.getLimit(); string outputFile; double Q; int debug; try { JParser<> zap("Example program to monitor acoustic events."); zap['f'] = make_field(inputFile, "output of JAcousticTriggerProcessor[.sh]"); zap['n'] = make_field(numberOfEvents) = JLimit::max(); zap['o'] = make_field(outputFile) = "monitor.root"; zap['Q'] = make_field(Q) = 0.9; zap['d'] = make_field(debug) = 2; zap(argc, argv); } catch(const exception &error) { FATAL(error.what() << endl); } JManager GA(new TGraph(), "G[%].size"); JManager GD(new TGraph(), "G[%].rms"); JManager GQ(new TGraph(), "G[%].quality"); JManager G1(new TGraph(), "G[%].quantile"); JManager GN(new TGraph(), "G[%].overlays"); while (inputFile.hasNext()) { if (inputFile.getCounter()%100 == 0) { STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl); } const JEvent* event = inputFile.next(); if (event->empty()) { // due to emptying of overlapping events continue; } const double t1 = event->begin()->getToE(); JQuantile Q1("", true), Q2; for (JEvent::const_iterator i = event->begin(); i != event->end(); ++i) { Q1.put(i->getToE()); Q2.put(log10(i->getQ())); } AddPoint(GA[event->getID()], t1, event->size()); AddPoint(GD[event->getID()], t1, Q1.getSTDev()); AddPoint(GQ[event->getID()], t1, Q2.getMean()); AddPoint(G1[event->getID()], t1, Q1.getQuantile(Q, JQuantile::symmetric_t)); AddPoint(GN[event->getID()], t1, event->getOverlays()); } STATUS(endl); TFile out(outputFile.c_str(), "recreate"); out << GA << GD << GQ << G1 << GN; out.Write(); out.Close(); }