ATLAS Offline Software
Loading...
Searching...
No Matches
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
6#include "AthLinks/ElementLink.h"
7
10
11#include "GaudiKernel/MsgStream.h"
12#include "GaudiKernel/DataSvc.h"
13#include "GaudiKernel/PhysicalConstants.h"
14
18
20
21xAODTruthParticleSlimmerMuon::xAODTruthParticleSlimmerMuon(const std::string &name, ISvcLocator *svcLoc)
22 : AthAlgorithm(name, svcLoc)
23{
24}
25
27{
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
36{
37 // If the containers already exists then assume that nothing needs to be done
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
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
51 if (!xTruthEventContainer.isValid()) {
52 ATH_MSG_ERROR("Could not retrieve xAOD::TruthEventContainer with key:" <<
54 return StatusCode::FAILURE;
55 }
56 // Set up decorators if needed
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}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
Helpers for checking error return status codes and reporting errors.
ATLAS-specific HepMC functions.
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
virtual bool isValid() override final
Can the handle be successfully dereferenced?
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
virtual StatusCode initialize()
Function initialising the algorithm.
xAODTruthParticleSlimmerMuon(const std::string &name, ISvcLocator *svcLoc)
Regular algorithm constructor.
SG::WriteHandleKey< xAOD::TruthParticleContainer > m_xaodTruthParticleContainerNameMuon
The key for the output xAOD truth containers.
virtual StatusCode execute()
Function executing the algorithm.
SG::ReadHandleKey< xAOD::TruthEventContainer > m_xaodTruthEventContainerName
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition hcg.cxx:114
int uniqueID(const T &p)
constexpr int UNDEFINED_ID
bool isStable(const T &p)
Identify if the particle is stable, i.e. has not decayed.
bool isMuon(const T &p)
TruthParticle_v1 TruthParticle
Typedef to implementation.