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_READERHEPEVT_H 7 #define HEPMC3_READERHEPEVT_H 8 /** 9 * @file ReaderHEPEVT.h 10 * @brief Definition of \b class ReaderHEPEVT 11 * 12 * @class HepMC3::ReaderHEPEVT 13 * @brief GenEvent I/O parsing and serialization for HEPEVT files 14 * 15 * 16 * @ingroup IO 17 * 18 */ 19 #include <set> 20 #include <string> 21 #include <fstream> 22 #include <istream> 23 #include "HepMC3/Reader.h" 24 #include "HepMC3/GenEvent.h" 25 #include "HepMC3/GenRunInfo.h" 26 #include "HepMC3/Data/GenEventData.h" 27 28 29 namespace HepMC3 30 { 31 32 class ReaderHEPEVT : public Reader 33 { 34 // 35 // Constructors 36 // 37 public: 38 /** @brief Default constructor */ 39 ReaderHEPEVT(const std::string &filename); 40 /// The ctor to read from stdin 41 ReaderHEPEVT(std::istream &); 42 // 43 // Functions 44 // 45 public: 46 /** @brief Find and read event header line from file 47 * 48 */ 49 virtual bool read_hepevt_event_header(); 50 /** @brief read particle from file 51 * 52 * @param[in] i Particle id 53 */ 54 virtual bool read_hepevt_particle(int i); 55 56 /// @brief skip events 57 bool skip(const int) override; 58 59 60 /** @brief Read event from file*/ 61 bool read_event(GenEvent &evt) override; 62 63 64 /** @brief Close file stream */ 65 void close() override; 66 67 /** @brief Get stream error state */ 68 bool failed() override; 69 70 public: 71 char* hepevtbuffer; //!< Pointer to HEPEVT Fortran common block/C struct 72 private: 73 std::ifstream m_file; //!< Input file 74 std::istream* m_stream; //!< For ctor when reading from stdin 75 bool m_isstream; //!< toggles usage of m_file or m_stream 76 }; 77 78 } // namespace HepMC3 79 80 #endif 81