CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_2_7_hltpatch2/src/RecoTracker/TkDetLayers/src/PixelBlade.h

Go to the documentation of this file.
00001 #ifndef TkDetLayers_PixelBlade_h
00002 #define TkDetLayers_PixelBlade_h
00003 
00004 #include "BoundDiskSector.h"
00005 #include "TrackingTools/DetLayers/interface/GeometricSearchDet.h"
00006 
00007 #include "TrackingTools/DetLayers/interface/PeriodicBinFinderInZ.h"
00008 #include "SubLayerCrossings.h"
00009 
00010 
00014 #pragma GCC visibility push(hidden)
00015 class PixelBlade : public GeometricSearchDetWithGroups {
00016  public:
00017 
00018   PixelBlade(std::vector<const GeomDet*>& frontDets,
00019              std::vector<const GeomDet*>& backDets  );
00020 
00021   ~PixelBlade();
00022   
00023   // GeometricSearchDet interface
00024   virtual const BoundSurface& surface() const {return *theDiskSector;}
00025 
00026   virtual const std::vector<const GeomDet*>& basicComponents() const {return theDets;}
00027 
00028   virtual const std::vector<const GeometricSearchDet*>& components() const;
00029 
00030   std::pair<bool, TrajectoryStateOnSurface>
00031   compatible( const TrajectoryStateOnSurface& ts, const Propagator&, 
00032               const MeasurementEstimator&) const;
00033   
00034   virtual void 
00035   groupedCompatibleDetsV( const TrajectoryStateOnSurface& tsos,
00036                           const Propagator& prop,
00037                           const MeasurementEstimator& est,
00038                           std::vector<DetGroup> & result) const;
00039   
00040   //Extension of the interface
00041   virtual const BoundDiskSector& specificSurface() const {return *theDiskSector;}
00042 
00043  private:
00044   // private methods for the implementation of groupedCompatibleDets()
00045 
00046   SubLayerCrossings computeCrossings( const TrajectoryStateOnSurface& tsos,
00047                                       PropagationDirection propDir) const;
00048   
00049   bool addClosest( const TrajectoryStateOnSurface& tsos,
00050                    const Propagator& prop,
00051                    const MeasurementEstimator& est,
00052                    const SubLayerCrossing& crossing,
00053                    std::vector<DetGroup>& result) const;
00054   
00055   float computeWindowSize( const GeomDet* det, 
00056                            const TrajectoryStateOnSurface& tsos, 
00057                            const MeasurementEstimator& est) const;
00058 
00059 
00060   void searchNeighbors( const TrajectoryStateOnSurface& tsos,
00061                         const Propagator& prop,
00062                         const MeasurementEstimator& est,
00063                         const SubLayerCrossing& crossing,
00064                         float window, 
00065                         std::vector<DetGroup>& result,
00066                         bool checkClosest) const;
00067 
00068   bool overlap( const GlobalPoint& gpos, const GeomDet& det, float phiWin) const;
00069 
00070   // This 2 find methods should be substituted with the use 
00071   // of a GeneralBinFinderInR
00072   
00073   int findBin( float R,int layer) const;
00074   
00075   GlobalPoint findPosition(int index,int diskSectorIndex) const ;
00076 
00077   const std::vector<const GeomDet*>& subBlade( int ind) const {
00078     return (ind==0 ? theFrontDets : theBackDets);
00079   }
00080 
00081 
00082 
00083  private:
00084   std::vector<const GeomDet*> theDets;
00085   std::vector<const GeomDet*> theFrontDets;
00086   std::vector<const GeomDet*> theBackDets;
00087   
00088   ReferenceCountingPointer<BoundDiskSector> theDiskSector;
00089   ReferenceCountingPointer<BoundDiskSector> theFrontDiskSector;
00090   ReferenceCountingPointer<BoundDiskSector> theBackDiskSector;
00091 };
00092 
00093 
00094 #pragma GCC visibility pop
00095 #endif