ATLAS Offline Software
TruthMeasMarkerAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 #include "TruthMeasMarkerAlg.h"
5 
7 #include "StoreGate/ReadHandle.h"
12 
13 namespace MuonR4 {
16  using SegLinkVec_t = std::vector<SegLink_t>;
17 
20 
22  using namespace DerivationFramework;
23 
25  ATH_CHECK(m_segKey.initialize());
26  if (m_measKeys.empty()) {
27  ATH_MSG_FATAL("Please configure the measurement containers to decorate.");
28  return StatusCode::FAILURE;
29  }
30  ATH_CHECK(m_measKeys.initialize());
31  for (const auto& key : m_measKeys) {
32  m_writeMarkKeys.emplace_back(key, m_writeMarker);
33  m_writeSegLinkKeys.emplace_back(key, m_segLink);
34  }
35  ATH_CHECK(m_writeMarkKeys.initialize());
36  ATH_CHECK(m_writeSegLinkKeys.initialize());
37  return StatusCode::SUCCESS;
38  }
39  StatusCode TruthMeasMarkerAlg::execute(const EventContext& ctx) const {
40  const xAOD::MuonSegmentContainer* segContainer{nullptr};
41  ATH_CHECK(SG::get(segContainer, m_segKey, ctx));
42 
43  std::unordered_map<const SG::AuxVectorData*, MarkerHandle_t> markers{};
44  std::unordered_map<Muon::MuonStationIndex::TechnologyIndex, std::vector<const PrdCont_t*>> techConts{};
45  for (const WriteDecorKey_t& key : m_writeMarkKeys) {
46  const xAOD::UncalibratedMeasurementContainer* measContainer{nullptr};
47  ATH_CHECK(SG::get(measContainer, key.contHandleKey(), ctx));
48  if (measContainer->empty()) {
49  continue;
50  }
51  MarkerHandle_t decor{makeHandle(ctx, key, false)};
52  markers.insert(std::make_pair(measContainer, std::move(decor)));
54  m_idHelperSvc->technologyIndex(xAOD::identify(measContainer->at(0)));
55  techConts[techIdx].push_back(measContainer);
56  }
57  std::unordered_map<const SG::AuxVectorData*, LinkHandle_t> links{};
58  for (const WriteDecorKey_t& key : m_writeSegLinkKeys) {
59  const xAOD::UncalibratedMeasurementContainer* measContainer{nullptr};
60  ATH_CHECK(SG::get(measContainer, key.contHandleKey(), ctx));
61  if (measContainer->empty()) {
62  continue;
63  }
64  LinkHandle_t decor{makeHandle(ctx, key,SegLinkVec_t{})};
65  links.insert(std::make_pair(measContainer, std::move(decor)));
66  }
67 
68  auto fetchPrd = [&techConts,this](const xAOD::MuonSimHit* hit) -> const xAOD::UncalibratedMeasurement*{
69  for (const PrdCont_t* prdCont : techConts[m_idHelperSvc->technologyIndex(hit->identify())]){
70  for (const xAOD::UncalibratedMeasurement* prd : *prdCont) {
71  if (getTruthMatchedHit(*prd) == hit){
72  ATH_MSG_VERBOSE("Found hit matched to "<<m_idHelperSvc->toString(hit->identify()));
73  return prd;
74  }
75  }
76  }
77  ATH_MSG_VERBOSE("Nothing could be matched to "<<m_idHelperSvc->toString(hit->identify()));
78  return nullptr;
79  };
80 
81  for (const xAOD::MuonSegment* segment : *segContainer) {
82  const auto truthHits{getMatchingSimHits(*segment)};
83 
84  SegLink_t segLink{segContainer, segment->index()};
85  for (const xAOD::MuonSimHit* simHit : truthHits) {
86  const xAOD::UncalibratedMeasurement* prd = fetchPrd(simHit);
87  if (!prd) {
88  continue;
89  }
90  markers.at(prd->container())(*prd) = true;
91  links.at(prd->container())(*prd).push_back(segLink);
92  }
93  }
94  return StatusCode::SUCCESS;
95  }
96 
97 }
SG::WriteDecorHandleKey
Property holding a SG store/key/clid/attr name from which a WriteDecorHandle is made.
Definition: StoreGate/StoreGate/WriteDecorHandleKey.h:89
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
Utils.h
MuonR4::PrdCont_t
xAOD::UncalibratedMeasurementContainer PrdCont_t
Definition: xAODSegmentCnvAlg.cxx:19
ViewHelper::makeHandle
SG::ReadHandle< T > makeHandle(const SG::View *view, const SG::ReadHandleKey< T > &rhKey, const EventContext &context)
navigate from the TrigComposite to nearest view and fetch object from it
Definition: ViewHelper.h:265
Muon::MuonStationIndex::TechnologyIndex
TechnologyIndex
enum to classify the different layers in the muon spectrometer
Definition: MuonStationIndex.h:54
MuonR4::LinkHandle_t
SG::WriteDecorHandle< PrdCont_t, SegLinkVec_t > LinkHandle_t
Definition: MeasurementMarkerAlg.cxx:21
xAOD::MuonSegment_v1
Class describing a MuonSegment.
Definition: MuonSegment_v1.h:33
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
TruthMeasMarkerAlg.h
MuonR4::TruthMeasMarkerAlg::initialize
virtual StatusCode initialize() override final
Definition: TruthMeasMarkerAlg.cxx:24
xAOD::UncalibratedMeasurement_v1
Definition: UncalibratedMeasurement_v1.h:13
MuonR4::MarkerHandle_t
SG::WriteDecorHandle< PrdCont_t, bool > MarkerHandle_t
Definition: MeasurementMarkerAlg.cxx:20
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
DMTest::links
links
Definition: CLinks_v1.cxx:22
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:100
WriteDecorHandle.h
Handle class for adding a decoration to an object.
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
DerivationFramework
THE reconstruction tool.
Definition: ParticleSortingAlg.h:24
MuonR4::SegLink_t
ElementLink< MuonR4::SegmentContainer > SegLink_t
Definition: xAODSegmentCnvAlg.cxx:18
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
CoreClass.markers
list markers
Definition: CoreClass.py:17
xAOD::UncalibratedMeasurementContainer
UncalibratedMeasurementContainer_v1 UncalibratedMeasurementContainer
Define the version of the uncalibrated measurement container.
Definition: UncalibratedMeasurementContainer.h:14
MuonR4::TruthMeasMarkerAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override final
Definition: TruthMeasMarkerAlg.cxx:39
MuonR4
This header ties the generic definitions in this package.
Definition: HoughEventData.h:16
MuonR4::SegLinkVec_t
std::vector< SegLink_t > SegLinkVec_t
Definition: MeasurementMarkerAlg.cxx:15
MuonR4::WriteDecorKey_t
SG::WriteDecorHandleKey< xAOD::UncalibratedMeasurementContainer > WriteDecorKey_t
Definition: MeasurementMarkerAlg.cxx:23
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
ReadDecorHandle.h
Handle class for reading a decoration on an object.
SG::AuxElement::container
const SG::AuxVectorData * container() const
Return the container holding this element.
ReadHandle.h
Handle class for reading from StoreGate.
MuonR4::getMatchingSimHits
std::unordered_set< const xAOD::MuonSimHit * > getMatchingSimHits(const xAOD::MuonSegment &segment)
: Returns all sim hits matched to a xAOD::MuonSegment
Definition: MuonSimHitHelpers.cxx:27
NSWL1::PadTriggerAdapter::segment
Muon::NSW_PadTriggerSegment segment(const NSWL1::PadTrigger &data)
Definition: PadTriggerAdapter.cxx:5
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37