ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Generators
GeneratorFilters
src
xAODTruthParticleSlimmerMuon.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
AthenaKernel/errorcheck.h
"
6
#include "AthLinks/ElementLink.h"
7
8
#include "
GeneratorObjects/xAODTruthParticleLink.h
"
9
#include "
TruthUtils/HepMCHelpers.h
"
10
11
#include "GaudiKernel/MsgStream.h"
12
#include "GaudiKernel/DataSvc.h"
13
#include "GaudiKernel/PhysicalConstants.h"
14
15
#include "
xAODTruth/TruthParticle.h
"
16
#include "
xAODTruth/TruthParticleContainer.h
"
17
#include "
xAODTruth/TruthParticleAuxContainer.h
"
18
19
#include "
GeneratorFilters/xAODTruthParticleSlimmerMuon.h
"
20
21
xAODTruthParticleSlimmerMuon::xAODTruthParticleSlimmerMuon
(
const
std::string &name, ISvcLocator *svcLoc)
22
:
AthAlgorithm
(name, svcLoc)
23
{
24
}
25
26
StatusCode
xAODTruthParticleSlimmerMuon::initialize
()
27
{
28
ATH_CHECK
(
m_xaodTruthEventContainerName
.initialize());
29
ATH_CHECK
(
m_xaodTruthParticleContainerNameMuon
.initialize());
30
ATH_MSG_INFO
(
"xAOD output TruthParticleContainerNameMuon name = "
<<
m_xaodTruthParticleContainerNameMuon
.key());
31
ATH_MSG_INFO
(
"xAOD input xAODTruthEventContainerName name = "
<<
m_xaodTruthEventContainerName
.key());
32
return
StatusCode::SUCCESS;
33
}
34
35
StatusCode
xAODTruthParticleSlimmerMuon::execute
(
const
EventContext& ctx)
36
{
37
// If the containers already exists then assume that nothing needs to be done
38
if
(
evtStore
()->
contains<xAOD::TruthParticleContainer>
(
m_xaodTruthParticleContainerNameMuon
.key()))
39
{
40
ATH_MSG_WARNING
(
"xAOD Muon Truth Particles are already available in the event"
);
41
return
StatusCode::SUCCESS;
42
}
43
44
// Create new output container
45
SG::WriteHandle<xAOD::TruthParticleContainer>
xTruthParticleContainerMuon(
m_xaodTruthParticleContainerNameMuon
, ctx);
46
ATH_CHECK
(xTruthParticleContainerMuon.
record
(std::make_unique<xAOD::TruthParticleContainer>(), std::make_unique<xAOD::TruthParticleAuxContainer>()));
47
ATH_MSG_INFO
(
"Recorded TruthParticleContainerMuon with key: "
<<
m_xaodTruthParticleContainerNameMuon
.key());
48
49
// Retrieve full TruthEventContainer container
50
SG::ReadHandle<xAOD::TruthEventContainer>
xTruthEventContainer(
m_xaodTruthEventContainerName
, ctx);
51
if
(!xTruthEventContainer.
isValid
()) {
52
ATH_MSG_ERROR
(
"Could not retrieve xAOD::TruthEventContainer with key:"
<<
53
m_xaodTruthEventContainerName
.key());
54
return
StatusCode::FAILURE;
55
}
56
// Set up decorators if needed
57
xAOD::TruthEventContainer::const_iterator
itr;
58
for
(itr = xTruthEventContainer->begin(); itr!=xTruthEventContainer->end(); ++itr) {
59
60
std::vector<int> uniqueID_list;
61
int
zero_uniqueID=0;
62
int
dup_uniqueID=0;
63
unsigned
int
nPart = (*itr)->nTruthParticles();
64
for
(
unsigned
int
iPart = 0; iPart < nPart; ++iPart) {
65
const
xAOD::TruthParticle
* theParticle = (*itr)->truthParticle(iPart);
66
67
int
my_uniqueID =
HepMC::uniqueID
(theParticle);
68
if
( my_uniqueID ==
HepMC::UNDEFINED_ID
) {
69
zero_uniqueID++;
70
continue
;
71
}
72
bool
found =
false
;
73
if
(uniqueID_list.size() > 0){
74
found = (std::find(uniqueID_list.begin(), uniqueID_list.end(), my_uniqueID) != uniqueID_list.end());
75
if
(found) {
76
dup_uniqueID++;
77
continue
;}
78
}
79
uniqueID_list.push_back(my_uniqueID);
80
81
82
//Save stable Muons
83
if
(
MC::isStable
(theParticle) &&
MC::isMuon
(theParticle))
84
{
85
xAOD::TruthParticle
*xTruthParticle =
new
xAOD::TruthParticle
();
86
xTruthParticleContainerMuon->push_back( xTruthParticle );
87
// Fill with numerical content
88
*xTruthParticle=*theParticle;
89
}
90
}
91
ATH_MSG_INFO
(
"Found "
<< zero_uniqueID <<
" uniqueID-zero partciles and "
<< dup_uniqueID <<
" duplicates"
);
92
}
93
94
return
StatusCode::SUCCESS;
95
}
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition
AthMsgStreamMacros.h:31
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition
AthMsgStreamMacros.h:32
errorcheck.h
Helpers for checking error return status codes and reporting errors.
TruthParticleContainer.h
TruthParticle.h
HepMCHelpers.h
ATLAS-specific HepMC functions.
TruthParticleAuxContainer.h
AthAlgorithm::AthAlgorithm
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Definition
AthAlgorithm.cxx:10
AthCommonAlgorithm< Gaudi::Algorithm >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
Definition
AthCommonDataStore.h:85
DataVector< TruthEvent_v1 >::const_iterator
DataModel_detail::const_iterator< DataVector > const_iterator
Definition
DataVector.h:838
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
SG::WriteHandle
Definition
StoreGate/StoreGate/WriteHandle.h:73
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
xAODTruthParticleSlimmerMuon::initialize
virtual StatusCode initialize()
Function initialising the algorithm.
Definition
xAODTruthParticleSlimmerMuon.cxx:26
xAODTruthParticleSlimmerMuon::xAODTruthParticleSlimmerMuon
xAODTruthParticleSlimmerMuon(const std::string &name, ISvcLocator *svcLoc)
Regular algorithm constructor.
Definition
xAODTruthParticleSlimmerMuon.cxx:21
xAODTruthParticleSlimmerMuon::execute
virtual StatusCode execute(const EventContext &ctx)
Function executing the algorithm.
Definition
xAODTruthParticleSlimmerMuon.cxx:35
xAODTruthParticleSlimmerMuon::m_xaodTruthParticleContainerNameMuon
SG::WriteHandleKey< xAOD::TruthParticleContainer > m_xaodTruthParticleContainerNameMuon
The key for the output xAOD truth containers.
Definition
xAODTruthParticleSlimmerMuon.h:36
xAODTruthParticleSlimmerMuon::m_xaodTruthEventContainerName
SG::ReadHandleKey< xAOD::TruthEventContainer > m_xaodTruthEventContainerName
Definition
xAODTruthParticleSlimmerMuon.h:33
contains
bool contains(const std::string &s, const std::string ®x)
does a string contain the substring
Definition
hcg.cxx:116
HepMC::uniqueID
int uniqueID(const T &p)
Definition
MagicNumbers.h:89
HepMC::UNDEFINED_ID
constexpr int UNDEFINED_ID
Definition
MagicNumbers.h:57
MC::isStable
bool isStable(const T &p)
Identify if the particle is stable, i.e. has not decayed.
Definition
HepMCHelpers.h:46
MC::isMuon
bool isMuon(const T &p)
Definition
HepMCHelpers.h:212
xAOD::TruthParticle
TruthParticle_v1 TruthParticle
Typedef to implementation.
Definition
Event/xAOD/xAODTruth/xAODTruth/TruthParticle.h:15
xAODTruthParticleLink.h
xAODTruthParticleSlimmerMuon.h
Generated on
for ATLAS Offline Software by
1.17.0