00001
00002
00003
00005 #ifndef HcalNumberingFromDDD_h
00006 #define HcalNumberingFromDDD_h
00007
00008 #include "Geometry/HcalCommonData/interface/HcalCellType.h"
00009 #include "DataFormats/HcalDetId/interface/HcalSubdetector.h"
00010 #include "DetectorDescription/Core/interface/DDsvalues.h"
00011
00012 #include "CLHEP/Vector/ThreeVector.h"
00013
00014 #include <vector>
00015 #include <string>
00016
00017 class DDCompactView;
00018 class DDFilteredView;
00019
00020 class HcalNumberingFromDDD {
00021
00022 public:
00023
00024 HcalNumberingFromDDD(std::string & name, const DDCompactView & cpv);
00025 ~HcalNumberingFromDDD();
00026
00027 struct HcalID {
00028 int subdet, zside, depth, etaR, phi, phis, lay;
00029 HcalID(int det=0, int zs=0, int d=0, int et=0, int fi=0, int phiskip=0, int ly=-1) :
00030 subdet(det), zside(zs), depth(d), etaR(et), phi(fi), phis(phiskip), lay(ly) {}
00031 };
00032
00033 HcalID unitID(int det, Hep3Vector pos, int depth, int lay=-1) const;
00034 HcalID unitID(double eta, double phi, int depth=1, int lay=-1) const;
00035 HcalID unitID(int det, double etaR, double phi, int depth,
00036 int lay=-1) const;
00037 HcalID unitID(int det, int zside, int depth, int etaR, int phi,
00038 int lay=-1) const;
00039 HcalCellType::HcalCell cell(int det, int zside, int depth, int etaR,
00040 int iphi, bool corr=true) const;
00041 std::vector<double> getEtaTable() const;
00042 std::vector<HcalCellType::HcalCellType> HcalCellTypes() const;
00043 std::vector<HcalCellType::HcalCellType> HcalCellTypes(HcalSubdetector) const;
00044
00045 private:
00046
00047 double getEta(int det, int etaR, int zside, int depth=1) const;
00048 double getEta(double r, double z) const;
00049 double deltaEta(int det, int eta, int depth) const;
00050 void initialize(std::string & name, const DDCompactView & cpv);
00051 void loadSpecPars(DDFilteredView);
00052 void loadGeometry(DDFilteredView);
00053 std::vector<double> getDDDArray(const std::string &, const DDsvalues_type &,
00054 int&) const;
00055 int getShift(HcalSubdetector subdet, int depth) const;
00056 double getGain (HcalSubdetector subdet, int depth) const;
00057 unsigned find (int element, std::vector<int> array) const;
00058
00059 private:
00060
00061 std::vector<double> phioff;
00062 std::vector<double> etaTable;
00063 int nEta;
00064 std::vector<double> rTable;
00065 int nR;
00066 std::vector<int> etaMin;
00067 std::vector<int> etaMax;
00068 std::vector<double> phibin;
00069 int nPhi;
00070 std::vector<int> depth1;
00071 std::vector<int> depth2;
00072 std::vector<int> depth3;
00073 int nDepth;
00074 std::vector<double> gainHB;
00075 std::vector<int> shiftHB;
00076 std::vector<double> gainHE;
00077 std::vector<int> shiftHE;
00078 std::vector<double> gainHF;
00079 std::vector<int> shiftHF;
00080 double zVcal;
00081 double dzVcal;
00082 std::vector<int> nOff;
00083 std::vector<double> rHB;
00084 std::vector<double> zHE;
00085 int nzHB, nmodHB;
00086 int nzHE, nmodHE;
00087 };
00088
00089 #endif