#include #include #include #include #include "km3net-dataformat/definitions/reconstruction.hh" #include "km3net-dataformat/offline/Head.hh" #include "km3net-dataformat/offline/Evt.hh" #include "JDAQ/JDAQEventIO.hh" #include "JDAQ/JDAQSummarysliceIO.hh" #include "JSupport/JMeta.hh" #include "JSupport/JSupport.hh" #include "JSupport/JTreeScanner.hh" #include "JSupport/JFileRecorder.hh" #include "JSupport/JParallelFileScanner.hh" #include "JSupport/JMonteCarloFileSupportkit.hh" #include "JTrigger/JTriggerParameters.hh" #include "JReconstruction/JEvt.hh" #include "JReconstruction/JEvtToolkit.hh" #include "JReconstruction/JEventSelector.hh" #include "Jeep/JPrint.hh" #include "Jeep/JParser.hh" #include "Jeep/JMessage.hh" /** * \file * * Program to extract events. * * \author bjjung */ int main(int argc, char **argv) { using namespace std; using namespace JPP; using namespace KM3NETDAQ; typedef JTYPELIST::typelist, JFIT::JEvt>::typelist output_typelist; typedef JParallelFileScanner< JTypeList > JParallelFileScanner_t; typedef JParallelFileScanner_t::multi_pointer_type multi_pointer_type; JParallelFileScanner_t inputFile; size_t numberOfEvents; JFileRecorder outputFile; int application; JEventSelector event_selector; int debug; try { JParser<> zap("Program to extract events."); zap['f'] = make_field(inputFile, "input file (output of JXXXReconstruction.sh)"); zap['n'] = make_field(numberOfEvents, "maximum number of selected events") = std::numeric_limits::max(); zap['o'] = make_field(outputFile, "output file name") = "extract.root"; zap['A'] = make_field(application) = JMUONGANDALF, JMUONENERGY, JMUONSTART, JSHOWERCOMPLETEFIT, JSHOWERENERGYPREFIT, JSHOWERDIRECTIONPREFIT; zap['L'] = make_field(event_selector) = JPARSER::initialised(); zap['d'] = make_field(debug) = 1; zap(argc, argv); } catch(const exception& error) { FATAL(error.what() << endl); } outputFile.open(); outputFile.put(JMeta(argc, argv)); // Select events size_t N = 0; for (JTreeScanner mc(inputFile); inputFile.hasNext() && N < numberOfEvents; ) { cout << "\revent: " << setw(8) << inputFile.getCounter() << flush; multi_pointer_type ps = inputFile.next(); JDAQEvent* tev = ps; JEvt* in = ps; Evt* event = NULL; in->select(JHistory::is_event(application)); if (in->empty()) { continue; } sort(in->begin(), in->end(), qualitySorter); if (mc.getEntries() != 0) { event = mc.getEntry(tev->getCounter()); } if (!event_selector(*tev, *in, event)) { continue; } outputFile.put(*tev); outputFile.put(*in); ++N; } // Copy header JHead header = getHeader(inputFile.getFilename()); header.createUUID(); // Ensure UUID is set Head head; copy(header, head); outputFile.put(head); // Copy rest JMultipleFileScanner::typelist>::typelist> io(inputFile); io >> outputFile; outputFile.close(); return 0; }