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
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
00041 virtual const BoundDiskSector& specificSurface() const {return *theDiskSector;}
00042
00043 private:
00044
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
00071
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