ATLAS Offline Software
DistributedKalmanFilter.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // DistributedKalmanFilter.h
7 // Header file for class DistributedKalmanFilter
9 // (c) ATLAS Detector software
11 // Author: Dmitry Emeliyanov, RAL
12 // D.Emeliyanov@rl.ac.uk
14 #ifndef __TRK_DISTRIBUTED_KALMAN_FILTER__
15 #define __TRK_DISTRIBUTED_KALMAN_FILTER__
16 
18 #include "GaudiKernel/EventContext.h"
19 #include "GaudiKernel/ToolHandle.h"
23 
28 
29 #include <memory>
30 #include <vector>
31 class IAlgTool;
32 class AtlasDetectorID;
33 
34 namespace Trk {
35 
36 class Track;
37 class TrkBaseNode;
38 class TrkTrackState;
39 class TrkPlanarSurface;
40 class TrackStateOnSurface;
41 class MeasuredPerigee;
42 
44  : virtual public ITrackFitter
45  , public AthAlgTool
46 {
47 public:
48  // standard AlgTool methods
49  DistributedKalmanFilter(const std::string&,
50  const std::string&,
51  const IInterface*);
53 
54  // standard Athena methods
55  virtual StatusCode initialize() override;
56  virtual StatusCode finalize() override;
57 
58  // Filter settings:
59  // RunOutlierRemoval - use logic to remove bad hits
60  // ParticleHypothesis - allow for multiple scattering and
61  //energy loss?
62 
63 
64  virtual std::unique_ptr<Track> fit(
65  const EventContext& ctx,
66  const Track&,
67  const RunOutlierRemoval runOutlier = false,
68  const ParticleHypothesis matEffects = Trk::nonInteracting) const override;
69 
70  virtual std::unique_ptr<Track> fit(const EventContext&,
71  const Track&,
72  const PrepRawDataSet&,
73  const RunOutlierRemoval,
74  const ParticleHypothesis) const override
75  {
76  return nullptr;
77  }
78 
79  // fit a set of PrepRawData objects
80  virtual std::unique_ptr<Track> fit(
81  const EventContext& ctx,
82  const PrepRawDataSet&,
83  const TrackParameters& estimatedParametersNearOrigine,
84  const RunOutlierRemoval runOutlier = false,
85  const ParticleHypothesis matEffects = Trk::nonInteracting) const override;
86 
87  virtual std::unique_ptr<Track> fit(
88  const EventContext& ctx,
89  const MeasurementSet&,
90  const TrackParameters& estim,
91  const RunOutlierRemoval runo = false,
92  const ParticleHypothesis mat = Trk::nonInteracting) const override;
93 
94  virtual std::unique_ptr<Track> fit(
95  const EventContext& ctx,
96  const Track&,
97  const MeasurementSet&,
98  const RunOutlierRemoval runOutlier = false,
99  const ParticleHypothesis matEffects = Trk::nonInteracting) const override;
100 
101 
102  virtual std::unique_ptr<Track> fit(const EventContext&,
103  const Track&,
104  const Track&,
105  const RunOutlierRemoval,
106  const ParticleHypothesis) const override
107  {
108  return nullptr;
109  }
110 
111  // fit a set of RIO_OnTrack objects
112  std::unique_ptr<Track> fit(
113  const EventContext& ctx,
114  const RIO_OnTrackSet&,
115  const TrackParameters& estimatedParametersNearOrigine,
116  const RunOutlierRemoval runOutlier = false,
117  const ParticleHypothesis matEffects = Trk::nonInteracting) const;
118 
119 private:
120  using PVPNodes = std::vector<std::unique_ptr<TrkBaseNode> >;
121  using PVPSurfaces = std::vector<std::unique_ptr<TrkPlanarSurface> >;
122  using PVPTrackStates = std::vector<std::unique_ptr<TrkTrackState> >;
123 
125  // Private functions:
127 
128  std::unique_ptr<Trk::TrkTrackState>
132  MagField::AtlasFieldCache& fieldCache) const;
133 
134  bool runForwardKalmanFilter(PVPNodes& pvpNodes,
135  PVPTrackStates& pvpTrackStates,
136  TrkTrackState*,
137  MagField::AtlasFieldCache& fieldCache) const;
138  static void runSmoother(PVPTrackStates& pvpTrackStates) ;
139  static int findOutliers(PVPNodes& pvpNodes, double) ;
140  static void calculateLRsolution(PVPNodes& pvpNodes) ;
142  void report();
143  void report(char fileName[]);
144  void getMagneticField(double[3],
145  double*,
146  MagField::AtlasFieldCache& fieldCache) const;
147 
148 
149  double integrate(double Rk[5],
150  TrkPlanarSurface* pSB,
151  TrkPlanarSurface* pSE,
152  double* Rf,
153  MagField::AtlasFieldCache& fieldCache) const;
154 
156  // Private data:
158 
160 
161  ToolHandle<IRIO_OnTrackCreator> m_ROTcreator{
162  this,
163  "ROTcreator",
164  "Trk::RIO_OnTrackCreator/RIO_OnTrackCreator",
165  "ROT Creator Tool"
166  };
167  ToolHandle<IExtrapolator> m_extrapolator{ this,
168  "ExtrapolatorTool",
169  "Trk::Extrapolator/Extrapolator",
170  "Extrapolator Tool" };
171 
173  this,
174  "AtlasFieldCacheCondObj",
175  "fieldCondObj",
176  "Name of the Magnetic Field conditions object key"
177  };
178 
179  // ME temporary fix
180  std::vector<double> m_option_sortingRefPoint;
181 };
182 
183 inline void
185  double gP[3],
186  double* pB,
187  MagField::AtlasFieldCache& fieldCache) const
188 {
189  pB[0] = 0.0;
190  pB[1] = 0.0;
191  pB[2] = 0.0;
192  double field[3];
193  fieldCache.getField(gP, field); // field is returned in kT
194  for (int i = 0; i < 3; i++)
195  pB[i] = field[i] / Gaudi::Units::kilogauss; // convert to kG
196 }
197 
198 } // end of namespace
199 
200 #endif
Trk::DistributedKalmanFilter::getMagneticField
void getMagneticField(double[3], double *, MagField::AtlasFieldCache &fieldCache) const
Definition: DistributedKalmanFilter.h:184
Trk::RIO_OnTrackSet
std::vector< const RIO_OnTrack * > RIO_OnTrackSet
vector of detector hits on a track
Definition: FitterTypes.h:34
Trk::PrepRawDataSet
std::vector< const PrepRawData * > PrepRawDataSet
vector of clusters and drift circles
Definition: FitterTypes.h:26
Trk::DistributedKalmanFilter::report
void report()
TrkTrackState
Definition: Trigger/TrigAccel/TrigCudaFitter/src/TrkTrackState.h:17
Trk::DistributedKalmanFilter::createTrackStateOnSurface
TrackStateOnSurface * createTrackStateOnSurface(TrkBaseNode *) const
Definition: DistributedKalmanFilter.cxx:781
Trk::DistributedKalmanFilter::fit
virtual std::unique_ptr< Track > fit(const EventContext &, const Track &, const Track &, const RunOutlierRemoval, const ParticleHypothesis) const override
COMBINE TWO TRACKS BY REFITTING.
Definition: DistributedKalmanFilter.h:102
AtlasFieldCacheCondObj.h
mat
GeoMaterial * mat
Definition: LArDetectorConstructionTBEC.cxx:53
IRIO_OnTrackCreator.h
Trk::TrkTrackState
Definition: Tracking/TrkFitter/TrkDistributedKalmanFilter/TrkDistributedKalmanFilter/TrkTrackState.h:24
Trk::TrkPlanarSurface
Definition: Tracking/TrkFitter/TrkDistributedKalmanFilter/TrkDistributedKalmanFilter/TrkPlanarSurface.h:25
python.SystemOfUnits.kilogauss
int kilogauss
Definition: SystemOfUnits.py:231
Trk::DistributedKalmanFilter::report
void report(char fileName[])
Trk::DistributedKalmanFilter::calculateLRsolution
static void calculateLRsolution(PVPNodes &pvpNodes)
Definition: DistributedKalmanFilter.cxx:761
Trk::DistributedKalmanFilter::initialize
virtual StatusCode initialize() override
Definition: DistributedKalmanFilter.cxx:146
IExtrapolator.h
FitterTypes.h
ReadOfcFromCool.field
field
Definition: ReadOfcFromCool.py:48
Trk::DistributedKalmanFilter::m_option_sortingRefPoint
std::vector< double > m_option_sortingRefPoint
Definition: DistributedKalmanFilter.h:180
Trk::ITrackFitter
Definition: ITrackFitter.h:42
Trk::DistributedKalmanFilter::DistributedKalmanFilter
DistributedKalmanFilter(const std::string &, const std::string &, const IInterface *)
Definition: DistributedKalmanFilter.cxx:131
Trk::RunOutlierRemoval
bool RunOutlierRemoval
switch to toggle quality processing after fit
Definition: FitterTypes.h:22
Trk::DistributedKalmanFilter::integrate
double integrate(double Rk[5], TrkPlanarSurface *pSB, TrkPlanarSurface *pSE, double *Rf, MagField::AtlasFieldCache &fieldCache) const
Definition: DistributedKalmanFilter.cxx:225
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:25
Trk::DistributedKalmanFilter::m_fieldCacheCondObjInputKey
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
Definition: DistributedKalmanFilter.h:172
TrkPlanarSurface
Definition: Trigger/TrigAccel/TrigCudaFitter/src/TrkPlanarSurface.h:15
Trk::DistributedKalmanFilter
Definition: DistributedKalmanFilter.h:46
FortranAlgorithmOptions.fileName
fileName
Definition: FortranAlgorithmOptions.py:13
Trk::DistributedKalmanFilter::finalize
virtual StatusCode finalize() override
Definition: DistributedKalmanFilter.cxx:160
lumiFormat.i
int i
Definition: lumiFormat.py:92
Trk::DistributedKalmanFilter::runForwardKalmanFilter
bool runForwardKalmanFilter(PVPNodes &pvpNodes, PVPTrackStates &pvpTrackStates, TrkTrackState *, MagField::AtlasFieldCache &fieldCache) const
Definition: DistributedKalmanFilter.cxx:717
Trk::TrkBaseNode
Definition: Tracking/TrkFitter/TrkDistributedKalmanFilter/TrkDistributedKalmanFilter/TrkBaseNode.h:23
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
AthAlgTool.h
Trk::DistributedKalmanFilter::findOutliers
static int findOutliers(PVPNodes &pvpNodes, double)
Definition: DistributedKalmanFilter.cxx:767
Trk::DistributedKalmanFilter::m_ROTcreator
ToolHandle< IRIO_OnTrackCreator > m_ROTcreator
Definition: DistributedKalmanFilter.h:161
Trk::ParametersBase
Definition: ParametersBase.h:55
ParticleHypothesis.h
ReadCondHandleKey.h
Trk::MeasurementSet
std::vector< const MeasurementBase * > MeasurementSet
vector of fittable measurements
Definition: FitterTypes.h:30
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::TrackStateOnSurface
represents the track state (measurement, material, fit parameters and quality) at a surface.
Definition: TrackStateOnSurface.h:71
Trk::DistributedKalmanFilter::m_extrapolator
ToolHandle< IExtrapolator > m_extrapolator
Definition: DistributedKalmanFilter.h:167
Trk::nonInteracting
@ nonInteracting
Definition: ParticleHypothesis.h:25
TrkBaseNode
Definition: Trigger/TrigAccel/TrigCudaFitter/src/TrkBaseNode.h:18
Trk::DistributedKalmanFilter::~DistributedKalmanFilter
virtual ~DistributedKalmanFilter()
SG::ReadCondHandleKey< AtlasFieldCacheCondObj >
Trk::DistributedKalmanFilter::runSmoother
static void runSmoother(PVPTrackStates &pvpTrackStates)
Definition: DistributedKalmanFilter.cxx:755
MagField::AtlasFieldCache
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
Definition: AtlasFieldCache.h:43
Trk::DistributedKalmanFilter::fit
virtual std::unique_ptr< Track > fit(const EventContext &, const Track &, const PrepRawDataSet &, const RunOutlierRemoval, const ParticleHypothesis) const override
RE-FIT A TRACK, ADDING A PRD SET.
Definition: DistributedKalmanFilter.h:70
Trk::DistributedKalmanFilter::fit
virtual std::unique_ptr< Track > fit(const EventContext &ctx, const Track &, const RunOutlierRemoval runOutlier=false, const ParticleHypothesis matEffects=Trk::nonInteracting) const override
RE-FIT A TRACK.
Definition: DistributedKalmanFilter.cxx:176
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
Track
Definition: TriggerChamberClusterOnTrackCreator.h:21
Trk::DistributedKalmanFilter::m_idHelper
const AtlasDetectorID * m_idHelper
Definition: DistributedKalmanFilter.h:159
Trk::DistributedKalmanFilter::PVPTrackStates
std::vector< std::unique_ptr< TrkTrackState > > PVPTrackStates
Definition: DistributedKalmanFilter.h:122
Trk::DistributedKalmanFilter::PVPNodes
std::vector< std::unique_ptr< TrkBaseNode > > PVPNodes
Definition: DistributedKalmanFilter.h:120
AthAlgTool
Definition: AthAlgTool.h:26
Trk::MeasuredPerigee
Perigee MeasuredPerigee
Definition: MeasuredPerigeeCnv_p1.h:23
ITrackFitter.h
Trk::DistributedKalmanFilter::extrapolate
std::unique_ptr< Trk::TrkTrackState > extrapolate(TrkTrackState *, TrkPlanarSurface *, TrkPlanarSurface *, MagField::AtlasFieldCache &fieldCache) const
Definition: DistributedKalmanFilter.cxx:315
AtlasDetectorID
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
Definition: AtlasDetectorID.h:57
Trk::DistributedKalmanFilter::PVPSurfaces
std::vector< std::unique_ptr< TrkPlanarSurface > > PVPSurfaces
Definition: DistributedKalmanFilter.h:121