HepMC3 event record library
ReaderGZ.h
Go to the documentation of this file.
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_READERGZ_H
7#define HEPMC3_READERGZ_H
8///
9/// @file ReaderGZ.h
10/// @brief Definition of class \b ReaderGZ
11///
12/// @class HepMC3::ReaderGZ
13/// @brief GenEvent I/O parsing for compressed files
14///
15/// @ingroup IO
16///
17#include <set>
18#include <string>
19#include <fstream>
20#include <istream>
21#include <iterator>
22#include "HepMC3/Reader.h"
23#include "HepMC3/GenEvent.h"
24#include "HepMC3/CompressedIO.h"
25namespace HepMC3 {
26
27template <class T> class ReaderGZ : public Reader {
28public:
29
30 /// @brief Constructor
31 ReaderGZ(const std::string& filename) {
32 m_zstr = std::shared_ptr< std::istream >(new ifstream(filename.c_str()));
33 m_reader = std::make_shared<T>(*(m_zstr.get()));
34 }
35 /// @brief The ctor to read from stdin
36 ReaderGZ(std::istream & is) {
37 m_zstr = std::shared_ptr< std::istream >(new istream(is));
38 m_reader = std::make_shared<T>(*(m_zstr.get()));
39 }
40
41 ReaderGZ(std::shared_ptr<std::istream> s_stream) {
42 m_zstr = s_stream;
43 m_reader = std::make_shared<T>(*(m_zstr.get()));
44 }
45
46 /// @brief Destructor
48
49 /// @brief skip events
50 bool skip(const int i) override { if (m_reader) return m_reader->skip(i); return false; }
51
52 /// @brief Load event from file
53 ///
54 /// @param[out] evt Event to be filled
55 bool read_event(GenEvent& evt) override { if (m_reader) return m_reader->read_event(evt); return false; }
56
57
58 /// @brief Return status of the stream
59 bool failed() override { if (m_reader) return m_reader->failed(); return false; }
60
61
62 /// @brief Close file stream
63 void close() override {
64 if (m_reader) return m_reader->close();
65 if(dynamic_pointer_cast<ifstream>(m_zstr)) dynamic_pointer_cast<ifstream>(m_zstr)->close();
66 }
67
68private:
69 ///@brief Close file stream
70 std::shared_ptr< std::istream > m_zstr; ///< Stream to read
71 std::shared_ptr<Reader> m_reader; ///< Actual reader
72
73};
74
75} // namespace HepMC3
76#endif
Definition of class GenEvent.
Definition of interface Reader.
Stores event-related information.
Definition: GenEvent.h:41
GenEvent I/O parsing for compressed files.
Definition: ReaderGZ.h:27
bool read_event(GenEvent &evt) override
Load event from file.
Definition: ReaderGZ.h:55
bool failed() override
Return status of the stream.
Definition: ReaderGZ.h:59
~ReaderGZ()
Destructor.
Definition: ReaderGZ.h:47
std::shared_ptr< Reader > m_reader
Actual reader.
Definition: ReaderGZ.h:71
void close() override
Close file stream.
Definition: ReaderGZ.h:63
bool skip(const int i) override
skip events
Definition: ReaderGZ.h:50
ReaderGZ(const std::string &filename)
Constructor.
Definition: ReaderGZ.h:31
ReaderGZ(std::istream &is)
The ctor to read from stdin.
Definition: ReaderGZ.h:36
std::shared_ptr< std::istream > m_zstr
Close file stream.
Definition: ReaderGZ.h:70
Base class for all I/O readers.
Definition: Reader.h:25
HepMC3 main namespace.