00001 #ifndef TkNavigation_StartingLayerFinder_H_ 00002 #define TkNavigation_StartingLayerFinder_H_ 00003 00004 00005 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00006 #include "FWCore/Framework/interface/EventSetup.h" 00007 #include "FWCore/Framework/interface/Event.h" 00008 00009 00010 #include "TrackingTools/DetLayers/interface/DetLayer.h" 00011 #include "TrackingTools/DetLayers/interface/BarrelDetLayer.h" 00012 #include "TrackingTools/DetLayers/interface/ForwardDetLayer.h" 00013 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h" 00014 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h" 00015 #include "TrackingTools/GeomPropagators/interface/Propagator.h" 00016 #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h" 00017 #include "RecoTracker/MeasurementDet/interface/MeasurementTracker.h" 00018 #include "RecoTracker/TkDetLayers/interface/GeometricSearchTracker.h" 00019 00020 #include <vector> 00021 00027 class PTrajectoryStateOnDet; 00028 00029 class StartingLayerFinder { 00030 00031 private: 00032 00033 typedef FreeTrajectoryState FTS; 00034 typedef TrajectoryStateOnSurface TSOS; 00035 typedef std::pair<float, float> Range; 00036 00037 public: 00038 00039 StartingLayerFinder(const Propagator* aPropagator, const MeasurementTracker* tracker ) : 00040 00041 thePropagator(aPropagator), 00042 theMeasurementTracker(tracker), 00043 thePixelLayersValid(false), 00044 theFirstPixelBarrelLayer(0), 00045 theFirstNegPixelFwdLayer(0), 00046 theFirstPosPixelFwdLayer(0) { } 00047 00048 ~StartingLayerFinder() {} 00049 00050 std::vector<const DetLayer*> startingLayers(const FTS& aFts, float dr, float dz) const; 00051 00052 00053 std::vector<const DetLayer*> startingLayers(const TrajectorySeed& aSeed) const; 00054 00055 const BarrelDetLayer* firstPixelBarrelLayer() const; 00056 const std::vector<ForwardDetLayer*> firstNegPixelFwdLayer() const; 00057 const std::vector<ForwardDetLayer*> firstPosPixelFwdLayer() const; 00058 00059 const Propagator* propagator() const {return thePropagator;} 00060 00061 00062 00063 private: 00064 00065 const Propagator* thePropagator; 00066 const MeasurementTracker* theMeasurementTracker; 00067 mutable bool thePixelLayersValid; 00068 mutable BarrelDetLayer* theFirstPixelBarrelLayer; 00069 mutable std::vector<ForwardDetLayer*> theFirstNegPixelFwdLayer; 00070 mutable std::vector<ForwardDetLayer*> theFirstPosPixelFwdLayer; 00071 00072 00073 void checkPixelLayers() const; 00074 00075 00076 00077 inline bool rangesIntersect( const Range& a, const Range& b) const { 00078 if ( a.first > b.second || b.first > a.second) return false; 00079 else return true; 00080 } 00081 00082 00083 00084 00085 }; 00086 #endif //TR_StartingLayerFinder_H_