Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-10-25 10:02:26

0001 #ifndef TkDoubleSensMeasurementDet_H
0002 #define TkDoubleSensMeasurementDet_H
0003 
0004 #include "TrackingTools/MeasurementDet/interface/MeasurementDet.h"
0005 #include "TkPixelMeasurementDet.h"
0006 
0007 #include "Geometry/CommonDetUnit/interface/StackGeomDet.h"
0008 #include "Geometry/CommonDetUnit/interface/DoubleSensGeomDet.h"
0009 #include "RecoLocalTracker/ClusterParameterEstimator/interface/PixelClusterParameterEstimator.h"
0010 
0011 #include "FWCore/Utilities/interface/Visibility.h"
0012 
0013 class TkDoubleSensMeasurementDet final : public MeasurementDet {
0014 public:
0015   TkDoubleSensMeasurementDet(const DoubleSensGeomDet* gdet, const PixelClusterParameterEstimator* cpe);
0016 
0017   void init(const MeasurementDet* firstDet, const MeasurementDet* secondDet);
0018 
0019   RecHitContainer recHits(const TrajectoryStateOnSurface&, const MeasurementTrackerEvent& data) const override;
0020 
0021   const DoubleSensGeomDet& specificGeomDet() const { return static_cast<DoubleSensGeomDet const&>(fastGeomDet()); }
0022   typedef edm::Ref<edmNew::DetSetVector<Phase2TrackerCluster1D>, Phase2TrackerCluster1D> Phase2TrackerCluster1DRef;
0023 
0024   typedef edmNew::DetSet<SiPixelCluster> detset;
0025   typedef detset::const_iterator const_iterator;
0026 
0027   bool measurements(const TrajectoryStateOnSurface& stateOnThisDet,
0028                     const MeasurementEstimator& est,
0029                     const MeasurementTrackerEvent& data,
0030                     TempMeasurements& result) const override;
0031 
0032   const TkPixelMeasurementDet* firstDet() const { return theFirstDet; }
0033   const TkPixelMeasurementDet* secondDet() const { return theSecondDet; }
0034 
0035   /// return TRUE if both first and second components are active
0036   bool isActive(const MeasurementTrackerEvent& data) const override {
0037     return firstDet()->isActive(data) && secondDet()->isActive(data);
0038   }
0039   bool isEmpty(const PxMeasurementDetSet& data) const {
0040     return data.empty(firstDet()->index()) || data.empty(secondDet()->index());
0041   }
0042 
0043   /// return TRUE if at least one of the first and second components has badChannels
0044   bool hasBadComponents(const TrajectoryStateOnSurface& tsos, const MeasurementTrackerEvent& data) const override {
0045     return (firstDet()->hasBadComponents(tsos, data) || secondDet()->hasBadComponents(tsos, data));
0046   }
0047 
0048 private:
0049   const PixelClusterParameterEstimator* thePixelCPE;
0050   const TkPixelMeasurementDet* theFirstDet;
0051   const TkPixelMeasurementDet* theSecondDet;
0052 };
0053 
0054 #endif