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
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
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
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
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