00001 #ifndef Geometry_HcalTowerAlgo_HcalDDDGeometry_h 00002 #define Geometry_HcalTowerAlgo_HcalDDDGeometry_h 00003 00004 #include "DataFormats/DetId/interface/DetId.h" 00005 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" 00006 #include "Geometry/HcalCommonData/interface/HcalCellType.h" 00007 00008 #include "DataFormats/HcalDetId/interface/HcalDetId.h" 00009 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" 00010 #include "Geometry/CaloGeometry/interface/IdealObliquePrism.h" 00011 #include "Geometry/CaloGeometry/interface/IdealZPrism.h" 00012 #include "Geometry/CaloTopology/interface/HcalTopology.h" 00013 #include "CondFormats/AlignmentRecord/interface/HcalAlignmentRcd.h" 00014 #include "Geometry/Records/interface/HcalGeometryRecord.h" 00015 00016 #include <vector> 00017 00018 class HcalDDDGeometry : public CaloSubdetectorGeometry { 00019 00020 public: 00021 00022 typedef std::vector<IdealObliquePrism> HBCellVec ; 00023 typedef std::vector<IdealObliquePrism> HECellVec ; 00024 typedef std::vector<IdealObliquePrism> HOCellVec ; 00025 typedef std::vector<IdealZPrism> HFCellVec ; 00026 00027 explicit HcalDDDGeometry(); 00029 virtual ~HcalDDDGeometry(); 00030 00031 virtual const std::vector<DetId>& getValidDetIds( DetId::Detector det = DetId::Detector ( 0 ) , 00032 int subdet = 0 ) const; 00033 00034 virtual DetId getClosestCell(const GlobalPoint& r) const ; 00035 00036 int insertCell (std::vector<HcalCellType> const & ); 00037 00038 virtual void newCell( const GlobalPoint& f1 , 00039 const GlobalPoint& f2 , 00040 const GlobalPoint& f3 , 00041 const CCGFloat* parm, 00042 const DetId& detId ) ; 00043 00044 protected: 00045 00046 virtual const CaloCellGeometry* cellGeomPtr( uint32_t index ) const ; 00047 00048 private: 00049 00050 mutable std::vector<DetId> m_validIds ; 00051 00052 std::vector<HcalCellType> hcalCells_; 00053 mutable DetId::Detector lastReqDet_; 00054 mutable int lastReqSubdet_; 00055 00056 double twopi, deg; 00057 double etaMax_, firstHFQuadRing_; 00058 00059 HBCellVec m_hbCellVec ; 00060 HECellVec m_heCellVec ; 00061 HOCellVec m_hoCellVec ; 00062 HFCellVec m_hfCellVec ; 00063 }; 00064 00065 00066 #endif 00067