Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
MuonDetectorNavTest.cxx
Go to the documentation of this file.
1 /*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "MuonDetectorNavTest.h"
6 
9 
10 #include "Acts/Definitions/Units.hpp"
11 #include "Acts/Propagator/ActorList.hpp"
12 #include "Acts/Propagator/Propagator.hpp"
13 #include "Acts/Propagator/MaterialInteractor.hpp"
14 #include "Acts/Propagator/EigenStepper.hpp"
15 #include "Acts/Propagator/AtlasStepper.hpp"
16 #include "Acts/Utilities/VectorHelpers.hpp"
17 #include "Acts/Visualization/ObjVisualization3D.hpp"
18 #include "Acts/Visualization/GeometryView3D.hpp"
19 #include "Acts/EventData/ParticleHypothesis.hpp"
20 #include "Acts/Propagator/detail/SteppingLogger.hpp"
21 
23 #include "xAODTruth/TruthVertex.h"
29 #include <fstream>
30 
31 using namespace Acts::UnitLiterals;
32 
33 namespace {
34 
35 using SegLink_t = std::vector<ElementLink<xAOD::MuonSegmentContainer>>;
36 static const SG::ConstAccessor<SegLink_t> segAcc{"truthSegLinks"};
37 static const Amg::Vector3D dummyPos{100.*Gaudi::Units::m, 100.*Gaudi::Units::m, 100.*Gaudi::Units::m};
38 struct PropagatorRecorder{
40  Amg::Vector3D actsPropPos{dummyPos};
42  Amg::Vector3D actsGlobalPos{dummyPos};
44  Amg::Vector3D actsPropDir{Amg::Vector3D::Zero()};
46  Amg::Vector3D atlasPropPos{dummyPos};
48  Amg::Vector3D atlasGlobalPos{dummyPos};
50  Amg::Vector3D atlasPropDir{Amg::Vector3D::Zero()};
52  Identifier id{};
54  double atlasPropabsMomentum{0.};
56  double actsPropabsMomentum{0.};
58  double actsStepSize{0.};
59 };
60 }
61 
62 
63 namespace ActsTrk {
64 
65 Amg::Transform3D MuonDetectorNavTest::toGlobalTrf(const ActsGeometryContext& gctx, const Identifier& hitId) const {
66  const MuonGMR4::MuonReadoutElement* reElement = m_r4DetMgr->getReadoutElement(hitId);
67  const IdentifierHash trfHash = reElement->detectorType() == ActsTrk::DetectorType::Mdt ?
68  reElement->measurementHash(hitId) : reElement->layerHash(hitId);
69  return reElement->localToGlobalTrans(gctx, trfHash);
70 }
71 //get the transformation to the readout element's local frame - first measurement plane
72 Amg::Transform3D MuonDetectorNavTest::toLocalTrf(const ActsGeometryContext& gctx, const Identifier& hitId) const {
73  const MuonGMR4::MuonReadoutElement* reElement = m_r4DetMgr->getReadoutElement(hitId);
74  return reElement->globalToLocalTrans(gctx, reElement->layerHash(hitId));
75 }
76 
77 
78 IdentifierHash MuonDetectorNavTest::layerHash(const Identifier& id) const {
79  return m_r4DetMgr->getReadoutElement(id)->layerHash(id);
80 }
81 
83  ATH_CHECK(m_idHelperSvc.retrieve());
84  ATH_CHECK(m_geoCtxKey.initialize());
85  ATH_CHECK(m_fieldCacheCondObjInputKey.initialize());
86  ATH_CHECK(m_truthParticleKey.initialize());
87  ATH_CHECK(m_truthSegLinkKey.initialize());
88  ATH_CHECK(m_detVolSvc.retrieve());
89  ATH_CHECK(m_extrapolator.retrieve());
90  ATH_CHECK(m_detMgrKey.initialize());
91  ATH_CHECK(m_truthSegLinkKey.initialize());
92  ATH_CHECK(detStore()->retrieve(m_r4DetMgr));
93  ATH_CHECK(m_tree.init(this));
94 
95  ATH_MSG_VERBOSE("Successfully initialized MuonDetectorNavTest");
96  return StatusCode::SUCCESS;
97 }
98 
100  ATH_MSG_VERBOSE("Finalizing MuonDetectorNavTest");
101  ATH_CHECK(m_tree.write());
102  return StatusCode::SUCCESS;
103 }
104 
106  const EventContext& ctx{Gaudi::Hive::currentContext()};
107  ATH_MSG_DEBUG("Execute in event "<<ctx.eventID().event_number());
108  m_event = ctx.eventID().event_number();
109  SG::ReadHandle<ActsGeometryContext> gctx{m_geoCtxKey, ctx};
110  SG::ReadHandle<xAOD::TruthParticleContainer> truthParticles{m_truthParticleKey, ctx};
111  SG::ReadCondHandle<AtlasFieldCacheCondObj> magFieldHandle{m_fieldCacheCondObjInputKey, ctx};
112  if (!gctx.isValid() or !truthParticles.isValid() or !magFieldHandle.isValid()) {
113  ATH_MSG_FATAL("Failed to retrieve either the geometry context, truth particles or magnetic field");
114  return StatusCode::FAILURE;
115  }
116  SG::ReadCondHandle detMgr{m_detMgrKey, ctx};
117 
118 
119  const Acts::GeometryContext geoContext = gctx->context();
120  const AtlasFieldCacheCondObj* fieldCondObj{*magFieldHandle};
121  Acts::MagneticFieldContext mfContext = Acts::MagneticFieldContext(fieldCondObj);
122 
123 
124  using Stepper = Acts::EigenStepper<>;
125  //using Stepper = Acts::AtlasStepper;
126  using Navigator = Acts::Experimental::DetectorNavigator;
127  using Propagator = Acts::Propagator<Stepper,Navigator>;
128  using ActorList = Acts::ActorList<Acts::detail::SteppingLogger, Acts::MaterialInteractor, Acts::EndOfWorldReached>;
129  using PropagatorOptions = Propagator::Options<ActorList>;
130 
131 
132  PropagatorOptions options(geoContext, mfContext);
133 
134  options.pathLimit = m_pathLimit;
135  options.stepping.maxStepSize = m_maxStepSize;
136  options.stepping.stepTolerance = m_stepTolerance;
137  options.maxSteps = m_maxSteps;
138  options.maxTargetSkipping = m_maxTargetSkipping;
139 
140  //Configure the material collector
141  auto& materialInteractor = options.actorList.get<Acts::MaterialInteractor>();
142  materialInteractor.energyLoss = false;
143  materialInteractor.multipleScattering = false;
144  materialInteractor.recordInteractions = false;
145 
146  const Acts::Experimental::Detector* detector = m_detVolSvc->detector().get();
147 
148  Acts::Experimental::DetectorNavigator::Config navCfg;
149  navCfg.detector = detector;
150  navCfg.resolvePassive = true;
151 
152  auto bField = std::make_shared<ATLASMagneticFieldWrapper>();
153  auto bfieldCache = bField->makeCache(mfContext);
154  auto stepper = Stepper(bField);
155 
156 
157  Acts::Experimental::DetectorNavigator navigator(navCfg, Acts::getDefaultLogger("DetectorNavigator", ActsTrk::actsLevelVector(msgLevel())));
158  Acts::Propagator<Stepper, Acts::Experimental::DetectorNavigator> propagator(
159  std::move(stepper), std::move(navigator),
160  Acts::getDefaultLogger("Propagator", ActsTrk::actsLevelVector(msgLevel())));
161 
162 
163  for(const xAOD::TruthParticle* truthParticle : *truthParticles){
164 
165  ATH_MSG_DEBUG("Consider truth particle "<<truthParticle->pt()<<", "<<truthParticle->p4().P()<<", "<<truthParticle->eta()<<", "<<truthParticle->phi()
166  <<", pdgId: "<<truthParticle->pdgId()<<", status: "<<truthParticle->status()
167  <<", unique id:"<<truthParticle->id());
168 
169  //propagated and truth hits expressed in the local frame of the measurement layer
170  std::vector<PropagatorRecorder> propagatedHits;
171  std::vector<std::pair<Identifier, Amg::Vector3D>> truthHits;
172 
173  //the particle hypothesis
174  Acts::ParticleHypothesis particleHypothesis(static_cast<Acts::PdgParticle>(truthParticle->absPdgId()),
175  truthParticle->m(),
176  Acts::AnyCharge(truthParticle->charge()));
177 
178 
179  std::vector<std::pair<const xAOD::MuonSegment*, std::vector<const xAOD::MuonSimHit*>>> muonSegmentWithSimHits;
180  for (const auto& truthSegLink : segAcc(*truthParticle)){
181  const xAOD::MuonSegment* seg{*truthSegLink};
182  auto unordedHits = MuonR4::getMatchingSimHits(*seg);
183  std::vector<const xAOD::MuonSimHit*> muonSimHits{unordedHits.begin(), unordedHits.end()};
184  ATH_MSG_VERBOSE("Segment at : "<<Amg::toString(seg->position())<<" with Sim Hits: "<<unordedHits.size());
185  muonSegmentWithSimHits.emplace_back(seg,muonSimHits);
186  }
187  const auto& particle = truthParticle->p4();
188  m_truthPt = particle.Pt();
189  m_truthP = particle.P();
190 
191  const xAOD::TruthVertex* prodVertex = truthParticle->prodVtx();
192  Amg::Vector3D prodPos = prodVertex ? Amg::Vector3D(prodVertex->x(), prodVertex->y(), prodVertex->z())
194  Amg::Vector3D prodDir{Amg::dirFromAngles(particle.Phi(), particle.Theta())};
195 
196  //position, direction and momentum at the start of the propagation
197  Amg::Vector3D startPropPos{prodPos};
198  Amg::Vector3D startPropDir{prodDir};
199  double startPropP{particle.P()};
200  ATH_MSG_VERBOSE("Magnetic field at the production vertex: "<<Amg::toString(bField->getField(prodPos, bfieldCache).value())<<"at position "<<Amg::toString(prodPos));
201  for (double r =0; r<=2.*Gaudi::Units::m; r+=10.*Gaudi::Units::cm) {
202  Amg::Vector3D magFieldPos{startPropPos.x()+r, startPropPos.y()+r, startPropPos.z()};
203  ATH_MSG_VERBOSE("Magnetic Field in the ID is: "<<Amg::toString(bField->getField(magFieldPos, bfieldCache).value()));
204 
205  }
206 
207 
208 
209 
210  ATH_MSG_VERBOSE("Production vertex at "<<Amg::toString(prodPos)<<" with direction "<<Amg::toString(prodDir)<<" and momentum "<<startPropP);
211 
212 
213  if(m_startFromFirstHit){
214  if (muonSegmentWithSimHits.empty()) {
215  continue;
216  }
217  //sort the segments by the radial distance
218  std::ranges::sort(muonSegmentWithSimHits,
219  [](const auto& a, const auto& b) {
220  return a.first->position().perp() < b.first->position().perp();
221  });
222 
223  //get the simHits from the first segment - from sorted segments
224  std::vector<const xAOD::MuonSimHit*>& muonSimHits = muonSegmentWithSimHits.front().second;
225  if (msgLvl(MSG::VERBOSE)){
226  for(const auto& simHit: muonSimHits){
227  ATH_MSG_VERBOSE("Sim Hit of first segment at global position: "<<Amg::toString(toGlobalTrf(*gctx, simHit->identify())*xAOD::toEigen(simHit->localPosition())));
228  }
229  }
230 
231  //sort the simhits to define starting propagation position
232  std::ranges::sort(muonSimHits,
233  [this, &gctx](const xAOD::MuonSimHit* hit1, const xAOD::MuonSimHit* hit2){
234  const Amg::Vector3D globalPos1 = toGlobalTrf(*gctx,hit1->identify())*xAOD::toEigen(hit1->localPosition());
235  const Amg::Vector3D globalPos2 = toGlobalTrf(*gctx,hit2->identify())*xAOD::toEigen(hit2->localPosition());
236  return globalPos1.norm()<globalPos2.norm();
237  });
238  if (msgLvl(MSG::VERBOSE)){
239  ATH_MSG_VERBOSE("After sorting..");
240  for(const auto& simHit: muonSimHits){
241  ATH_MSG_VERBOSE("Sim Hit of first segment at position: "<<Amg::toString(toGlobalTrf(*gctx, simHit->identify())*xAOD::toEigen(simHit->localPosition())));
242 
243  }
244  }
245 
246  startPropPos = toGlobalTrf(*gctx, muonSimHits.front()->identify())*xAOD::toEigen(muonSimHits.front()->localPosition());
247  startPropDir = toGlobalTrf(*gctx, muonSimHits.front()->identify()).linear()*xAOD::toEigen(muonSimHits.front()->localDirection());
248  startPropP = muonSimHits.front()->kineticEnergy();
249  ATH_MSG_VERBOSE("Kinetic Energy from the simHit: "<<muonSimHits.front()->kineticEnergy() / Gaudi::Units::GeV<<" and mass: "<<muonSimHits.front()->mass()<<" and energy deposit: "<<muonSimHits.front()->energyDeposit() / Gaudi::Units::eV);
250  }
251 
252  ATH_MSG_VERBOSE("Starting propagation from"<<Amg::toString(startPropPos)<<" with direction"
253  <<Amg::toString(startPropDir)<<" and momentum "<<startPropP);
254 
255 
256  Acts::BoundTrackParameters start = Acts::BoundTrackParameters::createCurvilinear(
257  Acts::VectorHelpers::makeVector4(startPropPos, 0.), startPropDir,
258  truthParticle->charge() / startPropP,
259  std::nullopt,
260  particleHypothesis);
261 
262 
263  Trk::CurvilinearParameters atlasStart(startPropPos, startPropP*startPropDir, truthParticle->charge());
264 
265  ATH_MSG_DEBUG("start propagating here");
266  auto result = propagator.propagate(start, options);
267  const Acts::detail::SteppingLogger::result_type state = result.value().get<Acts::detail::SteppingLogger::result_type>();
268  const Acts::MaterialInteractor::result_type material = result.value().get<Acts::MaterialInteractor::result_type>();
269  ATH_MSG_DEBUG("Material interactions: " << material.materialInteractions.size());
270  ATH_MSG_DEBUG("material in x0: " << material.materialInX0);
271  ATH_MSG_DEBUG("material in L0: " << material.materialInL0);
272  std::vector<Acts::MaterialInteraction> interactions = material.materialInteractions;
273  for(const Acts::MaterialInteraction& interaction : interactions){
274  ATH_MSG_DEBUG("Path Correction: " << interaction.pathCorrection);
275  ATH_MSG_DEBUG("Momentum change: " << interaction.deltaP);
276  }
277  // loop through the states drawing each surface or portal
278  if(m_drawEvent){
279  Acts::ObjVisualization3D helper{};
280  for (const auto& s : state.steps) {
281  if(s.surface) Acts::GeometryView3D::drawSurface(helper, *s.surface, geoContext);
282  }
283  helper.write(std::format("event_{:}_{:}_Hits.obj", ctx.eventID().event_number(), truthParticle->index()));
284  }
285 
286  ATH_MSG_VERBOSE("Number of propagated steps : " << state.steps.size());
287  m_propSteps = state.steps.size();
288  m_propLength = result.value().pathLength;
289  for(const auto& state: state.steps){
290  if(!state.surface){
291  continue;
292  }
293  const SurfaceCache* sCache = dynamic_cast<const SurfaceCache *>(state.surface->associatedDetectorElement());
294  if(!sCache){
295  ATH_MSG_VERBOSE("Surface found but it's a portal, continuing..");
296  continue;
297  }
298  const Identifier ID = sCache->identify();
299  const Amg::Transform3D toGap{toLocalTrf(*gctx, ID)};
300  ATH_MSG_VERBOSE("Identify propagated hit " << m_idHelperSvc->toString(ID) << " with hit at local position " << Amg::toString(toGap*state.position)<<" and global direction "<<Amg::toString(state.momentum.unit()));
301  ATH_MSG_VERBOSE("Magnetic field "<<Amg::toString(bField->getField(state.position, bfieldCache).value())<<"at position "<<Amg::toString(state.position));
302  PropagatorRecorder newRecord{};
303  newRecord.id = ID;
304  newRecord.actsPropPos = toGap*state.position;
305  newRecord.actsGlobalPos = state.position;
306  newRecord.actsPropDir = toGap.linear()*state.momentum.unit();
307  newRecord.actsPropabsMomentum = state.momentum.norm();
308  newRecord.actsStepSize = state.stepSize.value();
309 
310  //define the surface to propagate
311  const Trk::Surface& surface = detMgr->getReadoutElement(ID)->surface(ID);
312 
314  if(truthParticle->isMuon()){
316  }
317 
318 
319  std::unique_ptr<Trk::TrackParameters> atlasPars{m_extrapolator->extrapolate(ctx, atlasStart,
320  surface, Trk::alongMomentum,false,
322 
323 
324  if (atlasPars) {
325  newRecord.atlasPropPos = toGap* atlasPars->position();
326  newRecord.atlasPropDir = toGap.linear()*atlasPars->momentum().unit();
327  newRecord.atlasPropabsMomentum = atlasPars->momentum().mag();
328  newRecord.atlasGlobalPos = atlasPars->position();
329  }
330  propagatedHits.emplace_back(newRecord);
331  }
332 
333  std::size_t propHitsSize = propagatedHits.size();
334 
335  //fill with the truthHits- id and local position on the measurement layer's frame and look in the propagated hits
336  unsigned int nMatchedTruth = 0, nMatchedProp = 0, nTruth{0};
337  for (const auto&[segment, simHits] : muonSegmentWithSimHits) {
338  for(const xAOD::MuonSimHit* simHit : simHits){
339  const Identifier ID = simHit->identify();
340  ++nTruth;
341  //express the truth hits in the 1st measurement of readout element's local frame - same as the propagated hits
342  const Amg::Transform3D localTrf{toLocalTrf(*gctx, simHit->identify())*
343  toGlobalTrf(*gctx,simHit->identify())};
344  const Amg::Vector3D localPos = localTrf*xAOD::toEigen(simHit->localPosition());
345  const Amg::Vector3D globalPos = toGlobalTrf(*gctx, simHit->identify())*xAOD::toEigen(simHit->localPosition());
346  const Amg::Vector3D localDir = localTrf.linear()*xAOD::toEigen(simHit->localDirection());
347  m_detId.push_back(ID);
348  m_techIdx.push_back(m_idHelperSvc->technologyIndex(ID));
349  m_gasGapId.push_back(layerHash(ID));
350 
351  m_truthLoc.push_back(localPos);
352  m_truthDir.push_back(localDir);
353  m_truthGlob.push_back(globalPos);
354  m_startGlob.push_back(startPropPos);
355  ATH_MSG_VERBOSE("Identify truth hit at local position in 1st measurement plane" << Amg::toString(localPos));
356 
357  auto it_begin = std::ranges::find_if(propagatedHits,
358  [this, ID, &localPos](const auto& propagatedHit) {
359  return m_idHelperSvc->detElId(ID) == m_idHelperSvc->detElId(propagatedHit.id) &&
360  layerHash(ID) == layerHash(propagatedHit.id);
361  });
362  m_isPropagated.push_back(it_begin != propagatedHits.end());
363 
364  if (it_begin == propagatedHits.end()) {
365  m_actsPropLoc.push_back(dummyPos);
366  m_actsPropDir.push_back(dummyPos);
367  m_atlasPropLoc.push_back(dummyPos);
368  m_atlasPropDir.push_back(dummyPos);
369  m_actsPropGlob.push_back(dummyPos);
370  m_atlasPropGlob.push_back(dummyPos);
371  m_actsPropMomentum.push_back(0.);
372  m_atlasPropMomentum.push_back(0.);
373  m_actsStepSize.push_back(0.);
374  continue;
375  }
376  auto it_end = std::find_if(it_begin, propagatedHits.end(),
377  [this, ID, &localPos](const auto& propagatedHit) {
378  return m_idHelperSvc->detElId(ID) != m_idHelperSvc->detElId(propagatedHit.id) ||
379  layerHash(ID) != layerHash(propagatedHit.id);
380  });
382  auto it = std::min_element(it_begin, it_end,
383  [&localPos](const PropagatorRecorder& a,
384  const PropagatorRecorder& b){
385  return (localPos - a.actsPropPos).mag() < (localPos - b.actsPropPos).mag();
386  });
387 
388 
389  ATH_MSG_DEBUG("Truth hit found in propagated hits: " << m_idHelperSvc->toString(ID));
390  m_actsPropLoc.push_back(it->actsPropPos);
391  m_actsPropDir.push_back(it->actsPropDir);
392  m_actsPropGlob.push_back(it->actsGlobalPos);
393  m_atlasPropLoc.push_back(it->atlasPropPos);
394  m_atlasPropDir.push_back(it->atlasPropDir);
395  m_atlasPropGlob.push_back(it->atlasGlobalPos);
396  m_actsPropMomentum.push_back(it->actsPropabsMomentum);
397  m_atlasPropMomentum.push_back(it->atlasPropabsMomentum);
398  m_actsStepSize.push_back(it->actsStepSize);
399  ++nMatchedTruth;
400  }
401  }
402  m_matchedTruthFraction = 1.f*nMatchedTruth / nTruth;
403  m_matchedPropFraction = 1.f*nMatchedProp / propHitsSize;
404 
405  m_tree.fill(ctx);
406 
407  }
408 
409  return StatusCode::SUCCESS;
410 }
411 } // namespace ActsTrk`
412 
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
beamspotman.r
def r
Definition: beamspotman.py:676
MuonDetectorNavTest.h
MuonSimHitHelpers.h
xAOD::MuonSimHit_v1
Definition: MuonSimHit_v1.h:18
python.tests.PyTestsLib.finalize
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Definition: PyTestsLib.py:50
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:17
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
get_generator_info.result
result
Definition: get_generator_info.py:21
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
ActsTrk::SurfaceCache::identify
Identifier identify() const override final
Returns the identifier of the Surface.
Definition: SurfaceCache.cxx:31
xAOD::MuonSimHit_v1::identify
Identifier identify() const
Returns the global ATLAS identifier of the SimHit.
Definition: xAODMuonSimHit_V1.cxx:42
vtune_athena.format
format
Definition: vtune_athena.py:14
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ID
std::vector< Identifier > ID
Definition: CalibHitIDCheck.h:24
AtlasFieldCacheCondObj
Definition: AtlasFieldCacheCondObj.h:19
SurfaceCache.h
perp
Scalar perp() const
perp method - perpenticular length
Definition: AmgMatrixBasePlugin.h:44
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
ActsTrk::detail::Navigator
Acts::Navigator Navigator
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:32
TRTCalib_cfilter.detector
detector
Definition: TRTCalib_cfilter.py:241
initialize
void initialize()
Definition: run_EoverP.cxx:894
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
skel.it
it
Definition: skel.GENtoEVGEN.py:407
MuonGMR4::MuonReadoutElement
The MuonReadoutElement is an abstract class representing the geometry representing the muon detector.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MuonReadoutElement.h:38
xAOD::MuonSegment_v1
Class describing a MuonSegment.
Definition: MuonSegment_v1.h:33
ActsTrk::SurfaceCache
: Helper class to connect the aligned transformations of each active sensor(layer) with the Acts::Sur...
Definition: Tracking/Acts/ActsGeoUtils/ActsGeoUtils/SurfaceCache.h:23
ActsTrk::actsLevelVector
Acts::Logging::Level actsLevelVector(MSG::Level lvl)
Definition: LoggerUtils.cxx:9
Trk::alongMomentum
@ alongMomentum
Definition: PropDirection.h:20
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:55
ActsTrk::IDetectorElementBase::detectorType
virtual DetectorType detectorType() const =0
Returns the detector element type.
MuonGMR4::MuonReadoutElement::globalToLocalTrans
Amg::Transform3D globalToLocalTrans(const ActsGeometryContext &ctx) const
Transformations to translate between local <-> global coordinates.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonReadoutElement.cxx:78
MuonGMR4::MuonReadoutElement::layerHash
virtual IdentifierHash layerHash(const Identifier &measId) const =0
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
particleType
Definition: particleType.h:29
xAOD::TruthVertex_v1::y
float y() const
Vertex y displacement.
ReadCondHandle.h
MuonSegmentContainer.h
runBeamSpotCalibration.helper
helper
Definition: runBeamSpotCalibration.py:112
LArG4FSStartPointFilterLegacy.execute
execute
Definition: LArG4FSStartPointFilterLegacy.py:20
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:25
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:37
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
Trk::geantino
@ geantino
Definition: ParticleHypothesis.h:26
jet::CompCategory::Detector
@ Detector
Definition: UncertaintyEnum.h:19
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
python.AtlRunQueryLib.options
options
Definition: AtlRunQueryLib.py:379
Trk::CurvilinearParametersT
Definition: CurvilinearParametersT.h:48
MuonReadoutElement.h
MuonR4::SegLink_t
ElementLink< xAOD::MuonSegmentContainer > SegLink_t
Definition: MeasurementMarkerAlg.cxx:14
Trk::muon
@ muon
Definition: ParticleHypothesis.h:28
ActsGeometryContext
Include the GeoPrimitives which need to be put first.
Definition: ActsGeometryContext.h:27
TruthVertex.h
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
xAOD::TruthVertex_v1
Class describing a truth vertex in the MC record.
Definition: TruthVertex_v1.h:37
ActsTrk::DetectorType::Mdt
@ Mdt
MuonSpectrometer.
python.SystemOfUnits.eV
int eV
Definition: SystemOfUnits.py:155
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
xAOD::ParticleHypothesis
ParticleHypothesis
Definition: TrackingPrimitives.h:193
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
ActsTrk::detail::Stepper
Acts::SympyStepper Stepper
Adapted from Acts Examples/Algorithms/TrackFinding/src/TrackFindingAlgorithmFunction....
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:31
Amg::dirFromAngles
Amg::Vector3D dirFromAngles(const double phi, const double theta)
Constructs a direction vector from the azimuthal & polar angles.
Definition: GeoPrimitivesHelpers.h:299
xAOD::TruthVertex_v1::x
float x() const
Vertex x displacement.
a
TList * a
Definition: liststreamerinfos.cxx:10
ActsTrk::detail::Propagator
Acts::Propagator< Stepper, Navigator > Propagator
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:33
xAOD::TruthVertex_v1::z
float z() const
Vertex longitudinal distance along the beam line form the origin.
MuonGMR4::MuonReadoutElement::measurementHash
virtual IdentifierHash measurementHash(const Identifier &measId) const =0
Constructs the identifier hash from the full measurement Identifier.
xAOD::MuonSimHit_v1::localPosition
ConstVectorMap< 3 > localPosition() const
Returns the local postion of the traversing particle.
Definition: xAODMuonSimHit_V1.cxx:60
MuonGMR4::MuonReadoutElement::localToGlobalTrans
const Amg::Transform3D & localToGlobalTrans(const ActsGeometryContext &ctx) const
Returns the local to global transformation into the ATLAS coordinate system.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonReadoutElement.cxx:81
LoggerUtils.h
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:55
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:13
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:75
Trk::removeNoise
@ removeNoise
Definition: MaterialUpdateMode.h:20
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:24
HepMCHelpers.h
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
NSWL1::PadTriggerAdapter::segment
Muon::NSW_PadTriggerSegment segment(const NSWL1::PadTrigger &data)
Definition: PadTriggerAdapter.cxx:5
Identifier
Definition: IdentifierFieldParser.cxx:14