HepMC3 event record library
WriterRootTree.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // This file is part of HepMC
4 // Copyright (C) 2014-2021 The HepMC collaboration (see AUTHORS for details)
5 //
6 #ifndef HEPMC3_WRITERROOTTREE_H
7 #define HEPMC3_WRITERROOTTREE_H
8 /**
9  * @file WriterRootTree.h
10  * @brief Definition of \b class WriterRootTree
11  *
12  * @class HepMC3::WriterRootTree
13  * @brief GenEvent I/O serialization for root files based on root TTree
14  *
15  * If HepMC was compiled with path to ROOT available, this class can be used
16  * for root writing in the same manner as with HepMC::WriterAscii class.
17  *
18  * @ingroup IO
19  *
20  */
21 #include <string>
22 #include <memory>
23 #include "HepMC3/Writer.h"
24 #include "HepMC3/GenEvent.h"
27 
28 
29 // ROOT header files
30 #ifdef __CINT__
31 #include "TFile.h"
32 #include "TTree.h"
33 #else
34 class TFile;
35 class TTree;
36 #endif
37 
38 namespace HepMC3
39 {
40 class WriterRootTree : public Writer
41 {
42 //
43 // Constructors
44 //
45 public:
46  /** @brief Default constructor
47  * @warning If file exists, it will be overwritten
48  */
49  WriterRootTree(const std::string &filename,
50  std::shared_ptr<GenRunInfo> run = std::shared_ptr<GenRunInfo>());
51  /** @brief Constructor with tree name*/
52  WriterRootTree(const std::string &filename, const std::string &treename, const std::string &branchname,
53  std::shared_ptr<GenRunInfo> run = std::shared_ptr<GenRunInfo>());
54 //
55 // Functions
56 //
57 public:
58  /** @brief Write event to file
59  *
60  * @param[in] evt Event to be serialized
61  */
62  void write_event(const GenEvent &evt) override;
63 
64  /** @brief Write the GenRunInfo object to file. */
65  void write_run_info();
66 
67  /** @brief Close file stream */
68  void close() override;
69 
70  /** @brief Get stream error state flag */
71  bool failed() override;
72 
73 private:
74  /** @brief init routine */
75  bool init(std::shared_ptr<GenRunInfo> run);
76 //
77 // Fields
78 //
79 private:
80  TFile* m_file; //!< File handler
81 public:
82  TTree* m_tree;//!< Tree handler. Public to allow simple access, e.g. custom branches.
83 private:
84  int m_events_count; //!< Events count. Needed to read the tree
85  GenEventData* m_event_data; //!< Pointer to structure that holds event data
86  GenRunInfoData* m_run_info_data; //!< Pointer to structure that holds run info data
87  std::string m_tree_name;//!< Name of TTree
88  std::string m_branch_name; //!< Name of TBranch in TTree
89 };
90 
91 } // namespace HepMC3
92 
93 #endif
std::string m_tree_name
Name of TTree.
GenRunInfoData * m_run_info_data
Pointer to structure that holds run info data.
bool failed() override
Get stream error state flag.
Definition of struct GenEventData.
std::string m_branch_name
Name of TBranch in TTree.
WriterRootTree(const std::string &filename, std::shared_ptr< GenRunInfo > run=std::shared_ptr< GenRunInfo >())
Default constructor.
TTree * m_tree
Tree handler. Public to allow simple access, e.g. custom branches.
void write_event(const GenEvent &evt) override
Write event to file.
int m_events_count
Events count. Needed to read the tree.
Stores event-related information.
Definition: GenEvent.h:41
Stores serializable event information.
Definition: GenEventData.h:26
Definition of interface Writer.
Stores serializable run information.
GenEvent I/O serialization for root files based on root TTree.
void close() override
Close file stream.
GenEventData * m_event_data
Pointer to structure that holds event data.
TFile * m_file
File handler.
Base class for all I/O writers.
Definition: Writer.h:25
void write_run_info()
Write the GenRunInfo object to file.
Definition of class GenEvent.
bool init(std::shared_ptr< GenRunInfo > run)
init routine
Definition of struct GenRunInfoData.