CMS 3D CMS Logo

CMSSW_4_4_3_patch1/src/Geometry/HcalCommonData/interface/HcalNumberingFromDDD.h

Go to the documentation of this file.
00001 
00002 // File: HcalNumberingFromDDD.h
00003 // Description: Usage of DDD to get to numbering scheme for hadron calorimeter
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;   // Phi offset for barrel, endcap, forward
00067   std::vector<double> etaTable; // Eta table 
00068   int                 nEta;     // Number of bins in eta for HB and HE
00069   std::vector<double> rTable;   // R-table
00070   int                 nR;       // Number of bins in r
00071   std::vector<int>    etaMin;   // Minimum eta bin number for HB/HE/HF
00072   std::vector<int>    etaMax;   // Maximum eta bin number for HB/HE/HF
00073   std::vector<double> phibin;   // Phi step for all eta bins (HB, HE and HF)
00074   int                 nPhi;     // Number of bins in dphi
00075   std::vector<int>    depth1;   // Maximum layer number for depth 1
00076   std::vector<int>    depth2;   // Maximum layer number for depth 2
00077   std::vector<int>    depth3;   // Maximum layer number for depth 3
00078   int                 nDepth;   // Number of bins in depth1/depth2/depth3
00079   std::vector<double> gainHB;   // Gain factor   for HB
00080   std::vector<int>    shiftHB;  // Readout shift ..  ..
00081   std::vector<double> gainHE;   // Gain factor   for HE
00082   std::vector<int>    shiftHE;  // Readout shift ..  ..
00083   std::vector<double> gainHF;   // Gain factor   for HF
00084   std::vector<int>    shiftHF;  // Readout shift ..  ..
00085   double              zVcal;    // Z-position  of the front of HF
00086   double              dzVcal;   // Half length of the HF
00087   double              dlShort;  // Diference of length between long and short
00088   std::vector<int>    nOff;     // Speical eta bin #'s in barrel and endcap
00089   std::vector<double> rHB, drHB;    // Radial positions of HB layers
00090   std::vector<double> zHE, dzHE;    // Z-positions of HE layers
00091   int                 nzHB, nmodHB; // Number of halves and modules in HB
00092   int                 nzHE, nmodHE; // Number of halves and modules in HE
00093   double              etaHO[4];     // eta in HO ring boundaries
00094   std::vector<double> rhoxb, zxb, dyxb, dzxb; // Geometry parameters to
00095   std::vector<int>    layb, laye;             // get tile size for HB & HE
00096   std::vector<double> zxe, rhoxe, dyxe, dx1e, dx2e; // in different layers
00097 };
00098 
00099 #endif