00001 #ifndef GEOMETRY_HCALTOWERALGO_HCALFLEXIHARDCODEGEOMETRYLOADER_H 00002 #define GEOMETRY_HCALTOWERALGO_HCALFLEXIHARDCODEGEOMETRYLOADER_H 1 00003 00011 #include "Geometry/CaloGeometry/interface/CaloVGeometryLoader.h" 00012 #include "Geometry/CaloGeometry/interface/CaloCellGeometry.h" 00013 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00014 #include <vector> 00015 00016 class HcalTopology; 00017 00018 class HcalFlexiHardcodeGeometryLoader { 00019 00020 public: 00021 HcalFlexiHardcodeGeometryLoader(const edm::ParameterSet&); 00022 00023 CaloSubdetectorGeometry* load(const HcalTopology& fTopology); 00024 00025 private: 00026 00027 struct HBHOCellParameters { 00028 HBHOCellParameters (int f_eta, int f_depth, int f_phiFirst, int f_phiStep, int f_dPhi, float f_rMin, float f_rMax, float f_etaMin, float f_etaMax) 00029 : eta(f_eta), depth(f_depth), phiFirst(f_phiFirst), phiStep(f_phiStep), dphi(f_dPhi), rMin(f_rMin), rMax(f_rMax), etaMin(f_etaMin), etaMax(f_etaMax) 00030 {} 00031 00032 int eta; 00033 int depth; 00034 int phiFirst; 00035 int phiStep; 00036 int dphi; 00037 float rMin; 00038 float rMax; 00039 float etaMin; 00040 float etaMax; 00041 }; 00042 00043 struct HECellParameters { 00044 HECellParameters (int f_eta, int f_depth, int f_phiFirst, int f_phiStep, int f_dPhi, float f_zMin, float f_zMax, float f_etaMin, float f_etaMax) 00045 : eta(f_eta), depth(f_depth), phiFirst(f_phiFirst), phiStep(f_phiStep), dphi(f_dPhi), zMin(f_zMin), zMax(f_zMax), etaMin(f_etaMin), etaMax(f_etaMax) 00046 {} 00047 00048 int eta; 00049 int depth; 00050 int phiFirst; 00051 int phiStep; 00052 int dphi; 00053 float zMin; 00054 float zMax; 00055 float etaMin; 00056 float etaMax; 00057 }; 00058 00059 struct HFCellParameters { 00060 HFCellParameters (int f_eta, int f_depth, int f_phiFirst, int f_phiStep, int f_dPhi, float f_zMin, float f_zMax, float f_rMin, float f_rMax) 00061 : eta(f_eta), depth(f_depth), phiFirst(f_phiFirst), phiStep(f_phiStep), dphi(f_dPhi), zMin(f_zMin), zMax(f_zMax), rMin(f_rMin), rMax(f_rMax) 00062 {} 00063 00064 int eta; 00065 int depth; 00066 int phiFirst; 00067 int phiStep; 00068 int dphi; 00069 float zMin; 00070 float zMax; 00071 float rMin; 00072 float rMax; 00073 }; 00074 00075 std::vector <HBHOCellParameters> makeHBCells (const HcalTopology & topology); 00076 std::vector <HBHOCellParameters> makeHOCells (); 00077 std::vector <HECellParameters> makeHECells (const HcalTopology & topology); 00078 std::vector <HECellParameters> makeHECells_H2 (); 00079 std::vector <HFCellParameters> makeHFCells (); 00080 00081 void fillHBHO (CaloSubdetectorGeometry* fGeometry, const std::vector <HBHOCellParameters>& fCells, bool fHB); 00082 void fillHE (CaloSubdetectorGeometry* fGeometry, const std::vector <HECellParameters>& fCells); 00083 void fillHF (CaloSubdetectorGeometry* fGeometry, const std::vector <HFCellParameters>& fCells); 00084 00085 int MAX_HCAL_PHI; 00086 double DEGREE2RAD; 00087 00088 std::vector<std::vector<int> > m_segmentation; 00089 00090 }; 00091 00092 #endif