Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-03-17 10:51:31

0001 #ifndef ProjectedSiStripRecHit2D_H
0002 #define ProjectedSiStripRecHit2D_H
0003 
0004 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h"
0005 
0006 // #include<iostream>
0007 
0008 class ProjectedSiStripRecHit2D final : public TrackerSingleRecHit {
0009 public:
0010   inline static bool isMono(GeomDet const& gdet, GeomDet const& sdet) {
0011     return (sdet.geographicalId() - gdet.geographicalId()) == 2;
0012   }
0013 
0014   typedef TrackerSingleRecHit Base;
0015 
0016   ProjectedSiStripRecHit2D() : theOriginalDet(nullptr) {}
0017 
0018   ProjectedSiStripRecHit2D(const LocalPoint& pos,
0019                            const LocalError& err,
0020                            GeomDet const& idet,
0021                            SiStripRecHit2D const& originalHit)
0022       : TrackerSingleRecHit(pos,
0023                             err,
0024                             idet,
0025                             isMono(idet, *originalHit.det()) ? trackerHitRTTI::projMono : trackerHitRTTI::projStereo,
0026                             originalHit.omniCluster()),
0027         theOriginalDet(originalHit.det()) {
0028     //      std::cout << getRTTI() << ' ' << originalHit.rawId() << ' ' << idet.geographicalId().rawId() << ' ' << originalId() << std::endl;
0029     assert(originalId() == originalHit.rawId());
0030   }
0031 
0032   template <typename CluRef>
0033   ProjectedSiStripRecHit2D(
0034       const LocalPoint& pos, const LocalError& err, GeomDet const& idet, GeomDet const& originalDet, CluRef const& clus)
0035       : TrackerSingleRecHit(
0036             pos, err, idet, isMono(idet, originalDet) ? trackerHitRTTI::projMono : trackerHitRTTI::projStereo, clus),
0037         theOriginalDet(&originalDet) {
0038     assert(originalId() == originalDet.geographicalId());
0039   }
0040 
0041   void setDet(const GeomDet& idet) override;
0042 
0043   bool canImproveWithTrack() const override { return true; }
0044 
0045   ProjectedSiStripRecHit2D* clone() const override { return new ProjectedSiStripRecHit2D(*this); }
0046 
0047   int dimension() const override { return 2; }
0048   void getKfComponents(KfComponentsHolder& holder) const override { getKfComponents2D(holder); }
0049 
0050   typedef OmniClusterRef::ClusterStripRef ClusterRef;
0051   ClusterRef cluster() const { return cluster_strip(); }
0052   const GeomDetUnit* originalDet() const { return theOriginalDet; }
0053   unsigned int originalId() const { return trackerHitRTTI::projId(*this); }
0054 
0055   // not useful only for backward compatibility
0056   SiStripRecHit2D originalHit() const { return SiStripRecHit2D(originalId(), omniClusterRef()); }
0057 
0058   std::vector<const TrackingRecHit*> recHits() const override {
0059     std::vector<const TrackingRecHit*> rechits;
0060     return rechits;
0061   }
0062   std::vector<TrackingRecHit*> recHits() override {
0063     std::vector<TrackingRecHit*> rechits;
0064     return rechits;
0065   }
0066 
0067 private:
0068   // double dispatch
0069   ProjectedSiStripRecHit2D* clone_(TkCloner const& cloner, TrajectoryStateOnSurface const& tsos) const override {
0070     return cloner(*this, tsos).release();
0071   }
0072 #ifndef __GCCXML__
0073   ConstRecHitPointer cloneSH_(TkCloner const& cloner, TrajectoryStateOnSurface const& tsos) const override {
0074     return cloner.makeShared(*this, tsos);
0075   }
0076 #endif
0077 
0078 private:
0079   const GeomDet* theOriginalDet;
0080 };
0081 
0082 #endif