Back to home page

Project CMSSW displayed by LXR

 
 

    


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 }  // namespace reco
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 &region) const override;
0034 
0035 private:
0036   //this two simple classes are copied from Alignment/ReferenceTrajectories in order to avoid dependencies
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