ATLAS Offline Software
PrdMultiTruthMaker.cxx
Go to the documentation of this file.
1 
2 /*
3  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
4 */
5 #include "PrdMultiTruthMaker.h"
6 
8 
11 namespace MuonR4 {
13 
14  ATH_CHECK(m_xAODPrdKeys.initialize());
15  for (const xAODPrdKey_t& key : m_xAODPrdKeys) {
16  m_simHitDecorKeys.emplace_back(key, m_simLinkDecor);
17  }
18  if (m_xAODPrdKeys.empty()) {
19  ATH_MSG_FATAL("No input containers were defined "<<m_xAODPrdKeys);
20  return StatusCode::FAILURE;
21  }
22  ATH_CHECK(m_simHitDecorKeys.initialize());
24  return StatusCode::SUCCESS;
25  }
26 
27  StatusCode PrdMultiTruthMaker::execute(const EventContext& ctx) const {
28 
29  SG::WriteHandle prdTruth{m_writeKey, ctx};
30  ATH_CHECK(prdTruth.record(std::make_unique<PRD_MultiTruthCollection>()));
31 
32  for (const xAODPrdKey_t& key : m_xAODPrdKeys) {
33  const xAODPrdCont_t* unCalibMeasCont{nullptr};
34  ATH_CHECK(SG::get(unCalibMeasCont, key, ctx));
35  for (const xAOD::UncalibratedMeasurement* meas : *unCalibMeasCont) {
36  const xAOD::MuonSimHit* truthHit{getTruthMatchedHit(*meas)};
37  if (!truthHit || !truthHit->genParticleLink().isValid()){
38  continue;
39  }
40  const auto& pl{truthHit->genParticleLink()};
42  using truthiter = PRD_MultiTruthCollection::iterator;
43  const Identifier prdId = xAOD::identify(meas);
44  std::pair<truthiter, truthiter> r = prdTruth->equal_range(prdId);
45  if (r.second == std::find_if(r.first, r.second,
46  [pl](const PRD_MultiTruthCollection::value_type& prd_to_truth) {
47  return prd_to_truth.second == pl;
48  })) {
49  prdTruth->insert(std::make_pair(prdId, pl));
50  }
51  }
52  }
53  return StatusCode::SUCCESS;
54  }
55 }
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
beamspotman.r
def r
Definition: beamspotman.py:672
MuonSimHitHelpers.h
xAOD::MuonSimHit_v1
Definition: MuonSimHit_v1.h:18
xAOD::identify
const Identifier & identify(const UncalibratedMeasurement *meas)
Returns the associated identifier from the muon measurement.
Definition: MuonSpectrometer/MuonPhaseII/Event/xAOD/xAODMuonPrepData/Root/UtilFunctions.cxx:82
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
UtilFunctions.h
SG::ReadHandleKey
Property holding a SG store/key/clid from which a ReadHandle is made.
Definition: StoreGate/StoreGate/ReadHandleKey.h:39
MuonR4::PrdMultiTruthMaker::initialize
virtual StatusCode initialize() override final
Definition: PrdMultiTruthMaker.cxx:12
WriteHandle.h
Handle class for recording to StoreGate.
xAOD::UncalibratedMeasurement_v1
Definition: UncalibratedMeasurement_v1.h:13
xAOD::MuonSimHit_v1::genParticleLink
const HepMcParticleLink & genParticleLink() const
Returns the link to the HepMC particle producing this hit.
Definition: xAODMuonSimHit_V1.cxx:68
MuonR4::PrdMultiTruthMaker::m_xAODPrdKeys
SG::ReadHandleKeyArray< xAODPrdCont_t > m_xAODPrdKeys
Definition: PrdMultiTruthMaker.h:37
SG::get
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
Definition: ReadCondHandle.h:287
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MuonR4::PrdMultiTruthMaker::m_simHitDecorKeys
SG::ReadDecorHandleKeyArray< xAODPrdCont_t > m_simHitDecorKeys
Definition: PrdMultiTruthMaker.h:38
MuonR4::PrdMultiTruthMaker::m_writeKey
SG::WriteHandleKey< PRD_MultiTruthCollection > m_writeKey
Definition: PrdMultiTruthMaker.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
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
MuonR4
This header ties the generic definitions in this package.
Definition: HoughEventData.h:16
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:73
MuonR4::getTruthMatchedHit
const xAOD::MuonSimHit * getTruthMatchedHit(const xAOD::UncalibratedMeasurement &prdHit)
Returns the MuonSimHit, if there's any, matched to the uncalibrated muon measurement.
Definition: MuonSimHitHelpers.cxx:16
MuonR4::PrdMultiTruthMaker::execute
virtual StatusCode execute(const EventContext &ctx) const override final
Definition: PrdMultiTruthMaker.cxx:27
PrdMultiTruthMaker.h
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
MuonR4::PrdMultiTruthMaker::m_simLinkDecor
Gaudi::Property< std::string > m_simLinkDecor
Definition: PrdMultiTruthMaker.h:35
Identifier
Definition: IdentifierFieldParser.cxx:14