ATLAS Offline Software
TrackToTrackParticleCnvAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
5 
10 #include "Acts/Definitions/Units.hpp"
11 #include "Acts/Propagator/detail/JacobianEngine.hpp"
12 #include "ActsInterop/Logger.h"
13 
19 #include "GaudiKernel/PhysicalConstants.h"
20 
24 
25 #include <tuple>
26 #include <sstream>
27 
28 namespace {
29 
36  template <typename T, class T_SquareMatrix>
37  inline void lowerTriangleToVector(const T_SquareMatrix& covMatrix,
38  std::vector<T>& vec, unsigned int n_rows_max) {
39  assert( covMatrix.rows() == covMatrix.cols());
40  vec.clear();
41  unsigned int n_rows = std::min(n_rows_max, static_cast<unsigned int>(covMatrix.rows()));
42  vec.reserve((n_rows+1)*n_rows/2);
43  for (unsigned int i = 0; i < n_rows; ++i) {
44  for (unsigned int j = 0; j <= i; ++j) {
45  vec.emplace_back(covMatrix(i, j));
46  }
47  }
48  }
49 
59  template <typename T, class T_SquareMatrix>
60  inline void lowerTriangleToVectorScaleLastRow(const T_SquareMatrix& covMatrix,
61  std::vector<T>& vec, unsigned int n_rows_max,
62  typename T_SquareMatrix::Scalar last_element_scale) {
63  assert( covMatrix.rows() == covMatrix.cols());
64  vec.clear();
65  unsigned int n_rows = std::min(n_rows_max, static_cast<unsigned int>(covMatrix.rows()));
66  vec.reserve((n_rows+1)*n_rows/2);
67  for (unsigned int i = 0; i < n_rows; ++i) {
68  for (unsigned int j = 0; j <= i; ++j) {
69  vec.emplace_back(covMatrix(i, j));
70  }
71  }
72  typename std::vector<T>::iterator cov_iter = vec.end();
73  --cov_iter;
74  *cov_iter *= last_element_scale; // apply scale twice to diagonal element
75  for (unsigned int i=0; i<n_rows_max; ++i) {
76  *cov_iter *= last_element_scale;
77  --cov_iter;
78  }
79  }
80 
86  void setSummaryValue(xAOD::TrackParticle &track_particle, uint8_t value, xAOD::SummaryType summary_type) {
87  uint8_t tmp = value;
88  track_particle.setSummaryValue(tmp, summary_type);
89  }
90 }
91 
92 namespace {
93  // Create lut to map neasurement types (pixel and strips only) to hit summary types.
94  std::array<unsigned short,ActsTrk::detail::to_underlying(xAOD::UncalibMeasType::nTypes)> makeMeasurementToSummaryTypeMap() {
96  for (unsigned short &elm : ret) {
98  }
101  return ret;
102  }
103 }
104 
105 namespace ActsTrk
106 {
107  std::vector<std::pair<Acts::PdgParticle, xAOD::ParticleHypothesis> > TrackToTrackParticleCnvAlg::s_actsHypothesisToxAOD;
108 
110  if (s_actsHypothesisToxAOD.empty()) {
111  s_actsHypothesisToxAOD.reserve(7);
112  s_actsHypothesisToxAOD.push_back( std::make_pair( Acts::eElectron , xAOD::electron) );
113  s_actsHypothesisToxAOD.push_back( std::make_pair( Acts::eMuon , xAOD::muon) );
114  s_actsHypothesisToxAOD.push_back( std::make_pair( Acts::ePionPlus , xAOD::pion) );
115  s_actsHypothesisToxAOD.push_back( std::make_pair( Acts::eProton , xAOD::proton) );
116  s_actsHypothesisToxAOD.push_back( std::make_pair( Acts::ePionZero , xAOD::pi0) );
117  s_actsHypothesisToxAOD.push_back( std::make_pair( Acts::eNeutron , xAOD::neutron) );
118  s_actsHypothesisToxAOD.push_back( std::make_pair( Acts::eGamma , xAOD::photon) );
119  }
120  }
121 
122 
124  ISvcLocator *pSvcLocator)
125  : AthReentrantAlgorithm(name, pSvcLocator)
126  {
127  }
128 
130  {
131  ATH_CHECK( m_tracksContainerKey.initialize() );
135 
136  ATH_CHECK( m_extrapolationTool.retrieve() ); // for extrapolation to beamline
137 
138  // propagator for conversion to curvilnear parameters
139  {
140  auto logger = makeActsAthenaLogger(this, "Prop");
141 
142  Navigator::Config cfg{m_extrapolationTool->trackingGeometryTool()->trackingGeometry()};
143  cfg.resolvePassive = false;
144  cfg.resolveMaterial = true;
145  cfg.resolveSensitive = true;
146  auto navigtor_logger = logger->cloneWithSuffix("Navigator");
147  m_propagator = std::make_unique<Propagator>(Stepper(std::make_shared<ATLASMagneticFieldWrapper>()),
148  Navigator(cfg,std::move(navigtor_logger)),
149  std::move(logger));
150  }
151 
152  // for layer/module-type information per hit
153  ATH_CHECK( m_siDetEleCollKey.initialize() );
154  if (m_siDetEleCollToMeasurementType.size() == m_siDetEleCollKey.size()) {
155  unsigned int collection_idx=0;
157  if (type <1 || type >2) {
158  ATH_MSG_ERROR("Invalid measurement type (" << type << ") given for collection " << collection_idx << " : "
159  << m_siDetEleCollKey[collection_idx].key()
160  << ". Expected 1 for pixel, 2 for strips.");
161  return StatusCode::FAILURE;
162  }
163  ++collection_idx;
164  }
165  }
166  else {
167  ATH_MSG_ERROR("Expected exactly one value in SiDetEleCollToMeasurementType per SiDetectorElementCollection. But got "
168  << m_siDetEleCollToMeasurementType.size() << " instead of " << m_siDetEleCollKey.size() << ".");
169  return StatusCode::FAILURE;
170  }
171 
173 
174  return StatusCode::SUCCESS;
175  }
176 
177  StatusCode TrackToTrackParticleCnvAlg::execute(const EventContext &ctx) const
178  {
180  if (wh_track_particles.record(std::make_unique<xAOD::TrackParticleContainer>(),
181  std::make_unique<xAOD::TrackParticleAuxContainer>()).isFailure()) {
182  ATH_MSG_ERROR("Failed to record track particle container with key " << m_trackParticlesOutKey.key() );
183  return StatusCode::FAILURE;
184  }
185 
186  xAOD::TrackParticleContainer *track_particles = wh_track_particles.ptr();
187 
189  ATH_CHECK(beamSpotHandle.isValid());
190  const InDet::BeamSpotData *beamspot_data = beamSpotHandle.cptr();
191 
192  std::size_t nTracks = 0ul;
193  std::vector<const ActsTrk::TrackContainer *> trackContainers;
195  SG::ReadHandle<ActsTrk::TrackContainer> handle = SG::makeHandle( handleKey, ctx );
196  ATH_CHECK(handle.isValid());
197  trackContainers.push_back( handle.cptr() );
198  nTracks += trackContainers.back()->size();
199  }
200 
202  ATH_CHECK(fieldHandle.isValid());
203  const AtlasFieldCacheCondObj *field_cond_data = fieldHandle.cptr();
204  MagField::AtlasFieldCache fieldCache;
205  field_cond_data->getInitializedCache(fieldCache);
206 
207  const ActsGeometryContext &gctx = m_extrapolationTool->trackingGeometryTool()->getNominalGeometryContext();
208  std::shared_ptr<Acts::PerigeeSurface> perigee_surface = makePerigeeSurface(beamspot_data);
209  track_particles->reserve( nTracks );
210 
212  for (unsigned int idx=0; idx <m_siDetEleCollToMeasurementType.size(); ++idx ) {
214  ATH_CHECK(detHandle.isValid());
215  siDetEleColl[m_siDetEleCollToMeasurementType[idx] ] = detHandle.cptr();
216  }
217 
219  measurementToSummaryType ATLAS_THREAD_SAFE (makeMeasurementToSummaryTypeMap());
220 
221 
222 
223  // re-used temporaries
224  std::vector<float> tmp_cov_vector;
225  std::vector<ActsTrk::TrackStateBackend::ConstTrackStateProxy::IndexType > tmp_param_state_idx;
226  tmp_param_state_idx.reserve(30);
227  Amg::Vector3D magnFieldVect;
228  std::vector<std::vector<float>> parametersVec;
230 
231  unsigned int converted_track_states=0;
232 
233  static const SG::AuxElement::Decorator<ElementLink<ActsTrk::TrackContainer> > trackLink("actsTrack");
234 
235  using namespace Acts::UnitLiterals;
236  for (const ActsTrk::TrackContainer *tracksContainer : trackContainers) {
237  for (const typename ActsTrk::TrackContainer::ConstTrackProxy track : *tracksContainer) {
238  track_particles->push_back( new xAOD::TrackParticle );
239  xAOD::TrackParticle *track_particle=track_particles->back();
240 
241  // convert defining parameters
242  // @TODO add support for other modes available in the legacy converter : wrt a vertex, origin, beamspot ?
243  Acts::BoundTrackParameters perigeeParam = parametersAtBeamLine(ctx, track, *perigee_surface);
244  track_particle->setDefiningParameters(perigeeParam.parameters()[Acts::eBoundLoc0],
245  perigeeParam.parameters()[Acts::eBoundLoc1],
246  perigeeParam.parameters()[Acts::eBoundPhi],
247  perigeeParam.parameters()[Acts::eBoundTheta],
248  perigeeParam.parameters()[Acts::eBoundQOverP] * 1_MeV);
249  if (perigeeParam.covariance().has_value()) {
250  // only use the 5x5 sub-matrix of the full covariance matrix
251  lowerTriangleToVectorScaleLastRow(perigeeParam.covariance().value(),tmp_cov_vector,5, 1_MeV);
252  track_particle->setDefiningParametersCovMatrixVec(tmp_cov_vector);
253  }
254  // optional beam tilt
255  if (beamspot_data) {
256  track_particle->setBeamlineTiltX(beamspot_data->beamTilt(0));
257  track_particle->setBeamlineTiltY(beamspot_data->beamTilt(1));
258  }
259 
260  // fit info, quality
261  track_particle->setFitQuality(track.chi2(), track.nDoF());
262  track_particle->setPatternRecognitionInfo( (1ul << xAOD::SiSPSeededFinder) );
263  track_particle->setTrackFitter(xAOD::KalmanFitter);
264 
265  const Acts::ParticleHypothesis &hypothesis = track.particleHypothesis();
266  track_particle->setParticleHypothesis(convertParticleHypothesis( hypothesis.absolutePdg() ));
267  constexpr float inv_1_MeV = 1/1_MeV;
268  // gather track state indices for parameter conversion
269  // @TODO add support for muons
270 
271  // xAOD::UncalibMeasType::underlying_type is expected to be the number of UncalibMeasTypes
274 
276  gatherTrackSummaryData(*tracksContainer,
277  track,
278  siDetEleColl,
279  measurementToSummaryType,
280  chi2_stat,
281  hitInfo,
282  tmp_param_state_idx,
283  specialHitCounts);
284 
285  // Muon
286  // MdtDriftCircleType = 3
287  // RpcStripType = 4,
288  // TgcStripType = 5,
289  // MMClusterType = 6,
290  // sTgcStripType = 7,
291 
292  // pixel summaries
293  std::array< std::tuple< uint8_t, uint8_t, uint8_t, bool >, 4> copy_summary {
294  std::make_tuple(static_cast<uint8_t>(ActsTrk::detail::HitSummaryData::pixelTotal),
296  static_cast<uint8_t>(xAOD::numberOfPixelHits),
297  false),
298 
299  std::make_tuple(static_cast<uint8_t>(ActsTrk::detail::HitSummaryData::pixelBarrelFlat),
302  true),
303 
307  true),
308 
309  std::make_tuple(static_cast<uint8_t>(ActsTrk::detail::HitSummaryData::pixelEndcap),
311  static_cast<uint8_t>(xAOD::numberOfPixelEndcapHits),\
312  true) };
313 
314  for (auto [src_region, dest_xaod_summary_layer, dest_xaod_summary_hits, add_outlier] : copy_summary ) {
315  setSummaryValue(*track_particle,
316  hitInfo.contributingLayers( static_cast<ActsTrk::detail::HitSummaryData::DetectorRegion>(src_region)),
317  static_cast<xAOD::SummaryType>(dest_xaod_summary_layer));
318  setSummaryValue(*track_particle,
319  hitInfo.contributingHits(static_cast<ActsTrk::detail::HitSummaryData::DetectorRegion>(src_region))
320  + ( add_outlier
322  : 0),
323  static_cast<xAOD::SummaryType>(dest_xaod_summary_hits));
324  }
325  setSummaryValue(*track_particle,
329  setSummaryValue(*track_particle,
332  setSummaryValue(*track_particle,
338  setSummaryValue(*track_particle,
342  setSummaryValue(*track_particle,
345  setSummaryValue(*track_particle,
348  // do not expect pixel hits if there are not contributing pixel hits in the flat barrel and expectIfPixelContributes is true
349  std::array<unsigned int,4> expect_layer_pattern = (( !m_expectIfPixelContributes.value()
353  perigeeParam,
355  : std::array<unsigned int,4> {0u,0u, 0u,0u} );
356 
357  // @TODO consider end-caps for inner most pixel hits ?
358  setSummaryValue(*track_particle,
359  static_cast<uint8_t>((expect_layer_pattern[0] & (1<<0)) != 0 ),
361  setSummaryValue(*track_particle,
362  static_cast<uint8_t>((expect_layer_pattern[0] & (1<<1)) != 0 ),
364  setSummaryValue(*track_particle,
367  setSummaryValue(*track_particle,
370  setSummaryValue(*track_particle,
373  setSummaryValue(*track_particle,
376 
377  // Strip summaries
378  setSummaryValue(*track_particle,
381  setSummaryValue(*track_particle,
384  setSummaryValue(*track_particle,
387 
388  double biased_chi2_variance = chi2_stat.biasedVariance();
389  setSummaryValue(*track_particle,
390  static_cast<uint8_t> (biased_chi2_variance>0.
391  ? std::min(static_cast<unsigned int>(std::sqrt(biased_chi2_variance) * 100),255u)
392  : 0u),
394 
395  setSummaryValue(*track_particle,
399 
400 
401  // @TODO slect states for which parameters are stored
402  if (m_firstAndLastParamOnly && tmp_param_state_idx.size()>2) {
403  tmp_param_state_idx[1]=tmp_param_state_idx.back();
404  tmp_param_state_idx.erase(tmp_param_state_idx.begin()+2,tmp_param_state_idx.end());
405  }
406 
407  // store track parameters and covariances for slected states
408  parametersVec.clear();
409  parametersVec.reserve(tmp_param_state_idx.size());
410 
411  for(std::vector<ActsTrk::TrackStateBackend::ConstTrackStateProxy::IndexType>::const_reverse_iterator
412  idx_iter = tmp_param_state_idx.rbegin();
413  idx_iter != tmp_param_state_idx.rend();
414  ++idx_iter) {
415  // for(ActsTrk::TrackStateBackend::ConstTrackStateProxy::IndexType idx : tmp_param_state_idx) {
416  ActsTrk::TrackStateBackend::ConstTrackStateProxy
417  state = tracksContainer->trackStateContainer().getTrackState(*idx_iter);
418  const Acts::BoundTrackParameters actsParam = track.createParametersFromState(state);
419 
420  Acts::Vector3 position = actsParam.position(gctx.context());
421  Acts::Vector3 momentum = actsParam.momentum();
422 
423  // scaling from Acts momentume units (GeV) to Athena Units (MeV)
424  for (unsigned int i=0; i<momentum.rows(); ++i) {
425  momentum(i) *= inv_1_MeV;
426  }
427 
428 
429  if (actsParam.covariance()) {
430  Acts::MagneticFieldContext mfContext = m_extrapolationTool->getMagneticFieldContext(ctx);
431  Acts::GeometryContext tgContext = gctx.context();
432 
433  magnFieldVect.setZero();
434  fieldCache.getField(position.data(), magnFieldVect.data());
435  // scaling from Athena magnetic field units kT to Acts units T
436  {
437  using namespace Acts::UnitLiterals;
438  magnFieldVect *= 1000_T;
439  }
440 
441  auto curvilinear_cov_result = ActsTrk::detail::convertActsBoundCovToCurvilinearParam(tgContext, actsParam, magnFieldVect, hypothesis);
442  if (curvilinear_cov_result.has_value()) {
443  Acts::BoundSquareMatrix &curvilinear_cov = curvilinear_cov_result.value();
444 
445  // convert q/p components from GeV (Acts) to MeV (Athena)
446  for (unsigned int col_i=0; col_i<4; ++col_i) {
447  curvilinear_cov(col_i,4) *= 1_MeV;
448  curvilinear_cov(4,col_i) *= 1_MeV;
449  }
450  curvilinear_cov(4,4) *= (1_MeV * 1_MeV);
451 
452  std::size_t param_idx = parametersVec.size();
453  // only use the 5x5 sub-matrix of the full covariance matrix
454  lowerTriangleToVector(curvilinear_cov,tmp_cov_vector,5);
455  if (tmp_cov_vector.size() != 15) {
456  ATH_MSG_ERROR("Invalid size of lower triangle cov " << tmp_cov_vector.size() << " != 15"
457  << " input matrix : " << curvilinear_cov.rows() << " x " << curvilinear_cov.cols() );
458  }
459  track_particle->setTrackParameterCovarianceMatrix(param_idx, tmp_cov_vector);
460  }
461  }
462  parametersVec.emplace_back(std::vector<float>{
463  static_cast<float>(position[0]),static_cast<float>(position[1]),static_cast<float>(position[2]),
464  static_cast<float>(momentum[0]),static_cast<float>(momentum[1]),static_cast<float>(momentum[2]) });
465  ++converted_track_states;
466 
467 
468  }
469  for (const std::vector<float> &param : parametersVec) {
470  if (param.size() != 6) {
471  ATH_MSG_ERROR("Invalid size of param element " << param.size() << " != 6" );
472  }
473  }
474 
475  track_particle->setTrackParameters(parametersVec);
476 
477  // add element to link to the correspond track
478  trackLink(*track_particle)
479  = ElementLink<ActsTrk::TrackContainer>( tracksContainer,
480  track.index() );
481  ATH_CHECK( (trackLink(*track_particle)).isValid() );
482  }
483  }
484  ATH_MSG_DEBUG( "Converted " << nTracks << " acts tracks into " << track_particles->size()
485  << " track particles with parameters for " << converted_track_states << " track states.");
486 
487  return StatusCode::SUCCESS;
488  }
489 
490  std::shared_ptr<Acts::PerigeeSurface> TrackToTrackParticleCnvAlg::makePerigeeSurface(const InDet::BeamSpotData *beamspot_data) {
491  // @from TrackToVertex::trackAtBeamline
492  Acts::Vector3 beamspot(0., 0., 0.);
493  float tiltx = 0.0;
494  float tilty = 0.0;
495  if (beamspot_data) {
496  beamspot = Acts::Vector3(beamspot_data->beamVtx().position());
497  tiltx = beamspot_data->beamTilt(0);
498  tilty = beamspot_data->beamTilt(1);
499  }
500  Acts::Translation3 translation(beamspot);
501  Acts::Transform3 transform( translation * Acts::RotationMatrix3::Identity() );
502  transform *= Acts::AngleAxis3(tilty, Acts::Vector3(0.,1.,0.));
503  transform *= Acts::AngleAxis3(tiltx, Acts::Vector3(1.,0.,0.));
504  return Acts::Surface::makeShared<Acts::PerigeeSurface>(transform);
505  }
506 
507  Acts::BoundTrackParameters TrackToTrackParticleCnvAlg::parametersAtBeamLine(const EventContext &ctx,
508  const typename ActsTrk::TrackContainer::ConstTrackProxy &track,
509  const Acts::PerigeeSurface &perigee_surface) const {
510  const Acts::BoundTrackParameters trackParam = track.createParametersAtReference();
511 
512  std::optional<const Acts::BoundTrackParameters>
513  perigeeParam = m_extrapolationTool->propagate(ctx,
514  trackParam,
515  perigee_surface,
516  Acts::Direction::Backward, // @TODO try forward if backward fails ?
518  if (!perigeeParam.has_value()) {
519  ATH_MSG_WARNING( "Failed to extrapolate to perigee, started from \n" << trackParam << " " << trackParam.referenceSurface().name() );
520 
521  return trackParam;
522  }
523  else {
524  ATH_MSG_DEBUG( "Succeeded to extrapolate to perigee ");
525  return perigeeParam.value();
526  }
527  }
528 
529 }
DataVector::reserve
void reserve(size_type n)
Attempt to preallocate enough memory for a specified number of elements.
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
xAOD::neutron
@ neutron
for Fatras usage
Definition: TrackingPrimitives.h:200
xAOD::numberOfPixelHoles
@ numberOfPixelHoles
number of pixel layers on track with absence of hits [unit8_t].
Definition: TrackingPrimitives.h:261
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:195
xAOD::TrackParticle_v1::setTrackFitter
void setTrackFitter(const TrackFitter fitter)
Method for setting the fitter, using the TrackFitter enum.
Definition: TrackParticle_v1.cxx:693
ActsTrk::TrackToTrackParticleCnvAlg::makePerigeeSurface
static std::shared_ptr< Acts::PerigeeSurface > makePerigeeSurface(const InDet::BeamSpotData *beamspotptr)
Definition: TrackToTrackParticleCnvAlg.cxx:490
ActsTrk::detail::convertActsBoundCovToCurvilinearParam
std::optional< Acts::BoundMatrix > convertActsBoundCovToCurvilinearParam(const Acts::GeometryContext &tgContext, const Acts::BoundTrackParameters &param, const Acts::Vector3 &magnFieldVect, const Acts::ParticleHypothesis &particle_hypothesis)
Convert the covariance of the given Acts track parameters into curvilinear parameterisation.
Definition: CurvilinearCovarianceHelper.h:61
ActsTrk::TrackContainer
Definition: TrackContainer.h:31
ActsTrk::TrackToTrackParticleCnvAlg::m_expectIfPixelContributes
Gaudi::Property< bool > m_expectIfPixelContributes
Definition: TrackToTrackParticleCnvAlg.h:90
xAOD::short
short
Definition: Vertex_v1.cxx:165
ActsTrk::detail::SumOfValues
Helper class to gather statistics and compute the biased variance.
Definition: HitSummaryDataUtils.h:235
ActsTrk::detail::gatherTrackSummaryData
void gatherTrackSummaryData(const ActsTrk::TrackContainer &tracksContainer, const typename ActsTrk::TrackContainer::ConstTrackProxy &track, const std::array< const InDetDD::SiDetectorElementCollection *, to_underlying(xAOD::UncalibMeasType::nTypes)> &siDetEleColl, const std::array< unsigned short, to_underlying(xAOD::UncalibMeasType::nTypes)> &measurement_to_summary_type, SumOfValues &chi2_stat_out, HitSummaryData &hit_info_out, std::vector< ActsTrk::TrackStateBackend::ConstTrackStateProxy::IndexType > &param_state_idx_out, std::array< std::array< uint8_t, to_underlying(HitCategory::N)>, to_underlying(xAOD::UncalibMeasType::nTypes)> &special_hit_counts_out)
Helper to gather track summary information from the track states of the specified track.
Definition: HitSummaryDataUtils.cxx:16
ActsTrk::TrackToTrackParticleCnvAlg::initialize
virtual StatusCode initialize() override
Definition: TrackToTrackParticleCnvAlg.cxx:129
ActsTrk::detail::HitSummaryData::contributingHits
uint8_t contributingHits(DetectorRegion region) const
return the number of hits in a certain detector region.
Definition: HitSummaryDataUtils.h:190
InDetDD::SiDetectorElementCollection
Definition: SiDetectorElementCollection.h:30
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
CurvilinearCovarianceHelper.h
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:557
xAOD::electron
@ electron
Definition: TrackingPrimitives.h:194
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
xAOD::TrackParticle_v1::setTrackParameters
void setTrackParameters(std::vector< std::vector< float > > &parameters)
Set the parameters via the passed vector of vectors.
Definition: TrackParticle_v1.cxx:567
AtlasFieldCacheCondObj
Definition: AtlasFieldCacheCondObj.h:19
ActsTrk::TrackToTrackParticleCnvAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: TrackToTrackParticleCnvAlg.cxx:177
ActsGeometryContext.h
ActsTrk::detail::to_underlying
constexpr std::underlying_type< T_EnumClass >::type to_underlying(T_EnumClass an_enum)
Helper to convert class enum into an integer.
Definition: HitSummaryDataUtils.h:25
xAOD::numberOfContribPixelBarrelInclinedLayers
@ numberOfContribPixelBarrelInclinedLayers
number of contributing barrel inclined layers of the pixel detector [unit8_t].
Definition: TrackingPrimitives.h:309
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
xAOD::UncalibMeasType::StripClusterType
@ StripClusterType
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
ActsTrk::TrackToTrackParticleCnvAlg::m_firstAndLastParamOnly
Gaudi::Property< bool > m_firstAndLastParamOnly
Definition: TrackToTrackParticleCnvAlg.h:88
ActsTrk::detail::HitSummaryData::Hit
@ Hit
Definition: HitSummaryDataUtils.h:97
ActsTrk::detail::HitSummaryData::Outlier
@ Outlier
Definition: HitSummaryDataUtils.h:98
ActsTrk::detail::HitSummaryData::pixelEndcap
@ pixelEndcap
Definition: HitSummaryDataUtils.h:46
xAOD::numberOfContribPixelBarrelFlatLayers
@ numberOfContribPixelBarrelFlatLayers
number of contributing barrel flat layers of the pixel detector [unit8_t].
Definition: TrackingPrimitives.h:308
ActsTrk::detail::expectedLayerPattern
std::array< unsigned int, 4 > expectedLayerPattern(const EventContext &ctx, const IActsExtrapolationTool &extrapolator, Acts::BoundTrackParameters perigee_parameters, double pathLimit)
Extrapolate from the perigee outwards and gather information which detector layers should have hits.
Definition: ExpectedHitUtils.cxx:14
SG::ReadCondHandle::isValid
bool isValid()
Definition: ReadCondHandle.h:206
ATLASMagneticFieldWrapper.h
xAOD::pion
@ pion
Definition: TrackingPrimitives.h:196
xAOD::TrackParticle_v1::setDefiningParameters
void setDefiningParameters(float d0, float z0, float phi0, float theta, float qOverP)
Set the defining parameters.
Definition: TrackParticle_v1.cxx:177
HitSummaryDataUtils.h
athena.value
value
Definition: athena.py:124
xAOD::numberOfPixelHits
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:259
xAOD::expectInnermostPixelLayerHit
@ expectInnermostPixelLayerHit
Do we expect a 0th-layer barrel hit for this track?
Definition: TrackingPrimitives.h:236
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:12
InDet::BeamSpotData::beamVtx
const Trk::RecVertex & beamVtx() const noexcept
Definition: BeamSpotData.h:79
xAOD::TrackParticle_v1::setTrackParameterCovarianceMatrix
void setTrackParameterCovarianceMatrix(unsigned int index, std::vector< float > &cov)
Set the cov matrix of the parameter at 'index', using a vector of floats.
Definition: TrackParticle_v1.cxx:638
isValid
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition: AtlasPID.h:620
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
SG::ReadHandleKey< ActsTrk::TrackContainer >
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
xAOD::numberOfInnermostPixelLayerEndcapOutliers
@ numberOfInnermostPixelLayerEndcapOutliers
number of 0th layer endcap outliers
Definition: TrackingPrimitives.h:243
xAOD::TrackParticle_v1::setBeamlineTiltY
void setBeamlineTiltY(float tiltY)
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:270
makeActsAthenaLogger
std::unique_ptr< const Acts::Logger > makeActsAthenaLogger(IMessageSvc *svc, const std::string &name, int level, std::optional< std::string > parent_name)
Definition: Tracking/Acts/ActsInterop/src/Logger.cxx:64
ActsGeometryContext::context
Acts::GeometryContext context() const
Definition: ActsGeometryContext.h:45
xAOD::TrackParticle_v1::setFitQuality
void setFitQuality(float chiSquared, float numberDoF)
Set the 'Fit Quality' information.
Definition: TrackParticle_v1.cxx:534
xAOD::numberOfContribPixelEndcap
@ numberOfContribPixelEndcap
number of contributing endcap layers of the pixel detector [unit8_t].
Definition: TrackingPrimitives.h:310
GeoPrimitives.h
xAOD::numberOfInnermostPixelLayerOutliers
@ numberOfInnermostPixelLayerOutliers
number of 0th layer barrel outliers
Definition: TrackingPrimitives.h:238
xAOD::numberOfInnermostPixelLayerEndcapHits
@ numberOfInnermostPixelLayerEndcapHits
these are the hits in the 0th pixel layer endcap [unit8_t].
Definition: TrackingPrimitives.h:242
AtlasFieldCacheCondObj::getInitializedCache
void getInitializedCache(MagField::AtlasFieldCache &cache) const
get B field cache for evaluation as a function of 2-d or 3-d position.
Definition: AtlasFieldCacheCondObj.h:32
ActsTrk::detail::HitSummaryData
Helper class to gather hit summary information for e.g.
Definition: HitSummaryDataUtils.h:39
ActsTrk::detail::HitSummaryData::contributingOutlierHits
uint8_t contributingOutlierHits(DetectorRegion region) const
return the number of outliers in a certain detector region.
Definition: HitSummaryDataUtils.h:198
ActsTrk::TrackToTrackParticleCnvAlg::Navigator
Acts::Navigator Navigator
Definition: TrackToTrackParticleCnvAlg.h:58
xAOD::SummaryType
SummaryType
Enumerates the different types of information stored in Summary.
Definition: TrackingPrimitives.h:228
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
xAOD::expectNextToInnermostPixelLayerHit
@ expectNextToInnermostPixelLayerHit
Do we expect a 1st-layer barrel hit for this track?
Definition: TrackingPrimitives.h:247
xAOD::numberOfPixelBarrelFlatHits
@ numberOfPixelBarrelFlatHits
these are the pixel hits, in the barrel flat layers [unit8_t].
Definition: TrackingPrimitives.h:311
TrackParticleAuxContainer.h
ParticleGun_EoverP_Config.momentum
momentum
Definition: ParticleGun_EoverP_Config.py:63
ActsTrk::TrackToTrackParticleCnvAlg::initParticleHypothesisMap
static void initParticleHypothesisMap()
Definition: TrackToTrackParticleCnvAlg.cxx:109
SG::Decorator
Helper class to provide type-safe access to aux data.
Definition: Decorator.h:59
lumiFormat.i
int i
Definition: lumiFormat.py:85
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::WriteHandle::ptr
pointer_type ptr()
Dereference the pointer.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
xAOD::covMatrix
covMatrix
Definition: TrackMeasurement_v1.cxx:19
ActsTrk::detail::HitSummaryData::contributingLayers
uint8_t contributingLayers(DetectorRegion region) const
return the number of layers contributing to the hit collection in the given detector region.
Definition: HitSummaryDataUtils.h:182
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
AtlasFieldCache.h
ActsTrk::detail::HitCategory::N
@ N
Definition: HitSummaryDataUtils.h:33
xAOD::numberOfPixelOutliers
@ numberOfPixelOutliers
these are the pixel outliers, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:260
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
detail::ul
unsigned long ul
Definition: PrimitiveHelpers.h:46
xAOD::standardDeviationOfChi2OS
@ standardDeviationOfChi2OS
100 times the standard deviation of the chi2 from the surfaces [unit8_t].
Definition: TrackingPrimitives.h:298
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
Trk::Vertex::position
const Amg::Vector3D & position() const
return position of vertex
Definition: Vertex.cxx:72
ActsTrk::detail::HitSummaryData::pixelBarrelFlat
@ pixelBarrelFlat
Definition: HitSummaryDataUtils.h:44
xAOD::numberOfSCTHoles
@ numberOfSCTHoles
number of SCT holes [unit8_t].
Definition: TrackingPrimitives.h:270
DeMoUpdate.tmp
string tmp
Definition: DeMoUpdate.py:1167
DataVector::back
const T * back() const
Access the last element in the collection as an rvalue.
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
xAOD::TrackParticle_v1::setParticleHypothesis
void setParticleHypothesis(const ParticleHypothesis hypo)
Method for setting the particle type, using the ParticleHypothesis enum.
Definition: TrackParticle_v1.cxx:723
xAOD::numberOfTrackSummaryTypes
@ numberOfTrackSummaryTypes
Definition: TrackingPrimitives.h:319
ActsGeometryContext
Include the GeoPrimitives which need to be put first.
Definition: ActsGeometryContext.h:27
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
xAOD::numberOfNextToInnermostPixelLayerEndcapHits
@ numberOfNextToInnermostPixelLayerEndcapHits
these are the hits in the 0.5th and 1st pixel layer endcap rings [unit8_t].
Definition: TrackingPrimitives.h:253
lumiFormat.array
array
Definition: lumiFormat.py:91
ActsTrk::TrackToTrackParticleCnvAlg::m_trackParticlesOutKey
SG::WriteHandleKey< xAOD::TrackParticleContainer > m_trackParticlesOutKey
Definition: TrackToTrackParticleCnvAlg.h:83
ActsTrk::detail::HitSummaryData::sum
uint8_t sum(DetectorRegion region, uint8_t layer) const
return the total number of hits, outliers or hits+outliers in the givrn detector region and layer.
Definition: HitSummaryDataUtils.h:208
xAOD::UncalibMeasType::nTypes
@ nTypes
xAOD::KalmanFitter
@ KalmanFitter
tracks produced by the Kalman Fitter
Definition: TrackingPrimitives.h:47
xAOD::numberOfNextToInnermostPixelLayerOutliers
@ numberOfNextToInnermostPixelLayerOutliers
number of 1st pixel layer barrel outliers
Definition: TrackingPrimitives.h:249
xAOD::numberOfNextToInnermostPixelLayerHits
@ numberOfNextToInnermostPixelLayerHits
these are the hits in the 1st pixel barrel layer
Definition: TrackingPrimitives.h:248
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
xAOD::proton
@ proton
Definition: TrackingPrimitives.h:198
ActsTrk::TrackToTrackParticleCnvAlg::m_fieldCacheCondObjInputKey
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
Definition: TrackToTrackParticleCnvAlg.h:75
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
WriteCaloSwCorrections.cfg
cfg
Definition: WriteCaloSwCorrections.py:23
xAOD::ParticleHypothesis
ParticleHypothesis
Definition: TrackingPrimitives.h:192
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
xAOD::pi0
@ pi0
for Fatras usage
Definition: TrackingPrimitives.h:201
SiDetectorElement.h
ActsTrk::detail::HitSummaryData::stripTotal
@ stripTotal
Definition: HitSummaryDataUtils.h:51
xAOD::numberOfPixelBarrelInclinedHits
@ numberOfPixelBarrelInclinedHits
these are the pixel hits, in the barrel inclined layers [unit8_t].
Definition: TrackingPrimitives.h:312
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
xAOD::TrackParticle_v1::setDefiningParametersCovMatrixVec
void setDefiningParametersCovMatrixVec(const std::vector< float > &cov)
Definition: TrackParticle_v1.cxx:460
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
xAOD::TrackParticle_v1::setSummaryValue
void setSummaryValue(uint8_t &value, const SummaryType &information)
Set method for TrackSummary values.
Definition: TrackParticle_v1.cxx:752
ActsTrk::detail::HitSummaryData::pixelBarrelInclined
@ pixelBarrelInclined
Definition: HitSummaryDataUtils.h:45
xAOD::numberOfOutliersOnTrack
@ numberOfOutliersOnTrack
number of measurements flaged as outliers in TSOS [unit8_t].
Definition: TrackingPrimitives.h:297
InDet::BeamSpotData
Definition: BeamSpotData.h:21
xAOD::photon
@ photon
Definition: TrackingPrimitives.h:199
ActsTrk::TrackToTrackParticleCnvAlg::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: TrackToTrackParticleCnvAlg.h:73
ActsTrk::TrackToTrackParticleCnvAlg::Stepper
Acts::EigenStepper<> Stepper
Definition: TrackToTrackParticleCnvAlg.h:57
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
xAOD::numberOfSCTOutliers
@ numberOfSCTOutliers
number of SCT outliers [unit8_t].
Definition: TrackingPrimitives.h:269
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ActsTrk::detail::SumOfValues::biasedVariance
double biasedVariance() const
Definition: HitSummaryDataUtils.h:256
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
xAOD::numberOfNextToInnermostPixelLayerEndcapOutliers
@ numberOfNextToInnermostPixelLayerEndcapOutliers
number of 1st layer endcap disk outliers
Definition: TrackingPrimitives.h:254
MagField::AtlasFieldCache
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
Definition: AtlasFieldCache.h:43
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
ActsTrk::TrackToTrackParticleCnvAlg::m_pixelExpectLayerPathLimitInMM
Gaudi::Property< double > m_pixelExpectLayerPathLimitInMM
Definition: TrackToTrackParticleCnvAlg.h:93
xAOD::SiSPSeededFinder
@ SiSPSeededFinder
Tracks from SiSPSeedFinder.
Definition: TrackingPrimitives.h:85
MagField::AtlasFieldCache::getField
void getField(const double *ATH_RESTRICT xyz, double *ATH_RESTRICT bxyz, double *ATH_RESTRICT deriv=nullptr)
get B field value at given position xyz[3] is in mm, bxyz[3] is in kT if deriv[9] is given,...
Definition: AtlasFieldCache.cxx:42
ActsTrk::TrackToTrackParticleCnvAlg::m_propagator
std::unique_ptr< Propagator > m_propagator
Definition: TrackToTrackParticleCnvAlg.h:96
xAOD::numberOfContribPixelLayers
@ numberOfContribPixelLayers
number of contributing layers of the pixel detector [unit8_t].
Definition: TrackingPrimitives.h:230
xAOD::numberOfSCTHits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
Definition: TrackingPrimitives.h:268
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:54
xAOD::numberOfPixelEndcapHits
@ numberOfPixelEndcapHits
these are the pixel hits, in the endcap layers [unit8_t].
Definition: TrackingPrimitives.h:313
ActsTrk::TrackToTrackParticleCnvAlg::m_tracksContainerKey
SG::ReadHandleKeyArray< ActsTrk::TrackContainer > m_tracksContainerKey
Definition: TrackToTrackParticleCnvAlg.h:71
ActsTrk::TrackToTrackParticleCnvAlg::m_paramExtrapolationParLimit
Gaudi::Property< double > m_paramExtrapolationParLimit
Definition: TrackToTrackParticleCnvAlg.h:86
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
ActsTrk::TrackToTrackParticleCnvAlg::parametersAtBeamLine
Acts::BoundTrackParameters parametersAtBeamLine(const EventContext &ctx, const typename ActsTrk::TrackContainer::ConstTrackProxy &track, const Acts::PerigeeSurface &perigee_surface) const
Definition: TrackToTrackParticleCnvAlg.cxx:507
ActsTrk::TrackToTrackParticleCnvAlg::m_extrapolationTool
ToolHandle< IActsExtrapolationTool > m_extrapolationTool
Definition: TrackToTrackParticleCnvAlg.h:68
ActsTrk::detail::HitCategory::Hole
@ Hole
Definition: HitSummaryDataUtils.h:32
ActsTrk::detail::HitSummaryData::pixelTotal
@ pixelTotal
Definition: HitSummaryDataUtils.h:50
ActsTrk::TrackToTrackParticleCnvAlg::m_siDetEleCollToMeasurementType
Gaudi::Property< std::vector< unsigned int > > m_siDetEleCollToMeasurementType
Definition: TrackToTrackParticleCnvAlg.h:80
TrackToTrackParticleCnvAlg.h
Logger.h
ActsTrk::TrackToTrackParticleCnvAlg::ATLAS_THREAD_SAFE
static std::vector< std::pair< Acts::PdgParticle, xAOD::ParticleHypothesis > > s_actsHypothesisToxAOD ATLAS_THREAD_SAFE
Definition: TrackToTrackParticleCnvAlg.h:98
ActsTrk::detail::HitSummaryData::DetectorRegion
DetectorRegion
Regions for which hit counts are computed.
Definition: HitSummaryDataUtils.h:43
ActsTrk::TrackToTrackParticleCnvAlg::m_siDetEleCollKey
SG::ReadCondHandleKeyArray< InDetDD::SiDetectorElementCollection > m_siDetEleCollKey
Definition: TrackToTrackParticleCnvAlg.h:78
ExpectedHitUtils.h
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
Decorator.h
Helper class to provide type-safe access to aux data.
xAOD::TrackParticle_v1::setBeamlineTiltX
void setBeamlineTiltX(float tiltX)
python.iconfTool.gui.pad.logger
logger
Definition: pad.py:14
IActsTrackingGeometryTool.h
ActsTrk::TrackToTrackParticleCnvAlg::convertParticleHypothesis
static xAOD::ParticleHypothesis convertParticleHypothesis(Acts::PdgParticle abs_pdg_id)
Definition: TrackToTrackParticleCnvAlg.h:105
xAOD::UncalibMeasType::PixelClusterType
@ PixelClusterType
xAOD::numberOfInnermostPixelLayerHits
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
Definition: TrackingPrimitives.h:237
InDet::BeamSpotData::beamTilt
float beamTilt(int i) const noexcept
Returns the beam sigma for the i+3-th error matrix element (the 'tilt')
Definition: BeamSpotData.h:74
xAOD::TrackParticle_v1::setPatternRecognitionInfo
void setPatternRecognitionInfo(const std::bitset< xAOD::NumberOfTrackRecoInfo > &patternReco)
Method setting the pattern recognition algorithm, using a bitset.
Definition: TrackParticle_v1.cxx:718
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
SG::ReadCondHandle::cptr
const_pointer_type cptr()
Definition: ReadCondHandle.h:67
ActsTrk::TrackToTrackParticleCnvAlg::TrackToTrackParticleCnvAlg
TrackToTrackParticleCnvAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TrackToTrackParticleCnvAlg.cxx:123