#include #include #include #include #include "TROOT.h" #include "TFile.h" #include "TProfile.h" #include "km3net-dataformat/offline/Head.hh" #include "km3net-dataformat/offline/Evt.hh" #include "km3net-dataformat/offline/Hit.hh" #include "JDAQ/JDAQTimesliceIO.hh" #include "JAAnet/JAAnetToolkit.hh" #include "JTimeslice/JEventTimeslice.hh" #include "JDetector/JDetector.hh" #include "JDetector/JDetectorToolkit.hh" #include "JDetector/JModuleRouter.hh" #include "JDetector/JDetectorSimulator.hh" #include "JDetector/JPMTParametersMap.hh" #include "JDetector/JPMTDefaultSimulator.hh" #include "JDetector/JCLBDefaultSimulator.hh" #include "JTrigger/JHit.hh" #include "JTrigger/JFrame.hh" #include "JTrigger/JTimeslice.hh" #include "JTrigger/JSuperFrame2D.hh" #include "JTrigger/JHitL0.hh" #include "JTrigger/JHitL1.hh" #include "JTrigger/JBuildL1.hh" #include "JTrigger/JBuildL2.hh" #include "JSupport/JMultipleFileScanner.hh" #include "JSupport/JMonteCarloFileSupportkit.hh" #include "JSupport/JSupport.hh" #include "Jeep/JParser.hh" #include "Jeep/JMessage.hh" /** * \file * * Example program to test JTRIGGER::JBuildL1 and JTRIGGER::JBuildL2 hit coincidence building with Monte Carlo events. * \author mdejong */ int main(int argc, char **argv) { using namespace std; using namespace JPP; JMultipleFileScanner inputFile; JLimit_t& numberOfEvents = inputFile.getLimit(); string outputFile; string detectorFile; JPMTParametersMap pmtParameters; double Tmax_ns; int debug; try { JParser<> zap("Example program to test hit coincidence building with Monte Carlo events."); zap['f'] = make_field(inputFile); zap['o'] = make_field(outputFile) = "buildL2.root"; zap['n'] = make_field(numberOfEvents) = JLimit::max(); zap['a'] = make_field(detectorFile); zap['P'] = make_field(pmtParameters) = JPARSER::initialised(); zap['T'] = make_field(Tmax_ns) = 20.0; // [ns] zap['d'] = make_field(debug) = 0; zap(argc, argv); } catch(const exception &error) { FATAL(error.what() << endl); } using namespace KM3NETDAQ; JDetector detector; try { load(detectorFile, detector); } catch(const JException& error) { FATAL(error); } JDetectorSimulator simbad(detector); simbad.reset(new JPMTDefaultSimulator(pmtParameters, detector)); simbad.reset(new JCLBDefaultSimulator()); TFile out(outputFile.c_str(), "recreate"); TProfile hn("hn", NULL, 31, 0.5, +31.5); TProfile hc("hc", NULL, 21, -1.05, +1.05); TProfile ht("ht", NULL, 20, 0.5, +20.5); const JModuleRouter moduleRouter(detector); typedef double hit_type; typedef vector JFrameL1_t; typedef JSuperFrame2D JSuperFrame2D_t; typedef JBuildL1 JBuildL1_t; const JBuildL1_t buildL1(JBuildL1Parameters((hit_type) Tmax_ns, true)); JSuperFrame2D_t buffer; for (JMultipleFileScanner& in = inputFile; in.hasNext(); ) { STATUS("event: " << setw(10) << in.getCounter() << '\r'); DEBUG(endl); Evt* event = in.next(); const int frame_index = 1; event->mc_t = 0.5 * getFrameTime(); const JDAQChronometer chronometer(detector.getID(), 1, frame_index, JDAQUTCExtended(getTimeOfFrame(frame_index))); JEventTimeslice timeslice(chronometer, simbad, *event); for (JDAQTimeslice::const_iterator super_frame = timeslice.begin(); super_frame != timeslice.end(); ++super_frame) { if (moduleRouter.hasModule(super_frame->getModuleID())) { // calibration const JModule& module = detector.getModule(moduleRouter.getAddress(super_frame->getModuleID())); buffer(*super_frame, module); JFrameL1_t dataL1; buildL1(buffer, back_inserter(dataL1)); if (!dataL1.empty()) { JBuildL2 buildL2(JL2Parameters(1, Tmax_ns, -1.0)); JFrameL1_t d1(dataL1); JFrameL1_t d2; for (int i = 1; i <= hn.GetNbinsX(); ++i) { buildL2.numberOfHits = (int) hn.GetBinCenter(i); d2.clear(); buildL2(buffer, d1, back_inserter(d2)); hn.Fill((double) buildL2.numberOfHits, (double) d2.size() / (double) dataL1.size()); d1.swap(d2); } } if (!dataL1.empty()) { JBuildL2 buildL2(JL2Parameters(2, Tmax_ns, -1.0)); JFrameL1_t d1(dataL1); JFrameL1_t d2; for (int i = 1; i <= hc.GetNbinsX(); ++i) { buildL2.ctMin = hc.GetBinCenter(i); d2.clear(); buildL2(buffer, d1, back_inserter(d2)); hc.Fill(buildL2.ctMin, (double) d2.size() / (double) dataL1.size()); d1.swap(d2); } } if (!dataL1.empty()) { JBuildL2 buildL2(JL2Parameters(2, 0.0, -1.0)); JFrameL1_t d1(dataL1); JFrameL1_t d2; for (int i = ht.GetNbinsX(); i != 0; --i) { buildL2.TMaxLocal_ns = ht.GetBinCenter(i); d2.clear(); buildL2(buffer, d1, back_inserter(d2)); ht.Fill(buildL2.TMaxLocal_ns, (double) d2.size() / (double) dataL1.size()); d1.swap(d2); } } } } } NOTICE(endl); out.Write(); out.Close(); }