00001 #ifndef DetLayers_MuRingForwardDoubleLayer_H 00002 #define DetLayers_MuRingForwardDoubleLayer_H 00003 00013 #include "TrackingTools/DetLayers/interface/RingedForwardLayer.h" 00014 #include "Utilities/BinningTools/interface/BaseBinFinder.h" 00015 #include "RecoMuon/DetLayers/interface/MuRingForwardLayer.h" 00016 00017 class ForwardDetRing; 00018 class ForwardDetRingBuilder; 00019 class GeomDet; 00020 00021 class MuRingForwardDoubleLayer : public RingedForwardLayer { 00022 00023 public: 00024 00026 MuRingForwardDoubleLayer(const std::vector<const ForwardDetRing*>& frontRings, 00027 const std::vector<const ForwardDetRing*>& backRings); 00028 00029 virtual ~MuRingForwardDoubleLayer() {} 00030 00031 00032 // GeometricSearchDet interface 00033 00034 virtual const std::vector<const GeomDet*>& basicComponents() const {return theBasicComponents;} 00035 00036 virtual const std::vector<const GeometricSearchDet*>& components() const {return theComponents;} 00037 00038 bool isInsideOut(const TrajectoryStateOnSurface&tsos) const; 00039 00040 // tries closest layer first 00041 virtual std::pair<bool, TrajectoryStateOnSurface> 00042 compatible( const TrajectoryStateOnSurface&, const Propagator&, 00043 const MeasurementEstimator&) const; 00044 00045 virtual std::vector<DetWithState> 00046 compatibleDets( const TrajectoryStateOnSurface& startingState, 00047 const Propagator& prop, 00048 const MeasurementEstimator& est) const; 00049 00050 virtual std::vector<DetGroup> 00051 groupedCompatibleDets( const TrajectoryStateOnSurface& startingState, 00052 const Propagator& prop, 00053 const MeasurementEstimator& est) const; 00054 00055 00056 virtual bool hasGroups() const {return true;} 00057 00058 00059 // DetLayer interface 00060 virtual SubDetector subDetector() const {return theBackLayer.subDetector();} 00061 00062 00063 // Extension of the interface 00064 00066 virtual const std::vector<const ForwardDetRing*>& rings() const {return theRings;} 00067 00068 bool isCrack(const GlobalPoint & gp) const; 00069 00070 const MuRingForwardLayer * frontLayer() const {return &theFrontLayer;} 00071 const MuRingForwardLayer * backLayer() const {return &theBackLayer;} 00072 00073 void selfTest() const; 00074 protected: 00075 virtual BoundDisk * computeSurface(); 00076 private: 00077 MuRingForwardLayer theFrontLayer; 00078 MuRingForwardLayer theBackLayer; 00079 std::vector<const ForwardDetRing*> theRings; 00080 std::vector <const GeometricSearchDet*> theComponents; // duplication of the above 00081 std::vector<const GeomDet*> theBasicComponents; // All chambers 00082 00083 }; 00084 #endif 00085