ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Generators
FlowAfterburner
FlowAfterburner
Generators/FlowAfterburner/FlowAfterburner/GenAccessIO.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#ifndef TRUTHHELPER_GENACCESSIO_H
6
#define TRUTHHELPER_GENACCESSIO_H
7
8
#include "
GeneratorObjects/McEventCollection.h
"
9
#include "
AtlasHepMC/GenParticle.h
"
10
#include "
TruthUtils/HepMCHelpers.h
"
11
#include "
StoreGate/StoreGateSvc.h
"
12
13
#include <vector>
14
#include <string>
15
16
typedef
std::vector<HepMC::ConstGenParticlePtr>
MCParticleCollection
;
17
typedef
std::vector<HepMC::ConstGenParticlePtr>::const_iterator
MCParticleCollectionCIter
;
18
19
namespace
TruthHelper
{
20
21
class
GenAccessIO
{
22
public
:
23
24
GenAccessIO
() :
m_sgSvc
(
"StoreGateSvc"
,
"GenAccessIO"
) {
25
if
(
m_sgSvc
.retrieve().isFailure()) {
26
throw StatusCode::FAILURE;
27
}
28
}
29
StatusCode
getMC
(
MCParticleCollection
& mcParticles,
const
bool
ifgen=
false
,
const
std::string& key=
"GEN_EVENT"
)
const
{
30
MsgStream log(
Athena::getMessageSvc
(),
"GenAccessIO"
);
31
32
// Retrieve iterators for McEventCollections objects
33
SG::ConstIterator<McEventCollection>
firstMEC;
34
SG::ConstIterator<McEventCollection>
lastMEC;
35
if
( (
m_sgSvc
->retrieve(firstMEC, lastMEC)).isFailure() ) {
36
log << MSG::ERROR <<
"Could not retrieve iterators for McEventCollections"
<<
endmsg
;
37
}
38
const
McEventCollection
& mcColl = *firstMEC;
39
int
icount = 0;
40
for
( ; firstMEC!= lastMEC; ++firstMEC) icount++;
41
log << MSG::DEBUG <<
"Number of McEventCollections= "
<< icount <<
endmsg
;
42
43
// If there is more than one then do the retrieve with the key
44
if
(icount > 1) {
45
log << MSG::DEBUG <<
"Key = "
<< key <<
endmsg
;
46
const
McEventCollection
* mcCollptr =
nullptr
;
47
return
this->
getDH
(mcCollptr, key);
48
}
49
50
if
(icount > 0) {
51
// Iterate over all McEvent records
52
McEventCollection::const_iterator
itr;
53
for
(itr = mcColl.
begin
(); itr!=mcColl.
end
(); ++itr) {
54
// Access the HepMC record which is wrapped within McEvent
55
const
HepMC::GenEvent
* genEvt = (*itr);
56
if
(genEvt == 0)
return
StatusCode::FAILURE;
57
if
(ifgen) {
58
for
(
auto
it: *genEvt) {
59
if
(!
HepMC::is_simulation_particle
(it)) mcParticles.push_back(std::move(it));
60
}
61
}
else
{
62
for
(
auto
it: *genEvt) {
63
mcParticles.push_back(std::move(it));
64
}
65
}
66
}
67
}
68
return
StatusCode::SUCCESS;
69
}
70
StatusCode
getDH
(
const
McEventCollection
*& dh)
const
{
71
return
m_sgSvc
->retrieve(dh);
72
}
73
StatusCode
getDH
(
const
McEventCollection
*& dh,
const
std::string& key)
const
{
74
return
m_sgSvc
->retrieve(dh, key);
75
}
76
StatusCode
store
(
McEventCollection
* storee,
const
std::string& key)
const
{
77
return
m_sgSvc
->record(storee, key);
78
}
79
private
:
80
ServiceHandle<StoreGateSvc>
m_sgSvc
;
81
};
82
}
83
84
#endif
endmsg
#define endmsg
Definition
AnalysisConfig_Ntuple.cxx:54
GenParticle.h
MCParticleCollection
std::vector< HepMC::ConstGenParticlePtr > MCParticleCollection
Definition
Generators/FlowAfterburner/FlowAfterburner/GenAccessIO.h:16
MCParticleCollectionCIter
std::vector< HepMC::ConstGenParticlePtr >::const_iterator MCParticleCollectionCIter
Definition
Generators/FlowAfterburner/FlowAfterburner/GenAccessIO.h:17
HepMCHelpers.h
ATLAS-specific HepMC functions.
McEventCollection.h
StoreGateSvc.h
DataVector< HepMC::GenEvent >::const_iterator
DataModel_detail::const_iterator< DataVector > const_iterator
Definition
DataVector.h:838
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
McEventCollection
This defines the McEventCollection, which is really just an ObjectVector of McEvent objectsFile: Gene...
Definition
McEventCollection.h:31
SG::ConstIterator
a const_iterator facade to DataHandle.
Definition
SGIterator.h:164
ServiceHandle
Definition
ClusterMakerTool.h:36
TruthHelper::GenAccessIO::getMC
StatusCode getMC(MCParticleCollection &mcParticles, const bool ifgen=false, const std::string &key="GEN_EVENT") const
Definition
Generators/FlowAfterburner/FlowAfterburner/GenAccessIO.h:29
TruthHelper::GenAccessIO::m_sgSvc
ServiceHandle< StoreGateSvc > m_sgSvc
Definition
Generators/FlowAfterburner/FlowAfterburner/GenAccessIO.h:80
TruthHelper::GenAccessIO::getDH
StatusCode getDH(const McEventCollection *&dh, const std::string &key) const
Definition
Generators/FlowAfterburner/FlowAfterburner/GenAccessIO.h:73
TruthHelper::GenAccessIO::store
StatusCode store(McEventCollection *storee, const std::string &key) const
Definition
Generators/FlowAfterburner/FlowAfterburner/GenAccessIO.h:76
TruthHelper::GenAccessIO::GenAccessIO
GenAccessIO()
Definition
Generators/FlowAfterburner/FlowAfterburner/GenAccessIO.h:24
TruthHelper::GenAccessIO::getDH
StatusCode getDH(const McEventCollection *&dh) const
Definition
Generators/FlowAfterburner/FlowAfterburner/GenAccessIO.h:70
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition
getMessageSvc.cxx:20
HepMC::is_simulation_particle
bool is_simulation_particle(const T &p)
Method to establish if a particle (or barcode) was created during the simulation (TODO update to be s...
Definition
MagicNumbers.h:322
HepMC::GenEvent
HepMC3::GenEvent GenEvent
Definition
GenEvent.h:39
TruthHelper
Definition
CheckFlow_New.h:22
Generated on
for ATLAS Offline Software by
1.17.0