diff --git a/Calibration/HcalCalibAlgos/plugins/HcalHBHEMuonAnalyzer.cc b/Calibration/HcalCalibAlgos/plugins/HcalHBHEMuonAnalyzer.cc index d5cacd693ff3c..a471582ceb5a9 100644 --- a/Calibration/HcalCalibAlgos/plugins/HcalHBHEMuonAnalyzer.cc +++ b/Calibration/HcalCalibAlgos/plugins/HcalHBHEMuonAnalyzer.cc @@ -67,15 +67,14 @@ class HcalHBHEMuonAnalyzer : public edm::one::EDAnalyzer + diff --git a/Geometry/HcalCommonData/interface/HcalDDDRecConstants.h b/Geometry/HcalCommonData/interface/HcalDDDRecConstants.h index e3c94b7dba3e1..502cc2cfd337a 100644 --- a/Geometry/HcalCommonData/interface/HcalDDDRecConstants.h +++ b/Geometry/HcalCommonData/interface/HcalDDDRecConstants.h @@ -44,6 +44,7 @@ class HcalDDDRecConstants { struct HcalActiveLength { int ieta, depth, zside, stype; double eta, thick; + std::vector iphis; HcalActiveLength(int ie=0, int d=0, int z=0, int s=0, double et=0, double t=0) : ieta(ie), depth(d), zside(z), stype(s), eta(et), thick(t) {} @@ -57,49 +58,51 @@ class HcalDDDRecConstants { nPhi(nfi), rMin(r1), rMax(r2) {} }; - std::vector > getConstHBHE(const int type) const { + std::vector > getConstHBHE(const int& type) const { if (type == 0) return gconsHB; else if (type == 1) return gconsHE; else {std::vector > gcons; return gcons;} } - std::vector getDepth(int det, int phi, - int zside, unsigned int eta) const; - std::vector getDepth(unsigned int eta, bool extra) const; - int getDepthEta16(const int det, const int iphi, - const int zside) const {return hcons.getDepthEta16(det,iphi,zside);} - std::vector getEtaBins(int itype) const; - std::pair getEtaPhi(int subdet, int ieta, int iphi) const; - std::pair getEtaRange(const int i) const + std::vector getDepth(const int& det, const int& phi, + const int& zside, const unsigned int& eta) const; + std::vector getDepth(const unsigned int& eta, const bool& extra) const; + int getDepthEta16(const int& det, const int& iphi, + const int& zside) const {return hcons.getDepthEta16(det,iphi,zside);} + std::vector getEtaBins(const int& itype) const; + std::pair getEtaPhi(const int& subdet, const int& ieta, const int& iphi) const; + std::pair getEtaRange(const int& i) const {return std::pair(iEtaMin[i],iEtaMax[i]);} const std::vector & getEtaTable() const {return etaTable;} const std::vector & getEtaTableHF() const {return hpar->etaTableHF;} - std::pair getEtaLimit(const int i) const + std::pair getEtaLimit(const int& i) const {return std::pair(etaTable[i],etaTable[i+1]);} - HcalID getHCID(int subdet, int ieta, int iphi, int lay, - int idepth) const; + HcalID getHCID(int subdet, int ieta, int iphi, int lay, int idepth) const; std::vector getHFCellParameters() const; - void getLayerDepth(int ieta, std::map& layers) const; - int getLayerFront(int det, int eta, int phi, int depth) const; - double getLayer0Wt(int det, int phi, int zside) const {return hcons.getLayer0Wt(det,phi,zside);} - int getMaxDepth(const int type) const {return maxDepth[type];} - int getMaxDepth(int itype, int ieta, - int iphi, int zside) const; - int getMinDepth(int itype, int ieta, - int iphi, int zside) const; + void getLayerDepth(const int& ieta, std::map& layers) const; + int getLayerFront(const int& det, const int& eta, const int& phi, + const int& depth) const; + double getLayer0Wt(const int& det, const int& phi, + const int& zside) const {return hcons.getLayer0Wt(det,phi,zside);} + int getMaxDepth(const int& type) const {return maxDepth[type];} + int getMaxDepth(const int& itype, const int& ieta, + const int& iphi, const int& zside) const; + int getMinDepth(const int& itype, const int& ieta, + const int& iphi, const int& zside) const; int getNEta() const {return hpar->etagroup.size();} - int getNoff(const int i) const {return hpar->noff[i];} - int getNPhi(const int type) const {return nPhiBins[type];} - double getPhiBin(const int i) const {return phibin[i];} - double getPhiOff(const int i) const {return hpar->phioff[i];} + int getNoff(const int& i) const {return hpar->noff[i];} + int getNPhi(const int& type) const {return nPhiBins[type];} + double getPhiBin(const int& i) const {return phibin[i];} + double getPhiOff(const int& i) const {return hpar->phioff[i];} const std::vector & getPhiOffs() const {return hpar->phioff;} - std::vector > getPhis(int subdet, int ieta) const; + std::vector > getPhis(const int& subdet, const int& ieta) const; const std::vector & getPhiTable() const {return phibin;} const std::vector & getPhiTableHF() const {return hpar->phitable;} int getPhiZOne(std::vector >& phiz) const; - double getRZ(int subdet, int ieta, int depth) const; - double getRZ(int subdet, int ieta, int iphi, int depth) const; - double getRZ(int subdet, int layer) const; - std::vector getThickActive(int type) const; + double getRZ(const int& subdet, const int& ieta, const int& depth) const; + double getRZ(const int& subdet, const int& ieta, const int& iphi, + const int& depth) const; + double getRZ(const int& subdet, const int& layer) const; + std::vector getThickActive(const int& type) const; int getTopoMode() const {return ((hpar->topologyMode)&0xFF);} int getTriggerMode() const {return (((hpar->topologyMode)>>8)&0xFF);} std::vector HcalCellTypes(HcalSubdetector) const; diff --git a/Geometry/HcalCommonData/interface/HcalDDDSimConstants.h b/Geometry/HcalCommonData/interface/HcalDDDSimConstants.h index 8230607fa0d12..db8a41bd30273 100644 --- a/Geometry/HcalCommonData/interface/HcalDDDSimConstants.h +++ b/Geometry/HcalCommonData/interface/HcalDDDSimConstants.h @@ -28,79 +28,80 @@ class HcalDDDSimConstants { HcalDDDSimConstants(const HcalParameters* hp); ~HcalDDDSimConstants(); - HcalCellType::HcalCell cell(int det, int zside, - int depth, int etaR, - int iphi) const; - int findDepth(int det, int eta, - int phi, int zside, - int lay) const; - unsigned int findLayer(int layer, const std::vector& layerGroup) const; - std::vector > getConstHBHE(int type) const; - int getDepthEta16(int det, int phi, - int zside) const; - int getDepthEta16M(int det) const; - int getDepthEta29(int phi, int zside, int i) const; - int getDepthEta29M(int i, bool planOne) const; - std::pair getDetEta(double eta, int depth); - int getEta(int det, int lay, double hetaR); - std::pair getEtaDepth(int det, int etaR, int phi, - int zside, int depth, int lay); - double getEtaHO(double& etaR, double& x, double& y, - double& z) const; - std::pair getiEtaRange(const int i) const {return std::pair(hpar->etaMin[i],hpar->etaMax[i]);} + HcalCellType::HcalCell cell(const int& det, const int& zside, const int& depth, + const int& etaR, const int& iphi) const; + int findDepth(const int& det, const int& eta, const int& phi, + const int& zside, const int& lay) const; + unsigned int findLayer(const int& layer, const std::vector& layerGroup) const; + std::vector > getConstHBHE(const int& type) const; + int getDepthEta16(const int& det, const int& phi, + const int& zside) const; + int getDepthEta16M(const int& det) const; + int getDepthEta29(const int& phi, const int& zside, const int& i) const; + int getDepthEta29M(const int& i, const bool& planOne) const; + std::pair getDetEta(const double& eta, const int& depth); + int getEta(const int& det, const int& lay, const double& hetaR); + std::pair getEtaDepth(const int& det, int etaR, const int& phi, + const int& zside, int depth, const int& lay); + double getEtaHO(const double& etaR, const double& x, const double& y, + const double& z) const; + std::pair getiEtaRange(const int& i) const {return std::pair(hpar->etaMin[i],hpar->etaMax[i]);} const std::vector & getEtaTableHF() const {return hpar->etaTableHF;} const std::vector & getGparHF() const {return hpar->gparHF;} const std::vector & getIdHF2QIE() const {return idHF2QIE;} - double getLayer0Wt(int det, int phi, - int zside) const; - int getFrontLayer(int det, int eta) const; - int getLayerFront(int det, int eta, - int phi, int zside, - int depth) const; - int getLayerBack(int det, int eta, - int phi, int zside, - int depth) const; - int getLayerMax(int eta, int depth) const; - int getMaxDepth(const int type) const {return maxDepth[type];} - int getMaxDepth(int det, int eta, - int phi, int zside, - bool partialOnly) const; - std::pair getMaxDepthDet(const int i) const {return ((i==1) ? depthMaxDf_ : depthMaxSp_);} - int getMinDepth(int det, int eta, - int phi, int zside, - bool partialOnly) const; - std::pair getModHalfHBHE(int type) const; - std::pair getPhiCons(int det, int ieta) const; - std::vector > getPhis(int subdet, int ieta) const; + double getLayer0Wt(const int& det, const int& phi, + const int& zside) const; + int getFrontLayer(const int& det, const int& eta) const; + int getLastLayer(const int& det, const int& eta) const; + int getLayerFront(const int& det, const int& eta, + const int& phi, const int& zside, + const int& depth) const; + int getLayerBack(const int& det, const int& eta, + const int& phi, const int& zside, + const int& depth) const; + int getLayerMax(const int& eta, const int& depth) const; + int getMaxDepth(const int& type) const {return maxDepth[type];} + int getMaxDepth(const int& det, const int& eta, + const int& phi, const int& zside, + const bool& partialOnly) const; + std::pair getMaxDepthDet(const int& i) const {return ((i==1) ? depthMaxDf_ : depthMaxSp_);} + int getMinDepth(const int& det, const int& eta, + const int& phi, const int& zside, + const bool& partialOnly) const; + std::pair getModHalfHBHE(const int& type) const; + std::pair getPhiCons(const int& det, const int& ieta) const; + std::vector > getPhis(const int& subdet, const int& ieta) const; const std::vector & getPhiTableHF() const {return hpar->phitable;} const std::vector & getRTableHF() const {return hpar->rTable;} std::vector HcalCellTypes() const; - std::vector HcalCellTypes(HcalSubdetector, int ieta=-1, + std::vector HcalCellTypes(const HcalSubdetector&, int ieta=-1, int depth=-1) const; bool isBH() const {return isBH_;} const HcalLayerDepthMap* ldMap() const {return &ldmap_;} - int maxHFDepth(int ieta, int iphi) const; - unsigned int numberOfCells(HcalSubdetector) const; - int phiNumber(int phi, int unit) const; + int maxHFDepth(const int& ieta, const int& iphi) const; + unsigned int numberOfCells(const HcalSubdetector&) const; + int phiNumber(const int& phi, const int& unit) const; void printTiles() const; - int unitPhi(int det, int etaR) const; - int unitPhi(double dphi) const; + int unitPhi(const int& det, const int& etaR) const; + int unitPhi(const double& dphi) const; private: + + static const int nDepthMax=9; + static const int maxLayer_=18; + static const int maxLayerHB_=16; + void initialize(); - double deltaEta(int det, int eta, - int depth) const; - double getEta(int det, int etaR, - int zside, int depth=1) const; - double getEta(double r, double z) const; - int getShift(HcalSubdetector subdet, - int depth) const; - double getGain (HcalSubdetector subdet, - int depth) const; - void printTileHB(int eta, int phi, - int zside, int depth) const; - void printTileHE(int eta, int phi, - int zside, int depth) const; + double deltaEta(const int& det, const int& eta, const int& depth) const; + double getEta(const int& det, const int& etaR, + const int& zside, int depth=1) const; + double getEta(const double& r, const double& z) const; + int getShift(const HcalSubdetector& subdet, const int& depth) const; + double getGain (const HcalSubdetector& subdet, const int& depth) const; + void printTileHB(const int& eta, const int& phi, + const int& zside, const int& depth) const; + void printTileHE(const int& eta, const int& phi, + const int& zside, const int& depth) const; unsigned int layerGroupSize(int eta) const; unsigned int layerGroup(int eta, int i) const; unsigned int layerGroup(int det, int eta, @@ -110,10 +111,6 @@ class HcalDDDSimConstants { const HcalParameters* hpar; HcalLayerDepthMap ldmap_; - static const int nDepthMax=9; - static const int maxLayer_=18; - static const int maxLayerHB_=16; - std::vector maxDepth; // Maximum depths in HB/HE/HF/HO int nEta; // Number of bins in eta for HB and HE int nR; // Number of bins in r @@ -130,6 +127,8 @@ class HcalDDDSimConstants { int depthEta29[2]; // maximum depth index for ieta=29 int layFHB[2]; // first layers in HB (normal, special 16) int layFHE[3]; // first layers in HE (normal, special 16, 18) + int layBHB[3]; // last layers in HB (normal, special 15, 16) + int layBHE[4]; // last layers in HE (normal, special 16, 17, 18) bool isBH_; // if HE is BH std::vector idHF2QIE; // DetId's of HF modules with 2 QIE's std::pair depthMaxDf_, depthMaxSp_; // (subdet,maximum depth) default,special diff --git a/Geometry/HcalCommonData/src/HcalDDDRecConstants.cc b/Geometry/HcalCommonData/src/HcalDDDRecConstants.cc index 6045574e73a9c..c6ddd1787209e 100644 --- a/Geometry/HcalCommonData/src/HcalDDDRecConstants.cc +++ b/Geometry/HcalCommonData/src/HcalDDDRecConstants.cc @@ -26,8 +26,8 @@ HcalDDDRecConstants::~HcalDDDRecConstants() { #endif } -std::vector HcalDDDRecConstants::getDepth(const unsigned int eta, - const bool extra) const { +std::vector HcalDDDRecConstants::getDepth(const unsigned int& eta, + const bool& extra) const { if (!extra) { std::vector::const_iterator last = hpar->layerGroupEtaRec.begin(); @@ -47,7 +47,8 @@ std::vector HcalDDDRecConstants::getDepth(const unsigned int eta, } } -std::vector HcalDDDRecConstants::getDepth(const int det, const int phi, const int zside, const unsigned int eta) const { +std::vector HcalDDDRecConstants::getDepth(const int& det, const int& phi, const int& zside, + const unsigned int& eta) const { std::map layers; hcons.ldMap()->getLayerDepth(det, eta+1, phi, zside, layers); if (layers.empty()) { @@ -61,7 +62,7 @@ std::vector HcalDDDRecConstants::getDepth(const int det, const int phi, con } std::vector -HcalDDDRecConstants::getEtaBins(const int itype) const { +HcalDDDRecConstants::getEtaBins(const int& itype) const { std::vector bins; unsigned int type = (itype == 0) ? 0 : 1; @@ -131,7 +132,7 @@ HcalDDDRecConstants::getEtaBins(const int itype) const { } std::pair -HcalDDDRecConstants::getEtaPhi(int subdet, int ieta, int iphi) const { +HcalDDDRecConstants::getEtaPhi(const int& subdet, const int& ieta, const int& iphi) const { int ietaAbs = (ieta > 0) ? ieta : -ieta; double eta(0), phi(0); if ((subdet == static_cast(HcalBarrel)) || @@ -270,8 +271,7 @@ HcalDDDRecConstants::getHFCellParameters() const { return cells; } -void HcalDDDRecConstants::getLayerDepth(const int ieta, - std::map& layers) const { +void HcalDDDRecConstants::getLayerDepth(const int& ieta, std::map& layers) const { layers.clear(); for (unsigned int l=0; l 0) ? 1 : -1; int eta = zside*ieta; int layFront = hcons.ldMap()->getLayerFront(subdet,eta,iphi,zside,depth); if (layFront < 0) { int laymin = hcons.getFrontLayer(subdet, ieta); - if (eta <= hpar->etaMax[1]) { + if (eta == 16 && subdet == 2) { + layFront = laymin; + } else if (eta <= hpar->etaMax[1]) { for (unsigned int k=0; k= laymin) { @@ -313,8 +315,8 @@ int HcalDDDRecConstants::getLayerFront(const int idet, const int ieta, return layFront; } -int HcalDDDRecConstants::getMaxDepth (const int itype, const int ieta, - const int iphi, const int zside) const { +int HcalDDDRecConstants::getMaxDepth (const int& itype, const int& ieta, + const int& iphi, const int& zside) const { unsigned int type = (itype == 0) ? 0 : 1; int lmax = hcons.getMaxDepth(type+1, ieta, iphi, zside, true); @@ -328,11 +330,15 @@ int HcalDDDRecConstants::getMaxDepth (const int itype, const int ieta, if (type == 1 && ieta >= hpar->noff[1]) lmax = hcons.getDepthEta29M(0,false); } } +#ifdef EDM_ML_DEBUG + std::cout << "getMaxDepth::Input " << itype << ":" << ieta << ":" + << iphi << ":" << zside << " Output " << lmax << std::endl; +#endif return lmax; } -int HcalDDDRecConstants::getMinDepth (const int itype, const int ieta, - const int iphi, const int zside) const { +int HcalDDDRecConstants::getMinDepth (const int& itype, const int& ieta, + const int& iphi, const int& zside) const { int lmin = hcons.getMinDepth(itype+1, ieta, iphi, zside, true); if (lmin < 0) { @@ -354,7 +360,7 @@ int HcalDDDRecConstants::getMinDepth (const int itype, const int ieta, } std::vector > -HcalDDDRecConstants::getPhis(int subdet, int ieta) const { +HcalDDDRecConstants::getPhis(const int& subdet, const int& ieta) const { std::vector > phis; int ietaAbs = (ieta > 0) ? ieta : -ieta; @@ -401,13 +407,14 @@ int HcalDDDRecConstants::getPhiZOne(std::vector>& phiz) const return subdet; } -double HcalDDDRecConstants::getRZ(int subdet, int ieta, int depth) const { +double HcalDDDRecConstants::getRZ(const int& subdet, const int& ieta, + const int& depth) const { return getRZ(subdet, ieta, 1, depth); } -double HcalDDDRecConstants::getRZ(int subdet, int ieta, int iphi, - int depth) const { +double HcalDDDRecConstants::getRZ(const int& subdet, const int& ieta, const int& iphi, + const int& depth) const { int layf = getLayerFront(subdet,ieta,iphi,depth); double rz = (layf < 0) ? 0.0 : ((subdet == static_cast(HcalBarrel)) ? (gconsHB[layf].first) : @@ -420,7 +427,7 @@ double HcalDDDRecConstants::getRZ(int subdet, int ieta, int iphi, return rz; } -double HcalDDDRecConstants::getRZ(int subdet, int layer) const { +double HcalDDDRecConstants::getRZ(const int& subdet, const int& layer) const { double rz(0); if (layer > 0 && layer <= (int)(layerGroupSize(0))) @@ -435,7 +442,7 @@ double HcalDDDRecConstants::getRZ(int subdet, int layer) const { std::vector -HcalDDDRecConstants::getThickActive(const int type) const { +HcalDDDRecConstants::getThickActive(const int& type) const { std::vector actives; std::vector bins = getEtaBins(type); @@ -446,13 +453,26 @@ HcalDDDRecConstants::getThickActive(const int type) const { int ieta = bin.ieta; int zside = bin.zside; int stype = (bin.phis.size() > 4) ? 0 : 1; + int layf = getLayerFront(type+1,zside*ieta,bin.phis[0].first,bin.depthStart) + 1; + int layl = hcons.getLastLayer(type+1,zside*ieta) + 1; double eta = 0.5*(bin.etaMin+bin.etaMax); double theta = 2*atan(exp(-eta)); double scale = 1.0/((type == 0) ? sin(theta) : cos(theta)); int depth = bin.depthStart; +#ifdef EDM_ML_DEBUG + std::cout << "Eta " << ieta << " zside " << zside << " depth " << depth + << " Layers " << layf << ":" << layl << ":" << bin.layer.size(); + for (auto ll : bin.layer) std::cout << " " << ll.first << ":" << ll.second; + std::cout << " phi "; + for (auto phi : bin.phis) std::cout << " " << phi.first; + std::cout << std::endl; +#endif for (unsigned int i = 0; i < bin.layer.size(); ++i) { double thick(0); - for (int j = bin.layer[i].first; j <= bin.layer[i].second; ++j) { + int lmin = (type == 1 && ieta == iEtaMin[1]) ? layf : + std::max(bin.layer[i].first,layf); + int lmax = std::min(bin.layer[i].second,layl); + for (int j = lmin; j <= lmax; ++j) { if (type == 0 || j > 1) { double t = ((type == 0) ? gconsHB[j-1].second : gconsHE[j-1].second); if (t > 0) thick += t; @@ -460,6 +480,8 @@ HcalDDDRecConstants::getThickActive(const int type) const { } thick *= (2.*scale); HcalDDDRecConstants::HcalActiveLength active(ieta,depth,zside,stype,zside*eta,thick); + for (auto phi : bin.phis) + active.iphis.emplace_back(phi.first); actives.emplace_back(active); ++depth; #ifdef EDM_ML_DEBUG @@ -840,7 +862,8 @@ void HcalDDDRecConstants::initialize(void) { int laymax0 = (imx > 16) ? layerGroup(i,16) : laymax; if (i+1 == iEtaMax[0]) laymax0 = hcons.getDepthEta16M(1); #ifdef EDM_ML_DEBUG - std::cout << "HB " << i << " " << imx << " " << laymax << " " << laymax0 << std::endl; + std::cout << "HB " << i << " " << imx << " " << laymax << " " + << laymax0 << std::endl; #endif if (maxDepth[0] < laymax0) maxDepth[0] = laymax0; } @@ -1006,7 +1029,7 @@ void HcalDDDRecConstants::initialize(void) { } -unsigned int HcalDDDRecConstants::layerGroupSize(const int eta) const { +unsigned int HcalDDDRecConstants::layerGroupSize(int eta) const { unsigned int k = 0; for (auto const & it : hpar->layerGroupEtaRec) { if (it.layer == (unsigned int)(eta + 1)) { @@ -1018,8 +1041,7 @@ unsigned int HcalDDDRecConstants::layerGroupSize(const int eta) const { return k; } -unsigned int HcalDDDRecConstants::layerGroup(const int eta, - const int i) const { +unsigned int HcalDDDRecConstants::layerGroup(int eta, int i) const { unsigned int k = 0; for (auto const & it : hpar->layerGroupEtaRec) { if (it.layer == (unsigned int)(eta + 1)) { diff --git a/Geometry/HcalCommonData/src/HcalDDDSimConstants.cc b/Geometry/HcalCommonData/src/HcalDDDSimConstants.cc index 59c7694e4cd1e..85a726acfca4e 100644 --- a/Geometry/HcalCommonData/src/HcalDDDSimConstants.cc +++ b/Geometry/HcalCommonData/src/HcalDDDSimConstants.cc @@ -28,9 +28,9 @@ HcalDDDSimConstants::~HcalDDDSimConstants() { #endif } -HcalCellType::HcalCell HcalDDDSimConstants::cell(const int idet, const int zside, - const int depth, const int etaR, - const int iphi) const { +HcalCellType::HcalCell HcalDDDSimConstants::cell(const int& idet, const int& zside, + const int& depth, const int& etaR, + const int& iphi) const { double etaMn = hpar->etaMin[0]; double etaMx = hpar->etaMax[0]; @@ -120,15 +120,15 @@ HcalCellType::HcalCell HcalDDDSimConstants::cell(const int idet, const int zside return tmp; } -int HcalDDDSimConstants::findDepth(const int det, const int eta, - const int phi, const int zside, - const int lay) const { +int HcalDDDSimConstants::findDepth(const int& det, const int& eta, + const int& phi, const int& zside, + const int& lay) const { int depth = (ldmap_.isValid(det,phi,zside)) ? ldmap_.getDepth(det,eta,phi,zside,lay) : -1; return depth; } -unsigned int HcalDDDSimConstants::findLayer(const int layer, const std::vector& layerGroup) const { +unsigned int HcalDDDSimConstants::findLayer(const int& layer, const std::vector& layerGroup) const { unsigned int id = layerGroup.size(); for (unsigned int i = 0; i < layerGroup.size(); i++) { @@ -140,7 +140,7 @@ unsigned int HcalDDDSimConstants::findLayer(const int layer, const std::vector > HcalDDDSimConstants::getConstHBHE(const int type) const { +std::vector > HcalDDDSimConstants::getConstHBHE(const int& type) const { std::vector > gcons; if (type == 0) { @@ -155,8 +155,8 @@ std::vector > HcalDDDSimConstants::getConstHBHE(const i return gcons; } -int HcalDDDSimConstants::getDepthEta16(const int det, const int phi, - const int zside) const { +int HcalDDDSimConstants::getDepthEta16(const int& det, const int& phi, + const int& zside) const { int depth = ldmap_.getDepth16(det,phi,zside); if (depth < 0) depth = (det == 2) ? depthEta16[1] : depthEta16[0]; @@ -166,7 +166,7 @@ int HcalDDDSimConstants::getDepthEta16(const int det, const int phi, return depth; } -int HcalDDDSimConstants::getDepthEta16M(const int det) const { +int HcalDDDSimConstants::getDepthEta16M(const int& det) const { int depth = (det == 2) ? depthEta16[1] : depthEta16[0]; std::vector phis; int detsp = ldmap_.validDet(phis); @@ -180,16 +180,16 @@ int HcalDDDSimConstants::getDepthEta16M(const int det) const { return depth; } -int HcalDDDSimConstants::getDepthEta29(const int phi, const int zside, - const int i) const { +int HcalDDDSimConstants::getDepthEta29(const int& phi, const int& zside, + const int& i) const { int depth = (i == 0) ? ldmap_.getMaxDepthLastHE(2,phi,zside) : -1; if (depth < 0) depth = (i == 1) ? depthEta29[1] : depthEta29[0]; return depth; } -int HcalDDDSimConstants::getDepthEta29M(const int i, - const bool planOne) const { +int HcalDDDSimConstants::getDepthEta29M(const int& i, + const bool& planOne) const { int depth = (i == 1) ? depthEta29[1] : depthEta29[0]; if (i == 0 && planOne) { std::vector phis; @@ -204,8 +204,8 @@ int HcalDDDSimConstants::getDepthEta29M(const int i, return depth; } -std::pair HcalDDDSimConstants::getDetEta(const double eta, - const int depth) { +std::pair HcalDDDSimConstants::getDetEta(const double& eta, + const int& depth) { int hsubdet(0), ieta(0); double etaR(0); @@ -229,8 +229,8 @@ std::pair HcalDDDSimConstants::getDetEta(const double eta, return std::pair(hsubdet,etaR); } -int HcalDDDSimConstants::getEta(const int det, const int lay, - const double hetaR) { +int HcalDDDSimConstants::getEta(const int& det, const int& lay, + const double& hetaR) { int ieta(0); if (det == static_cast(HcalForward)) { // Forward HCal @@ -253,9 +253,9 @@ int HcalDDDSimConstants::getEta(const int det, const int lay, return ieta; } -std::pair HcalDDDSimConstants::getEtaDepth(const int det, int etaR, - int phi, int zside, - int depth, int lay) { +std::pair HcalDDDSimConstants::getEtaDepth(const int& det, int etaR, + const int& phi, const int& zside, + int depth, const int& lay) { #ifdef EDM_ML_DEBUG std::cout << "HcalDDDEsimConstants:getEtaDepth: I/P " << det << ":" << etaR @@ -299,8 +299,8 @@ std::pair HcalDDDSimConstants::getEtaDepth(const int det, int etaR, return std::pair(etaR,depth); } -double HcalDDDSimConstants::getEtaHO(double& etaR, double& x, double& y, - double& z) const { +double HcalDDDSimConstants::getEtaHO(const double& etaR, const double& x, const double& y, + const double& z) const { if (hpar->zHO.size() > 4) { double eta = fabs(etaR); @@ -325,31 +325,47 @@ double HcalDDDSimConstants::getEtaHO(double& etaR, double& x, double& y, } } -int HcalDDDSimConstants::getFrontLayer(const int det, const int eta) const { +int HcalDDDSimConstants::getFrontLayer(const int& det, const int& eta) const { int lay=0; if (det == 1) { - if (eta == 16 || eta == -16) lay = layFHB[1]; - else lay = layFHB[0]; + if (std::abs(eta) == 16) lay = layFHB[1]; + else lay = layFHB[0]; } else { - if (eta == 16 || eta == -16) lay = layFHE[1]; - else if (eta == 18 || eta == -18) lay = layFHE[2]; - else lay = layFHE[0]; + if (std::abs(eta) == 16) lay = layFHE[1]; + else if (std::abs(eta) == 18) lay = layFHE[2]; + else lay = layFHE[0]; } return lay; } -double HcalDDDSimConstants::getLayer0Wt(const int det, const int phi, - const int zside) const { +int HcalDDDSimConstants::getLastLayer(const int& det, const int& eta) const { + + int lay=0; + if (det == 1) { + if (std::abs(eta) == 15) lay = layBHB[1]; + else if (std::abs(eta) == 16) lay = layBHB[2]; + else lay = layBHB[0]; + } else { + if (std::abs(eta) == 16) lay = layBHE[1]; + else if (std::abs(eta) == 17) lay = layBHE[2]; + else if (std::abs(eta) == 18) lay = layBHE[3]; + else lay = layBHE[0]; + } + return lay; +} + +double HcalDDDSimConstants::getLayer0Wt(const int& det, const int& phi, + const int& zside) const { double wt = ldmap_.getLayer0Wt(det, phi, zside); if (wt < 0) wt = (det == 2) ? hpar->Layer0Wt[1] : hpar->Layer0Wt[0]; return wt; } -int HcalDDDSimConstants::getLayerFront(const int det, const int eta, - const int phi, const int zside, - const int depth) const { +int HcalDDDSimConstants::getLayerFront(const int& det, const int& eta, + const int& phi, const int& zside, + const int& depth) const { int layer = ldmap_.getLayerFront(det, eta, phi, zside, depth); if (layer < 0) { @@ -367,9 +383,9 @@ int HcalDDDSimConstants::getLayerFront(const int det, const int eta, return layer; } -int HcalDDDSimConstants::getLayerBack(const int det, const int eta, - const int phi, const int zside, - const int depth) const { +int HcalDDDSimConstants::getLayerBack(const int& det, const int& eta, + const int& phi, const int& zside, + const int& depth) const { int layer = ldmap_.getLayerBack(det, eta, phi, zside, depth); if (layer < 0) { @@ -382,15 +398,15 @@ int HcalDDDSimConstants::getLayerBack(const int det, const int eta, return layer; } -int HcalDDDSimConstants::getLayerMax(const int eta, const int depth) const { +int HcalDDDSimConstants::getLayerMax(const int& eta, const int& depth) const { int layermx = ((eta < hpar->etaMin[1]) && depth-1 < maxDepth[0]) ? maxLayerHB_+1 : (int)layerGroupSize(eta-1); return layermx; } -int HcalDDDSimConstants::getMaxDepth(const int det, const int eta, - const int phi, const int zside, - const bool partialDetOnly) const { +int HcalDDDSimConstants::getMaxDepth(const int& det, const int& eta, + const int& phi, const int& zside, + const bool& partialDetOnly) const { int dmax(-1); if (partialDetOnly) { @@ -416,9 +432,9 @@ int HcalDDDSimConstants::getMaxDepth(const int det, const int eta, return dmax; } -int HcalDDDSimConstants::getMinDepth(const int det, const int eta, - const int phi, const int zside, - const bool partialDetOnly) const { +int HcalDDDSimConstants::getMinDepth(const int& det, const int& eta, + const int& phi, const int& zside, + const bool& partialDetOnly) const { int lmin(-1); if (partialDetOnly) { @@ -444,7 +460,7 @@ int HcalDDDSimConstants::getMinDepth(const int det, const int eta, return lmin; } -std::pair HcalDDDSimConstants::getModHalfHBHE(const int type) const { +std::pair HcalDDDSimConstants::getModHalfHBHE(const int& type) const { if (type == 0) { return std::pair(nmodHB,nzHB); @@ -453,8 +469,8 @@ std::pair HcalDDDSimConstants::getModHalfHBHE(const int type) const { } } -std::pair HcalDDDSimConstants::getPhiCons(const int det, - const int ieta) const { +std::pair HcalDDDSimConstants::getPhiCons(const int& det, + const int& ieta) const { double fioff(0), fibin(0); if (det == static_cast(HcalForward)) { // Forward HCal @@ -475,7 +491,7 @@ std::pair HcalDDDSimConstants::getPhiCons(const int det, } std::vector > -HcalDDDSimConstants::getPhis(const int subdet, const int ieta) const { +HcalDDDSimConstants::getPhis(const int& subdet, const int& ieta) const { std::vector > phis; int ietaAbs = (ieta > 0) ? ieta : -ieta; @@ -537,7 +553,8 @@ std::vector HcalDDDSimConstants::HcalCellTypes() const{ return cellTypes; } -std::vector HcalDDDSimConstants::HcalCellTypes(const HcalSubdetector subdet, const int ieta, const int depthl) const { +std::vector HcalDDDSimConstants::HcalCellTypes(const HcalSubdetector& subdet, + int ieta, int depthl) const { std::vector cellTypes; if (subdet == HcalForward) { @@ -636,7 +653,7 @@ std::vector HcalDDDSimConstants::HcalCellTypes(const HcalSubdetect return cellTypes; } -int HcalDDDSimConstants::maxHFDepth(const int eta, const int iphi) const { +int HcalDDDSimConstants::maxHFDepth(const int& eta, const int& iphi) const { int mxdepth = maxDepth[2]; if (!idHF2QIE.empty()) { bool ok(false); @@ -650,7 +667,7 @@ int HcalDDDSimConstants::maxHFDepth(const int eta, const int iphi) const { return mxdepth; } -unsigned int HcalDDDSimConstants::numberOfCells(const HcalSubdetector subdet) const{ +unsigned int HcalDDDSimConstants::numberOfCells(const HcalSubdetector& subdet) const{ unsigned int num = 0; std::vector cellTypes = HcalCellTypes(subdet); @@ -665,7 +682,7 @@ unsigned int HcalDDDSimConstants::numberOfCells(const HcalSubdetector subdet) co return num; } -int HcalDDDSimConstants::phiNumber(const int phi, const int units) const { +int HcalDDDSimConstants::phiNumber(const int& phi, const int& units) const { int iphi_skip = phi; if (units==2) iphi_skip = (phi-1)*2+1; @@ -681,7 +698,9 @@ void HcalDDDSimConstants::printTiles() const { int kphi = (detsp > 0) ? phis[0] : 1; int zside = (kphi > 0) ? 1 : -1; int iphi = (kphi > 0) ? kphi : -kphi; - std::cout << "Tile Information for HB from " << hpar->etaMin[0] << " to " << hpar->etaMax[0] << "\n\n"; + edm::LogVerbatim("HcalGeom") << "Tile Information for HB from " + << hpar->etaMin[0] << " to " << hpar->etaMax[0] + << "\n"; for (int eta=hpar->etaMin[0]; eta<= hpar->etaMax[0]; eta++) { int dmax = getMaxDepth(1,eta,iphi,-zside,false); for (int depth=1; depth<=dmax; depth++) @@ -693,7 +712,9 @@ void HcalDDDSimConstants::printTiles() const { } } - std::cout << "\nTile Information for HE from " << hpar->etaMin[1] << " to " << hpar->etaMax[1] << "\n\n"; + edm::LogVerbatim("HcalGeom") << "\nTile Information for HE from " + << hpar->etaMin[1] << " to " << hpar->etaMax[1] + << "\n"; for (int eta=hpar->etaMin[1]; eta<= hpar->etaMax[1]; eta++) { int dmin = (eta == hpar->etaMin[1]) ? getDepthEta16(2,iphi,-zside) : 1; int dmax = getMaxDepth(2,eta,iphi,-zside,false); @@ -707,13 +728,13 @@ void HcalDDDSimConstants::printTiles() const { } } -int HcalDDDSimConstants::unitPhi(const int det, const int etaR) const { +int HcalDDDSimConstants::unitPhi(const int& det, const int& etaR) const { double dphi = (det == static_cast(HcalForward)) ? hpar->phitable[etaR-hpar->etaMin[2]] : hpar->phibin[etaR-1]; return unitPhi(dphi); } -int HcalDDDSimConstants::unitPhi(const double dphi) const { +int HcalDDDSimConstants::unitPhi(const double& dphi) const { const double fiveDegInRad = 2*M_PI/72; int units = int(dphi/fiveDegInRad+0.5); @@ -857,8 +878,10 @@ void HcalDDDSimConstants::initialize( void ) { std::cout << " [" << k << "] " << idHF2QIE[k] << std::endl; #endif - layFHB[0] = 0; layFHB[1] = 1; - layFHE[0] = 1; layFHE[1] = 9; layFHE[2] = 0; + layFHB[0] = 0; layFHB[1] = 1; + layBHB[0] = 16; layBHB[1] = 15; layBHB[2] = 8; + layFHE[0] = 1; layFHE[1] = 4; layFHE[2] = 0; + layBHE[0] = 18; layBHE[1] = 9; layBHE[2] = 14; layBHE[3] = 16; depthMaxSp_ = std::pair(0,0); int noffk(noffsize+5); if ((int)(hpar->noff.size()) > (noffsize+5)) { @@ -906,6 +929,10 @@ void HcalDDDSimConstants::initialize( void ) { for (int i=0; i<2; ++i) layFHB[i] = hpar->noff[noffm+i+1]; for (int i=0; i<3; ++i) layFHE[i] = hpar->noff[noffm+i+3]; } + if (ndnext > 11 && (int)(hpar->noff.size()) >= noffm+ndnext) { + for (int i=0; i<3; ++i) layBHB[i] = hpar->noff[noffm+i+6]; + for (int i=0; i<4; ++i) layBHE[i] = hpar->noff[noffm+i+9]; + } } } } @@ -913,6 +940,10 @@ void HcalDDDSimConstants::initialize( void ) { std::cout << "Front Layer Definition for HB: " << layFHB[0] << ":" << layFHB[1] << " and for HE: " << layFHE[0] << ":" << layFHE[1] << ":" << layFHE[2] << std::endl; + std::cout << "Last Layer Definition for HB: " << layBHB[0] << ":" + << layBHB[1] << ":" << layBHB[2] << " and for HE: " << layBHE[0] + << ":" << layBHE[1] << ":" << layBHE[2] << ":" << layBHE[3] + << std::endl; #endif if (depthMaxSp_.first == 0) { depthMaxSp_ = depthMaxDf_ = std::pair(2,maxDepth[1]); @@ -931,8 +962,8 @@ void HcalDDDSimConstants::initialize( void ) { #endif } -double HcalDDDSimConstants::deltaEta(const int det, const int etaR, - const int depth) const { +double HcalDDDSimConstants::deltaEta(const int& det, const int& etaR, + const int& depth) const { double tmp = 0; if (det == static_cast(HcalForward)) { @@ -970,8 +1001,8 @@ double HcalDDDSimConstants::deltaEta(const int det, const int etaR, return tmp; } -double HcalDDDSimConstants::getEta(const int det, const int etaR, - const int zside, const int depth) const { +double HcalDDDSimConstants::getEta(const int& det, const int& etaR, + const int& zside, int depth) const { double tmp = 0; if (det == static_cast(HcalForward)) { @@ -1010,7 +1041,7 @@ double HcalDDDSimConstants::getEta(const int det, const int etaR, return tmp; } -double HcalDDDSimConstants::getEta(const double r, const double z) const { +double HcalDDDSimConstants::getEta(const double& r, const double& z) const { double tmp = 0; if (z != 0) tmp = -log(tan(0.5*atan(r/z))); @@ -1021,8 +1052,8 @@ double HcalDDDSimConstants::getEta(const double r, const double z) const { return tmp; } -int HcalDDDSimConstants::getShift(const HcalSubdetector subdet, - const int depth) const { +int HcalDDDSimConstants::getShift(const HcalSubdetector& subdet, + const int& depth) const { int shift; switch(subdet) { @@ -1042,8 +1073,8 @@ int HcalDDDSimConstants::getShift(const HcalSubdetector subdet, return shift; } -double HcalDDDSimConstants::getGain(const HcalSubdetector subdet, - const int depth) const { +double HcalDDDSimConstants::getGain(const HcalSubdetector& subdet, + const int& depth) const { double gain; switch(subdet) { @@ -1063,9 +1094,10 @@ double HcalDDDSimConstants::getGain(const HcalSubdetector subdet, return gain; } -void HcalDDDSimConstants::printTileHB(const int eta, const int phi, - const int zside, const int depth) const { - std::cout << "HcalDDDSimConstants::printTileHB for eta " << eta << " and depth " << depth << "\n"; +void HcalDDDSimConstants::printTileHB(const int& eta, const int& phi, + const int& zside, const int& depth) const { + edm::LogVerbatim("HcalGeom") << "HcalDDDSimConstants::printTileHB for eta " + << eta << " and depth " << depth; double etaL = hpar->etaTable.at(eta-1); double thetaL = 2.*atan(exp(-etaL)); @@ -1073,7 +1105,10 @@ void HcalDDDSimConstants::printTileHB(const int eta, const int phi, double thetaH = 2.*atan(exp(-etaH)); int layL = getLayerFront(1,eta,phi,zside,depth); int layH = getLayerBack(1,eta,phi,zside,depth); - std::cout << "\ntileHB:: eta|depth " << zside*eta << "|" << depth << " theta " << thetaH/CLHEP::deg << ":" << thetaL/CLHEP::deg << " Layer " << layL << ":" << layH-1 << "\n"; + edm::LogVerbatim("HcalGeom") << "\ntileHB:: eta|depth " << zside*eta << "|" + << depth << " theta " << thetaH/CLHEP::deg + << ":" << thetaL/CLHEP::deg << " Layer " + << layL << ":" << layH-1; for (int lay=layL; lay area(2,0); int kk=0; @@ -1088,12 +1123,15 @@ void HcalDDDSimConstants::printTileHB(const int eta, const int phi, } } } - if (area[0] > 0) std::cout << std::setw(2) << lay << " Area " << std::setw(8) << area[0] << " " << std::setw(8) << area[1] << "\n"; + if (area[0] > 0) + edm::LogVerbatim("HcalGeom") << std::setw(2) << lay << " Area " + << std::setw(8) << area[0] << " " + << std::setw(8) << area[1]; } } -void HcalDDDSimConstants::printTileHE(const int eta, const int phi, - const int zside, const int depth) const { +void HcalDDDSimConstants::printTileHE(const int& eta, const int& phi, + const int& zside, const int& depth) const { double etaL = hpar->etaTable[eta-1]; double thetaL = 2.*atan(exp(-etaL)); @@ -1104,7 +1142,10 @@ void HcalDDDSimConstants::printTileHE(const int eta, const int phi, double phib = hpar->phibin[eta-1]; int nphi = 2; if (phib > 6*CLHEP::deg) nphi = 1; - std::cout << "\ntileHE:: Eta/depth " << zside*eta << "|" << depth << " theta " << thetaH/CLHEP::deg << ":" << thetaL/CLHEP::deg << " Layer " << layL << ":" << layH-1 << " phi " << nphi << "\n"; + edm::LogVerbatim("HcalGeom") << "\ntileHE:: Eta/depth " << zside*eta << "|" + << depth << " theta " << thetaH/CLHEP::deg + << ":" << thetaL/CLHEP::deg << " Layer " + << layL << ":" << layH-1 << " phi " << nphi; for (int lay=layL; lay area(4,0); int kk=0; @@ -1138,15 +1179,21 @@ void HcalDDDSimConstants::printTileHE(const int eta, const int phi, int lay0 = lay-1; if (eta == 18) lay0++; if (nphi == 1) { - std::cout << std::setw(2) << lay0 << " Area " << std::setw(8) << area[0] << " " << std::setw(8) << area[1] << "\n"; + edm::LogVerbatim("HcalGeom") << std::setw(2) << lay0 << " Area " + << std::setw(8) << area[0] << " " + << std::setw(8) << area[1]; } else { - std::cout << std::setw(2) << lay0 << " Area " << std::setw(8) << area[0] << " " << std::setw(8) << area[1] << ":" << std::setw(8) << area[2] << " " << std::setw(8) << area[3] << "\n"; + edm::LogVerbatim("HcalGeom") << std::setw(2) << lay0 << " Area " + << std::setw(8) << area[0] << " " + << std::setw(8) << area[1] << ":" + << std::setw(8) << area[2] << " " + << std::setw(8) << area[3]; } } } } -unsigned int HcalDDDSimConstants::layerGroupSize(const int eta) const { +unsigned int HcalDDDSimConstants::layerGroupSize(int eta) const { unsigned int k = 0; for (auto const & it : hpar->layerGroupEtaSim) { if (it.layer == (unsigned int)(eta + 1)) { @@ -1158,8 +1205,7 @@ unsigned int HcalDDDSimConstants::layerGroupSize(const int eta) const { return k; } -unsigned int HcalDDDSimConstants::layerGroup(const int eta, - const int i) const { +unsigned int HcalDDDSimConstants::layerGroup(int eta, int i) const { unsigned int k = 0; for (auto const & it : hpar->layerGroupEtaSim) { if (it.layer == (unsigned int)(eta + 1)) { @@ -1171,9 +1217,9 @@ unsigned int HcalDDDSimConstants::layerGroup(const int eta, return k; } -unsigned int HcalDDDSimConstants::layerGroup(const int det, const int eta, - const int phi, const int zside, - const int lay) const { +unsigned int HcalDDDSimConstants::layerGroup(int det, int eta, + int phi, int zside, + int lay) const { int depth0 = findDepth(det,eta,phi,zside,lay); unsigned int depth = (depth0 > 0) ? (unsigned int)(depth0) : layerGroup(eta-1,lay);