ATLAS Offline Software
TrackStatePrinter.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef ACTSTRACKRECONSTRUCTION_TRACKSTATEPRINTER_H
6 #define ACTSTRACKRECONSTRUCTION_TRACKSTATEPRINTER_H 1
7 
8 // Base
10 
11 // ATHENA
13 #include "GaudiKernel/EventContext.h"
17 
18 // ACTS CORE
19 #include "Acts/Geometry/TrackingGeometry.hpp"
20 #include "Acts/EventData/TrackParameters.hpp"
21 #include "Acts/EventData/TrackStateType.hpp"
22 
23 // PACKAGE
25 #include "ActsEvent/Seed.h"
31 
32 // Other
33 #include <vector>
34 #include <memory>
35 #include <tuple>
36 #include <boost/container/small_vector.hpp>
37 
38 namespace Acts
39 {
40  class Surface;
41 }
42 
43 namespace InDetDD
44 {
45  class SiDetectorElementCollection;
46 }
47 
48 namespace ActsTrk
49 {
50  class TrackStatePrinter : virtual public AthAlgTool
51  {
52  public:
53  TrackStatePrinter(const std::string &type, const std::string &name,
54  const IInterface *parent);
55  virtual ~TrackStatePrinter() = default;
56 
57  // standard Athena methods
58  virtual StatusCode initialize() override;
59 
60  void
61  printMeasurements(const EventContext &ctx,
62  const std::vector<const xAOD::UncalibratedMeasurementContainer *> &clusterContainers,
63  const std::vector<const InDetDD::SiDetectorElementCollection *> &detectorElementCollections,
64  const std::vector<size_t> &offsets) const;
65 
66  void
67  printSeed(const Acts::GeometryContext &tgContext,
68  const ActsTrk::Seed &seed,
69  const Acts::BoundTrackParameters &initialParameters,
70  size_t measurementOffset,
71  size_t iseed,
72  bool isKF) const;
73 
74  template <typename track_container_t>
75  void
76  printTrack(const Acts::GeometryContext &tgContext,
77  const track_container_t &tracks,
78  const typename track_container_t::TrackProxy &track,
79  const std::vector<std::pair<const xAOD::UncalibratedMeasurementContainer *, size_t>> &offset) const;
80 
81  template <typename track_state_proxy_t>
82  void
83  printTrackState(const Acts::GeometryContext &tgContext,
84  const track_state_proxy_t &state,
85  const std::vector<std::pair<const xAOD::UncalibratedMeasurementContainer *, size_t>> &container_offset,
86  bool useFiltered = false) const;
87 
88  using MeasurementInfo = std::tuple<size_t,
89  const ATLASUncalibSourceLink *,
90  std::vector<const xAOD::SpacePoint *>>;
91 
92  private:
93  // Handles
94  SG::ReadHandleKeyArray<xAOD::SpacePointContainer> m_spacePointKey{this, "InputSpacePoints", {}, "Input Space Points for debugging"};
95 
96  // Tools
97  ToolHandle<IActsTrackingGeometryTool> m_trackingGeometryTool{this, "TrackingGeometryTool", ""};
98  ToolHandle<ActsTrk::IActsToTrkConverterTool> m_ATLASConverterTool{this, "ATLASConverterTool", ""};
99 
100  // Configuration
101  Gaudi::Property<bool> m_compareMeasurementTransforms{this, "compareMeasurementTransforms", false, "compare measurement coordinates transformed with Athena or ACTS"};
102  Gaudi::Property<bool> m_printFilteredStates{this, "printFilteredStates", false, "print track states during filtering"};
103 
104  // most measurements are associated to only one SP, but allow some headroom to reduce number of allocations
105  static constexpr unsigned int N_SP_PER_MEAS = 2;
106  template <class T>
107  using small_vector = boost::container::small_vector<T, N_SP_PER_MEAS>;
108 
109  std::vector<std::vector<small_vector<const xAOD::SpacePoint *>>>
110  addSpacePoints(const EventContext &ctx,
111  const std::vector<const xAOD::UncalibratedMeasurementContainer *> &clusterContainers,
112  const std::vector<size_t> &offset) const;
113 
114  void
115  printMeasurementAssociatedSpacePoint(const Acts::GeometryContext &tgContext,
116  const xAOD::UncalibratedMeasurement *measurement,
117  const std::vector<small_vector<const xAOD::SpacePoint *>> &measToSp,
118  const InDetDD::SiDetectorElementCollection *detectorElements,
119  size_t offset) const;
120 
121  // static member functions used by TrackStatePrinter.icc
122  static void printParameters(const Acts::Surface &surface, const Acts::GeometryContext &tgContext, const Acts::BoundVector &bound);
123  static std::string actsSurfaceName(const Acts::Surface &surface);
124  static std::string trackStateName(Acts::ConstTrackStateType trackStateType);
125 
126  };
127 
128 } // namespace
129 
130 #include "src/TrackStatePrinter.icc"
131 
132 #endif
ReadHandleKeyArray.h
ActsTrk::TrackStatePrinter::actsSurfaceName
static std::string actsSurfaceName(const Acts::Surface &surface)
Definition: TrackStatePrinter.cxx:59
ActsTrk::TrackStatePrinter::m_compareMeasurementTransforms
Gaudi::Property< bool > m_compareMeasurementTransforms
Definition: TrackStatePrinter.h:101
InDetDD::SiDetectorElementCollection
Definition: SiDetectorElementCollection.h:30
ActsGeometryContext.h
ActsTrk::TrackStatePrinter::addSpacePoints
std::vector< std::vector< small_vector< const xAOD::SpacePoint * > > > addSpacePoints(const EventContext &ctx, const std::vector< const xAOD::UncalibratedMeasurementContainer * > &clusterContainers, const std::vector< size_t > &offset) const
Definition: TrackStatePrinter.cxx:491
ActsTrk::TrackStatePrinter::printMeasurementAssociatedSpacePoint
void printMeasurementAssociatedSpacePoint(const Acts::GeometryContext &tgContext, const xAOD::UncalibratedMeasurement *measurement, const std::vector< small_vector< const xAOD::SpacePoint * >> &measToSp, const InDetDD::SiDetectorElementCollection *detectorElements, size_t offset) const
Definition: TrackStatePrinter.cxx:324
ActsTrk::Seed
Acts::Seed< xAOD::SpacePoint > Seed
Definition: Seed.h:13
Surface
Definition: Trigger/TrigAccel/TrigCudaFitter/src/Surface.h:7
ActsTrk::TrackStatePrinter::printTrackState
void printTrackState(const Acts::GeometryContext &tgContext, const track_state_proxy_t &state, const std::vector< std::pair< const xAOD::UncalibratedMeasurementContainer *, size_t >> &container_offset, bool useFiltered=false) const
ActsTrk::TrackStatePrinter::m_trackingGeometryTool
ToolHandle< IActsTrackingGeometryTool > m_trackingGeometryTool
Definition: TrackStatePrinter.h:97
ActsTrk::TrackStatePrinter::m_spacePointKey
SG::ReadHandleKeyArray< xAOD::SpacePointContainer > m_spacePointKey
Definition: TrackStatePrinter.h:94
bound
@ bound
Definition: L1CaloPprPlotManager.h:74
SG::HandleKeyArray
Definition: StoreGate/StoreGate/HandleKeyArray.h:38
ActsTrk::TrackStatePrinter::small_vector
boost::container::small_vector< T, N_SP_PER_MEAS > small_vector
Definition: TrackStatePrinter.h:107
GeoPrimitives.h
ActsTrk::TrackStatePrinter::~TrackStatePrinter
virtual ~TrackStatePrinter()=default
ActsTrk::TrackStatePrinter
Definition: TrackStatePrinter.h:51
xAOD::UncalibratedMeasurement_v1
Definition: UncalibratedMeasurement_v1.h:13
Acts
Definition: MultiTrajectory.h:45
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
AthAlgTool.h
UncalibratedMeasurementContainer.h
ActsTrk::TrackStatePrinter::TrackStatePrinter
TrackStatePrinter(const std::string &type, const std::string &name, const IInterface *parent)
=========================================================================
Definition: TrackStatePrinter.cxx:406
test_pyathena.parent
parent
Definition: test_pyathena.py:15
SpacePoint.h
ActsTrk::TrackStatePrinter::MeasurementInfo
std::tuple< size_t, const ATLASUncalibSourceLink *, std::vector< const xAOD::SpacePoint * > > MeasurementInfo
Definition: TrackStatePrinter.h:90
ActsTrk::TrackStatePrinter::N_SP_PER_MEAS
static constexpr unsigned int N_SP_PER_MEAS
Definition: TrackStatePrinter.h:105
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
Seed.h
ActsTrk::TrackStatePrinter::printSeed
void printSeed(const Acts::GeometryContext &tgContext, const ActsTrk::Seed &seed, const Acts::BoundTrackParameters &initialParameters, size_t measurementOffset, size_t iseed, bool isKF) const
Definition: TrackStatePrinter.cxx:427
ActsTrk::TrackStatePrinter::printMeasurements
void printMeasurements(const EventContext &ctx, const std::vector< const xAOD::UncalibratedMeasurementContainer * > &clusterContainers, const std::vector< const InDetDD::SiDetectorElementCollection * > &detectorElementCollections, const std::vector< size_t > &offsets) const
Definition: TrackStatePrinter.cxx:467
TrackStatePrinter.icc
ActsTrk::TrackStatePrinter::m_ATLASConverterTool
ToolHandle< ActsTrk::IActsToTrkConverterTool > m_ATLASConverterTool
Definition: TrackStatePrinter.h:98
ActsTrk::TrackStatePrinter::m_printFilteredStates
Gaudi::Property< bool > m_printFilteredStates
Definition: TrackStatePrinter.h:102
SpacePointContainer.h
ActsTrk::TrackStatePrinter::initialize
virtual StatusCode initialize() override
Definition: TrackStatePrinter.cxx:413
ActsTrk::TrackStatePrinter::printParameters
static void printParameters(const Acts::Surface &surface, const Acts::GeometryContext &tgContext, const Acts::BoundVector &bound)
Definition: TrackStatePrinter.cxx:387
InDetDD
Message Stream Member.
Definition: FakeTrackBuilder.h:8
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
ActsTrk::TrackStatePrinter::trackStateName
static std::string trackStateName(Acts::ConstTrackStateType trackStateType)
========================================================================= file-local static functions...
Definition: TrackStatePrinter.cxx:39
convertTimingResiduals.offset
offset
Definition: convertTimingResiduals.py:71
IActsToTrkConverterTool.h
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:34
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
AthAlgTool
Definition: AthAlgTool.h:26
TrackContainer.h
IActsTrackingGeometryTool.h
ActsTrk::TrackStatePrinter::printTrack
void printTrack(const Acts::GeometryContext &tgContext, const track_container_t &tracks, const typename track_container_t::TrackProxy &track, const std::vector< std::pair< const xAOD::UncalibratedMeasurementContainer *, size_t >> &offset) const