HepMC3 event record library: ReaderRootTree.cc Source File

HepMC3 event record library

ReaderRootTree.cc
Go to the documentation of this file.
1// -*- C++ -*-
2//
3// This file is part of HepMC
4// Copyright (C) 2014-2023 The HepMC collaboration (see AUTHORS for details)
5//
6/**
7 * @file ReaderRootTree.cc
8 * @brief Implementation of \b class ReaderRootTree
9 *
10 */
11#include "HepMC3/ReaderRootTree.h"
12#include "HepMC3/Units.h"
13#include "HepMC3/Version.h"
14namespace HepMC3
15{
16HEPMC3_DECLARE_READER_FILE(ReaderRootTree)
17
18ReaderRootTree::ReaderRootTree(const std::string &filename):
19 m_tree_name("hepmc3_tree"), m_branch_name("hepmc3_event")
20{
21 m_file = TFile::Open(filename.c_str());
22 if (!init()) return;
23}
24
25
26 ReaderRootTree::ReaderRootTree(const std::string &filename, const std::string &treename, const std::string &branchname):
27 m_tree_name(treename), m_branch_name(branchname)
28{
29 m_file = TFile::Open(filename.c_str());
30 if (!init()) return;
31}
32
33 bool ReaderRootTree::init()
34{
35 if ( !m_file->IsOpen() )
36 {
37 HEPMC3_ERROR_LEVEL(100,"ReaderRootTree: problem opening file: " << m_file->GetName())
38 return false;
39 }
40
41
42 m_tree = reinterpret_cast<TTree*>(m_file->Get(m_tree_name.c_str()));
43 if (!m_tree)
44 {
45 HEPMC3_ERROR_LEVEL(100,"ReaderRootTree: problem opening tree: " << m_tree_name)
46 return false;
47 }
48 m_event_data = new GenEventData();
49 int result = m_tree->SetBranchAddress(m_branch_name.c_str(), &m_event_data);
50 if (result < 0)
51 {
52 HEPMC3_ERROR_LEVEL(100,"ReaderRootTree: problem reading branch tree: " << m_tree_name)
53 return false;
54 }
55 m_run_info_data = new GenRunInfoData();
56 result = m_tree->SetBranchAddress("GenRunInfo", &m_run_info_data);
57 if (result < 0)
58 {
59 HEPMC3_WARNING_LEVEL(100,"ReaderRootTree: problem reading branch tree: GenRunInfo. Will attempt to read GenRunInfoData object.")
60 std::shared_ptr<GenRunInfo> ri = std::make_shared<GenRunInfo>();
61 auto *run = reinterpret_cast<GenRunInfoData*>(m_file->Get("GenRunInfoData"));
62 if (run) {
63 ri->read_data(*run);
64 delete run;
65 set_run_info(ri);
66 HEPMC3_WARNING_LEVEL(900,"ReaderRootTree::init The object was written with HepMC3 version 3.0")
67 } else {
68 HEPMC3_ERROR_LEVEL(100,"ReaderRootTree: problem reading object GenRunInfoData")
69 return false;
70 }
71 }
72 set_run_info(std::make_shared<GenRunInfo>());
73 return true;
74}
75
76 bool ReaderRootTree::skip(const int n)
77{
78 m_events_count+=n;
79 return m_events_count < m_tree->GetEntries();
80}
81
82
83
84 bool ReaderRootTree::read_event(GenEvent& evt)
85{
86 if (m_events_count >= m_tree->GetEntries()) { m_events_count++; return false;}
87 m_event_data->particles.clear();
88 m_event_data->vertices.clear();
89 m_event_data->links1.clear();
90 m_event_data->links2.clear();
91 m_event_data->attribute_id.clear();
92 m_event_data->attribute_name.clear();
93 m_event_data->attribute_string.clear();
94
95
96 m_run_info_data->weight_names.clear();
97 m_run_info_data->tool_name.clear();
98 m_run_info_data->tool_version.clear();
99 m_run_info_data->tool_description.clear();
100 m_run_info_data->attribute_name.clear();
101 m_run_info_data->attribute_string.clear();
102
103
104 m_tree->GetEntry(m_events_count);
105 evt.read_data(*m_event_data);
106 run_info()->read_data(*m_run_info_data);
107 evt.set_run_info(run_info());
108 m_events_count++;
109 return true;
110}
111
112 void ReaderRootTree::close()
113{
114 m_file->Close();
115}
116
117 bool ReaderRootTree::failed()
118{
119 if ( !m_file->IsOpen() ) return true;
120 if (m_events_count > m_tree->GetEntries()) return true;
121 return false;
122}
123
124} // namespace HepMC3
HEPMC3_WARNING_LEVEL
#define HEPMC3_WARNING_LEVEL(LEVEL, MESSAGE)
Macro for printing HEPMC3_HEPMC3_WARNING messages.
Definition Errors.h:34
HEPMC3_ERROR_LEVEL
#define HEPMC3_ERROR_LEVEL(LEVEL, MESSAGE)
Macro for printing error messages.
Definition Errors.h:27
ReaderRootTree.h
Definition of class ReaderRootTree.
Units.h
Definition of class Units.
Version.h
Declaration of the Verrion functions and some macros.
HepMC3::GenEvent
Stores event-related information.
Definition GenEvent.h:47
HepMC3::GenEvent::set_run_info
void set_run_info(std::shared_ptr< GenRunInfo > run)
Set the GenRunInfo object by smart pointer.
Definition GenEvent.h:148
HepMC3::GenEvent::read_data
void read_data(const GenEventData &data)
Fill GenEvent based on GenEventData.
Definition protobufUtils.cc:336
HepMC3::ReaderRootTree
GenEvent I/O parsing and serialization for root files based on root TTree.
Definition ReaderRootTree.h:36
HepMC3::ReaderRootTree::read_event
bool read_event(GenEvent &evt) override
Read event from file.
Definition ReaderRootTree.cc:84
HepMC3::ReaderRootTree::m_tree
TTree * m_tree
Tree handler. Public to allow simple access, e.g. custom branches.
Definition ReaderRootTree.h:74
HepMC3::ReaderRootTree::ReaderRootTree
ReaderRootTree(const std::string &filename)
Default constructor.
Definition ReaderRootTree.cc:18
HepMC3::ReaderRootTree::failed
bool failed() override
Get file error state.
Definition ReaderRootTree.cc:117
HepMC3::ReaderRootTree::skip
bool skip(const int) override
skip events
Definition ReaderRootTree.cc:76
HepMC3::ReaderRootTree::m_event_data
GenEventData * m_event_data
Pointer to structure that holds event data.
Definition ReaderRootTree.h:77
HepMC3::ReaderRootTree::m_events_count
int m_events_count
Events count. Needed to read the tree.
Definition ReaderRootTree.h:76
HepMC3::ReaderRootTree::close
void close() override
Close file.
Definition ReaderRootTree.cc:112
HepMC3::ReaderRootTree::m_tree_name
std::string m_tree_name
Name of TTree.
Definition ReaderRootTree.h:79
HepMC3::ReaderRootTree::m_branch_name
std::string m_branch_name
Name of TBranch in TTree.
Definition ReaderRootTree.h:80
HepMC3::ReaderRootTree::m_file
TFile * m_file
File handler.
Definition ReaderRootTree.h:72
HepMC3::ReaderRootTree::m_run_info_data
GenRunInfoData * m_run_info_data
Pointer to structure that holds run info data.
Definition ReaderRootTree.h:78
HepMC3::ReaderRootTree::init
bool init()
init routine
Definition ReaderRootTree.cc:33
HepMC3::Reader::set_run_info
virtual void set_run_info(std::shared_ptr< GenRunInfo > run)
Set the global GenRunInfo object.
Definition Reader.h:56
HepMC3::Reader::run_info
virtual std::shared_ptr< GenRunInfo > run_info() const
Get the global GenRunInfo object.
Definition Reader.h:44
HepMC3
HepMC3 main namespace.
Definition AnalysisExample.h:24
HepMC3::GenEventData
Stores serializable event information.
Definition GenEventData.h:26
HepMC3::GenRunInfoData
Stores serializable run information.
Definition GenRunInfoData.h:23