00001 #ifndef TkDetLayers_CompositeTECPetal_h
00002 #define TkDetLayers_CompositeTECPetal_h
00003
00004
00005 #include "TrackingTools/DetLayers/interface/GeometricSearchDet.h"
00006 #include "RecoTracker/TkDetLayers/interface/TECPetal.h"
00007 #include "RecoTracker/TkDetLayers/interface/TECWedge.h"
00008 #include "RecoTracker/TkDetLayers/interface/SubLayerCrossings.h"
00009
00010
00014 class CompositeTECPetal : public TECPetal{
00015 public:
00016 CompositeTECPetal(std::vector<const TECWedge*>& innerWedges,
00017 std::vector<const TECWedge*>& outerWedges);
00018
00019 ~CompositeTECPetal();
00020
00021
00022 virtual const std::vector<const GeomDet*>& basicComponents() const {return theBasicComps;}
00023
00024 virtual const std::vector<const GeometricSearchDet*>& components() const {return theComps;}
00025
00026 virtual std::pair<bool, TrajectoryStateOnSurface>
00027 compatible( const TrajectoryStateOnSurface& ts, const Propagator&,
00028 const MeasurementEstimator&) const;
00029
00030 virtual void
00031 groupedCompatibleDetsV( const TrajectoryStateOnSurface& startingState,
00032 const Propagator& prop,
00033 const MeasurementEstimator& est,
00034 std::vector<DetGroup> & result) const;
00035
00036
00037 private:
00038
00039 SubLayerCrossings computeCrossings(const TrajectoryStateOnSurface& tsos,
00040 PropagationDirection propDir) const;
00041
00042
00043
00044 bool addClosest( const TrajectoryStateOnSurface& tsos,
00045 const Propagator& prop,
00046 const MeasurementEstimator& est,
00047 const SubLayerCrossing& crossing,
00048 std::vector<DetGroup>& result) const;
00049
00050 void searchNeighbors( const TrajectoryStateOnSurface& tsos,
00051 const Propagator& prop,
00052 const MeasurementEstimator& est,
00053 const SubLayerCrossing& crossing,
00054 float window,
00055 std::vector<DetGroup>& result,
00056 bool checkClosest) const;
00057
00058 static
00059 bool overlap( const GlobalPoint& gpos, const GeometricSearchDet& rod, float window);
00060
00061 static
00062 float computeWindowSize( const GeomDet* det,
00063 const TrajectoryStateOnSurface& tsos,
00064 const MeasurementEstimator& est);
00065
00066 int findBin( float R,int layer) const;
00067
00068 GlobalPoint findPosition(int index,int diskSectorIndex) const ;
00069
00070 const std::vector<const GeometricSearchDet*>& subLayer( int ind) const {
00071 return (ind==0 ? theFrontComps : theBackComps);
00072 }
00073
00074
00075 private:
00076 std::vector<const GeometricSearchDet*> theComps;
00077 std::vector<const GeometricSearchDet*> theFrontComps;
00078 std::vector<const GeometricSearchDet*> theBackComps;
00079 std::vector<const GeomDet*> theBasicComps;
00080
00081 std::vector<float> theFrontBoundaries;
00082 std::vector<float> theBackBoundaries;
00083
00084 ReferenceCountingPointer<BoundDiskSector> theFrontSector;
00085 ReferenceCountingPointer<BoundDiskSector> theBackSector;
00086
00087 };
00088
00089
00090 #endif