10 ldmx_log(info) <<
"Opening HepMC file " << filename;
13 std::ifstream test_file(filename);
14 std::string first_line;
15 bool found_line =
false;
17 if (test_file.is_open()) {
19 while (std::getline(test_file, first_line)) {
21 first_line.erase(0, first_line.find_first_not_of(
" \t\r\n"));
22 first_line.erase(first_line.find_last_not_of(
" \t\r\n") + 1);
24 if (!first_line.empty()) {
33 ldmx_log(debug) <<
"First non-empty line: " << first_line;
36 if (first_line.find(
"HepMC::") != std::string::npos ||
37 first_line.find(
"IO_GenEvent") != std::string::npos) {
38 ldmx_log(info) <<
"Detected HepMC2 format, using ReaderAsciiHepMC2";
39 reader_ = std::make_shared<HepMC3::ReaderAsciiHepMC2>(filename);
41 ldmx_log(info) <<
"Assuming HepMC3 format, using ReaderAscii";
42 reader_ = std::make_shared<HepMC3::ReaderAscii>(filename);
46 <<
"Could not find non-empty line, defaulting to HepMC3 format";
47 reader_ = std::make_shared<HepMC3::ReaderAscii>(filename);
51 EXCEPTION_RAISE(
"BadFile",
"Failed to open HepMC file: " + filename);