ATLAS Offline Software
Loading...
Searching...
No Matches
xAODTruthParticleSlimmerPhoton.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
9
10#include "GaudiKernel/MsgStream.h"
11#include "GaudiKernel/DataSvc.h"
12#include "GaudiKernel/PhysicalConstants.h"
13
17
20
21xAODTruthParticleSlimmerPhoton::xAODTruthParticleSlimmerPhoton(const std::string &name, ISvcLocator *svcLoc)
22 : AthAlgorithm(name, svcLoc)
23{
24}
25
27{
29 ATH_MSG_INFO("xAOD output TruthParticleContainerPhoton name = " << m_xaodTruthParticleContainerNamePhoton.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 Photon Truth Particles are already available in the event");
41 return StatusCode::SUCCESS;
42 }
43
44 // Create new output container
46 ATH_CHECK(xTruthParticleContainerPhoton.record(std::make_unique<xAOD::TruthParticleContainer>(), std::make_unique<xAOD::TruthParticleAuxContainer>()));
47 ATH_MSG_INFO("Recorded TruthParticleContainerPhoton with key: " << m_xaodTruthParticleContainerNamePhoton.key());
48
49 // Retrieve full TruthEventContainer container
51 if ( !xTruthEventContainer.isValid() )
52 {
53 ATH_MSG_ERROR("No TruthEvent collection with name " << m_xaodTruthEventContainerName.key() << " found in StoreGate!");
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
64 unsigned int nPart = (*itr)->nTruthParticles();
65
66 for (unsigned int iPart = 0; iPart < nPart; ++iPart) {
67 const xAOD::TruthParticle* theParticle = (*itr)->truthParticle(iPart);
68
69 int my_uniqueID = HepMC::uniqueID(theParticle);
70 if ( my_uniqueID == HepMC::UNDEFINED_ID ) {
71 zero_uniqueID++;
72 continue;
73 }
74 bool found = false;
75 if (uniqueID_list.size() > 0){
76 found = (std::find(uniqueID_list.begin(), uniqueID_list.end(), my_uniqueID) != uniqueID_list.end());
77 if(found) {
78 dup_uniqueID++;
79 continue;}
80 }
81 uniqueID_list.push_back(my_uniqueID);
82
83
84 //Save stable Photons
85 if (MC::isStable(theParticle) && MC::isPhoton(theParticle))
86 {
87 xAOD::TruthParticle *xTruthParticle = new xAOD::TruthParticle();
88 xTruthParticleContainerPhoton->push_back( xTruthParticle );
89
90 // Fill with numerical content
91 *xTruthParticle=*theParticle;
92 }
93 }
94 if (zero_uniqueID != 0 || dup_uniqueID != 0) ATH_MSG_INFO("Found " << zero_uniqueID << " uniqueID zero particles and " <<dup_uniqueID<< " duplicated");
95 }
96
97 return StatusCode::SUCCESS;
98}
#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.
SG::WriteHandleKey< xAOD::TruthParticleContainer > m_xaodTruthParticleContainerNamePhoton
The key for the output xAOD truth containers.
xAODTruthParticleSlimmerPhoton(const std::string &name, ISvcLocator *svcLoc)
Regular algorithm constructor.
SG::ReadHandleKey< xAOD::TruthEventContainer > m_xaodTruthEventContainerName
virtual StatusCode initialize()
Function initialising the algorithm.
virtual StatusCode execute()
Function executing the algorithm.
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 isPhoton(const T &p)
bool isStable(const T &p)
Identify if the particle is stable, i.e. has not decayed.
TruthParticle_v1 TruthParticle
Typedef to implementation.