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 } 00035 void setEmpty(){empty = true;} 00036 00037 virtual ~TkPixelMeasurementDet() { } 00038 00039 virtual RecHitContainer recHits( const TrajectoryStateOnSurface& ) const; 00040 00041 virtual std::vector<TrajectoryMeasurement> 00042 fastMeasurements( const TrajectoryStateOnSurface& stateOnThisDet, 00043 const TrajectoryStateOnSurface& startingState, 00044 const Propagator&, 00045 const MeasurementEstimator&) const; 00046 00047 const PixelGeomDetUnit& specificGeomDet() const {return *thePixelGDU;} 00048 00049 TransientTrackingRecHit::RecHitPointer 00050 buildRecHit( const SiPixelClusterRef & cluster, 00051 const LocalTrajectoryParameters & ltp) const; 00052 00054 void setActive(bool active) { active_ = active; if (!active) empty = true; } 00056 bool isActive() const { return active_; } 00057 00058 private: 00059 00060 const PixelGeomDetUnit* thePixelGDU; 00061 const PixelClusterParameterEstimator* theCPE; 00062 detset detSet_; 00063 edm::Handle<edmNew::DetSetVector<SiPixelCluster> > handle_; 00064 unsigned int id_; 00065 bool empty; 00066 bool active_; 00067 }; 00068 00069 #endif