00001 #ifndef Geometry_EcalTestBeam_EcalTBHodoscopeGeometry_HH 00002 #define Geometry_EcalTestBeam_EcalTBHodoscopeGeometry_HH 00003 00004 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" 00005 #include "Geometry/CaloGeometry/interface/PreshowerStrip.h" 00006 00007 #include <vector> 00008 00009 class EcalTBHodoscopeGeometry : public CaloSubdetectorGeometry 00010 { 00011 00012 public: 00013 00014 typedef std::vector<PreshowerStrip> CellVec ; 00015 00016 typedef CaloCellGeometry::CCGFloat CCGFloat ; 00017 typedef CaloCellGeometry::Pt3D Pt3D ; 00018 typedef CaloCellGeometry::Pt3DVec Pt3DVec ; 00019 00020 EcalTBHodoscopeGeometry() ; 00021 ~EcalTBHodoscopeGeometry() ; 00022 00023 virtual void newCell( const GlobalPoint& f1 , 00024 const GlobalPoint& f2 , 00025 const GlobalPoint& f3 , 00026 const CCGFloat* parm , 00027 const DetId& detId ) ; 00028 00029 static float getFibreLp( int plane, int fibre ) ; 00030 00031 static float getFibreRp( int plane, int fibre ) ; 00032 00033 static std::vector<int> getFiredFibresInPlane( float xtr, int plane ) ; 00034 00035 static int getNPlanes() ; 00036 00037 static int getNFibres() ; 00038 00039 protected: 00040 00041 virtual const CaloCellGeometry* cellGeomPtr( uint32_t index ) const ; 00042 00043 private: 00044 00045 struct fibre_pos 00046 { 00047 float lp, rp ; 00048 }; 00049 00050 static const int nPlanes_=4; 00051 static const int nFibres_=64; 00052 static const fibre_pos fibrePos_[ nPlanes_ ][ nFibres_ ] ; 00053 00054 CellVec m_cellVec ; 00055 }; 00056 00057 #endif