#include #include #include #include #include #include #include "TROOT.h" #include "TFile.h" #include "JLang/JPredicate.hh" #include "JLang/JComparator.hh" #include "JLang/JComparison.hh" #include "JTools/JQuantile.hh" #include "JSupport/JMultipleFileScanner.hh" #include "JSupport/JFileRecorder.hh" #include "JSupport/JMeta.hh" #include "JAcoustics/JEvent.hh" #include "JAcoustics/JSupport.hh" #include "Jeep/JContainer.hh" #include "Jeep/JParser.hh" #include "Jeep/JMessage.hh" /** * \file * * Example application to print acoustics event. * \author mdejong */ int main(int argc, char **argv) { using namespace std; using namespace JPP; JMultipleFileScanner inputFile; JLimit_t& numberOfEvents = inputFile.getLimit(); int debug; try { JParser<> zap("Example application to print acoustics event."); zap['f'] = make_field(inputFile, "output of JAcousticEventBuilder[.sh]"); zap['n'] = make_field(numberOfEvents) = JLimit::max(); zap['d'] = make_field(debug) = 3; zap(argc, argv); } catch(const exception &error) { FATAL(error.what() << endl); } JQuantile Q0("size "); JQuantile Q1("duplicates"); while (inputFile.hasNext()) { STATUS("event: " << setw(8) << inputFile.getCounter() << '\r' << flush); DEBUG(endl); const JEvent* evt = inputFile.next(); map > buffer; for (JEvent::const_iterator hit = evt->begin(); hit != evt->end(); ++hit) { buffer[hit->getID()].push_back(*hit); } size_t duplicates = 0; for (map >::iterator ps = buffer.begin(); ps != buffer.end(); ++ps) { sort(ps->second.begin(), ps->second.end(), make_comparator(&JTransmission::getQ, JComparison::gt())); if (ps->second.size() >= 2u) { duplicates += 1; if (debug >= debug_t) { cout << endl; for (vector::const_iterator i = ps->second.begin(); i != ps->second.end(); ++i) { cout << setw (8) << i->getRunNumber() << ' ' << setw (2) << evt->getID() << ' ' << setw (10) << i->getID() << ' ' << FIXED(10,0) << i->getQ() << ' ' << FIXED(15,6) << i->getToA() << ' '; size_t n = 0; for (vector::const_iterator j = ps->second.begin(); j != ps->second.end(); ++j) { if (i != j) { if (i->getQ() == j->getQ()) { n += 1; } } } cout << (n == 0 ? "" : "*") << endl; } } } } Q0.put(evt->size()); Q1.put(duplicates); } for (const auto& Q : { Q0, Q1 }) { if (Q.getCount() > 0) { Q.print(cout); } } }