00001 #ifndef GEOMETRY_HCALTOWERALGO_CALOTOWERGEOMETRY_H 00002 #define GEOMETRY_HCALTOWERALGO_CALOTOWERGEOMETRY_H 1 00003 00004 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" 00005 #include "DataFormats/CaloTowers/interface/CaloTowerDetId.h" 00006 //#include "CondFormats/AlignmentRecord/interface/CaloTowerAlignmentRcd.h" 00007 #include "Geometry/Records/interface/CaloTowerGeometryRecord.h" 00008 00017 class CaloTowerGeometry : public CaloSubdetectorGeometry 00018 { 00019 public: 00020 00021 typedef CaloTowerAlignmentRcd AlignmentRecord ; 00022 typedef CaloTowerGeometryRecord AlignedRecord ; 00023 typedef PCaloTowerRcd PGeometryRecord ; 00024 typedef CaloTowerDetId DetIdType ; 00025 00026 enum { k_NumberOfCellsForCorners = CaloTowerDetId::kSizeForDenseIndexing } ; 00027 00028 enum { k_NumberOfShapes = 41 } ; 00029 00030 enum { k_NumberOfParametersPerShape = 5 } ; 00031 00032 static std::string dbString() { return "PCaloTowerRcd" ; } 00033 00034 virtual unsigned int numberOfShapes() const { return k_NumberOfShapes ; } 00035 virtual unsigned int numberOfParametersPerShape() const { return k_NumberOfParametersPerShape ; } 00036 00037 00038 CaloTowerGeometry(); 00039 virtual ~CaloTowerGeometry(); 00040 00041 static std::string producerTag() { return "TOWER" ; } 00042 00043 static unsigned int numberOfAlignments() { return 0 ; } 00044 00045 static unsigned int alignmentTransformIndexLocal( const DetId& id ) ; 00046 00047 static unsigned int alignmentTransformIndexGlobal( const DetId& id ) ; 00048 00049 static std::vector<HepGeom::Point3D<double> > localCorners( const double* pv, 00050 unsigned int i, 00051 HepGeom::Point3D<double> & ref ) ; 00052 00053 static CaloCellGeometry* newCell( const GlobalPoint& f1 , 00054 const GlobalPoint& f2 , 00055 const GlobalPoint& f3 , 00056 CaloCellGeometry::CornersMgr* mgr, 00057 const double* parm, 00058 const DetId& detId ) ; 00059 00060 }; 00061 00062 #endif