Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
MuonSimHitHelpers.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
13 #include <AthLinks/ElementLink.h>
14 
15 namespace MuonR4 {
18  if (acc.isAvailable(prdHit)){
19  const ElementLink<xAOD::MuonSimHitContainer>& link{acc(prdHit)};
20  if (link.isValid()) {
21  return (*link);
22  }
23  }
24  return nullptr;
25  }
26 
27  std::unordered_set<const xAOD::MuonSimHit*> getMatchingSimHits(const xAOD::MuonSegment& segment) {
28 
29  using SimHitLinkVec_t = std::vector<ElementLink<xAOD::MuonSimHitContainer>>;
31  using PrdLinkVec_t = std::vector<PrdLink_t>;
32 
33  static const SG::ConstAccessor<SimHitLinkVec_t> acc_simLink{"simHitLinks"};
34  static const SG::ConstAccessor<PrdLinkVec_t> acc_prdLink{"prdLinks"};
35  std::unordered_set<const xAOD::MuonSimHit*> hits{};
36  if (acc_simLink.isAvailable(segment)){
37  hits.reserve(acc_simLink(segment).size());
38  for (const ElementLink<xAOD::MuonSimHitContainer>& link : acc_simLink(segment)) {
39  if (link.isValid()) {
40  hits.insert(*link);
41  }
42  }
43  } else if (acc_prdLink.isAvailable(segment)){
44  for (const PrdLink_t& link : acc_prdLink(segment)) {
45  const xAOD::MuonSimHit* hit = getTruthMatchedHit(**link);
46  if (hit){
47  hits.insert(hit);
48  }
49  }
50  }
51  return hits;
52  }
53 
54  std::unordered_set<const xAOD::MuonSimHit*> getMatchingSimHits(const std::vector<const SpacePoint*>& spacePoints) {
55  std::unordered_set<const xAOD::MuonSimHit*> hits{};
56  for (const SpacePoint* sp : spacePoints) {
57  const xAOD::MuonSimHit* primHit{getTruthMatchedHit(*sp->primaryMeasurement())};
58  const xAOD::MuonSimHit* secHit{sp->dimension() == 2 ? getTruthMatchedHit(*sp->secondaryMeasurement()) : nullptr};
59  if(primHit){
60  hits.insert(primHit);
61  }
62  if (secHit && secHit != primHit) {
63  hits.insert(secHit);
64  }
65  }
66  return hits;
67  }
68 
69  std::unordered_set<const xAOD::MuonSimHit*> getMatchingSimHits(const std::vector<const CalibratedSpacePoint*>& measurements) {
70  std::unordered_set<const xAOD::MuonSimHit*> hits{};
71  for (const CalibratedSpacePoint* meas : measurements) {
72  const SpacePoint* sp = meas->spacePoint();
73  if (!sp) continue;
75  const xAOD::MuonSimHit* secHit{sp->dimension() == 2 ? getTruthMatchedHit(*sp->secondaryMeasurement()) : nullptr};
76  if(primHit){
77  hits.insert(primHit);
78  }
79  if (secHit && secHit != primHit) {
80  hits.insert(secHit);
81  }
82  }
83  return hits;
84  }
85  std::unordered_set<const xAOD::MuonSimHit*> getMatchingSimHits(const Segment& segment) {
86  std::vector<const CalibratedSpacePoint*> calibSps{};
87  calibSps.reserve(segment.measurements().size());
88  std::ranges::transform(segment.measurements(), std::back_inserter(calibSps), [](const auto& meas){return meas.get();});
89  return getMatchingSimHits(calibSps);
90  }
91  std::unordered_set<const xAOD::MuonSimHit*> getMatchingSimHits(const SpacePointBucket& bucket) {
92  std::vector<const SpacePoint*> spacePoints{};
93  spacePoints.reserve(bucket.size());
94  std::ranges::transform(bucket, std::back_inserter(spacePoints), [](const SpacePointBucket::value_type& sp){return sp.get();});
96  }
97  std::unordered_set<const xAOD::MuonSimHit*> getMatchingSimHits(const SegmentSeed& seed) {
98  return getMatchingSimHits(seed.getHitsInMax());
99  }
102  static const SG::ConstAccessor<TruthLink_t> acc{"truthParticleLink"};
103  if (acc.isAvailable(segment)){
104  const TruthLink_t& link {acc(segment)};
105  if (link.isValid()) {
106  return *link;
107  }
108  }
109  return nullptr;
110  }
113  static const SG::ConstAccessor<SegLink_t> acc{"truthSegmentLink"};
114  if (acc.isAvailable(segment)) {
115  const SegLink_t& link{acc(segment)};
116  if (link.isValid()){
117  return *link;
118  }
119  }
120  return nullptr;
121  }
122 }
123 
124 
MuonSimHitHelpers.h
xAOD::MuonSimHit_v1
Definition: MuonSimHit_v1.h:18
TRTCalib_Extractor.hits
hits
Definition: TRTCalib_Extractor.py:35
MuonR4::SpacePointBucket
: The muon space point bucket represents a collection of points that will bre processed together in t...
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonSpacePoint/MuonSpacePoint/SpacePointContainer.h:21
MuonR4::getTruthMatchedParticle
const xAOD::TruthParticle * getTruthMatchedParticle(const xAOD::MuonSegment &segment)
Returns the particle truth-matched to the segment.
Definition: MuonSimHitHelpers.cxx:100
TruthParticleContainer.h
MuonR4::Segment
Placeholder for what will later be the muon segment EDM representation.
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonPatternEvent/MuonPatternEvent/Segment.h:19
xAOD::MuonSegment_v1
Class describing a MuonSegment.
Definition: MuonSegment_v1.h:33
MuonR4::getMatchedTruthSegment
const xAOD::MuonSegment * getMatchedTruthSegment(const xAOD::MuonSegment &segment)
Returns the truth-matched segment.
Definition: MuonSimHitHelpers.cxx:111
SpacePoint.h
MuonR4::SpacePoint::secondaryMeasurement
const xAOD::UncalibratedMeasurement * secondaryMeasurement() const
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonSpacePoint/src/SpacePoint.cxx:110
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:55
MuonSegmentContainer.h
MuonR4::SpacePoint::primaryMeasurement
const xAOD::UncalibratedMeasurement * primaryMeasurement() const
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonSpacePoint/src/SpacePoint.cxx:107
CalibratedSpacePoint.h
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
xAOD::UncalibratedMeasurement_v1
Definition: UncalibratedMeasurement_v1.h:13
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:37
UncalibratedMeasurementContainer.h
MuonR4::PrdLinkVec_t
std::vector< PrdLink_t > PrdLinkVec_t
Definition: xAODSegmentCnvAlg.cxx:21
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
AthenaPoolTestRead.acc
acc
Definition: AthenaPoolTestRead.py:16
MuonSimHitContainer.h
F600IntegrationConfig.spacePoints
spacePoints
Definition: F600IntegrationConfig.py:65
MuonR4::SpacePoint
The muon space point is the combination of two uncalibrated measurements one of them measures the eta...
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonSpacePoint/MuonSpacePoint/SpacePoint.h:18
MuonR4
This header ties the generic definitions in this package.
Definition: HoughEventData.h:16
MuonR4::CalibratedSpacePoint
The calibrated Space point is created during the calibration process.
Definition: CalibratedSpacePoint.h:15
MuonR4::SpacePoint::dimension
unsigned int dimension() const
Is the space point a 1D or combined 2D measurement.
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonSpacePoint/src/SpacePoint.cxx:160
MuonR4::SegmentSeed
Representation of a segment seed (a fully processed hough maximum) produced by the hough transform.
Definition: SegmentSeed.h:14
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
Segment.h
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