File indexing completed on 2025-06-26 23:26:40
0001 #ifndef TrackerSingleRecHit_H
0002 #define TrackerSingleRecHit_H
0003
0004 #include "DataFormats/TrackerRecHit2D/interface/BaseTrackerRecHit.h"
0005 #include "DataFormats/TrackerRecHit2D/interface/OmniClusterRef.h"
0006 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0007
0008
0009
0010
0011 class TrackerSingleRecHit : public BaseTrackerRecHit {
0012 public:
0013 typedef BaseTrackerRecHit Base;
0014
0015 TrackerSingleRecHit() {}
0016
0017 typedef OmniClusterRef::ClusterPixelRef ClusterPixelRef;
0018 typedef OmniClusterRef::ClusterStripRef ClusterStripRef;
0019 typedef OmniClusterRef::Phase2Cluster1DRef ClusterPhase2Ref;
0020 typedef OmniClusterRef::ClusterMTDRef ClusterMTDRef;
0021
0022
0023 TrackerSingleRecHit(DetId id, OmniClusterRef const& clus) : Base(id, trackerHitRTTI::single), cluster_(clus) {}
0024
0025 template <typename CluRef>
0026 TrackerSingleRecHit(const LocalPoint& p, const LocalError& e, GeomDet const& idet, CluRef const& clus)
0027 : Base(p, e, idet, trackerHitRTTI::single), cluster_(clus) {}
0028
0029
0030 template <typename CluRef>
0031 TrackerSingleRecHit(
0032 const LocalPoint& p, const LocalError& e, GeomDet const& idet, trackerHitRTTI::RTTI rt, CluRef const& clus)
0033 : Base(p, e, idet, rt), cluster_(clus) {}
0034
0035
0036 const GeomDetUnit* detUnit() const override { return det(); }
0037
0038
0039 OmniClusterRef const& firstClusterRef() const final { return cluster_; }
0040
0041 OmniClusterRef const& omniClusterRef() const { return cluster_; }
0042 OmniClusterRef const& omniCluster() const { return cluster_; }
0043
0044 OmniClusterRef& omniClusterRef() { return cluster_; }
0045 OmniClusterRef& omniCluster() { return cluster_; }
0046
0047 ClusterPixelRef cluster_pixel() const { return cluster_.cluster_pixel(); }
0048
0049 ClusterStripRef cluster_strip() const { return cluster_.cluster_strip(); }
0050
0051 ClusterPhase2Ref cluster_phase2OT() const { return cluster_.cluster_phase2OT(); }
0052
0053 ClusterMTDRef cluster_mtd() const { return cluster_.cluster_mtd(); }
0054
0055 SiStripCluster const& stripCluster() const { return cluster_.stripCluster(); }
0056
0057 SiPixelCluster const& pixelCluster() const { return cluster_.pixelCluster(); }
0058
0059 Phase2TrackerCluster1D const& phase2OTCluster() const { return cluster_.phase2OTCluster(); }
0060
0061 FTLCluster const& mtdCluster() const { return cluster_.mtdCluster(); }
0062
0063
0064 void setClusterPixelRef(ClusterPixelRef const& ref) { cluster_ = OmniClusterRef(ref); }
0065 void setClusterStripRef(ClusterStripRef const& ref) { cluster_ = OmniClusterRef(ref); }
0066 void setClusterPhase2Ref(ClusterPhase2Ref const& ref) { cluster_ = OmniClusterRef(ref); }
0067 void setClusterMTDRef(ClusterMTDRef const& ref) { cluster_ = OmniClusterRef(ref); }
0068
0069 bool sharesInput(const TrackingRecHit* other, SharedInputType what) const final;
0070
0071 bool sharesInput(TrackerSingleRecHit const& other) const {
0072
0073 if (cluster_.id() == other.cluster_.id())
0074 return (cluster_ == other.cluster_);
0075 else {
0076 const bool sameDetId = (geographicalId() == other.geographicalId());
0077 return (sameDetId) ? other.cluster_.stripOverlap(cluster_) : false;
0078 }
0079 }
0080
0081 std::vector<const TrackingRecHit*> recHits() const override;
0082 std::vector<TrackingRecHit*> recHits() override;
0083
0084 private:
0085
0086 OmniClusterRef cluster_;
0087 };
0088
0089 #endif