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