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