HepMC3 event record library
ReaderRoot.cc
Go to the documentation of this file.
1// -*- C++ -*-
2//
3// This file is part of HepMC
4// Copyright (C) 2014-2019 The HepMC collaboration (see AUTHORS for details)
5//
6/**
7 * @file ReaderRoot.cc
8 * @brief Implementation of \b class ReaderRoot
9 *
10 */
11#include "HepMC3/ReaderRoot.h"
12
13namespace HepMC3 {
14
15ReaderRoot::ReaderRoot(const std::string &filename) {
16
17 m_file = TFile::Open(filename.c_str());
18 m_next = new TIter(m_file->GetListOfKeys());
19
20 if ( !m_file->IsOpen() ) {
21 ERROR( "ReaderRoot: problem opening file: " << filename )
22 return;
23 }
24
25 shared_ptr<GenRunInfo> ri = make_shared<GenRunInfo>();
26
27 GenRunInfoData *run = reinterpret_cast<GenRunInfoData*>(m_file->Get("GenRunInfoData"));
28
29 if(run) {
30 ri->read_data(*run);
31 delete run;
32 }
33
34 set_run_info(ri);
35}
36
38
39 // Skip object of different type than GenEventData
40 GenEventData *data = nullptr;
41
42 while(true) {
43 TKey *key = (TKey*) (*m_next)();
44
45 if( !key ) {
46 m_file->Close();
47 return false;
48 }
49
50 const char *cl = key->GetClassName();
51
52 if( !cl ) continue;
53 size_t geneventdata30=strncmp(cl,"HepMC::GenEventData",19);
54 size_t geneventdata31=strncmp(cl,"HepMC3::GenEventData",20);
55 if( geneventdata31==0 || geneventdata30==0 ) {
56 if (geneventdata30==0) WARNING( "ReaderRoot::read_event: The object was written with HepMC3 version 3.0" )
57 data = reinterpret_cast<GenEventData*>(key->ReadObj());
58 break;
59 }
60 }
61
62 if( !data ) {
63 ERROR("ReaderRoot: could not read event from root file")
64 m_file->Close();
65 return false;
66 }
67
68 evt.read_data(*data);
69 evt.set_run_info( run_info() );
70
71 delete data;
72 return true;
73}
74
76 m_file->Close();
77}
78
80 if ( !m_file->IsOpen() ) return true;
81
82 return false;
83}
84
85} // namespace HepMC3
#define WARNING(MESSAGE)
Macro for printing warning messages.
Definition: Errors.h:26
#define ERROR(MESSAGE)
Macro for printing error messages.
Definition: Errors.h:23
Definition of class ReaderRoot.
Stores event-related information.
Definition: GenEvent.h:42
void set_run_info(shared_ptr< GenRunInfo > run)
Set the GenRunInfo object by smart pointer.
Definition: GenEvent.h:129
void read_data(const GenEventData &data)
Fill GenEvent based on GenEventData.
Definition: GenEvent.cc:705
bool read_event(GenEvent &evt)
Read event from file.
Definition: ReaderRoot.cc:37
void close()
Close file stream.
Definition: ReaderRoot.cc:75
ReaderRoot(const std::string &filename)
Default constructor.
Definition: ReaderRoot.cc:15
TFile * m_file
File handler.
Definition: ReaderRoot.h:60
bool failed()
Get stream error state.
Definition: ReaderRoot.cc:79
TIter * m_next
Iterator for event reading.
Definition: ReaderRoot.h:61
void set_run_info(shared_ptr< GenRunInfo > run)
Set the global GenRunInfo object.
Definition: Reader.h:46
shared_ptr< GenRunInfo > run_info() const
Get the global GenRunInfo object.
Definition: Reader.h:39
HepMC3 main namespace.
Definition: ReaderGZ.h:28
Stores serializable event information.
Definition: GenEventData.h:26
Stores serializable run information.