00001 #ifndef DetLayers_ForwardDetLayer_H 00002 #define DetLayers_ForwardDetLayer_H 00003 00012 #include "TrackingTools/DetLayers/interface/DetLayer.h" 00013 #include "DataFormats/GeometrySurface/interface/Surface.h" 00014 #include "DataFormats/GeometrySurface/interface/ReferenceCounted.h" 00015 #include "DataFormats/GeometrySurface/interface/BoundDisk.h" 00016 00017 #include <vector> 00018 #include <algorithm> 00019 00020 class ForwardDetLayer : public DetLayer { 00021 public: 00022 00023 ForwardDetLayer(): DetLayer(false), theDisk(0){} 00024 00025 virtual ~ForwardDetLayer(); 00026 00027 // GeometricSearchDet interface 00028 virtual const BoundSurface& surface() const GCC11_FINAL { return *theDisk;} 00029 00030 virtual std::pair<bool, TrajectoryStateOnSurface> 00031 compatible( const TrajectoryStateOnSurface&, const Propagator&, 00032 const MeasurementEstimator&) const; 00033 00034 // DetLayer interface 00035 virtual Location location() const GCC11_FINAL {return GeomDetEnumerators::endcap;} 00036 00037 // Extension of the interface 00038 virtual const BoundDisk& specificSurface() const GCC11_FINAL { return *theDisk;} 00039 00040 bool contains( const Local3DPoint& p) const; 00041 00042 protected: 00043 void setSurface( BoundDisk* cp); 00044 00045 virtual void initialize(); 00046 00047 float rmin() const { return theDisk->innerRadius();} 00048 float rmax() const { return theDisk->outerRadius();} 00049 float zmin() const { return (theDisk->position().z() - theDisk->bounds().thickness()*0.5f);} 00050 float zmax() const { return (theDisk->position().z() + theDisk->bounds().thickness()*0.5f);} 00051 00052 00053 virtual BoundDisk* computeSurface(); 00054 00055 00056 private: 00057 ReferenceCountingPointer<BoundDisk> theDisk; 00058 00059 00060 }; 00061 00062 00063 #endif