![]() |
![]() |
00001 #ifndef TkPixelMeasurementDet_H 00002 #define TkPixelMeasurementDet_H 00003 00004 #include "TrackingTools/MeasurementDet/interface/MeasurementDet.h" 00005 #include "RecoLocalTracker/ClusterParameterEstimator/interface/PixelClusterParameterEstimator.h" 00006 //#include "DataFormats/SiPixelCluster/interface/SiPixelClusterFwd.h" 00007 #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h" 00008 #include "DataFormats/Common/interface/Handle.h" 00009 #include "DataFormats/Common/interface/DetSetVector.h" 00010 #include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" 00011 00012 class TransientTrackingRecHit; 00013 class LocalTrajectoryParameters; 00014 00015 class TkPixelMeasurementDet : public MeasurementDet { 00016 public: 00017 00018 typedef edm::Ref<edmNew::DetSetVector<SiPixelCluster>, SiPixelCluster> SiPixelClusterRef; 00019 00020 typedef edmNew::DetSet<SiPixelCluster> detset; 00021 typedef detset::const_iterator const_iterator; 00022 typedef PixelClusterParameterEstimator::LocalValues LocalValues; 00023 00024 TkPixelMeasurementDet( const GeomDet* gdet, 00025 const PixelClusterParameterEstimator* cpe); 00026 00027 void update( const detset & detSet, 00028 const edm::Handle<edmNew::DetSetVector<SiPixelCluster> > & h, 00029 unsigned int id ) { 00030 detSet_ = detSet; 00031 handle_ = h; 00032 id_ = id; 00033 empty = false; 00034 activeThisEvent_ = true; 00035 } 00036 00037 void setEmpty(){empty = true; activeThisEvent_ = true; } 00038 00039 virtual ~TkPixelMeasurementDet() { } 00040 00041 virtual RecHitContainer recHits( const TrajectoryStateOnSurface& ) const; 00042 00043 virtual bool measurements( const TrajectoryStateOnSurface& stateOnThisDet, 00044 const MeasurementEstimator& est, 00045 TempMeasurements & result) const; 00046 00047 00048 const PixelGeomDetUnit& specificGeomDet() const {return static_cast<PixelGeomDetUnit const &>(fastGeomDet());} 00049 00050 TransientTrackingRecHit::RecHitPointer 00051 buildRecHit( const SiPixelClusterRef & cluster, 00052 const LocalTrajectoryParameters & ltp) const; 00053 00056 void setActive(bool active) { activeThisPeriod_ = active; activeThisEvent_ = true; if (!active) empty = true; } 00059 void setActiveThisEvent(bool active) { activeThisEvent_ = active; if (!active) empty = true; } 00061 bool isActive() const { return activeThisEvent_ && activeThisPeriod_; } 00062 00063 bool hasBadComponents( const TrajectoryStateOnSurface &tsos ) const ; 00064 00066 void setBadRocPositions(std::vector< LocalPoint > & positions) { badRocPositions_.swap(positions); } 00068 void clearBadRocPositions() { badRocPositions_.clear(); } 00069 private: 00070 00071 const PixelClusterParameterEstimator* theCPE; 00072 edm::Handle<edmNew::DetSetVector<SiPixelCluster> > handle_; 00073 detset detSet_; 00074 std::vector< LocalPoint > badRocPositions_; 00075 const std::vector<bool>* skipClusters_; 00076 unsigned int id_; 00077 bool empty; 00078 bool activeThisEvent_, activeThisPeriod_; 00079 00080 public: 00081 00082 inline bool accept(SiPixelClusterRefNew & r) const { 00083 00084 if(0==skipClusters_ || skipClusters_->empty()) return true; 00085 if (r.key()>=skipClusters_->size()){ 00086 edm::LogError("IndexMisMatch")<<r.key()<<" is larger than: "<<skipClusters_->size()<<" no skipping done"; 00087 return true; 00088 } 00089 return not (*skipClusters_)[r.key()]; 00090 } 00091 00092 void setClusterToSkip(const std::vector<bool>*skip ){ 00093 skipClusters_ = skip; 00094 } 00095 }; 00096 00097 #endif