ATLAS Offline Software
Loading...
Searching...
No Matches
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
12
13#include <vector>
14#include <string>
15
16typedef std::vector<HepMC::ConstGenParticlePtr> MCParticleCollection;
17typedef std::vector<HepMC::ConstGenParticlePtr>::const_iterator MCParticleCollectionCIter;
18
19namespace TruthHelper {
20
22public:
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
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
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 }
79private:
81};
82}
83
84#endif
#define endmsg
std::vector< HepMC::ConstGenParticlePtr > MCParticleCollection
std::vector< HepMC::ConstGenParticlePtr >::const_iterator MCParticleCollectionCIter
ATLAS-specific HepMC functions.
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
This defines the McEventCollection, which is really just an ObjectVector of McEvent objectsFile: Gene...
a const_iterator facade to DataHandle.
Definition SGIterator.h:164
StatusCode getMC(MCParticleCollection &mcParticles, const bool ifgen=false, const std::string &key="GEN_EVENT") const
StatusCode getDH(const McEventCollection *&dh, const std::string &key) const
StatusCode store(McEventCollection *storee, const std::string &key) const
StatusCode getDH(const McEventCollection *&dh) const
IMessageSvc * getMessageSvc(bool quiet=false)
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...