CMS 3D CMS Logo

CMSSW_4_4_3_patch1/src/RecoParticleFlow/PFProducer/interface/PFGeometry.h

Go to the documentation of this file.
00001 #ifndef RecoParticleFlow_PFProducer_PFGeometry_h
00002 #define RecoParticleFlow_PFProducer_PFGeometry_h 
00003 
00004 #include "DataFormats/GeometrySurface/interface/ReferenceCounted.h"
00005 
00006 // system include files
00007 #include <vector>
00008 
00019 class BoundCylinder;
00020 class BoundDisk;
00021 class BoundPlane;
00022 
00023 class PFGeometry {
00024  public:
00025   typedef enum {
00026     BeamPipe = 0,
00027     PS1 = 1,
00028     PS2 = 2,
00029     ECALBarrel = 3,
00030     ECALEndcap = 4,
00031     HCALBarrel = 5,
00032     HCALEndcap = 6,
00033     NPoints = 7
00034   } Layers_t;
00035 
00036   typedef enum {
00037     BeamPipeWall = 0,
00038     PS1Wall = 1,
00039     PS2Wall = 2,
00040     ECALInnerWall = 3,
00041     HCALInnerWall = 4,
00042     HCALOuterWall = 5,
00043     NSurfPoints = 6
00044   } Surface_t;
00045 
00047   PFGeometry();
00048 
00050   virtual ~PFGeometry() { }
00051 
00053   static const float innerRadius(PFGeometry::Layers_t layer)
00054     { return innerRadius_[layer]; }
00055 
00057   static const float outerRadius(PFGeometry::Layers_t layer)
00058     { return outerRadius_[layer]; }
00059 
00061   static const float innerZ(PFGeometry::Layers_t layer)
00062     { return innerZ_[layer]; }
00063 
00065   static const float outerZ(PFGeometry::Layers_t layer)
00066     { return outerZ_[layer]; }
00067 
00069   static const BoundCylinder& barrelBound(PFGeometry::Surface_t iSurf)
00070   { return *(cylinder_[unsigned(iSurf)]); }
00071 
00073   static const BoundPlane& negativeEndcapDisk(PFGeometry::Surface_t iSurf)
00074   { return *(negativeDisk_[unsigned(iSurf)]); }
00075 
00077   static const BoundPlane& positiveEndcapDisk(PFGeometry::Surface_t iSurf)
00078   { return *(positiveDisk_[unsigned(iSurf)]); }
00079 
00081   static float tanTh(PFGeometry::Surface_t iSurf)
00082   { return tanTh_[unsigned(iSurf)]; }
00083 
00084  private:
00085   static std::vector< float > innerRadius_;
00086   static std::vector< float > outerRadius_;
00087   static std::vector< float > innerZ_;
00088   static std::vector< float > outerZ_;
00089 
00090   static std::vector< ReferenceCountingPointer<BoundCylinder> > cylinder_;
00091   static std::vector< ReferenceCountingPointer<BoundPlane> > negativeDisk_;
00092   static std::vector< ReferenceCountingPointer<BoundPlane> > positiveDisk_;
00093   static std::vector< float > tanTh_;
00094 };
00095 
00096 #endif