1 // -*- C++ -*- 2 // 3 // This file is part of HepMC 4 // Copyright (C) 2014-2020 The HepMC collaboration (see AUTHORS for details) 5 // 6 #ifndef HEPMC3_READERLHEF_H 7 #define HEPMC3_READERLHEF_H 8 /** 9 * @file ReaderLHEF.h 10 * @brief Definition of \b class ReaderLHEF 11 * 12 * @class HepMC3::ReaderLHEF 13 * @brief GenEvent I/O parsing and serialization for LHEF files 14 * 15 * 16 * @ingroup IO 17 * 18 */ 19 #include "HepMC3/Reader.h" 20 #include "HepMC3/GenEvent.h" 21 #include <deque> 22 #include <string> 23 #include <fstream> 24 #include <istream> 25 #include "HepMC3/LHEFAttributes.h" 26 #include "HepMC3/GenEvent.h" 27 #include "HepMC3/GenParticle.h" 28 #include "HepMC3/GenVertex.h" 29 #include <iomanip> 30 31 32 namespace HepMC3 33 { 34 class ReaderLHEF : public Reader 35 { 36 public: 37 /// The ctor to read from stream 38 ReaderLHEF(std::istream &); 39 private: 40 void init(); ///< Init helper 41 public: 42 /** @brief Constructor */ 43 ReaderLHEF(const std::string& filename); 44 /// @brief skip events 45 bool skip(const int) override; 46 /** @brief Reading event */ 47 bool read_event(GenEvent& ev) override; 48 /** @brief Close */ 49 void close() override; 50 /** @brief State */ 51 bool failed() override; 52 /** @brief Destructor */ 53 ~ReaderLHEF() ; 54 private: 55 std::shared_ptr<LHEF::Reader> m_reader; ///< The actual reader 56 std::shared_ptr<HEPRUPAttribute> m_hepr; ///< Holder of attributes 57 int m_neve; ///< Event counter 58 bool m_failed; ///< State of reader 59 std::deque<GenEvent> m_storage; ///<storage used for subevents. 60 }; 61 } 62 #endif 63