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, CLHEP::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 unsigned int numberOfCells(HcalSubdetector) const;
00043 std::vector<HcalCellType> HcalCellTypes() const;
00044 std::vector<HcalCellType> HcalCellTypes(HcalSubdetector) const;
00045 void printTile();
00046
00047 private:
00048
00049 double getEta(int det, int etaR, int zside, int depth=1) const;
00050 double getEta(double r, double z) const;
00051 double deltaEta(int det, int eta, int depth) const;
00052 void initialize(std::string & name, const DDCompactView & cpv);
00053 void loadSpecPars(DDFilteredView);
00054 void loadGeometry(DDFilteredView);
00055 std::vector<double> getDDDArray(const std::string &, const DDsvalues_type &,
00056 int&) const;
00057 int getShift(HcalSubdetector subdet, int depth) const;
00058 double getGain (HcalSubdetector subdet, int depth) const;
00059 unsigned find (int element, std::vector<int> array) const;
00060 int unitPhi (int det, int etaR) const;
00061 void tileHB(int eta, int depth);
00062 void tileHE(int eta, int depth);
00063
00064 private:
00065
00066 std::vector<double> phioff;
00067 std::vector<double> etaTable;
00068 int nEta;
00069 std::vector<double> rTable;
00070 int nR;
00071 std::vector<int> etaMin;
00072 std::vector<int> etaMax;
00073 std::vector<double> phibin;
00074 int nPhi;
00075 std::vector<int> depth1;
00076 std::vector<int> depth2;
00077 std::vector<int> depth3;
00078 int nDepth;
00079 std::vector<double> gainHB;
00080 std::vector<int> shiftHB;
00081 std::vector<double> gainHE;
00082 std::vector<int> shiftHE;
00083 std::vector<double> gainHF;
00084 std::vector<int> shiftHF;
00085 double zVcal;
00086 double dzVcal;
00087 double dlShort;
00088 std::vector<int> nOff;
00089 std::vector<double> rHB, drHB;
00090 std::vector<double> zHE, dzHE;
00091 int nzHB, nmodHB;
00092 int nzHE, nmodHE;
00093 double etaHO[4];
00094 std::vector<double> rhoxb, zxb, dyxb, dzxb;
00095 std::vector<int> layb, laye;
00096 std::vector<double> zxe, rhoxe, dyxe, dx1e, dx2e;
00097 };
00098
00099 #endif