Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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 
21 xAODTruthParticleSlimmerMuon::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
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
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 }
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
xAODTruthParticleSlimmerMuon::xAODTruthParticleSlimmerMuon
xAODTruthParticleSlimmerMuon(const std::string &name, ISvcLocator *svcLoc)
Regular algorithm constructor.
Definition: xAODTruthParticleSlimmerMuon.cxx:21
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
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
TruthParticleContainer.h
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::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
AthAlgorithm
Definition: AthAlgorithm.h:47
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
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.
xAODTruthParticleSlimmerMuon::initialize
virtual StatusCode initialize()
Function initialising the algorithm.
Definition: xAODTruthParticleSlimmerMuon.cxx:26
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
xAODTruthParticleSlimmerMuon::m_xaodTruthParticleContainerNameMuon
SG::WriteHandleKey< xAOD::TruthParticleContainer > m_xaodTruthParticleContainerNameMuon
The key for the output xAOD truth containers.
Definition: xAODTruthParticleSlimmerMuon.h:36
checkTriggerxAOD.found
found
Definition: checkTriggerxAOD.py:328
xAODTruthParticleSlimmerMuon::execute
virtual StatusCode execute()
Function executing the algorithm.
Definition: xAODTruthParticleSlimmerMuon.cxx:35
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
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
xAODTruthParticleSlimmerMuon.h
TruthParticle.h
HepMCHelpers.h
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
xAODTruthParticleSlimmerMuon::m_xaodTruthEventContainerName
SG::ReadHandleKey< xAOD::TruthEventContainer > m_xaodTruthEventContainerName
Definition: xAODTruthParticleSlimmerMuon.h:33
isMuon
bool isMuon(const T &p)
Definition: AtlasPID.h:194