CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC2_patch1/src/RecoTracker/MeasurementDet/plugins/TkPixelMeasurementDet.h

Go to the documentation of this file.
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