Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
xAODTruthParticleSlimmerElectron.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 
22  : AthAlgorithm(name, svcLoc)
23 {
24 }
25 
27 {
29  ATH_MSG_INFO("xAOD output TruthParticleContainerElectron name = " << m_xaodTruthParticleContainerNameElectron.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
38  if (evtStore()->contains<xAOD::TruthParticleContainer>(m_xaodTruthParticleContainerNameElectron.key()))
39  {
40  ATH_MSG_WARNING("xAOD Electron Truth Particles are already available in the event");
41  return StatusCode::SUCCESS;
42  }
43 
44  // Create new output container
46  ATH_CHECK(xTruthParticleContainerElectron.record(std::make_unique<xAOD::TruthParticleContainer>(), std::make_unique<xAOD::TruthParticleAuxContainer>()));
47  ATH_MSG_INFO("Recorded TruthParticleContainerElectron with key: " << m_xaodTruthParticleContainerNameElectron.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  unsigned int nPart = (*itr)->nTruthParticles();
61  std::vector<int> uniqueID_list;
62  int zero_uniqueID=0;
63  int dup_uniqueID=0;
64  for (unsigned int iPart = 0; iPart < nPart; ++iPart) {
65  const xAOD::TruthParticle* theParticle = (*itr)->truthParticle(iPart);
66  int my_uniqueID = HepMC::uniqueID(theParticle);
67  if (my_uniqueID == HepMC::UNDEFINED_ID ) {
68  zero_uniqueID++;
69  continue;
70  }
71  bool found = false;
72  if (uniqueID_list.size() > 0){
73  found = (std::find(uniqueID_list.begin(), uniqueID_list.end(), my_uniqueID) != uniqueID_list.end());
74  if(found) {
75  dup_uniqueID++;
76  continue;}
77  }
78  uniqueID_list.push_back(my_uniqueID);
79 
80 
81  //Save stable Electrons
82  if (MC::isStable(theParticle) && MC::isElectron(theParticle))
83  {
84  xAOD::TruthParticle *xTruthParticle = new xAOD::TruthParticle();
85  xTruthParticleContainerElectron->push_back( xTruthParticle );
86 
87  // Fill with numerical content
88  *xTruthParticle=*theParticle;
89  }
90  }
91  if (zero_uniqueID!=0 || dup_uniqueID!=0) ATH_MSG_INFO("Found " << zero_uniqueID << " uniqueID=0 particles and " << dup_uniqueID <<" duplicated");
92  }
93 
94  return StatusCode::SUCCESS;
95 }
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
xAODTruthParticleSlimmerElectron.h
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
TruthParticleContainer.h
xAODTruthParticleSlimmerElectron::execute
virtual StatusCode execute()
Function executing the algorithm.
Definition: xAODTruthParticleSlimmerElectron.cxx:35
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
TruthParticleAuxContainer.h
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
xAOD::EgammaHelpers::isElectron
bool isElectron(const xAOD::Egamma *eg)
is the object an electron (not Fwd)
Definition: EgammaxAODHelpers.cxx:12
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:37
xAOD::TruthParticle
TruthParticle_v1 TruthParticle
Typedef to implementation.
Definition: Event/xAOD/xAODTruth/xAODTruth/TruthParticle.h:15
HepMC::uniqueID
int uniqueID(const T &p)
Definition: MagicNumbers.h:116
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
xAODTruthParticleSlimmerElectron::m_xaodTruthEventContainerName
SG::ReadHandleKey< xAOD::TruthEventContainer > m_xaodTruthEventContainerName
Definition: xAODTruthParticleSlimmerElectron.h:35
AthAlgorithm
Definition: AthAlgorithm.h:47
HepMC::UNDEFINED_ID
constexpr int UNDEFINED_ID
Definition: MagicNumbers.h:56
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
errorcheck.h
Helpers for checking error return status codes and reporting errors.
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
checkTriggerxAOD.found
found
Definition: checkTriggerxAOD.py:328
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:73
MC::isStable
bool isStable(const T &p)
Identify if the particle is stable, i.e. has not decayed.
Definition: HepMCHelpers.h:45
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAODTruthParticleSlimmerElectron::xAODTruthParticleSlimmerElectron
xAODTruthParticleSlimmerElectron(const std::string &name, ISvcLocator *svcLoc)
Regular algorithm constructor.
Definition: xAODTruthParticleSlimmerElectron.cxx:21
TruthParticle.h
xAODTruthParticleSlimmerElectron::m_xaodTruthParticleContainerNameElectron
SG::WriteHandleKey< xAOD::TruthParticleContainer > m_xaodTruthParticleContainerNameElectron
The key for the output xAOD truth containers.
Definition: xAODTruthParticleSlimmerElectron.h:38
HepMCHelpers.h
xAODTruthParticleSlimmerElectron::initialize
virtual StatusCode initialize()
Function initialising the algorithm.
Definition: xAODTruthParticleSlimmerElectron.cxx:26