ATLAS Offline Software
Loading...
Searching...
No Matches
HepMcTupleWriterTool Class Reference

#include <HepMcTupleWriterTool.h>

Inheritance diagram for HepMcTupleWriterTool:
Collaboration diagram for HepMcTupleWriterTool:

Classes

struct  HepMcParticles
 A simple representation of a HepMc particle. More...

Public Member Functions

 HepMcTupleWriterTool (const std::string &type, const std::string &name, const IInterface *parent)
 Constructor with parameters:
virtual ~HepMcTupleWriterTool ()
 Destructor:
StatusCode initialize ()
 Athena Algorithm's Hooks.
StatusCode execute ()
StatusCode finalize ()
StatusCode write (const HepMC::GenEvent *evt)
 Process the HepMC::GenEvent through the I/O backend.

Protected Member Functions

 HepMcTupleWriterTool ()
 Default constructor:
void setupBackend (Gaudi::Details::PropertyBase &outputFileName)
 Method to configure the back-end to write out the HepMC::GenEvent.
void bookTuple ()
 book the tuple

Protected Attributes

HepMcParticles m_particles {}
 our cached particles
ServiceHandle< ITHistSvc > m_tupleSvc
 Pointer to @ ITHistSvc.
StringProperty m_mcEventsName
 Location of the McEventCollection to be written out If there is more than 1 HepMC::GenEvent in the McEventCollection we will send warning messages, and just write the first one.
StringProperty m_outputFileName
 Name of the output tuple file.
StringProperty m_outputStreamName
 Name of the output tuple stream.
TTree * m_tuple
 cached pointer to the tuple

Static Protected Attributes

static const int s_nMax = 2000
 maximum number of particles per event

Detailed Description

Definition at line 30 of file HepMcTupleWriterTool.h.

Constructor & Destructor Documentation

◆ HepMcTupleWriterTool() [1/2]

HepMcTupleWriterTool::HepMcTupleWriterTool ( const std::string & type,
const std::string & name,
const IInterface * parent )

Constructor with parameters:

Constructors.

Definition at line 28 of file HepMcTupleWriterTool.cxx.

30 :
31 base_class( type, name, parent ),
32 m_tupleSvc ( "THistSvc", name ),
33 m_tuple ( nullptr )
34{
35 //
36 // Property declaration
37 //
38
39 declareProperty( "Output",
40 m_outputFileName = "hepmc.root",
41 "Name of the output file which will contain the HepMC tuple"
42 "\nEx: hepmc.root" );
43 m_outputFileName.declareUpdateHandler( &HepMcTupleWriterTool::setupBackend, this );
44
45 declareProperty( "OutputStream",
46 m_outputStreamName = "hepmc",
47 "Name of the stream which will contain the HepMC tuple"
48 "\nEx: hepmc" );
49
50 declareProperty( "McEvents",
51 m_mcEventsName = "GEN_EVENT",
52 "Input location of the McEventCollection to write out" );
53}
TTree * m_tuple
cached pointer to the tuple
StringProperty m_outputStreamName
Name of the output tuple stream.
StringProperty m_mcEventsName
Location of the McEventCollection to be written out If there is more than 1 HepMC::GenEvent in the Mc...
StringProperty m_outputFileName
Name of the output tuple file.
void setupBackend(Gaudi::Details::PropertyBase &outputFileName)
Method to configure the back-end to write out the HepMC::GenEvent.
ServiceHandle< ITHistSvc > m_tupleSvc
Pointer to @ ITHistSvc.

◆ ~HepMcTupleWriterTool()

HepMcTupleWriterTool::~HepMcTupleWriterTool ( )
virtual

Destructor:

Destructor.

Definition at line 57 of file HepMcTupleWriterTool.cxx.

58{
59 ATH_MSG_DEBUG("Calling destructor");
60}
#define ATH_MSG_DEBUG(x)

◆ HepMcTupleWriterTool() [2/2]

HepMcTupleWriterTool::HepMcTupleWriterTool ( )
protected

Default constructor:

Member Function Documentation

◆ bookTuple()

void HepMcTupleWriterTool::bookTuple ( )
protected

book the tuple

Definition at line 178 of file HepMcTupleWriterTool.cxx.

179{
180 const std::string streamName = m_outputStreamName.value();
181 TTree* t = new TTree("hepmc","HepMC validation tuple");
182 if ( !m_tupleSvc->regTree( "/" + streamName + "/hepmc", t ).isSuccess() ) {
183 ATH_MSG_ERROR("Could not register HepMC validation tuple !!");
184 delete t; t = nullptr;
185 throw GaudiException( "Could not register HepMC validation tuple !!", name(), StatusCode::FAILURE );
186 }
187
188 // booking branches
189 t->Branch( "nParts", &m_particles.m_nParticles, "nParts/I" );
190
191 t->Branch( "px", m_particles.m_px.data(), "px[nParts]/D" );
192 t->Branch( "py", m_particles.m_py.data(), "py[nParts]/D" );
193 t->Branch( "pz", m_particles.m_pz.data(), "pz[nParts]/D" );
194 t->Branch( "m", m_particles.m_m.data(), "m[nParts]/D" );
195 t->Branch( "e", m_particles.m_ene.data(), "e[nParts]/D" );
196
197 t->Branch( "pdgId", m_particles.m_pdgId.data(), "pdgId[nParts]/I" );
198 t->Branch( "sc", m_particles.m_status.data(), "sc[nParts]/I" );
199 t->Branch( "bc", m_particles.m_barcode.data(), "bc[nParts]/I" );
200
201 m_tuple = t;
202}
#define ATH_MSG_ERROR(x)
HepMcParticles m_particles
our cached particles

◆ execute()

StatusCode HepMcTupleWriterTool::execute ( )

Definition at line 95 of file HepMcTupleWriterTool.cxx.

96{
97 // retrieve the McEventCollection
98 const McEventCollection * mcEvts = nullptr;
99 if ( evtStore()->retrieve( mcEvts, m_mcEventsName ).isFailure() || nullptr == mcEvts ) {
100 ATH_MSG_ERROR("Could not retrieve a McEventCollection at [" << m_mcEventsName << "] !!");
101 return StatusCode::FAILURE;
102 }
103
104 if ( mcEvts->empty() ) {
105 ATH_MSG_WARNING("McEventCollection at ["<<m_mcEventsName<<"] is EMPTY !!");
106 return StatusCode::FAILURE;
107 }
108
109 const HepMC::GenEvent * evt = mcEvts->front();
110 if ( !evt ) {
111 ATH_MSG_ERROR("Retrieved NULL pointer to HepMC::GenEvent !!");
112 return StatusCode::FAILURE;
113 }
114
115 return write(evt);
116}
#define ATH_MSG_WARNING(x)
const T * front() const
Access the first element in the collection as an rvalue.
bool empty() const noexcept
Returns true if the collection is empty.
StatusCode write(const HepMC::GenEvent *evt)
Process the HepMC::GenEvent through the I/O backend.
retrieve(aClass, aKey=None)
Definition PyKernel.py:110

◆ finalize()

StatusCode HepMcTupleWriterTool::finalize ( )

Definition at line 89 of file HepMcTupleWriterTool.cxx.

90{
91 ATH_MSG_INFO("Finalizing " << name() << "...");
92 return StatusCode::SUCCESS;
93}
#define ATH_MSG_INFO(x)

◆ initialize()

StatusCode HepMcTupleWriterTool::initialize ( )

Athena Algorithm's Hooks.

Definition at line 64 of file HepMcTupleWriterTool.cxx.

65{
66 ATH_MSG_INFO("Initializing " << name() << "...");
67
68 // Get pointer to StoreGateSvc and cache it :
69 if ( !evtStore().retrieve().isSuccess() ) {
70 ATH_MSG_ERROR("Unable to retrieve pointer to StoreGateSvc");
71 return StatusCode::FAILURE;
72 }
73
74 // Get pointer to ITHistSvc and cache it :
75 if ( !m_tupleSvc.retrieve().isSuccess() ) {
76 ATH_MSG_ERROR("Unable to retrieve pointer to ITHistSvc");
77 return StatusCode::FAILURE;
78 }
79
80 // setup backend
82
83 // book tuple
84 bookTuple();
85
86 return StatusCode::SUCCESS;
87}
void bookTuple()
book the tuple

◆ setupBackend()

void HepMcTupleWriterTool::setupBackend ( Gaudi::Details::PropertyBase & outputFileName)
protected

Method to configure the back-end to write out the HepMC::GenEvent.

Non-const methods:

Definition at line 151 of file HepMcTupleWriterTool.cxx.

152{
153 SmartIF<IProperty> tSvc{m_tupleSvc.get()};
154 if ( !tSvc ) {
155 ATH_MSG_ERROR("Could not retrieve THistSvc handle !!");
156 throw GaudiException( "Could not retrieve THistSvc", name(), StatusCode::FAILURE );
157 }
158
159 const std::string streamName = m_outputStreamName.value();
160
161 const std::string propName = "Output";
162 StringArrayProperty outputFileName;
163 outputFileName.assign( tSvc->getProperty( propName ) );
164 std::vector<std::string> updatedProp( outputFileName.value() );
165 updatedProp.push_back
166 ( streamName+" DATAFILE='"+m_outputFileName.value()+"' "
167 "TYP='ROOT' "
168 "OPT='RECREATE'" );
169 outputFileName.set( updatedProp );
170 outputFileName.setName( std::move(propName) );
171 if ( !tSvc->setProperty( outputFileName ).isSuccess() ) {
172 ATH_MSG_ERROR("Could not configure the THistSvc's output filename ["<< m_outputFileName.value() << "] !!");
173 throw GaudiException( "Could not configure THistSvc output file !!", name(), StatusCode::FAILURE );
174 }
175
176 }
static const std::string outputFileName

◆ write()

StatusCode HepMcTupleWriterTool::write ( const HepMC::GenEvent * evt)

Process the HepMC::GenEvent through the I/O backend.

Non-const methods:

Definition at line 122 of file HepMcTupleWriterTool.cxx.

123{
124 m_particles.m_nParticles = std::min<std::size_t>( s_nMax, evt->particles_size() );
125 std::size_t i = 0;
126 for (const auto& p: *evt)
127 {
128 if (i == static_cast<std::size_t>(m_particles.m_nParticles)) break;
129 i++;
130 const HepMC::FourVector mom = p->momentum();
131 m_particles.m_px [i] = mom.px();
132 m_particles.m_py [i] = mom.py();
133 m_particles.m_pz [i] = mom.pz();
134 m_particles.m_m [i] = mom.m();
135 m_particles.m_ene[i] = mom.e();
136
137 m_particles.m_pdgId[i] = p->pdg_id();
138 m_particles.m_status[i] = p->status();
139 m_particles.m_barcode[i] = HepMC::barcode(p);
140 }
141 // commit event
142 m_tuple->Fill();
143
144 return StatusCode::SUCCESS;
145}
static const int s_nMax
maximum number of particles per event
int barcode(const T *p)
Definition Barcode.h:16

Member Data Documentation

◆ m_mcEventsName

StringProperty HepMcTupleWriterTool::m_mcEventsName
protected

Location of the McEventCollection to be written out If there is more than 1 HepMC::GenEvent in the McEventCollection we will send warning messages, and just write the first one.

Definition at line 108 of file HepMcTupleWriterTool.h.

◆ m_outputFileName

StringProperty HepMcTupleWriterTool::m_outputFileName
protected

Name of the output tuple file.

Definition at line 111 of file HepMcTupleWriterTool.h.

◆ m_outputStreamName

StringProperty HepMcTupleWriterTool::m_outputStreamName
protected

Name of the output tuple stream.

Definition at line 114 of file HepMcTupleWriterTool.h.

◆ m_particles

HepMcParticles HepMcTupleWriterTool::m_particles {}
protected

our cached particles

Definition at line 99 of file HepMcTupleWriterTool.h.

99{};

◆ m_tuple

TTree* HepMcTupleWriterTool::m_tuple
protected

cached pointer to the tuple

Definition at line 117 of file HepMcTupleWriterTool.h.

◆ m_tupleSvc

ServiceHandle<ITHistSvc> HepMcTupleWriterTool::m_tupleSvc
protected

Pointer to @ ITHistSvc.

Definition at line 102 of file HepMcTupleWriterTool.h.

◆ s_nMax

const int HepMcTupleWriterTool::s_nMax = 2000
staticprotected

maximum number of particles per event

Definition at line 84 of file HepMcTupleWriterTool.h.


The documentation for this class was generated from the following files: