ATLAS Offline Software
ParticleCaloExtensionTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 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 
62 std::unique_ptr<Trk::CaloExtension>
64  const xAOD::IParticle& particle) const
65 {
66  if (particle.type() == xAOD::Type::TrackParticle) {
67  const xAOD::TrackParticle* trackParticle = static_cast<const xAOD::TrackParticle*>(&particle);
68  return caloExtension(ctx, *trackParticle);
69  }
70  if (particle.type() == xAOD::Type::TruthParticle) {
71  const xAOD::TruthParticle* truthParticle = static_cast<const xAOD::TruthParticle*>(&particle);
72  return caloExtension(ctx, *truthParticle);
73  } else if (particle.type() == xAOD::Type::Electron) {
74  const xAOD::Electron* el = static_cast<const xAOD::Electron*>(&particle);
75  if (el->trackParticle()) {
76  return caloExtension(ctx, *(el->trackParticle()));
77  }
78  } else if (particle.type() == xAOD::Type::Muon) {
79  const xAOD::Muon* muon = static_cast<const xAOD::Muon*>(&particle);
80  if (muon->primaryTrackParticle()) {
81  return caloExtension(ctx, *(muon->primaryTrackParticle()));
82  }
83  } else if (particle.type() == xAOD::Type::NeutralParticle) {
84  const xAOD::NeutralParticle* neutralParticle = static_cast<const xAOD::NeutralParticle*>(&particle);
85  return caloExtension(ctx, *neutralParticle);
86  }
87  ATH_MSG_WARNING("Unsupported IParticle type");
88  return nullptr;
89 }
90 
91 const Trk::CaloExtension*
93  const EventContext& ctx,
96 {
97  /*if not there , default ctor for unique_ptr (nullptr)*/
98  std::unique_ptr<Trk::CaloExtension>& extension = cache[particle.index()];
99  if (extension == nullptr) {
100  extension = caloExtension(ctx, particle);
101  }
102  return extension.get();
103 }
104 
105 const Trk::CaloExtension*
107  const xAOD::IParticle& particle,
108  const CaloExtensionCollection& cache) const
109 {
110  size_t index = particle.index();
111  if (index < cache.size()) {
112  return cache[index];
113  }
114  ATH_MSG_WARNING("cache size smaller than particle index");
115  return nullptr;
116 }
117 
120  const EventContext& ctx,
122  const std::vector<bool>& mask,
123  CaloExtensionCollection& caloextensions) const
124 {
125  const size_t numparticles = particles.size();
126 
127  if (mask.size() != numparticles) {
128  ATH_MSG_ERROR("mask does not have the same size as in input collection");
129  return StatusCode::FAILURE;
130  }
131  caloextensions.reserve(numparticles);
132  /* Either create a proper CaloExtension or otherwise a dummy one
133  * i.e one with no intersections
134  */
135  for (size_t i = 0; i < numparticles; ++i) {
136  if (mask[i]) {
137  std::unique_ptr<Trk::CaloExtension> extension =
138  caloExtension(ctx, *(particles[i]));
139  caloextensions.push_back(std::move(extension));
140  } else {
141  caloextensions.push_back(nullptr);
142  }
143  }
144  return StatusCode::SUCCESS;
145 }
146 
147 std::unique_ptr<Trk::CaloExtension>
149  const EventContext& ctx,
150  const xAOD::TruthParticle& particle) const
151 {
153  // get start parameters
154  const xAOD::TruthVertex* pvtx = particle.prodVtx();
155  if (pvtx == nullptr) {
156  return nullptr;
157  }
158  double charge = particle.charge();
159  Amg::Vector3D pos(pvtx->x(), pvtx->y(), pvtx->z());
160  Amg::Vector3D mom(particle.px(), particle.py(), particle.pz());
161  // Aproximate neutral particles as charged with infinite momentum
162  if (particle.isNeutral()) {
163  charge = 1.;
164  mom.normalize();
165  mom *= 1e10;
166  }
168  // get extension
169  return caloExtension(ctx, startPars, alongMomentum, particleType);
170 }
171 
172 std::unique_ptr<Trk::CaloExtension>
174  const EventContext& ctx,
175  const xAOD::NeutralParticle& particle) const
176 {
178  // create start parameters
179  const Trk::NeutralPerigee& perigee = particle.perigeeParameters();
180  double charge = 1.;
181  const Amg::Vector3D& pos(perigee.position());
182  Amg::Vector3D mom(perigee.momentum());
183  // Aproximate neutral particles as charged with infinite momentum
184  mom.normalize();
185  mom *= 1e10;
187  // get extension
188  return caloExtension(ctx, startPars, alongMomentum, particleType);
189 }
190 
191 std::unique_ptr<Trk::CaloExtension>
193  const EventContext& ctx,
194  const xAOD::TrackParticle& particle) const
195 {
196  // Start with what the user opted as strategy
198 
199  // wee extrapolate either from the perigee or
200  // from the last measurement.
201  if (m_startFromPerigee || !particle.track()) {
202  bool idExit = true;
203  // Muon Entry is around z 6783 and r 4255
204  if (std::abs(particle.perigeeParameters().position().z()) > 6700.)
205  idExit = false;
206  if (particle.perigeeParameters().position().perp() > 4200.)
207  idExit = false;
208  PropDirection propDir = idExit ? alongMomentum : oppositeMomentum;
209  return caloExtension(
210  ctx, particle.perigeeParameters(), propDir, particleType);
211  }
212 
213  // Extrapolation from last track parameters
214  const Track& track = *particle.track();
215  // Look-up the parameters closest to the calorimeter in
216  // ID and muon system
217  ATH_MSG_DEBUG("trying to add calo layers");
218  const TrackParameters* idExitParamers = nullptr;
219  const TrackParameters* muonEntryParamers = nullptr;
221  track.trackStateOnSurfaces()->begin();
222  for (; itTSoS != track.trackStateOnSurfaces()->end(); ++itTSoS) {
223  // select state with track parameters on a measurement
224  if (!(**itTSoS).trackParameters() ||
225  !(**itTSoS).type(TrackStateOnSurface::Measurement) ||
226  (**itTSoS).type(TrackStateOnSurface::Outlier)) {
227  continue;
228  }
229 
230  const Identifier& id = (**itTSoS)
231  .trackParameters()
232  ->associatedSurface()
233  .associatedDetectorElementIdentifier();
234  if (m_detID->is_indet(id))
235  idExitParamers = (**itTSoS).trackParameters();
236  if (m_detID->is_muon(id) && !muonEntryParamers)
237  muonEntryParamers = (**itTSoS).trackParameters();
238  }
239  // require at least one of them
240  if (!idExitParamers && !muonEntryParamers) {
241  idExitParamers = track.perigeeParameters();
242  }
243  // pick start parameters, start in ID if possible
244  const TrackParameters* startPars =
245  idExitParamers ? idExitParamers : muonEntryParamers;
246 
247  if (!startPars) {
248  ATH_MSG_WARNING("Failed to find start parameters");
249  return nullptr;
250  }
251  PropDirection propDir = idExitParamers ? alongMomentum : oppositeMomentum;
252 
253  return caloExtension(ctx, *startPars, propDir, particleType);
254 }
255 
256 std::unique_ptr<Trk::CaloExtension>
258  const TrackParameters& startPars,
259  PropDirection propDir,
261 {
262  ATH_MSG_DEBUG("looking up calo states: r "
263  << startPars.position().perp() << " z "
264  << startPars.position().z() << " momentum "
265  << startPars.momentum().mag());
266 
267  auto extrapolation_timer = Monitored::Timer<std::chrono::microseconds>( "TIME_extrapolation" );
268  auto group = Monitored::Group(m_monTool, extrapolation_timer);
269  // Start monitoring timer
270  extrapolation_timer.start();
271  /* The last argument to the extrapolate overload
272  * corresponds to a GeometrySignature value from
273  * TrkDetDescrUtils/GeometrySignature.h
274  * The extrapolation stop at the indicated subdetector exit
275  */
276  std::unique_ptr<
277  std::vector<std::pair<std::unique_ptr<Trk::TrackParameters>, int>>>
278  caloParameters = m_extrapolator->collectIntersections(
279  ctx, startPars, propDir, particleType, m_extrapolDetectorID);
280 
281  // Stop monitoring timer
282  extrapolation_timer.stop();
283 
284  if (!caloParameters) {
285  return nullptr;
286  }
287 
288  TrackParametersIdHelper parsIdHelper;
289 
290  // create final object
291  std::unique_ptr<TrackParameters> caloEntry = nullptr;
292  std::unique_ptr<TrackParameters> muonEntry = nullptr;
293  std::vector<CurvilinearParameters> caloLayers;
294  caloLayers.reserve(caloParameters->size() - 1);
295  ATH_MSG_DEBUG(" Found calo parameters: " << caloParameters->size()
296  << " extrapolation exit ID="
298 
299  for (auto& p : *caloParameters) {
300  if (!p.first) {
301  continue;
302  }
303  // assign parameters
304  // calo aentry muon entry and the crossed calo layers
305  if (p.second == 1 && propDir == Trk::alongMomentum) {
306  caloEntry = std::move(p.first);
307  } else if (p.second == 3 && propDir == Trk::oppositeMomentum) {
308  caloEntry = std::move(p.first);
309  } else if (p.second == 3 && propDir == Trk::alongMomentum) {
310  muonEntry = std::move(p.first);
311  } else if (p.second == 4 && propDir == Trk::oppositeMomentum) {
312  muonEntry = std::move(p.first);
313  } else {
314  bool isEntry = p.second > 0;
315  TrackParametersIdentifier id = parsIdHelper.encode(
317  static_cast<CaloSampling::CaloSample>(abs(p.second) % 1000),
318  isEntry);
319  /*
320  * We construct curvilinear parameters which we push
321  * back to the caloLayers.
322  * curvillinear.
323  */
324  if (p.first->type() != Trk::Curvilinear) {
325  caloLayers.emplace_back(p.first->position(),
326  p.first->momentum(),
327  p.first->charge(),
328  std::nullopt,
329  id);
330  } else {
331  std::optional<AmgSymMatrix(5)> covariance(std::nullopt);
332  if (p.first->covariance()) {
333  covariance = AmgSymMatrix(5)(*(p.first->covariance()));
334  }
335  caloLayers.emplace_back(p.first->position(),
336  p.first->momentum(),
337  p.first->charge(),
338  std::move(covariance),
339  id);
340  }
341  }
342  }
343 
344  if (!muonEntry && propDir == Trk::oppositeMomentum &&
345  std::abs(startPars.position().perp() - 4255.) < 1.) {
346  // muonEntry is right at the startPars position
347  muonEntry = startPars.uniqueClone();
348  }
349 
350  return std::make_unique<Trk::CaloExtension>(
351  std::move(caloEntry), std::move(muonEntry), std::move(caloLayers));
352 }
353 
354 std::vector<std::unique_ptr<Trk::Surface>>
356  const std::vector<CaloSampling::CaloSample>& clusterLayers,
357  double eta,
358  const CaloDetDescrManager& caloDD) const
359 {
360  // Create surfaces at the layers
361  std::vector<std::unique_ptr<Trk::Surface>> caloSurfaces;
362  caloSurfaces.reserve(clusterLayers.size());
363  for (CaloSampling::CaloSample lay : clusterLayers) {
364  auto* surf = m_calosurf->CreateUserSurface(lay, 0., eta, &caloDD);
365  if (surf) {
366  caloSurfaces.emplace_back(surf);
367  }
368  }
369 
370  return caloSurfaces;
371 }
372 
373 std::vector<std::pair<CaloSampling::CaloSample,
374  std::unique_ptr<const Trk::TrackParameters>>>
376  const EventContext& ctx,
377  const TrackParameters& startPars,
378  const std::vector<CaloSampling::CaloSample>& clusterLayers,
379  const std::vector<std::unique_ptr<Trk::Surface>>& caloSurfaces,
381 {
382  const auto* lastImpact = &startPars;
383  // Go into steps from layer to layer
384  size_t numSteps = caloSurfaces.size();
385  std::vector<std::pair<CaloSampling::CaloSample,
386  std::unique_ptr<const Trk::TrackParameters>>>
387  caloParameters{};
388  caloParameters.reserve(numSteps);
389  for (size_t i = 0; i < numSteps; ++i) {
390  std::unique_ptr<const Trk::TrackParameters> nextImpact =
391  m_extrapolator->extrapolateDirectly(ctx,
392  *lastImpact,
393  *(caloSurfaces[i]),
395  false,
396  particleType);
397  if (nextImpact) {
398  caloParameters.emplace_back(clusterLayers[i], std::move(nextImpact));
399  lastImpact = caloParameters.back().second.get();
400  }
401  }
402  return caloParameters;
403 }
404 
405 std::vector<std::pair<CaloSampling::CaloSample,
406  std::unique_ptr<const Trk::TrackParameters>>>
408  const EventContext& ctx,
409  const TrackParameters& startPars,
410  const std::vector<CaloSampling::CaloSample>& clusterLayers,
411  double eta,
412  const CaloDetDescrManager& caloDD,
414 {
415 
416  // Create surfaces at the layers
417  std::vector<std::unique_ptr<Trk::Surface>> caloSurfaces =
418  caloSurfacesFromLayers(clusterLayers, eta, caloDD);
419 
420  return surfaceCaloExtension(
421  ctx, startPars, clusterLayers, caloSurfaces, particleType);
422 }
423 
424 } // 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:79
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
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:63
PerigeeSurface.h
Trk::CaloExtension
Tracking class to hold the extrapolation through calorimeter Layers Both the caloEntryLayerIntersecti...
Definition: CaloExtension.h:19
Muon.h
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
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::ParametersBase::uniqueClone
std::unique_ptr< ParametersBase< DIM, T > > uniqueClone() const
clone method for polymorphic deep copy returning unique_ptr; it is not overriden, but uses the existi...
Definition: ParametersBase.h:97
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:145
CaloExtension.h
Trk::ParticleCaloExtensionTool::m_extrapolator
ToolHandle< Trk::IExtrapolator > m_extrapolator
Definition: ParticleCaloExtensionTool.h:124
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:459
Trk::ParticleCaloExtensionTool::m_extrapolDetectorID
Gaudi::Property< unsigned int > m_extrapolDetectorID
Definition: ParticleCaloExtensionTool.h:147
Trk::ParticleCaloExtensionTool::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Monitoring tool for recording histograms of the alg in action.
Definition: ParticleCaloExtensionTool.h:156
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:92
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:28
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:119
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:144
Trk::PropDirection
PropDirection
Definition: PropDirection.h:19
Trk::ParticleCaloExtensionTool::m_calosurf
ToolHandle< ICaloSurfaceBuilder > m_calosurf
Tool to build calorimeter layer surfaces.
Definition: ParticleCaloExtensionTool.h:127
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
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:727
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:32
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
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
python.getProblemFolderFromLogs.el
dictionary el
Definition: getProblemFolderFromLogs.py:48
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:31
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:140
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:239
Trk::nonInteracting
@ nonInteracting
Definition: ParticleHypothesis.h:28
AtlasDetectorID::is_indet
bool is_indet(Identifier id) const
Definition: AtlasDetectorID.h:678
charge
double charge(const T &p)
Definition: AtlasPID.h:991
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
xAOD::Electron_v1
Definition: Electron_v1.h:34
CaloExtensionCollection.h
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:16
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:355
DeMoScan.index
string index
Definition: DeMoScan.py:362
CaloLCW_tf.group
group
Definition: CaloLCW_tf.py:28
AtlasDetectorID::is_muon
bool is_muon(Identifier id) const
Definition: AtlasDetectorID.h:696
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:375
LArG4FSStartPointFilter.particles
list particles
Definition: LArG4FSStartPointFilter.py:84
Trk::ParticleCaloExtensionTool::m_particleTypeName
Gaudi::Property< std::string > m_particleTypeName
Definition: ParticleCaloExtensionTool.h:134
Track
Definition: TriggerChamberClusterOnTrackCreator.h:21
Electron.h
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
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::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:407
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