Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
ActsInspectTruthContentAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
8 #include <unordered_map>
9 
10 namespace ActsTrk {
11 
12  template <typename T>
13  std::underlying_type_t<T> to_underlying(T val)
14  { return static_cast< std::underlying_type_t<T> >(val); }
15 
16 
18  ISvcLocator* pSvcLocator)
19  : AthReentrantAlgorithm(name, pSvcLocator)
20  {}
21 
23  ATH_MSG_INFO( "Initializing " << name() << " ..." );
24 
25  ATH_CHECK( m_clusters.initialize() );
26  ATH_CHECK( m_seeds.initialize() );
27  ATH_CHECK( m_associationMap_key.initialize() );
28  ATH_CHECK( m_tracks.initialize() );
29 
30  if (m_clusters.size() != m_associationMap_key.size()) {
31  ATH_MSG_ERROR("Inconsistent sizes of Clusters and TruthAssociationMaps");
32  return StatusCode::FAILURE;
33  }
34 
35  for (const auto& trackKey : m_tracks) {
36  std::string containerName = trackKey.key();
37  m_onTrack_clusterStat.push_back( std::make_pair(containerName, cluster_stat_t()) );
38  m_trackStat.push_back( std::make_pair(containerName, track_stat_t()) );
39  }
40 
41  return StatusCode::SUCCESS;
42  }
43 
44 
46  ATH_MSG_INFO( "Finalizing " << name() << " ..." );
47  ATH_MSG_INFO( "Statistics from Seed check with truth info:" );
48 
49  if ( printStatTables<ActsInspectTruthContentAlg::EStatClusters, xAOD::UncalibMeasType>("Clusters", m_clusterStat).isFailure() ) {
50  ATH_MSG_FATAL("Problem dumping Cluster truth information");
51  return StatusCode::FAILURE;
52  }
53 
54  if ( printStatTables<ActsInspectTruthContentAlg::EStatSeeds, ActsInspectTruthContentAlg::SeedType>("Seeds", m_seedStat).isFailure() ) {
55  ATH_MSG_FATAL("Problem dumping Seed truth information");
56  return StatusCode::FAILURE;
57  }
58 
59  for (const auto& [trackCollectionName, onTrackStat] : m_onTrack_clusterStat) {
60  std::string reportName = "On Track Clusters (" + trackCollectionName + ")";
61  if ( printStatTables<ActsInspectTruthContentAlg::EStatClusters, xAOD::UncalibMeasType>(reportName, onTrackStat).isFailure() ) {
62  ATH_MSG_FATAL("Problem dumping On Track Cluster truth info (" << trackCollectionName << ")");
63  return StatusCode::FAILURE;
64  }
65  }
66 
67  for (const auto& [trackCollectionName, trackStat] : m_trackStat) {
68  std::string reportName = "Track (" + trackCollectionName + ")";
69  if ( printStatTables<ActsInspectTruthContentAlg::EStatTracks, ActsInspectTruthContentAlg::TrackType>(reportName, trackStat).isFailure() ) {
70  ATH_MSG_FATAL("Problem dumping Track truth info (" << trackCollectionName << ")");
71  return StatusCode::FAILURE;
72  }
73  }
74 
75  return StatusCode::SUCCESS;
76  }
77 
78 
79  StatusCode ActsInspectTruthContentAlg::execute(const EventContext& ctx) const {
80  ATH_MSG_DEBUG( "Executing " << name() << " ..." );
81 
82  // contextual stat collectors
83  cluster_stat_t clusterStat {};
84  seed_stat_t seedStat {};
85 
86  std::array<const ActsTrk::MeasurementToTruthParticleAssociation*, s_nClusterTypes> truths {};
87  // Fill Stat info for Cluster collection(s)
88  for (std::size_t i(0); i<m_clusters.size(); ++i) {
89  ATH_MSG_DEBUG( "Retrieving cluster collection with key " << m_clusters.at(i).key() );
91  ATH_CHECK( clusterHandle.isValid() );
92  const xAOD::UncalibratedMeasurementContainer *clusters = clusterHandle.cptr();
93 
94  if (clusters->empty()) continue;
95  xAOD::UncalibMeasType elementType = clusters->front()->type();
96 
97  ATH_MSG_DEBUG( "Retrieving Measurement to Truth Particle Association map with key: " << m_associationMap_key.at(i).key() );
99  ATH_CHECK( truthHandle.isValid() );
100  truths[static_cast<std::size_t>(elementType)] = truthHandle.cptr();
101 
102  // Check truth and clusters are compatible
103  ATH_CHECK( truths[static_cast<std::size_t>(elementType)]->isCompatibleWith(clusters) );
104 
106  *truths[static_cast<std::size_t>(elementType)],
107  clusterStat) );
108  }
109 
110  ATH_CHECK( copyStatTable(clusterStat, m_clusterStat) );
111 
112  for (std::size_t i(0); i<m_seeds.size(); ++i) {
113  ATH_MSG_DEBUG( "Retrieving seed collection with key: " << m_seeds.at(i).key() );
115  ATH_CHECK( seedHandle.isValid() );
116  const ActsTrk::SeedContainer* seeds = seedHandle.cptr();
117 
118  ATH_CHECK( fillStatSeeds(*seeds,
119  truths,
120  seedStat) );
121  }
122 
123  ATH_CHECK( copyStatTable(seedStat, m_seedStat) );
124 
125  for (std::size_t i(0); i<m_tracks.size(); ++i) {
126  ATH_MSG_DEBUG( "Retrieving tracks collection with key " << m_tracks.at(i).key() );
128  ATH_CHECK( trackHandle.isValid() );
129  const ActsTrk::TrackContainer* tracks = trackHandle.cptr();
130 
131  cluster_stat_t onTrack_clusterStat {};
132  track_stat_t trackStat {};
133  ATH_CHECK( fillStatTracks(*tracks,
134  truths,
135  trackStat,
136  onTrack_clusterStat) );
137 
138  ATH_CHECK( copyStatTable(trackStat, m_trackStat.at(i).second) );
139  ATH_CHECK( copyStatTable(onTrack_clusterStat, m_onTrack_clusterStat.at(i).second) );
140  }
141 
142  return StatusCode::SUCCESS;
143  }
144 
145 
149  {
150  ATH_MSG_DEBUG( "Checking truth for clusters ..." );
151  for (const xAOD::UncalibratedMeasurement* meas : container) {
152  std::size_t clusterTypeIndex = static_cast<std::size_t>(meas->type());
153  ++stat[to_underlying(EStatClusters::kNTotal)][clusterTypeIndex];
154  const auto& tps = truth.at(meas->index());
155 
156  // get number of (valid) contributions
157  if (tps.empty()) {
159  continue;
160  }
161 
162  // Check all barcodes are from primary particles
163  bool allValidParticles = true;
164  for (const auto* tp : tps) {
165  if ( not HepMC::is_simulation_particle(*tp) ) continue;
166  allValidParticles = false;
167  break;
168  }
169 
170  if (tps.size() == 1) {
172  if (allValidParticles) ++stat[to_underlying(EStatClusters::kNClustersWith1ValidContribution)][clusterTypeIndex];
173  }
174  else if (tps.size() == 2) {
176  if (allValidParticles) ++stat[to_underlying(EStatClusters::kNClustersWith2ValidContribution)][clusterTypeIndex];
177  }
178  else {
180  if (allValidParticles) ++stat[to_underlying(EStatClusters::kNClustersWith3ValidContribution)][clusterTypeIndex];
181  }
182 
183  // get main contribution
184  bool hasContributionFromPrimaryParticle = false;
185  for (const auto* tp : tps) {
186  if ( HepMC::is_simulation_particle(*tp) ) continue;
187  hasContributionFromPrimaryParticle = true;
188  break;
189  }
190 
191  if (not hasContributionFromPrimaryParticle) ++stat[to_underlying(EStatClusters::kNClustersWith200kBarcode)][clusterTypeIndex];
192  else ++stat[to_underlying(EStatClusters::kNClustersFromPrimaries)][clusterTypeIndex];
193  }
194 
195  return StatusCode::SUCCESS;
196  }
197 
198 
200  std::array<const ActsTrk::MeasurementToTruthParticleAssociation*, s_nClusterTypes>& truths,
201  seed_stat_t& stat) const
202  {
203  ATH_MSG_DEBUG( "Checking truth for seeds ..." );
204  for (std::size_t i(0); i<seeds.size(); ++i) {
205  const ActsTrk::Seed* seed = seeds.at(i);
206 
207  int nMatches = 0;
208  int nMeasurements = 0;
209  std::unordered_map<std::size_t, int> particleIds {};
210 
211  std::size_t seedType = to_underlying(deduceSeedType(*seed));
212  ++stat[to_underlying(EStatSeeds::kNTotal)][seedType];
213 
214  const auto& sps = seed->sp();
215  for ( const xAOD::SpacePoint* sp : sps ) {
216  const auto& measurements = sp->measurements();
217  for (const xAOD::UncalibratedMeasurement* meas : measurements ) {
218  ++nMeasurements;
219 
220  std::size_t clusterTypeIndex = to_underlying(meas->type());
221  const ActsTrk::MeasurementToTruthParticleAssociation* truth = truths.at(clusterTypeIndex);
222  auto tps = truth->at(meas->index());
223 
224  if (tps.empty()) continue;
225 
226  bool contributionOnlyFromSimulationParticles = true;
227  for (const auto* tp : tps) {
228  if ( HepMC::is_simulation_particle(*tp) ) continue;
229  contributionOnlyFromSimulationParticles = false;
230 
231  std::size_t pid = HepMC::uniqueID(tp);
232  particleIds.try_emplace( pid, 0 );
233  ++particleIds[pid];
234  }
235  if (contributionOnlyFromSimulationParticles) continue;
236 
237  ++nMatches;
238  } // loop on measurements
239  } // loop on space points
240 
241  // check if we have measurements associated to the same particle id
242  // if the number of entries for the same id (the key) is the same as the
243  // number of measurements in the seed, then we have a match
244  bool isFromSameParticle = false;
245  for (const auto [pid, nEntries] : particleIds) {
246  if (nEntries != nMeasurements) continue;
247  isFromSameParticle = true;
248  break;
249  }
250 
251 
252  if (nMatches == 0) {
254  } else if (nMatches == 1) {
256  } else if (nMatches == 2) {
258  if (isFromSameParticle) ++stat[to_underlying(EStatSeeds::nKSeedsSame2Matches)][seedType];
259  } else if (nMatches == 3) {
261  if (isFromSameParticle) ++stat[to_underlying(EStatSeeds::nKSeedsSame3Matches)][seedType];
262  } else if (nMatches == 4) {
264  if (isFromSameParticle) ++stat[to_underlying(EStatSeeds::nKSeedsSame4Matches)][seedType];
265  } else if (nMatches == 5) {
267  if (isFromSameParticle) ++stat[to_underlying(EStatSeeds::nKSeedsSame5Matches)][seedType];
268  } else if (nMatches == 6) {
270  if (isFromSameParticle) ++stat[to_underlying(EStatSeeds::nKSeedsSame6Matches)][seedType];
271  }
272  } // loop on seed
273 
274  return StatusCode::SUCCESS;
275  }
276 
278  const auto& [bottom, middle, top] = seed.sp();
279  xAOD::UncalibMeasType bottom_type = bottom->measurements().front()->type();
280  xAOD::UncalibMeasType middle_type = middle->measurements().front()->type();
281  xAOD::UncalibMeasType top_type = top->measurements().front()->type();
282 
283  if (bottom_type == xAOD::UncalibMeasType::PixelClusterType and
284  middle_type == xAOD::UncalibMeasType::PixelClusterType and
286  return SeedType::PPP;
287  } else if (bottom_type == xAOD::UncalibMeasType::PixelClusterType and
288  middle_type == xAOD::UncalibMeasType::PixelClusterType and
290  return SeedType::PPS;
291  } else if (bottom_type == xAOD::UncalibMeasType::PixelClusterType and
292  middle_type == xAOD::UncalibMeasType::StripClusterType and
294  return SeedType::PSS;
295  } else if (bottom_type == xAOD::UncalibMeasType::StripClusterType and
296  middle_type == xAOD::UncalibMeasType::StripClusterType and
298  return SeedType::SSS;
299  } else {
300  return SeedType::Others;
301  }
302  }
303 
304 
306  std::array<const ActsTrk::MeasurementToTruthParticleAssociation*, s_nClusterTypes>& truths,
307  track_stat_t& trackStat,
308  cluster_stat_t& onTrackStat) const {
309  ATH_MSG_DEBUG( "Checking truth for tracks ..." );
310  for (const auto& track : tracks) {
311  ++trackStat[to_underlying(EStatTracks::kNTotal)][0];
312  std::size_t nHoles = track.nHoles();
313  if (nHoles == 0) ++trackStat[to_underlying(EStatTracks::kNTracks0Holes)][0];
314  else if (nHoles == 1) ++trackStat[to_underlying(EStatTracks::kNTracks1Holes)][0];
315  else if (nHoles == 2) ++trackStat[to_underlying(EStatTracks::kNTracks2Holes)][0];
316  else ++trackStat[to_underlying(EStatTracks::kNTracks3Holes)][0];
317 
318  std::size_t nOutliers = track.nOutliers();
319  if (nOutliers == 0) ++trackStat[to_underlying(EStatTracks::kNTracks0Outliers)][0];
320  else if (nOutliers == 1) ++trackStat[to_underlying(EStatTracks::kNTracks1Outliers)][0];
321  else if (nOutliers == 2) ++trackStat[to_underlying(EStatTracks::kNTracks2Outliers)][0];
322  else ++trackStat[to_underlying(EStatTracks::kNTracks3Outliers)][0];
323 
324 
325  bool AllValids = true;
326  int nConsideredMeasurements = 0;
327  std::unordered_map<std::size_t, int> particleIds {};
328 
329  // on track clusters
330  track.container()
331  .trackStateContainer().visitBackwards(track.tipIndex(),
332  [&truths, &onTrackStat,
333  &AllValids,
334  &nConsideredMeasurements, &particleIds]
335  (const auto& state) {
336  auto flags = state.typeFlags();
337  if (not flags.test(Acts::TrackStateFlag::MeasurementFlag) and
338  not flags.test(Acts::TrackStateFlag::OutlierFlag)) return;
339  ++nConsideredMeasurements;
340 
341  // get cluster
342  auto sl = state.getUncalibratedSourceLink().template get<ATLASUncalibSourceLink>();
343  assert( sl != nullptr);
344  const xAOD::UncalibratedMeasurement &meas = getUncalibratedMeasurement(sl);
345 
346  std::size_t clusterTypeIndex = to_underlying(meas.type());
347  ++onTrackStat[to_underlying(EStatClusters::kNTotal)][clusterTypeIndex];
348 
349  const ActsTrk::MeasurementToTruthParticleAssociation* truth = truths[clusterTypeIndex];
350  const auto& tps = truth->at(meas.index());
351 
352  if (tps.empty()) {
353  ++onTrackStat[to_underlying(EStatClusters::kNClustersWithNoBarcode)][clusterTypeIndex];
354  AllValids = false;
355  return;
356  }
357 
358  bool allBarcodesValid = true;
359  bool hasContributionFromPrimaryParticle = false;
360  for (const auto* tp : tps) {
361  if ( not HepMC::is_simulation_particle(*tp) ) {
362  hasContributionFromPrimaryParticle = true;
363  continue;
364  }
365  allBarcodesValid = false;
366  break;
367  }
368  if (not hasContributionFromPrimaryParticle) AllValids = false;
369 
370  if (tps.size() == 1) {
371  ++onTrackStat[to_underlying(EStatClusters::kNClustersWith1Contribution)][clusterTypeIndex];
372  if (allBarcodesValid) ++onTrackStat[to_underlying(EStatClusters::kNClustersWith1ValidContribution)][clusterTypeIndex];
373  }
374  else if (tps.size() == 2) {
375  ++onTrackStat[to_underlying(EStatClusters::kNClustersWith2Contribution)][clusterTypeIndex];
376  if (allBarcodesValid) ++onTrackStat[to_underlying(EStatClusters::kNClustersWith2ValidContribution)][clusterTypeIndex];
377  }
378  else {
379  ++onTrackStat[to_underlying(EStatClusters::kNClustersWith3Contribution)][clusterTypeIndex];
380  if (allBarcodesValid) ++onTrackStat[to_underlying(EStatClusters::kNClustersWith3ValidContribution)][clusterTypeIndex];
381  }
382 
383  bool contributionOnlyFromSimulationParticles = true;
384  for (const auto* tp : tps) {
385  if ( HepMC::is_simulation_particle(*tp) ) continue;
386  contributionOnlyFromSimulationParticles = false;
387 
388  std::size_t pid = HepMC::uniqueID(tp);
389  particleIds.try_emplace( pid, 0 );
390  ++particleIds[pid];
391  }
392 
393  // get main contribution
394  if (contributionOnlyFromSimulationParticles) ++onTrackStat[to_underlying(EStatClusters::kNClustersWith200kBarcode)][clusterTypeIndex];
395  else ++onTrackStat[to_underlying(EStatClusters::kNClustersFromPrimaries)][clusterTypeIndex];
396  }); // llop on states
397 
398  bool AllSameBarcode = false;
399  for ( const auto [pid, nEntries] : particleIds ) {
400  if (nEntries != nConsideredMeasurements) continue;
401  AllSameBarcode = true;
402  break;
403  }
404 
405  if (AllValids) ++trackStat[to_underlying(EStatTracks::kNFullMatch)][0];
406  if (AllSameBarcode) ++trackStat[to_underlying(EStatTracks::kNPerfectMatch)][0];
407  } // loop on tracks
408 
409  return StatusCode::SUCCESS;
410  }
411 
412 } // namespace
413 
ActsTrk::ActsInspectTruthContentAlg::EStatTracks::kNTracks3Outliers
@ kNTracks3Outliers
ActsTrk::ActsInspectTruthContentAlg::EStatSeeds::nKSeedsSame4Matches
@ nKSeedsSame4Matches
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
ActsTrk::TrackContainer
Definition: TrackContainer.h:31
ActsTrk::ActsInspectTruthContentAlg::EStatTracks::kNTracks1Holes
@ kNTracks1Holes
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
ActsInspectTruthContentAlg.h
ActsTrk::ActsInspectTruthContentAlg::m_clusters
SG::ReadHandleKeyArray< xAOD::UncalibratedMeasurementContainer > m_clusters
Definition: ActsInspectTruthContentAlg.h:124
ActsTrk::ActsInspectTruthContentAlg::EStatClusters::kNClustersWith200kBarcode
@ kNClustersWith200kBarcode
ActsTrk::ActsInspectTruthContentAlg::EStatClusters::kNClustersWith1ValidContribution
@ kNClustersWith1ValidContribution
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
xAOD::UncalibMeasType::StripClusterType
@ StripClusterType
ActsTrk::ActsInspectTruthContentAlg::EStatClusters::kNClustersWith1Contribution
@ kNClustersWith1Contribution
ActsTrk::ActsInspectTruthContentAlg::EStatSeeds::nKSeedsSame6Matches
@ nKSeedsSame6Matches
ActsTrk::ActsInspectTruthContentAlg::EStatTracks::kNTracks0Holes
@ kNTracks0Holes
ParticleTest.tp
tp
Definition: ParticleTest.py:25
ActsTrk::ActsInspectTruthContentAlg::EStatSeeds::nKSeedsSame5Matches
@ nKSeedsSame5Matches
xAOD::SpacePoint_v1
Definition: SpacePoint_v1.h:29
ActsTrk::ActsInspectTruthContentAlg::m_tracks
SG::ReadHandleKeyArray< ActsTrk::TrackContainer > m_tracks
Definition: ActsInspectTruthContentAlg.h:127
ActsTrk::ActsInspectTruthContentAlg::EStatSeeds::nKSeedsSame3Matches
@ nKSeedsSame3Matches
ActsTrk::ActsInspectTruthContentAlg::EStatSeeds::nKSeedsWith2Matches
@ nKSeedsWith2Matches
ActsTrk::ActsInspectTruthContentAlg::EStatTracks::kNTotal
@ kNTotal
ActsTrk::ActsInspectTruthContentAlg::EStatClusters::kNClustersFromPrimaries
@ kNClustersFromPrimaries
ActsTrk::ActsInspectTruthContentAlg::SeedType::SSS
@ SSS
ActsTrk::ActsInspectTruthContentAlg::fillStatClusters
StatusCode fillStatClusters(const xAOD::UncalibratedMeasurementContainer &container, const ActsTrk::MeasurementToTruthParticleAssociation &truth, cluster_stat_t &stat) const
Definition: ActsInspectTruthContentAlg.cxx:146
ActsTrk::MeasurementToTruthParticleAssociation
Definition: MeasurementToTruthParticleAssociation.h:18
ActsTrk::ActsInspectTruthContentAlg::EStatTracks::kNTracks2Holes
@ kNTracks2Holes
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:74
ActsTrk::ActsInspectTruthContentAlg::ActsInspectTruthContentAlg
ActsInspectTruthContentAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: ActsInspectTruthContentAlg.cxx:17
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:274
ActsTrk::ActsInspectTruthContentAlg::EStatTracks::kNTracks3Holes
@ kNTracks3Holes
ActsTrk::ActsInspectTruthContentAlg::EStatTracks::kNTracks1Outliers
@ kNTracks1Outliers
ActsTrk::ActsInspectTruthContentAlg::EStatSeeds::kNTotal
@ kNTotal
xAOD::UncalibratedMeasurement_v1
Definition: UncalibratedMeasurement_v1.h:13
ActsTrk::ActsInspectTruthContentAlg::EStatClusters::kNClustersWith3Contribution
@ kNClustersWith3Contribution
ActsTrk::ActsInspectTruthContentAlg::EStatSeeds::nKSeedsWith5Matches
@ nKSeedsWith5Matches
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ActsTrk::ActsInspectTruthContentAlg::SeedType::PPS
@ PPS
ActsTrk::ActsInspectTruthContentAlg::cluster_stat_t
std::array< std::array< std::size_t, s_nClusterTypes >, static_cast< std::size_t >(EStatClusters::kNStat)> cluster_stat_t
Definition: ActsInspectTruthContentAlg.h:94
HepMC::is_simulation_particle
bool is_simulation_particle(const T &p)
Method to establish if a particle (or barcode) was created during the simulation (TODO update to be s...
Definition: MagicNumbers.h:355
lumiFormat.i
int i
Definition: lumiFormat.py:85
ActsTrk::ActsInspectTruthContentAlg::SeedType::PPP
@ PPP
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
ActsTrk::ActsInspectTruthContentAlg::SeedType::PSS
@ PSS
ActsTrk::ActsInspectTruthContentAlg::EStatSeeds::nKSeedsWith0Matches
@ nKSeedsWith0Matches
HepMC::uniqueID
int uniqueID(const T &p)
Definition: MagicNumbers.h:116
ParticleGun_EoverP_Config.pid
pid
Definition: ParticleGun_EoverP_Config.py:62
ActsTrk::ActsInspectTruthContentAlg::seed_stat_t
std::array< std::array< std::size_t, s_nSeedTypes >, static_cast< std::size_t >(EStatSeeds::kNStat)> seed_stat_t
Definition: ActsInspectTruthContentAlg.h:97
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
ActsTrk::ActsInspectTruthContentAlg::m_seeds
SG::ReadHandleKeyArray< ActsTrk::SeedContainer > m_seeds
Definition: ActsInspectTruthContentAlg.h:125
ActsTrk::Seed
Acts::Seed< xAOD::SpacePoint, 3ul > Seed
Definition: Seed.h:12
ActsTrk::to_underlying
std::underlying_type_t< T > to_underlying(T val)
Definition: ActsInspectTruthContentAlg.cxx:13
ActsTrk::ActsInspectTruthContentAlg::EStatClusters::kNClustersWith2Contribution
@ kNClustersWith2Contribution
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
beamspotman.stat
stat
Definition: beamspotman.py:266
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
ActsTrk::ActsInspectTruthContentAlg::EStatSeeds::nKSeedsSame2Matches
@ nKSeedsSame2Matches
ActsTrk::ActsInspectTruthContentAlg::EStatSeeds::nKSeedsWith3Matches
@ nKSeedsWith3Matches
ActsTrk::ActsInspectTruthContentAlg::fillStatTracks
StatusCode fillStatTracks(const ActsTrk::TrackContainer &tracks, std::array< const ActsTrk::MeasurementToTruthParticleAssociation *, s_nClusterTypes > &truths, track_stat_t &trackStat, cluster_stat_t &onTrackClusterStat) const
Definition: ActsInspectTruthContentAlg.cxx:305
ActsTrk::ActsInspectTruthContentAlg::fillStatSeeds
StatusCode fillStatSeeds(const ActsTrk::SeedContainer &seeds, std::array< const ActsTrk::MeasurementToTruthParticleAssociation *, s_nClusterTypes > &truths, seed_stat_t &stat) const
Definition: ActsInspectTruthContentAlg.cxx:199
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
MagicNumbers.h
ActsTrk::ActsInspectTruthContentAlg::EStatClusters::kNTotal
@ kNTotal
ActsTrk::ActsInspectTruthContentAlg::EStatClusters::kNClustersWith3ValidContribution
@ kNClustersWith3ValidContribution
ActsTrk::ActsInspectTruthContentAlg::EStatSeeds::nKSeedsWith4Matches
@ nKSeedsWith4Matches
ActsTrk::ActsInspectTruthContentAlg::EStatSeeds::nKSeedsWith6Matches
@ nKSeedsWith6Matches
ActsTrk::ActsInspectTruthContentAlg::SeedType
SeedType
Definition: ActsInspectTruthContentAlg.h:75
ActsTrk::ActsInspectTruthContentAlg::EStatSeeds::nKSeedsWith1Matches
@ nKSeedsWith1Matches
ActsTrk::ActsInspectTruthContentAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: ActsInspectTruthContentAlg.cxx:79
ActsTrk::ActsInspectTruthContentAlg::EStatTracks::kNPerfectMatch
@ kNPerfectMatch
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
ActsTrk::ActsInspectTruthContentAlg::EStatClusters::kNClustersWithNoBarcode
@ kNClustersWithNoBarcode
ActsTrk::ActsInspectTruthContentAlg::SeedType::Others
@ Others
xAOD::UncalibMeasType
UncalibMeasType
Define the type of the uncalibrated measurement.
Definition: MeasurementDefs.h:25
RunTileMonitoring.clusters
clusters
Definition: RunTileMonitoring.py:133
ActsTrk::ActsInspectTruthContentAlg::copyStatTable
StatusCode copyStatTable(const stat_t &contextual, stat_t &global) const
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:567
ActsTrk::ActsInspectTruthContentAlg::EStatTracks::kNFullMatch
@ kNFullMatch
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:55
top
@ top
Definition: TruthClasses.h:64
TableUtils.h
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
ActsTrk::ActsInspectTruthContentAlg::track_stat_t
std::array< std::array< std::size_t, 1 >, static_cast< std::size_t >(EStatTracks::kNStat)> track_stat_t
Definition: ActsInspectTruthContentAlg.h:100
ActsTrk::ActsInspectTruthContentAlg::initialize
virtual StatusCode initialize() override
Definition: ActsInspectTruthContentAlg.cxx:22
dqBeamSpot.nEntries
int nEntries
Definition: dqBeamSpot.py:73
ActsTrk::ActsInspectTruthContentAlg::EStatTracks::kNTracks0Outliers
@ kNTracks0Outliers
ActsTrk::ActsInspectTruthContentAlg::deduceSeedType
SeedType deduceSeedType(const ActsTrk::Seed &) const
Definition: ActsInspectTruthContentAlg.cxx:277
ActsTrk::ActsInspectTruthContentAlg::finalize
virtual StatusCode finalize() override
Definition: ActsInspectTruthContentAlg.cxx:45
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
ActsTrk::ActsInspectTruthContentAlg::EStatTracks::kNTracks2Outliers
@ kNTracks2Outliers
ActsTrk::ActsInspectTruthContentAlg::m_associationMap_key
SG::ReadHandleKeyArray< ActsTrk::MeasurementToTruthParticleAssociation > m_associationMap_key
Definition: ActsInspectTruthContentAlg.h:126
xAOD::UncalibMeasType::PixelClusterType
@ PixelClusterType
ActsTrk::ActsInspectTruthContentAlg::EStatClusters::kNClustersWith2ValidContribution
@ kNClustersWith2ValidContribution