File indexing completed on 2024-04-06 12:28:37
0001 #ifndef RecoTracker_PixelTrackFitting_KFBasedPixelFitter_h
0002 #define RecoTracker_PixelTrackFitting_KFBasedPixelFitter_h
0003
0004 #include "RecoTracker/PixelTrackFitting/interface/PixelFitterBase.h"
0005 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0006 #include "TrackingTools/TransientTrackingRecHit/interface/TValidTrackingRecHit.h"
0007
0008 #include <vector>
0009
0010 namespace reco {
0011 class Track;
0012 class BeamSpot;
0013 }
0014
0015 class TransientTrackingRecHitBuilder;
0016 class TrackerGeometry;
0017 class MagneticField;
0018 class TrackingRegion;
0019 class TrackingRecHit;
0020 class Propagator;
0021
0022 class KFBasedPixelFitter : public PixelFitterBase {
0023 public:
0024 KFBasedPixelFitter(const Propagator *propagator,
0025 const Propagator *opropagator,
0026 const TransientTrackingRecHitBuilder *ttrhBuilder,
0027 const TrackerGeometry *tracker,
0028 const MagneticField *field,
0029 const reco::BeamSpot *beamSpot);
0030 ~KFBasedPixelFitter() override {}
0031
0032 std::unique_ptr<reco::Track> run(const std::vector<const TrackingRecHit *> &hits,
0033 const TrackingRegion ®ion) const override;
0034
0035 private:
0036
0037 class MyBeamSpotGeomDet final : public GeomDet {
0038 public:
0039 explicit MyBeamSpotGeomDet(const ReferenceCountingPointer<BoundPlane> &plane) : GeomDet(plane) { setDetId(0); }
0040 ~MyBeamSpotGeomDet() override {}
0041 GeomDetEnumerators::SubDetector subDetector() const override { return GeomDetEnumerators::invalidDet; }
0042 std::vector<const GeomDet *> components() const override { return std::vector<const GeomDet *>(); }
0043 };
0044 class MyBeamSpotHit final : public TValidTrackingRecHit {
0045 public:
0046 MyBeamSpotHit(const reco::BeamSpot &beamSpot, const GeomDet *geom);
0047 ~MyBeamSpotHit() override {}
0048 LocalPoint localPosition() const override { return localPosition_; }
0049 LocalError localPositionError() const override { return localError_; }
0050 AlgebraicVector parameters() const override;
0051 AlgebraicSymMatrix parametersError() const override;
0052 int dimension() const override { return 1; }
0053 AlgebraicMatrix projectionMatrix() const override;
0054 std::vector<const TrackingRecHit *> recHits() const override { return std::vector<const TrackingRecHit *>(); }
0055 std::vector<TrackingRecHit *> recHits() override { return std::vector<TrackingRecHit *>(); }
0056 const TrackingRecHit *hit() const override { return nullptr; }
0057
0058 private:
0059 LocalPoint localPosition_;
0060 LocalError localError_;
0061 MyBeamSpotHit *clone() const override { return new MyBeamSpotHit(*this); }
0062 };
0063
0064 const Propagator *thePropagator;
0065 const Propagator *theOPropagator;
0066 const TransientTrackingRecHitBuilder *theTTRHBuilder;
0067 const TrackerGeometry *theTracker;
0068 const MagneticField *theField;
0069 const reco::BeamSpot *theBeamSpot;
0070 };
0071 #endif