#include #include #include #include "JDAQ/JDAQSummarysliceIO.hh" #include "JPhysics/JK40Rates.hh" #include "JDetector/JDetector.hh" #include "JDetector/JDetectorToolkit.hh" #include "JDetector/JDetectorSimulator.hh" #include "JDetector/JModuleMapper.hh" #include "JDetector/JPMTParametersMap.hh" #include "JDetector/JK40DefaultSimulator.hh" #include "JDetector/JPMTDefaultSimulator.hh" #include "JDetector/JCLBDefaultSimulator.hh" #include "JTrigger/JK40RunByRunSimulator.hh" #include "JTrigger/JPMTRunByRunSimulator.hh" #include "JTrigger/JCLBRunByRunSimulator.hh" #include "JSupport/JSingleFileScanner.hh" #include "JSupport/JFileRecorder.hh" #include "JSupport/JSupport.hh" #include "JSupport/JMeta.hh" #include "JSummaryslice/JSummaryslice.hh" #include "JTools/JRange.hh" #include "Jeep/JPrint.hh" #include "Jeep/JParser.hh" #include "Jeep/JMessage.hh" /** * \file * Example program to simulate summary data. * * \author mdejong */ int main(int argc, char **argv) { using namespace std; using namespace JPP; using namespace KM3NETDAQ; JSingleFileScanner inputFile; JFileRecorder::typelist> outputFile; JLimit_t& numberOfEvents = inputFile.getLimit(); string detectorFile; JPMTParametersMap pmtParameters; int debug; try { JParser<> zap("Example program to simulate summary data."); zap['f'] = make_field(inputFile, "input DAQ file"); zap['o'] = make_field(outputFile, "output file") = "simbad.root"; zap['n'] = make_field(numberOfEvents) = JLimit::max(); zap['a'] = make_field(detectorFile , "detector file"); zap['P'] = make_field(pmtParameters, "PMT simulation data (or corresponding file name)") = JPARSER::initialised(); zap['d'] = make_field(debug, "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); } JPMTParametersMap::Throw(true); if (!pmtParameters.is_valid()) { FATAL("Invalid PMT parameters " << pmtParameters << endl); } const JModuleRouter moduleRouter(detector); JDetectorSimulator simbad (detector); JSummaryRouter summaryRouter; try { simbad.reset(new JK40RunByRunSimulator(summaryRouter, JK40Rates())); simbad.reset(new JPMTRunByRunSimulator(summaryRouter, pmtParameters, detector)); simbad.reset(new JCLBRunByRunSimulator(summaryRouter)); } catch(const JException& error) { FATAL(error.what() << endl); } outputFile.open(); if (!outputFile.is_open()) { FATAL("Error opening file " << outputFile << endl); } outputFile.put(JMeta(argc, argv)); while (inputFile.hasNext()) { STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl); JDAQSummaryslice* summary = inputFile.next(); summaryRouter.update(summary); summaryRouter.correct(dynamic_cast(simbad.getPMTSimulator())); outputFile.put(JSummaryslice(summary->getDAQChronometer(),simbad)); } STATUS(endl); outputFile.close(); }