17 ldmx_log(info) <<
"Opening HepMC file " << filename;
20 std::string magic(4,
'\0');
21 std::ifstream(filename, std::ios::binary).read(magic.data(), magic.size());
22 if (magic ==
"root") {
24 std::unique_ptr<TFile> file{TFile::Open(filename.c_str())};
25 if (file && file->Get<TTree>(
"hepmc3_tree")) {
26 ldmx_log(info) <<
"Detected HepMC3 ROOT tree format";
27 reader_ = std::make_shared<HepMC3::ReaderRootTree>(filename);
29 ldmx_log(info) <<
"Detected HepMC3 ROOT format";
30 reader_ = std::make_shared<HepMC3::ReaderRoot>(filename);
34 reader_ = HepMC3::deduce_reader(filename);
38 EXCEPTION_RAISE(
"BadFile",
"Failed to open HepMC file: " + filename);
44 auto gen_event = std::make_shared<HepMC3::GenEvent>();
47 if (!
reader_->read_event(*gen_event)) {
48 ldmx_log(warn) <<
"No next event was found by the HepMC reader.";
53 gen_event->set_units(HepMC3::Units::GEV, HepMC3::Units::MM);
56 if (gen_event->particles().empty()) {
57 ldmx_log(warn) <<
"Empty event found by HepMC reader.";
64 ldmx_log(debug) <<
"HepMCReader: Read " <<
event_counter_ <<
" events";
68 return std::make_unique<HepMCEvent>(gen_event);