CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/RecoParticleFlow/PFTracking/interface/PFGeometry.h

Go to the documentation of this file.
00001 #ifndef RecoParticleFlow_PFTracking_PFGeometry_h
00002 #define RecoParticleFlow_PFTracking_PFGeometry_h 
00003 
00004 #include "DataFormats/GeometrySurface/interface/ReferenceCounted.h"
00005 
00006 // system include files
00007 #include <vector>
00008 
00019 class Cylinder;
00020 class Disk;
00021 class Plane;
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     HOBarrel = 7,
00034     NPoints = 8
00035   } Layers_t;
00036 
00037   typedef enum {
00038     BeamPipeWall = 0,
00039     PS1Wall = 1,
00040     PS2Wall = 2,
00041     ECALInnerWall = 3,
00042     HCALInnerWall = 4,
00043     HCALOuterWall = 5,
00044     HOInnerWall = 6,
00045     HOOuterWall = 7,
00046     NSurfPoints = 8
00047   } Surface_t;
00048 
00050   PFGeometry();
00051 
00053   virtual ~PFGeometry() { }
00054 
00056   static const float innerRadius(PFGeometry::Layers_t layer)
00057     { return innerRadius_[layer]; }
00058 
00060   static const float outerRadius(PFGeometry::Layers_t layer)
00061     { return outerRadius_[layer]; }
00062 
00064   static const float innerZ(PFGeometry::Layers_t layer)
00065     { return innerZ_[layer]; }
00066 
00068   static const float outerZ(PFGeometry::Layers_t layer)
00069     { return outerZ_[layer]; }
00070 
00072   static const Cylinder& barrelBound(PFGeometry::Surface_t iSurf)
00073   { return *(cylinder_[unsigned(iSurf)]); }
00074 
00076   static const Plane& negativeEndcapDisk(PFGeometry::Surface_t iSurf)
00077   { return *(negativeDisk_[unsigned(iSurf)]); }
00078 
00080   static const Plane& positiveEndcapDisk(PFGeometry::Surface_t iSurf)
00081   { return *(positiveDisk_[unsigned(iSurf)]); }
00082 
00084   static float tanTh(PFGeometry::Surface_t iSurf)
00085   { return tanTh_[unsigned(iSurf)]; }
00086 
00087  private:
00088   static std::vector< float > innerRadius_;
00089   static std::vector< float > outerRadius_;
00090   static std::vector< float > innerZ_;
00091   static std::vector< float > outerZ_;
00092 
00093   static std::vector< ReferenceCountingPointer<Cylinder> > cylinder_;
00094   static std::vector< ReferenceCountingPointer<Plane> > negativeDisk_;
00095   static std::vector< ReferenceCountingPointer<Plane> > positiveDisk_;
00096   static std::vector< float > tanTh_;
00097 };
00098 
00099 #endif