Juggler
Juggling algorithms and event processing using gaudi framework
GenFitTrackFitter.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: LGPL-3.0-or-later
2 // Copyright (C) 2022 Whitney Armstrong
3 
4 #ifndef JUGGLER_JUGRECO_GenFitTrackFitter_HH
5 #define JUGGLER_JUGRECO_GenFitTrackFitter_HH
6 
7 #include <functional>
8 #include <stdexcept>
9 #include <vector>
10 
11 // Gaudi
12 #include "GaudiAlg/GaudiAlgorithm.h"
13 #include "GaudiKernel/ToolHandle.h"
14 #include "Gaudi/Property.h"
15 
16 #include "JugBase/DataHandle.h"
17 #include "JugBase/IGeoSvc.h"
21 #include "JugTrack/Track.hpp"
22 #include "JugTrack/Measurement.hpp"
24 #include "JugTrack/ProtoTrack.hpp"
25 
26 #include "eicd/TrackerHitCollection.h"
27 #include "eicd/TrajectoryCollection.h"
28 #include "eicd/TrackParametersCollection.h"
29 
30 //genfitk
31 #include "FieldManager.h"
32 
33 #include <random>
34 #include <stdexcept>
35 
36 namespace Jug::Reco {
37 
38 
39  /** Genfit based tracking algorithm.
40  *
41  * \ingroup tracking
42  */
43  class GenFitTrackFitter : public GaudiAlgorithm {
44  public:
45 
46  class FieldImp : public genfit::AbsBField {
47  protected:
48  dd4hep::Detector* m_detector;
49  public:
50  FieldImp(dd4hep::Detector* det): m_detector(det) {}
51  virtual ~FieldImp() {}
52 
53  /** Get the magneticField [kGauss] at position.
54  *
55  * Note that tgeo units are used. [cm] and [kGauss].
56  */
57  TVector3 get(const TVector3& position) const override {
58  double pos[3] = {position.x(), position.y(), position.z()};
59  double field[3];
60  this->get(pos[0], pos[1], pos[2], field[0], field[1], field[2]);
61  return {field[0], field[1], field[2]};
62  }
63 
64  /** Get the magneticField [kGauss] at position.
65  *
66  * Note that tgeo units are used. [cm] and [kGauss].
67  */
68  void get(const double& posX, const double& posY, const double& posZ,
69  double& Bx, double& By, double& Bz) const override {
70  dd4hep::Position pos(posX,posY,posZ);
71  auto field = m_detector->field().magneticField(pos) * (dd4hep::kilogauss / dd4hep::tesla);
72  Bx = field.x();
73  By = field.y();
74  Bz = field.z();
75  //return {field.x(), field.y(),field.z()};
76  }
77  };
78 
79 public:
80  DataHandle<eicd::TrackerHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader, this};
81  DataHandle<TrackParametersContainer> m_initialTrackParameters{"initialTrackParameters", Gaudi::DataHandle::Reader, this};
82  DataHandle<ProtoTrackContainer> m_inputProtoTracks{"inputProtoTracks", Gaudi::DataHandle::Reader, this};
83  DataHandle<eicd::TrackParametersCollection> m_foundTracks{"trackParameters", Gaudi::DataHandle::Reader, this};
84  DataHandle<eicd::TrajectoryCollection> m_outputTrajectories{"outputTrajectories", Gaudi::DataHandle::Writer, this};
85 
86  SmartIF<IGeoSvc> m_geoSvc;
87  // Acts::GeometryContext m_geoctx;
88  // Acts::CalibrationContext m_calibctx;
89  // Acts::MagneticFieldContext m_fieldctx;
90 
91  std::map<int64_t, std::shared_ptr<genfit::DetPlane>> m_detPlaneMap;
92  std::map<int64_t, dd4hep::rec::Surface*> m_surfaceMap;
93 
94  GenFitTrackFitter(const std::string& name, ISvcLocator* svcLoc);
95 
96  StatusCode initialize() override;
97  StatusCode execute() override;
98  };
99 
100 
101 } // namespace Jug::Reco
102 
103 #endif
Jug::Reco::GenFitTrackFitter::m_surfaceMap
std::map< int64_t, dd4hep::rec::Surface * > m_surfaceMap
Definition: GenFitTrackFitter.h:92
Jug::Reco::GenFitTrackFitter::m_detPlaneMap
std::map< int64_t, std::shared_ptr< genfit::DetPlane > > m_detPlaneMap
Definition: GenFitTrackFitter.h:91
IGeoSvc.h
Jug::Reco::GenFitTrackFitter::FieldImp::get
void get(const double &posX, const double &posY, const double &posZ, double &Bx, double &By, double &Bz) const override
Definition: GenFitTrackFitter.h:68
Jug::Reco::GenFitTrackFitter::m_initialTrackParameters
DataHandle< TrackParametersContainer > m_initialTrackParameters
Definition: GenFitTrackFitter.h:81
Jug::Reco::GenFitTrackFitter::FieldImp::m_detector
dd4hep::Detector * m_detector
Definition: GenFitTrackFitter.h:48
Jug::Reco::GenFitTrackFitter::m_geoSvc
SmartIF< IGeoSvc > m_geoSvc
Definition: GenFitTrackFitter.h:86
Jug::Reco
Definition: ClusterTypes.h:5
Jug::Reco::GenFitTrackFitter::initialize
StatusCode initialize() override
Definition: GenFitTrackFitter.cpp:68
Jug::Reco::GenFitTrackFitter::FieldImp::~FieldImp
virtual ~FieldImp()
Definition: GenFitTrackFitter.h:51
Jug::Reco::GenFitTrackFitter
Definition: GenFitTrackFitter.h:43
Jug::Reco::GenFitTrackFitter::m_inputHitCollection
DataHandle< eicd::TrackerHitCollection > m_inputHitCollection
Definition: GenFitTrackFitter.h:80
Jug::Reco::GenFitTrackFitter::execute
StatusCode execute() override
Definition: GenFitTrackFitter.cpp:91
DD4hepBField.h
Jug::Reco::GenFitTrackFitter::FieldImp::FieldImp
FieldImp(dd4hep::Detector *det)
Definition: GenFitTrackFitter.h:50
Measurement.hpp
Jug::Reco::GenFitTrackFitter::m_inputProtoTracks
DataHandle< ProtoTrackContainer > m_inputProtoTracks
Definition: GenFitTrackFitter.h:82
Track.hpp
DataHandle.h
Jug::Reco::GenFitTrackFitter::m_outputTrajectories
DataHandle< eicd::TrajectoryCollection > m_outputTrajectories
Definition: GenFitTrackFitter.h:84
Trajectories.hpp
Jug::Reco::GenFitTrackFitter::FieldImp
Definition: GenFitTrackFitter.h:46
GeometryContainers.hpp
Jug::Reco::GenFitTrackFitter::FieldImp::get
TVector3 get(const TVector3 &position) const override
Definition: GenFitTrackFitter.h:57
Jug::Reco::GenFitTrackFitter::GenFitTrackFitter
GenFitTrackFitter(const std::string &name, ISvcLocator *svcLoc)
Definition: GenFitTrackFitter.cpp:60
ProtoTrack.hpp
DataHandle< eicd::TrackerHitCollection >
Jug::Reco::GenFitTrackFitter::m_foundTracks
DataHandle< eicd::TrackParametersCollection > m_foundTracks
Definition: GenFitTrackFitter.h:83