ATLAS Offline Software
ParticleCaloExtensionTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3  */
4 
6 
13 #include "TrkTrack/Track.h"
15 #include "xAODEgamma/Electron.h"
16 #include "xAODMuon/Muon.h"
18 #include "xAODTruth/TruthVertex.h"
19 namespace Trk {
21  const std::string& n,
22  const IInterface* p)
23  : AthAlgTool(t, n, p)
24  , m_detID(nullptr)
25  , m_particleStrategy(muon)
26 {
27  declareInterface<IParticleCaloExtensionTool>(this);
28 }
29 
31 
34 {
35  /* Retrieve track extrapolator from ToolService */
36  ATH_CHECK(m_extrapolator.retrieve());
37  // Retrieve the calo surface builder
38  /* Retrieve the Atlas detector ID */
39  ATH_CHECK(detStore()->retrieve(m_detID, "AtlasID"));
40  /* convert string to proper particle type enum*/
41  if (m_particleTypeName == "nonInteracting") {
43  } else if (m_particleTypeName == "muon") {
45  } else if (m_particleTypeName == "pion") {
47  } else {
48  ATH_MSG_WARNING("Unsupported particle type, using strategy based on type "
50  }
51  if (!m_calosurf.empty()) {
52  ATH_CHECK(m_calosurf.retrieve());
53  } else {
54  m_calosurf.disable();
55  }
56  if (!m_monTool.empty()) {
57  ATH_CHECK(m_monTool.retrieve());
58  }
59  return StatusCode::SUCCESS;
60 }
61 
64 {
65  return StatusCode::SUCCESS;
66 }
67 
68 std::unique_ptr<Trk::CaloExtension>
70  const xAOD::IParticle& particle) const
71 {
72  if (particle.type() == xAOD::Type::TrackParticle) {
73  const xAOD::TrackParticle* trackParticle =
74  static_cast<const xAOD::TrackParticle*>(&particle);
75  return caloExtension(ctx, *trackParticle);
76  }
77  if (particle.type() == xAOD::Type::TruthParticle) {
78  const xAOD::TruthParticle* truthParticle =
79  static_cast<const xAOD::TruthParticle*>(&particle);
80  return caloExtension(ctx, *truthParticle);
81  } else if (particle.type() == xAOD::Type::Electron) {
82  const xAOD::Electron* el = static_cast<const xAOD::Electron*>(&particle);
83  if (el->trackParticle()) {
84  return caloExtension(ctx, *(el->trackParticle()));
85  }
86  } else if (particle.type() == xAOD::Type::Muon) {
87  const xAOD::Muon* muon = static_cast<const xAOD::Muon*>(&particle);
88  if (muon->primaryTrackParticle()) {
89  return caloExtension(ctx, *(muon->primaryTrackParticle()));
90  }
91  } else if (particle.type() == xAOD::Type::NeutralParticle) {
92  const xAOD::NeutralParticle* neutralParticle =
93  static_cast<const xAOD::NeutralParticle*>(&particle);
94  return caloExtension(ctx, *neutralParticle);
95  }
96  ATH_MSG_WARNING("Unsupported IParticle type");
97  return nullptr;
98 }
99 
100 const Trk::CaloExtension*
102  const EventContext& ctx,
103  const xAOD::IParticle& particle,
105 {
106  /*if not there , default ctor for unique_ptr (nullptr)*/
107  std::unique_ptr<Trk::CaloExtension>& extension = cache[particle.index()];
108  if (extension == nullptr) {
109  extension = caloExtension(ctx, particle);
110  }
111  return extension.get();
112 }
113 
114 const Trk::CaloExtension*
116  const xAOD::IParticle& particle,
117  const CaloExtensionCollection& cache) const
118 {
119  size_t index = particle.index();
120  if (index < cache.size()) {
121  return cache[index];
122  }
123  ATH_MSG_WARNING("cache size smaller than particle index");
124  return nullptr;
125 }
126 
129  const EventContext& ctx,
131  const std::vector<bool>& mask,
132  CaloExtensionCollection& caloextensions) const
133 {
134  const size_t numparticles = particles.size();
135 
136  if (mask.size() != numparticles) {
137  ATH_MSG_ERROR("mask does not have the same size as in input collection");
138  return StatusCode::FAILURE;
139  }
140  caloextensions.reserve(numparticles);
141  /* Either create a proper CaloExtension or otherwise a dummy one
142  * i.e one with no intersections
143  */
144  for (size_t i = 0; i < numparticles; ++i) {
145  if (mask[i]) {
146  std::unique_ptr<Trk::CaloExtension> extension =
147  caloExtension(ctx, *(particles[i]));
148  caloextensions.push_back(std::move(extension));
149  } else {
150  caloextensions.push_back(nullptr);
151  }
152  }
153  return StatusCode::SUCCESS;
154 }
155 
156 std::unique_ptr<Trk::CaloExtension>
158  const EventContext& ctx,
159  const xAOD::TruthParticle& particle) const
160 {
162  if (abs(particle.pdgId()) == 11) {
163  particleType = muon;
164  } else if (abs(particle.pdgId()) == 13) {
165  particleType = muon;
166  }
167  // get start parameters
168  const xAOD::TruthVertex* pvtx = particle.prodVtx();
169  if (pvtx == nullptr) {
170  return nullptr;
171  }
172  double charge = particle.charge();
173  Amg::Vector3D pos(pvtx->x(), pvtx->y(), pvtx->z());
174  Amg::Vector3D mom(particle.px(), particle.py(), particle.pz());
175  // Aproximate neutral particles as charged with infinite momentum
176  if (particle.isNeutral()) {
177  charge = 1.;
178  mom.normalize();
179  mom *= 1e10;
180  }
182  // get extension
183  return caloExtension(ctx, startPars, alongMomentum, particleType);
184 }
185 
186 std::unique_ptr<Trk::CaloExtension>
188  const EventContext& ctx,
189  const xAOD::NeutralParticle& particle) const
190 {
191  // create start parameters
192  const Trk::NeutralPerigee& perigee = particle.perigeeParameters();
193  double charge = 1.;
194  const Amg::Vector3D& pos(perigee.position());
195  Amg::Vector3D mom(perigee.momentum());
196  // Aproximate neutral particles as charged with infinite momentum
197  mom.normalize();
198  mom *= 1e10;
200  // get extension
201  return caloExtension(ctx, startPars, alongMomentum, muon);
202 }
203 
204 std::unique_ptr<Trk::CaloExtension>
206  const EventContext& ctx,
207  const xAOD::TrackParticle& particle) const
208 {
209  /*
210  * The following are tuned mainly for
211  * the strategy we want to follow for muons.
212  * But should also work well as a generic
213  * strategy.
214  */
215 
216  // Start with what the user opted as strategy
218 
219  // wee extrapolate either from the perigee or
220  // from the last measurement.
221  if (m_startFromPerigee || !particle.track()) {
222  bool idExit = true;
223  // Muon Entry is around z 6783 and r 4255
224  if (std::abs(particle.perigeeParameters().position().z()) > 6700.)
225  idExit = false;
226  if (particle.perigeeParameters().position().perp() > 4200.)
227  idExit = false;
228  PropDirection propDir = idExit ? alongMomentum : oppositeMomentum;
229  return caloExtension(
230  ctx, particle.perigeeParameters(), propDir, particleType);
231  }
232 
233  // Extrapolation from last track parameters
234  const Track& track = *particle.track();
235  // Look-up the parameters closest to the calorimeter in
236  // ID and muon system
237  ATH_MSG_DEBUG("trying to add calo layers");
238  const TrackParameters* idExitParamers = nullptr;
239  const TrackParameters* muonEntryParamers = nullptr;
241  track.trackStateOnSurfaces()->begin();
242  for (; itTSoS != track.trackStateOnSurfaces()->end(); ++itTSoS) {
243  // select state with track parameters on a measurement
244  if (!(**itTSoS).trackParameters() ||
245  !(**itTSoS).type(TrackStateOnSurface::Measurement) ||
246  (**itTSoS).type(TrackStateOnSurface::Outlier)) {
247  continue;
248  }
249 
250  const Identifier& id = (**itTSoS)
251  .trackParameters()
252  ->associatedSurface()
253  .associatedDetectorElementIdentifier();
254  if (m_detID->is_indet(id))
255  idExitParamers = (**itTSoS).trackParameters();
256  if (m_detID->is_muon(id) && !muonEntryParamers)
257  muonEntryParamers = (**itTSoS).trackParameters();
258  }
259  // require at least one of them
260  if (!idExitParamers && !muonEntryParamers) {
261  idExitParamers = track.perigeeParameters();
262  }
263  // pick start parameters, start in ID if possible
264  const TrackParameters* startPars =
265  idExitParamers ? idExitParamers : muonEntryParamers;
266 
267  if (!startPars) {
268  ATH_MSG_WARNING("Failed to find start parameters");
269  return nullptr;
270  }
271  PropDirection propDir = idExitParamers ? alongMomentum : oppositeMomentum;
272 
273  return caloExtension(ctx, *startPars, propDir, particleType);
274 }
275 
276 std::unique_ptr<Trk::CaloExtension>
278  const TrackParameters& startPars,
279  PropDirection propDir,
281 {
282  ATH_MSG_DEBUG("looking up calo states: r "
283  << startPars.position().perp() << " z "
284  << startPars.position().z() << " momentum "
285  << startPars.momentum().mag());
286 
287  // pointers to hold results and go
288  std::vector<const TrackStateOnSurface*>* material = nullptr;
289 
290  auto extrapolation_timer = Monitored::Timer<std::chrono::microseconds>( "TIME_extrapolation" );
291  auto group = Monitored::Group(m_monTool, extrapolation_timer);
292  // Start monitoring timer
293  extrapolation_timer.start();
294 
295  /* The last argument to the extrapolate overload
296  * corresponds to a GeometrySignature value from
297  * TrkDetDescrUtils/GeometrySignature.h
298  * The extrapolation stop at the indicated subdetector exit
299  */
300  std::unique_ptr<std::vector<std::pair<std::unique_ptr<Trk::TrackParameters>, int>>>
301  caloParameters = m_extrapolator->collectIntersections(
302  ctx, startPars, propDir, particleType, material, m_extrapolDetectorID);
303 
304  // Stop monitoring timer
305  extrapolation_timer.stop();
306 
307  if (material) {
308  ATH_MSG_DEBUG("Got material " << material->size());
309  for (auto& m : *material) {
311  " layer "
312  << " param " << m->trackParameters() << " pos: r "
313  << (m->trackParameters() ? m->trackParameters()->position().perp()
314  : -999)
315  << " z "
316  << (m->trackParameters() ? m->trackParameters()->position().z() : -999)
317  << " pt "
318  << (m->trackParameters() ? m->trackParameters()->momentum().perp()
319  : -999)
320  << " mat "
321  << (m->materialEffectsOnTrack()
322  ? m->materialEffectsOnTrack()->thicknessInX0()
323  : -999));
324  delete m;
325  }
326  delete material;
327  }
328  if (!caloParameters) {
329  return nullptr;
330  }
331  TrackParametersIdHelper parsIdHelper;
332 
333  // create final object
334  const TrackParameters* caloEntry = nullptr;
335  const TrackParameters* muonEntry = nullptr;
336  std::vector<CurvilinearParameters> caloLayers;
337  caloLayers.reserve(caloParameters->size() - 1);
338  ATH_MSG_DEBUG(" Found calo parameters: " << caloParameters->size()
339  << " extrapolation exit ID="
341 
342  for (auto& p : *caloParameters) {
343  if (!p.first) {
344  continue;
345  }
346  // assign parameters
347  // calo aentry muon entry and the crossed calo layers
348  if (p.second == 1 && propDir == Trk::alongMomentum) {
349  caloEntry = p.first.release();
350  } else if (p.second == 3 && propDir == Trk::oppositeMomentum) {
351  caloEntry = p.first.release();
352  } else if (p.second == 3 && propDir == Trk::alongMomentum) {
353  muonEntry = p.first.release();
354  } else if (p.second == 4 && propDir == Trk::oppositeMomentum) {
355  muonEntry = p.first.release();
356  } else {
357  bool isEntry = p.second > 0;
358  TrackParametersIdentifier id = parsIdHelper.encode(
360  static_cast<CaloSampling::CaloSample>(abs(p.second) % 1000),
361  isEntry);
362  /*
363  * We construct curvilinear parameters which we push
364  * back to the caloLayers.
365  * We need to check if the parameters are already
366  * curvillinear.
367  * And if they are we need to clone the
368  * covariance matrix
369  */
370  if (p.first->type() != Trk::Curvilinear) {
371  caloLayers.emplace_back(p.first->position(),
372  p.first->momentum(),
373  p.first->charge(),
374  std::nullopt,
375  id);
376  } else {
377  std::optional<AmgSymMatrix(5)> covariance(std::nullopt);
378  if (p.first->covariance()) {
379  covariance = AmgSymMatrix(5)(*(p.first->covariance()));
380  }
381  caloLayers.emplace_back(p.first->position(),
382  p.first->momentum(),
383  p.first->charge(),
384  std::move(covariance),
385  id);
386  }
387  }
388  }
389 
390  if (!muonEntry && propDir == Trk::oppositeMomentum &&
391  std::abs(startPars.position().perp() - 4255.) < 1.) {
392  // muonEntry is right at the startPars position
393  muonEntry = startPars.clone();
394  }
395 
396  return std::make_unique<Trk::CaloExtension>(
397  caloEntry, muonEntry, std::move(caloLayers));
398 }
399 
400 std::vector<std::unique_ptr<Trk::Surface>>
402  const std::vector<CaloSampling::CaloSample>& clusterLayers,
403  double eta,
404  const CaloDetDescrManager& caloDD) const
405 {
406  // Create surfaces at the layers
407  std::vector<std::unique_ptr<Trk::Surface>> caloSurfaces;
408  caloSurfaces.reserve(clusterLayers.size());
409  for (CaloSampling::CaloSample lay : clusterLayers) {
410  auto* surf = m_calosurf->CreateUserSurface(lay, 0., eta, &caloDD);
411  if (surf) {
412  caloSurfaces.emplace_back(surf);
413  }
414  }
415 
416  return caloSurfaces;
417 }
418 
419 std::vector<std::pair<CaloSampling::CaloSample,
420  std::unique_ptr<const Trk::TrackParameters>>>
422  const EventContext& ctx,
423  const TrackParameters& startPars,
424  const std::vector<CaloSampling::CaloSample>& clusterLayers,
425  const std::vector<std::unique_ptr<Trk::Surface>>& caloSurfaces,
427 {
428  const auto* lastImpact = &startPars;
429  // Go into steps from layer to layer
430  size_t numSteps = caloSurfaces.size();
431  std::vector<std::pair<CaloSampling::CaloSample,
432  std::unique_ptr<const Trk::TrackParameters>>>
433  caloParameters{};
434  caloParameters.reserve(numSteps);
435  for (size_t i = 0; i < numSteps; ++i) {
436  std::unique_ptr<const Trk::TrackParameters> nextImpact =
437  m_extrapolator->extrapolateDirectly(ctx,
438  *lastImpact,
439  *(caloSurfaces[i]),
441  false,
442  particleType);
443  if (nextImpact) {
444  caloParameters.emplace_back(clusterLayers[i], std::move(nextImpact));
445  lastImpact = caloParameters.back().second.get();
446  }
447  }
448  return caloParameters;
449 }
450 
451 std::vector<std::pair<CaloSampling::CaloSample,
452  std::unique_ptr<const Trk::TrackParameters>>>
454  const EventContext& ctx,
455  const TrackParameters& startPars,
456  const std::vector<CaloSampling::CaloSample>& clusterLayers,
457  double eta,
458  const CaloDetDescrManager& caloDD,
460 {
461 
462  // Create surfaces at the layers
463  std::vector<std::unique_ptr<Trk::Surface>> caloSurfaces =
464  caloSurfacesFromLayers(clusterLayers, eta, caloDD);
465 
466  return surfaceCaloExtension(
467  ctx, startPars, clusterLayers, caloSurfaces, particleType);
468 }
469 
470 } // end of namespace Trk
DataVector::reserve
void reserve(size_type n)
Attempt to preallocate enough memory for a specified number of elements.
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
Trk::ParticleCaloExtensionTool::~ParticleCaloExtensionTool
virtual ~ParticleCaloExtensionTool()
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
Trk::ParticleSwitcher::particle
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:76
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
xAOD::Electron
Electron_v1 Electron
Definition of the current "egamma version".
Definition: Event/xAOD/xAODEgamma/xAODEgamma/Electron.h:17
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
TrackParameters.h
Trk::ParticleCaloExtensionTool::caloExtension
virtual std::unique_ptr< Trk::CaloExtension > caloExtension(const EventContext &ctx, const xAOD::IParticle &particle) const override final
Method returning the calo layers crossed by the IParticle track or the IParticle itself if it is neut...
Definition: ParticleCaloExtensionTool.cxx:69
PerigeeSurface.h
Trk::CaloExtension
Tracking class to hold the extrapolation from a particle from the ID to the muon system (or the other...
Definition: CaloExtension.h:18
Muon.h
Trk::ParametersBase::position
const Amg::Vector3D & position() const
Access method for the position.
Trk::oppositeMomentum
@ oppositeMomentum
Definition: PropDirection.h:21
index
Definition: index.py:1
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
Trk::ParticleCaloExtensionTool::m_particleStrategy
ParticleHypothesis m_particleStrategy
Definition: ParticleCaloExtensionTool.h:147
CaloExtension.h
Trk::ParticleCaloExtensionTool::m_extrapolator
ToolHandle< Trk::IExtrapolator > m_extrapolator
Definition: ParticleCaloExtensionTool.h:126
Trk::alongMomentum
@ alongMomentum
Definition: PropDirection.h:20
Trk::Curvilinear
@ Curvilinear
Definition: ParametersCommon.h:29
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition: Event/xAOD/xAODBase/xAODBase/IParticle.h:41
particleType
Definition: particleType.h:29
xAOD::TruthVertex_v1::y
float y() const
Vertex y displacement.
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
python.utils.AtlRunQueryLookup.mask
string mask
Definition: AtlRunQueryLookup.py:460
Trk::ParticleCaloExtensionTool::m_extrapolDetectorID
Gaudi::Property< unsigned int > m_extrapolDetectorID
Definition: ParticleCaloExtensionTool.h:149
Trk::ParticleCaloExtensionTool::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Monitoring tool for recording histograms of the alg in action.
Definition: ParticleCaloExtensionTool.h:158
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
Trk::TrackStateOnSurface::Outlier
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
Definition: TrackStateOnSurface.h:122
Track.h
xAOD::TrackParticle
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Definition: Event/xAOD/xAODTracking/xAODTracking/TrackParticle.h:13
Trk::AmgSymMatrix
AmgSymMatrix(5) &GXFTrackState
Definition: GXFTrackState.h:156
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:25
Trk::ParticleCaloExtensionTool::caloExtensionCollection
virtual StatusCode caloExtensionCollection(const EventContext &ctx, const xAOD::IParticleContainer &particles, const std::vector< bool > &mask, CaloExtensionCollection &caloextensions) const override final
Method that can be used by algorithms that : A.
Definition: ParticleCaloExtensionTool.cxx:128
AtlasDetectorID.h
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
Trk::TrackParametersIdHelper
helper class to encode and decode a TrackParametersIdentifier
Definition: TrackParametersIdHelper.h:18
Trk::ParticleCaloExtensionTool::m_detID
const AtlasDetectorID * m_detID
Definition: ParticleCaloExtensionTool.h:146
Trk::PropDirection
PropDirection
Definition: PropDirection.h:19
Trk::ParticleCaloExtensionTool::m_calosurf
ToolHandle< ICaloSurfaceBuilder > m_calosurf
Tool to build calorimeter layer surfaces.
Definition: ParticleCaloExtensionTool.h:129
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
ParticleGun_EoverP_Config.mom
mom
Definition: ParticleGun_EoverP_Config.py:63
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TrackParametersIdHelper.h
lumiFormat.i
int i
Definition: lumiFormat.py:85
CaloSampling::CaloSample
CaloSample
Definition: Calorimeter/CaloGeoHelpers/CaloGeoHelpers/CaloSampling.h:22
AtlasDetDescr::fFirstAtlasCaloTechnology
@ fFirstAtlasCaloTechnology
Definition: AtlasDetTechnology.h:40
beamspotman.n
n
Definition: beamspotman.py:731
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
ParticleCaloExtensionTool.h
Trk::pion
@ pion
Definition: ParticleHypothesis.h:29
xAOD::TruthParticle
TruthParticle_v1 TruthParticle
Typedef to implementation.
Definition: Event/xAOD/xAODTruth/xAODTruth/TruthParticle.h:15
Trk::ParticleCaloExtensionTool::ParticleCaloExtensionTool
ParticleCaloExtensionTool(const std::string &, const std::string &, const IInterface *)
Definition: ParticleCaloExtensionTool.cxx:20
plotIsoValidation.el
el
Definition: plotIsoValidation.py:197
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Trk::ParametersBase
Definition: ParametersBase.h:55
Trk::ParticleCaloExtensionTool::initialize
virtual StatusCode initialize() override final
Definition: ParticleCaloExtensionTool.cxx:33
Trk::CurvilinearParametersT
Definition: CurvilinearParametersT.h:48
xAOD::NeutralParticle
NeutralParticle_v1 NeutralParticle
Reference the current persistent version:
Definition: NeutralParticle.h:13
Trk::muon
@ muon
Definition: ParticleHypothesis.h:28
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
TrackParametersIdentifier
unsigned int TrackParametersIdentifier
Definition: TrackParametersIdHelper.h:13
TruthVertex.h
Trk::ParticleCaloExtensionTool::m_startFromPerigee
Gaudi::Property< bool > m_startFromPerigee
Definition: ParticleCaloExtensionTool.h:142
xAOD::TruthVertex_v1
Class describing a truth vertex in the MC record.
Definition: TruthVertex_v1.h:37
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:227
Trk::nonInteracting
@ nonInteracting
Definition: ParticleHypothesis.h:25
AtlasDetectorID::is_indet
bool is_indet(Identifier id) const
Definition: AtlasDetectorID.h:683
charge
double charge(const T &p)
Definition: AtlasPID.h:756
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
Trk::IParticleCaloExtensionTool::Cache
std::unordered_map< size_t, std::unique_ptr< Trk::CaloExtension > > Cache
Definition: IParticleCaloExtensionTool.h:98
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::ParticleCaloExtensionTool::finalize
virtual StatusCode finalize() override final
Definition: ParticleCaloExtensionTool.cxx:63
xAOD::Electron_v1
Definition: Electron_v1.h:34
CaloExtensionCollection.h
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
Muon
struct TBPatternUnitContext Muon
xAOD::TruthVertex_v1::x
float x() const
Vertex x displacement.
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
Trk::ParticleCaloExtensionTool::caloSurfacesFromLayers
std::vector< std::unique_ptr< Trk::Surface > > caloSurfacesFromLayers(const std::vector< CaloSampling::CaloSample > &clusterLayers, double eta, const CaloDetDescrManager &caloDD) const override final
Method returning a vector of calo surfaces give calo layers/samplings.
Definition: ParticleCaloExtensionTool.cxx:401
DeMoScan.index
string index
Definition: DeMoScan.py:364
CaloLCW_tf.group
group
Definition: CaloLCW_tf.py:28
AtlasDetectorID::is_muon
bool is_muon(Identifier id) const
Definition: AtlasDetectorID.h:701
CaloDetDescrManager
This class provides the client interface for accessing the detector description information common to...
Definition: CaloDetDescrManager.h:473
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAOD::TruthVertex_v1::z
float z() const
Vertex longitudinal distance along the beam line form the origin.
Trk::ParticleCaloExtensionTool::surfaceCaloExtension
virtual std::vector< std::pair< CaloSampling::CaloSample, std::unique_ptr< const Trk::TrackParameters > > > surfaceCaloExtension(const EventContext &ctx, const TrackParameters &startPars, const std::vector< CaloSampling::CaloSample > &clusterLayers, const std::vector< std::unique_ptr< Trk::Surface >> &caloSurfaces, ParticleHypothesis particleType) const override final
Method returning a vector of the Track Parameters at layers/samplings.
Definition: ParticleCaloExtensionTool.cxx:421
LArG4FSStartPointFilter.particles
list particles
Definition: LArG4FSStartPointFilter.py:84
Trk::ParticleCaloExtensionTool::m_particleTypeName
Gaudi::Property< std::string > m_particleTypeName
Definition: ParticleCaloExtensionTool.h:136
Track
Definition: TriggerChamberClusterOnTrackCreator.h:21
Electron.h
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
AthAlgTool
Definition: AthAlgTool.h:26
xAOD::NeutralParticle_v1
Class describing a NeutralParticle.
Definition: NeutralParticle_v1.h:40
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
TrackingPrimitives.h
Monitored::Timer
A monitored timer.
Definition: MonitoredTimer.h:32
Trk::TrackStateOnSurface::Measurement
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
Definition: TrackStateOnSurface.h:101
TrackStateOnSurface.h
Trk::ParametersBase::clone
virtual ParametersBase< DIM, T > * clone() const override=0
clone method for polymorphic deep copy
Trk::ParticleCaloExtensionTool::layersCaloExtension
virtual std::vector< std::pair< CaloSampling::CaloSample, std::unique_ptr< const Trk::TrackParameters > > > layersCaloExtension(const EventContext &ctx, const TrackParameters &startPars, const std::vector< CaloSampling::CaloSample > &clusterLayers, double eta, const CaloDetDescrManager &caloDD, ParticleHypothesis particleType) const override final
Method returning a vector of the Track Parameters at layers/samplings.
Definition: ParticleCaloExtensionTool.cxx:453
Trk::TrackParametersIdHelper::encode
TrackParametersIdentifier encode(AtlasDetDescr::AtlasDetTechnology, CaloSampling::CaloSample, bool isEntryToVolume) const
Encodes a TrackParametersIdentifier from AtlasDetDescr::AtlasDetTechnology and CaloSampling::CaloSamp...
Definition: TrackParametersIdHelper.h:60
Identifier
Definition: IdentifierFieldParser.cxx:14