#include #include #include #include #include "TROOT.h" #include "TFile.h" #include "TH1D.h" #include "JDAQ/JDAQEventIO.hh" #include "JDetector/JDetector.hh" #include "JDetector/JDetectorToolkit.hh" #include "JDetector/JModuleRouter.hh" #include "JTrigger/JTriggerParameters.hh" #include "JTrigger/JHit.hh" #include "JTrigger/JHitL0.hh" #include "JTrigger/JHitL1.hh" #include "JTrigger/JHitL2.hh" #include "JTrigger/JHitR1.hh" #include "JTrigger/JHitR2.hh" #include "JTrigger/JBuildL0.hh" #include "JTrigger/JBuildL1.hh" #include "JTrigger/JBuildL2.hh" #include "JSupport/JMultipleFileScanner.hh" #include "JSupport/JSupport.hh" #include "Jeep/JParser.hh" #include "Jeep/JMessage.hh" namespace { /** * Process event. * * \param build hit builder * \param router module router * \param event event * \param h1 histogram */ template inline void process(const JBuild_t& build, const JDETECTOR::JModuleRouter& router, const KM3NETDAQ::JDAQEvent& event, TH1& h1) { using namespace std; typedef typename JBuild_t::value_type value_type; vector data; build(event, router, back_inserter(data)); h1.Fill((double) data.size()); } } /** * \file * * Example program to test JTRIGGER::JBuildL0, JTRIGGER::JBuildL1 and JTRIGGER::JBuildL2 hit building with DAQ events. * \author mdejong */ int main(int argc, char **argv) { using namespace std; using namespace JPP; using namespace KM3NETDAQ; JMultipleFileScanner inputFile; JLimit_t& numberOfEvents = inputFile.getLimit(); string outputFile; string detectorFile; JTriggerParameters parameters; int debug; try { JParser<> zap("Example program to test hit building with DAQ events."); zap['f'] = make_field(inputFile); zap['o'] = make_field(outputFile) = "build.root"; zap['n'] = make_field(numberOfEvents) = JLimit::max(); zap['a'] = make_field(detectorFile); zap['@'] = make_field(parameters) = JPARSER::initialised(); zap['d'] = make_field(debug) = 0; zap(argc, argv); } catch(const exception &error) { FATAL(error.what() << endl); } JDetector detector; try { load(detectorFile, detector); } catch(const JException& error) { FATAL(error); } const JModuleRouter router(detector); TFile out(outputFile.c_str(), "recreate"); const Int_t N = 5000; TH1D h0("L0", NULL, N, -0.5, (Double_t) N - 0.5); TH1D h1("L1", NULL, N, -0.5, (Double_t) N - 0.5); TH1D h2("L2", NULL, N, -0.5, (Double_t) N - 0.5); // test compilation for various template specialisations { JBuildL0 buildL0; JBuildL1 buildL1(parameters); JBuildL2 buildL2(parameters.L2); } { JBuildL0 buildL0; JBuildL1 buildL1(parameters); JBuildL2 buildL2(parameters.L2); } { JBuildL0 buildL0; JBuildL1 buildL1(parameters); JBuildL2 buildL2(parameters.L2); } // primitive data types correspond to hit times [ns] JBuildL0 buildL0; JBuildL1 buildL1(parameters); JBuildL2 buildL2(parameters.L2); while (inputFile.hasNext()) { STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl); const JDAQEvent* tev = inputFile.next(); process(buildL0, router, *tev, h0); process(buildL1, router, *tev, h1); process(buildL2, router, *tev, h2); } NOTICE(endl); out.Write(); out.Close(); }