From 4e9e42947b4891ffd606d7b6ced5d428e03d63f3 Mon Sep 17 00:00:00 2001 From: Sunanda Date: Wed, 29 Jun 2022 04:22:03 +0200 Subject: [PATCH 1/5] Add a few utility methods in HGCalDDDConstants --- .../HGCalCommonData/interface/HGCalDDDConstants.h | 14 ++++++++++++++ Geometry/HGCalCommonData/src/HGCalDDDConstants.cc | 8 ++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h b/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h index f12bf426c3f21..eedc85c00de9f 100644 --- a/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h +++ b/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h @@ -23,6 +23,7 @@ #include "Geometry/HGCalCommonData/interface/HGCalParameters.h" #include "Geometry/HGCalCommonData/interface/HGCalTileIndex.h" #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" +#include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h" #include #include @@ -86,6 +87,9 @@ class HGCalDDDConstants { int layerIndex(int lay, bool reco) const; unsigned int layers(bool reco) const; unsigned int layersInit(bool reco) const; + int layerType(int lay) const { + return ((hgpar_->layerType_.empty()) ? HGCalTypes::WaferCenter : hgpar_->layerType_[lay - hgpar_->firstLayer_]); + } std::pair localToGlobal8( int lay, int waferU, int waferV, double localX, double localY, bool reco, bool debug) const; std::pair locateCell(int cell, int lay, int type, bool reco) const; @@ -132,6 +136,11 @@ class HGCalDDDConstants { bool ok = (itr == hgpar_->tileInfoMap_.end()) ? false : HGCalTileIndex::tileExist(itr->second.hex, zside, phi); return ok; } + HGCalParameters::tileInfo tileInfo(int zside, int layer, int ring) const { + int indx = HGCalTileIndex::tileIndex(layer, ring, 0); + auto itr = hgpar_->tileInfoMap_.find(indx); + return ((itr == hgpar_->tileInfoMap_.end()) ? HGCalParameters::tileInfo() : itr->second); + } std::pair tileRings(int layer) const { if ((mode_ == HGCalGeometryMode::TrapezoidFile) || (mode_ == HGCalGeometryMode::TrapezoidModule) || (mode_ == HGCalGeometryMode::TrapezoidCassette)) { @@ -189,6 +198,11 @@ class HGCalDDDConstants { bool waferInLayer(int wafer, int lay, bool reco) const; bool waferFullInLayer(int wafer, int lay, bool reco) const; int waferCount(const int type) const { return ((type == 0) ? waferMax_[2] : waferMax_[3]); } + HGCalParameters::waferInfo waferInfo(int lay, int waferU, int waferV) const { + int indx = HGCalWaferIndex::waferIndex(lay, waferU, waferV); + auto itr = hgpar_->waferInfoMap_.find(indx); + return ((itr == hgpar_->waferInfoMap_.end()) ? HGCalParameters::waferInfo() : itr->second); + } int waferMax() const { return waferMax_[1]; } int waferMin() const { return waferMax_[0]; } std::pair waferParameters(bool reco) const; diff --git a/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc b/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc index 40f21ec2d4632..415f8cbc6ed71 100644 --- a/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc +++ b/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc @@ -8,11 +8,8 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" #include "Geometry/HGCalCommonData/interface/HGCalGeomParameters.h" -#include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h" #include "Geometry/HGCalCommonData/interface/HGCalGeometryMode.h" -#include "Geometry/HGCalCommonData/interface/HGCalCell.h" #include "Geometry/HGCalCommonData/interface/HGCalTypes.h" -#include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h" #include "Geometry/HGCalCommonData/interface/HGCalWaferMask.h" #include "Geometry/HGCalCommonData/interface/HGCalWaferType.h" @@ -695,8 +692,7 @@ std::pair HGCalDDDConstants::locateCell( int indx = HGCalWaferIndex::waferIndex(lay, waferU, waferV); auto itr = hgpar_->typesInLayers_.find(indx); int type = ((itr == hgpar_->typesInLayers_.end()) ? 2 : hgpar_->waferTypeL_[itr->second]); - int layertype = - (hgpar_->layerType_.empty()) ? HGCalTypes::WaferCenter : hgpar_->layerType_[lay - hgpar_->firstLayer_]; + int layertype = layerType(lay); bool rotx = (norot) ? false : (layertype == HGCalTypes::WaferCenterR); if (debug) { edm::LogVerbatim("HGCalGeom") << "LocateCell " << lay << ":" << (lay - hgpar_->firstLayer_) << ":" << layertype @@ -1264,7 +1260,7 @@ void HGCalDDDConstants::waferFromPosition(const double x, if ((hgpar_->xLayerHex_.empty()) || (hgpar_->yLayerHex_.empty())) return; int ll = layer - hgpar_->firstLayer_; - int layertype = (hgpar_->layerType_.empty()) ? HGCalTypes::WaferCenter : hgpar_->layerType_[ll]; + int layertype = layerType(layer); bool rotx = ((!hgpar_->layerType_.empty()) && (layertype == HGCalTypes::WaferCenterR)); double xx(0), yy(0); if (rotx) { From 80c8de7b6ed26663028694afb4de36f3f441bb8a Mon Sep 17 00:00:00 2001 From: Sunanda Date: Thu, 30 Jun 2022 03:44:27 +0200 Subject: [PATCH 2/5] Use inline wherever applicable --- .../interface/HGCalDDDConstants.h | 151 +++++------------- .../HGCalCommonData/src/HGCalDDDConstants.cc | 138 ++++++++++++---- 2 files changed, 151 insertions(+), 138 deletions(-) diff --git a/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h b/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h index eedc85c00de9f..fe7d11dbcc8c7 100644 --- a/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h +++ b/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h @@ -35,7 +35,7 @@ class HGCalDDDConstants { public: HGCalDDDConstants(const HGCalParameters* hp, const std::string& name); - ~HGCalDDDConstants(); + ~HGCalDDDConstants() = default; std::pair assignCell(float x, float y, int lay, int subSec, bool reco) const; std::array assignCellHex(float x, float y, int lay, bool reco, bool extend = false, bool debug = false) const; @@ -43,7 +43,7 @@ class HGCalDDDConstants { std::pair cellEtaPhiTrap(int type, int irad) const; bool cellInLayer(int waferU, int waferV, int cellU, int cellV, int lay, bool reco) const; double cellSizeHex(int type) const; - std::pair cellSizeTrap(int type, int irad) const { + inline std::pair cellSizeTrap(int type, int irad) const { return std::make_pair(hgpar_->radiusLayer_[type][irad - 1], hgpar_->radiusLayer_[type][irad]); } double cellThickness(int layer, int waferU, int waferV) const; @@ -58,26 +58,25 @@ class HGCalDDDConstants { int& iphi, int& type, double& wt) const; - int firstLayer() const { return hgpar_->firstLayer_; } - HGCalGeometryMode::GeometryMode geomMode() const { return mode_; } + inline int firstLayer() const { return hgpar_->firstLayer_; } + inline HGCalGeometryMode::GeometryMode geomMode() const { return mode_; } int getLayer(double z, bool reco) const; int getLayerOffset() const { return hgpar_->layerOffset_; } HGCalParameters::hgtrap getModule(unsigned int k, bool hexType, bool reco) const; std::vector getModules() const; - const HGCalParameters* getParameter() const { return hgpar_; } + inline const HGCalParameters* getParameter() const { return hgpar_; } int getPhiBins(int lay) const; std::pair getREtaRange(int lay) const; - const std::vector& getRadiusLayer(int layer) const { - int type = (tileTrapezoid() ? hgpar_->scintType(layer) : 0); - return hgpar_->radiusLayer_[type]; + inline const std::vector& getRadiusLayer(int layer) const { + return hgpar_->radiusLayer_[(tileTrapezoid() ? hgpar_->scintType(layer) : 0)]; } - HGCalParameters::hgtrform getTrForm(unsigned int k) const { return hgpar_->getTrForm(k); } - unsigned int getTrFormN() const { return hgpar_->trformIndex_.size(); } + inline HGCalParameters::hgtrform getTrForm(unsigned int k) const { return hgpar_->getTrForm(k); } + inline unsigned int getTrFormN() const { return hgpar_->trformIndex_.size(); } std::vector getTrForms() const; int getTypeTrap(int layer) const; int getTypeHex(int layer, int waferU, int waferV) const; std::pair getXY(int layer, double x, double y, bool forwd) const; - int getUVMax(int type) const { return ((type == 0) ? hgpar_->nCellsFine_ : hgpar_->nCellsCoarse_); } + inline int getUVMax(int type) const { return ((type == 0) ? hgpar_->nCellsFine_ : hgpar_->nCellsCoarse_); } bool isHalfCell(int waferType, int cell) const; bool isValidHex(int lay, int mod, int cell, bool reco) const; bool isValidHex8(int lay, int waferU, int waferV, bool fullAndPart = false) const; @@ -87,7 +86,7 @@ class HGCalDDDConstants { int layerIndex(int lay, bool reco) const; unsigned int layers(bool reco) const; unsigned int layersInit(bool reco) const; - int layerType(int lay) const { + inline int layerType(int lay) const { return ((hgpar_->layerType_.empty()) ? HGCalTypes::WaferCenter : hgpar_->layerType_[lay - hgpar_->firstLayer_]); } std::pair localToGlobal8( @@ -106,15 +105,15 @@ class HGCalDDDConstants { std::pair locateCell(const HGCScintillatorDetId&, bool debug = false) const; std::pair locateCellHex(int cell, int wafer, bool reco) const; std::pair locateCellTrap(int lay, int ieta, int iphi, bool reco, bool debug = false) const; - int levelTop(int ind = 0) const { return hgpar_->levelT_[ind]; } + inline int levelTop(int ind = 0) const { return hgpar_->levelT_[ind]; } bool maskCell(const DetId& id, int corners) const; - int maxCellUV() const { return (tileTrapezoid() ? hgpar_->nCellsFine_ : 2 * hgpar_->nCellsFine_); } + inline int maxCellUV() const { return (tileTrapezoid() ? hgpar_->nCellsFine_ : 2 * hgpar_->nCellsFine_); } int maxCells(bool reco) const; int maxCells(int lay, bool reco) const; - int maxModules() const { return modHalf_; } - int maxModulesPerLayer() const { return maxWafersPerLayer_; } + inline int maxModules() const { return modHalf_; } + inline int maxModulesPerLayer() const { return maxWafersPerLayer_; } int maxRows(int lay, bool reco) const; - double minSlope() const { return hgpar_->slopeMin_[0]; } + inline double minSlope() const { return hgpar_->slopeMin_[0]; } int modifyUV(int uv, int type1, int type2) const; int modules(int lay, bool reco) const; int modulesInit(int lay, bool reco) const; @@ -127,49 +126,23 @@ class HGCalDDDConstants { std::pair rangeRLayer(int lay, bool reco) const; std::pair rangeZ(bool reco) const; std::pair rowColumnWafer(const int wafer) const; - int sectors() const { return hgpar_->nSectors_; } + inline int sectors() const { return hgpar_->nSectors_; } std::pair simToReco(int cell, int layer, int mod, bool half) const; int tileCount(int layer, int ring) const; - bool tileExist(int zside, int layer, int ring, int phi) const { - int indx = HGCalTileIndex::tileIndex(layer, ring, 0); - auto itr = hgpar_->tileInfoMap_.find(indx); - bool ok = (itr == hgpar_->tileInfoMap_.end()) ? false : HGCalTileIndex::tileExist(itr->second.hex, zside, phi); - return ok; - } - HGCalParameters::tileInfo tileInfo(int zside, int layer, int ring) const { - int indx = HGCalTileIndex::tileIndex(layer, ring, 0); - auto itr = hgpar_->tileInfoMap_.find(indx); - return ((itr == hgpar_->tileInfoMap_.end()) ? HGCalParameters::tileInfo() : itr->second); - } - std::pair tileRings(int layer) const { - if ((mode_ == HGCalGeometryMode::TrapezoidFile) || (mode_ == HGCalGeometryMode::TrapezoidModule) || - (mode_ == HGCalGeometryMode::TrapezoidCassette)) { - int ll = layer - hgpar_->firstLayer_; - if (ll >= 0 && ll < static_cast(hgpar_->tileRingRange_.size())) - return hgpar_->tileRingRange_[ll]; - } - return std::make_pair(0, 0); - } - int tileSiPM(int sipm) const { return ((sipm > 0) ? HGCalTypes::SiPMSmall : HGCalTypes::SiPMLarge); } + bool tileExist(int zside, int layer, int ring, int phi) const; + HGCalParameters::tileInfo tileInfo(int zside, int layer, int ring) const; + std::pair tileRings(int layer) const; + inline int tileSiPM(int sipm) const { return ((sipm > 0) ? HGCalTypes::SiPMSmall : HGCalTypes::SiPMLarge); } bool tileTrapezoid() const { return ((mode_ == HGCalGeometryMode::Trapezoid) || (mode_ == HGCalGeometryMode::TrapezoidFile) || (mode_ == HGCalGeometryMode::TrapezoidModule) || (mode_ == HGCalGeometryMode::TrapezoidCassette)); } - std::pair tileType(int layer, int ring, int phi) const { - int indx = HGCalTileIndex::tileIndex(layer, ring, phi); - int type(-1), sipm(-1); - auto itr = hgpar_->tileInfoMap_.find(indx); - if (itr != hgpar_->tileInfoMap_.end()) { - type = 1 + (itr->second).type; - sipm = ((itr->second).sipm == HGCalTypes::SiPMLarge) ? 0 : 1; - } - return std::make_pair(type, sipm); - } - bool trapezoidFile() const { + std::pair tileType(int layer, int ring, int phi) const; + inline bool trapezoidFile() const { return ((mode_ == HGCalGeometryMode::TrapezoidFile) || (mode_ == HGCalGeometryMode::TrapezoidModule) || (mode_ == HGCalGeometryMode::TrapezoidCassette)); } - unsigned int volumes() const { return hgpar_->moduleLayR_.size(); } + inline unsigned int volumes() const { return hgpar_->moduleLayR_.size(); } int waferFromCopy(int copy) const; void waferFromPosition(const double x, const double y, int& wafer, int& icell, int& celltyp) const; void waferFromPosition(const double x, @@ -183,90 +156,52 @@ class HGCalDDDConstants { double& wt, bool extend = false, bool debug = false) const; - bool waferHexagon6() const { + inline bool waferHexagon6() const { return ((mode_ == HGCalGeometryMode::Hexagon) || (mode_ == HGCalGeometryMode::HexagonFull)); } - bool waferHexagon8() const { + inline bool waferHexagon8() const { return ((mode_ == HGCalGeometryMode::Hexagon8) || (mode_ == HGCalGeometryMode::Hexagon8Full) || (mode_ == HGCalGeometryMode::Hexagon8File) || (mode_ == HGCalGeometryMode::Hexagon8Module) || (mode_ == HGCalGeometryMode::Hexagon8Cassette)); } - bool waferHexagon8File() const { + inline bool waferHexagon8File() const { return ((mode_ == HGCalGeometryMode::Hexagon8File) || (mode_ == HGCalGeometryMode::Hexagon8Module) || (mode_ == HGCalGeometryMode::Hexagon8Cassette)); } bool waferInLayer(int wafer, int lay, bool reco) const; bool waferFullInLayer(int wafer, int lay, bool reco) const; - int waferCount(const int type) const { return ((type == 0) ? waferMax_[2] : waferMax_[3]); } - HGCalParameters::waferInfo waferInfo(int lay, int waferU, int waferV) const { - int indx = HGCalWaferIndex::waferIndex(lay, waferU, waferV); - auto itr = hgpar_->waferInfoMap_.find(indx); - return ((itr == hgpar_->waferInfoMap_.end()) ? HGCalParameters::waferInfo() : itr->second); - } - int waferMax() const { return waferMax_[1]; } - int waferMin() const { return waferMax_[0]; } + inline int waferCount(const int type) const { return ((type == 0) ? waferMax_[2] : waferMax_[3]); } + HGCalParameters::waferInfo waferInfo(int lay, int waferU, int waferV) const; + inline int waferMax() const { return waferMax_[1]; } + inline int waferMin() const { return waferMax_[0]; } std::pair waferParameters(bool reco) const; std::pair waferPosition(int wafer, bool reco) const; std::pair waferPosition(int lay, int waferU, int waferV, bool reco, bool debug = false) const; - unsigned int waferFileSize() const { return hgpar_->waferInfoMap_.size(); } - int waferFileIndex(unsigned int kk) const { - if (kk < hgpar_->waferInfoMap_.size()) { - auto itr = hgpar_->waferInfoMap_.begin(); - std::advance(itr, kk); - return itr->first; - } else - return 0; - } - std::tuple waferFileInfo(unsigned int kk) const { - if (kk < hgpar_->waferInfoMap_.size()) { - auto itr = hgpar_->waferInfoMap_.begin(); - std::advance(itr, kk); - return std::make_tuple(itr->second.type, itr->second.part, itr->second.orient); - } else - return std::make_tuple(0, 0, 0); - } - std::tuple waferFileInfoFromIndex(int kk) const { - auto itr = hgpar_->waferInfoMap_.find(kk); - if (itr != hgpar_->waferInfoMap_.end()) { - return std::make_tuple(itr->second.type, itr->second.part, itr->second.orient); - } else - return std::make_tuple(0, 0, 0); - } - bool waferFileInfoExist(int kk) const { return (hgpar_->waferInfoMap_.find(kk) != hgpar_->waferInfoMap_.end()); } - double waferSepar(bool reco) const { + inline unsigned int waferFileSize() const { return hgpar_->waferInfoMap_.size(); } + int waferFileIndex(unsigned int kk) const; + std::tuple waferFileInfo(unsigned int kk) const; + std::tuple waferFileInfoFromIndex(int kk) const; + inline bool waferFileInfoExist(int kk) const { return (hgpar_->waferInfoMap_.find(kk) != hgpar_->waferInfoMap_.end()); } + GlobalPoint waferLocal2Global(HepGeom::Point3D& loc, const DetId& id, bool useWafer, bool reco, bool debug) const; + inline double waferSepar(bool reco) const { return (reco ? hgpar_->sensorSeparation_ : HGCalParameters::k_ScaleToDDD * hgpar_->sensorSeparation_); } - GlobalPoint waferLocal2Global( - HepGeom::Point3D& loc, const DetId& id, bool useWafer, bool reco, bool debug) const { - HGCSiliconDetId detid(id); - double x(0), y(0); - if (useWafer) { - auto xyw = waferPositionNoRot(detid.layer(), detid.waferU(), detid.waferV(), reco, debug); - x = xyw.first; - y = xyw.second; - } - auto xy = getXY(detid.layer(), (x + loc.x()), (y + loc.y()), false); - double zz = - (detid.zside() < 0) ? -(loc.z() + waferZ(detid.layer(), reco)) : (loc.z() + waferZ(detid.layer(), reco)); - double xx = (detid.zside() < 0) ? -xy.first : xy.first; - return GlobalPoint(xx, xy.second, zz); - } - double waferSize(bool reco) const { + inline double waferSize(bool reco) const { return (reco ? hgpar_->waferSize_ : HGCalParameters::k_ScaleToDDD * hgpar_->waferSize_); } int wafers() const; int wafers(int layer, int type) const; - int waferToCopy(int wafer) const { + inline int waferToCopy(int wafer) const { return ((wafer >= 0) && (wafer < static_cast(hgpar_->waferCopy_.size()))) ? hgpar_->waferCopy_[wafer] : static_cast(hgpar_->waferCopy_.size()); } // wafer transverse thickness classification (2 = coarse, 1 = fine) - int waferTypeT(int wafer) const { + inline int waferTypeT(int wafer) const { return ((wafer >= 0) && (wafer < static_cast(hgpar_->waferTypeT_.size()))) ? hgpar_->waferTypeT_[wafer] : 0; } // wafer longitudinal thickness classification (1 = 100um, 2 = 200um, 3=300um) - int waferTypeL(int wafer) const { + inline int waferTypeL(int wafer) const { return ((wafer >= 0) && (wafer < static_cast(hgpar_->waferTypeL_.size()))) ? hgpar_->waferTypeL_[wafer] : 0; } int waferType(DetId const& id, bool fromFile = false) const; @@ -274,7 +209,7 @@ class HGCalDDDConstants { std::tuple waferType(HGCSiliconDetId const& id, bool fromFile = false) const; std::pair waferTypeRotation( int layer, int waferU, int waferV, bool fromFile = false, bool debug = false) const; - int waferUVMax() const { return hgpar_->waferUVMax_; } + inline int waferUVMax() const { return hgpar_->waferUVMax_; } bool waferVirtual(int layer, int waferU, int waferV) const; double waferZ(int layer, bool reco) const; diff --git a/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc b/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc index 415f8cbc6ed71..b62b029a39f44 100644 --- a/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc +++ b/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc @@ -124,8 +124,6 @@ HGCalDDDConstants::HGCalDDDConstants(const HGCalParameters* hp, const std::strin } } -HGCalDDDConstants::~HGCalDDDConstants() {} - std::pair HGCalDDDConstants::assignCell(float x, float y, int lay, int subSec, bool reco) const { const auto& index = getIndex(lay, reco); if (index.first < 0) @@ -1176,6 +1174,40 @@ int HGCalDDDConstants::tileCount(int layer, int ring) const { return (3 * kount); } +bool HGCalDDDConstants::tileExist(int zside, int layer, int ring, int phi) const { + int indx = HGCalTileIndex::tileIndex(layer, ring, 0); + auto itr = hgpar_->tileInfoMap_.find(indx); + bool ok = (itr == hgpar_->tileInfoMap_.end()) ? false : HGCalTileIndex::tileExist(itr->second.hex, zside, phi); + return ok; +} + +HGCalParameters::tileInfo HGCalDDDConstants::tileInfo(int zside, int layer, int ring) const { + int indx = HGCalTileIndex::tileIndex(layer, ring, 0); + auto itr = hgpar_->tileInfoMap_.find(indx); + return ((itr == hgpar_->tileInfoMap_.end()) ? HGCalParameters::tileInfo() : itr->second); +} + +std::pair HGCalDDDConstants::tileRings(int layer) const { + if ((mode_ == HGCalGeometryMode::TrapezoidFile) || (mode_ == HGCalGeometryMode::TrapezoidModule) || + (mode_ == HGCalGeometryMode::TrapezoidCassette)) { + int ll = layer - hgpar_->firstLayer_; + if (ll >= 0 && ll < static_cast(hgpar_->tileRingRange_.size())) + return hgpar_->tileRingRange_[ll]; + } + return std::make_pair(0, 0); +} + +std::pair HGCalDDDConstants::tileType(int layer, int ring, int phi) const { + int indx = HGCalTileIndex::tileIndex(layer, ring, phi); + int type(-1), sipm(-1); + auto itr = hgpar_->tileInfoMap_.find(indx); + if (itr != hgpar_->tileInfoMap_.end()) { + type = 1 + (itr->second).type; + sipm = ((itr->second).sipm == HGCalTypes::SiPMLarge) ? 0 : 1; + } + return std::make_pair(type, sipm); +} + int HGCalDDDConstants::waferFromCopy(int copy) const { const int ncopies = hgpar_->waferCopy_.size(); int wafer(ncopies); @@ -1380,6 +1412,12 @@ bool HGCalDDDConstants::waferFullInLayer(int wafer, int lay, bool reco) const { return waferInLayerTest(wafer, indx.first, false); } +HGCalParameters::waferInfo HGCalDDDConstants::waferInfo(int lay, int waferU, int waferV) const { + int indx = HGCalWaferIndex::waferIndex(lay, waferU, waferV); + auto itr = hgpar_->waferInfoMap_.find(indx); + return ((itr == hgpar_->waferInfoMap_.end()) ? HGCalParameters::waferInfo() : itr->second); +} + std::pair HGCalDDDConstants::waferParameters(bool reco) const { if (reco) return std::make_pair(rmax_, hexside_); @@ -1419,6 +1457,74 @@ std::pair HGCalDDDConstants::waferPosition( return xy0; } +int HGCalDDDConstants::waferFileIndex(unsigned int kk) const { + if (kk < hgpar_->waferInfoMap_.size()) { + auto itr = hgpar_->waferInfoMap_.begin(); + std::advance(itr, kk); + return itr->first; + } else + return 0; +} + +std::tuple HGCalDDDConstants::waferFileInfo(unsigned int kk) const { + if (kk < hgpar_->waferInfoMap_.size()) { + auto itr = hgpar_->waferInfoMap_.begin(); + std::advance(itr, kk); + return std::make_tuple(itr->second.type, itr->second.part, itr->second.orient); + } else + return std::make_tuple(0, 0, 0); +} + +std::tuple HGCalDDDConstants::waferFileInfoFromIndex(int kk) const { + auto itr = hgpar_->waferInfoMap_.find(kk); + if (itr != hgpar_->waferInfoMap_.end()) { + return std::make_tuple(itr->second.type, itr->second.part, itr->second.orient); + } else + return std::make_tuple(0, 0, 0); +} + +GlobalPoint HGCalDDDConstants::waferLocal2Global(HepGeom::Point3D& loc, const DetId& id, bool useWafer, bool reco, bool debug) const { + HGCSiliconDetId detid(id); + double x(0), y(0); + if (useWafer) { + auto xyw = waferPositionNoRot(detid.layer(), detid.waferU(), detid.waferV(), reco, debug); + x = xyw.first; + y = xyw.second; + } + auto xy = getXY(detid.layer(), (x + loc.x()), (y + loc.y()), false); + double zz = (detid.zside() < 0) ? -(loc.z() + waferZ(detid.layer(), reco)) : (loc.z() + waferZ(detid.layer(), reco)); + double xx = (detid.zside() < 0) ? -xy.first : xy.first; + return GlobalPoint(xx, xy.second, zz); +} + +int HGCalDDDConstants::wafers() const { + int wafer(0); + if (!tileTrapezoid()) { + for (unsigned int i = 0; i < layers(true); ++i) { + int lay = hgpar_->depth_[i]; + wafer += modules(lay, true); + } + } else { + wafer = static_cast(hgpar_->moduleLayR_.size()); + } + return wafer; +} + +int HGCalDDDConstants::wafers(int layer, int type) const { + int wafer(0); + if (!tileTrapezoid()) { + auto itr = waferLayer_.find(layer); + if (itr != waferLayer_.end()) { + unsigned ity = (type > 0 && type <= 2) ? type : 0; + wafer = (itr->second)[ity]; + } + } else { + const auto& index = getIndex(layer, true); + wafer = 1 + hgpar_->lastModule_[index.first] - hgpar_->firstModule_[index.first]; + } + return wafer; +} + int HGCalDDDConstants::waferType(DetId const& id, bool fromFile) const { int type(1); if (waferHexagon8()) { @@ -1572,34 +1678,6 @@ double HGCalDDDConstants::waferZ(int lay, bool reco) const { return (reco ? hgpar_->zLayerHex_[index.first] : HGCalParameters::k_ScaleToDDD * hgpar_->zLayerHex_[index.first]); } -int HGCalDDDConstants::wafers() const { - int wafer(0); - if (!tileTrapezoid()) { - for (unsigned int i = 0; i < layers(true); ++i) { - int lay = hgpar_->depth_[i]; - wafer += modules(lay, true); - } - } else { - wafer = static_cast(hgpar_->moduleLayR_.size()); - } - return wafer; -} - -int HGCalDDDConstants::wafers(int layer, int type) const { - int wafer(0); - if (!tileTrapezoid()) { - auto itr = waferLayer_.find(layer); - if (itr != waferLayer_.end()) { - unsigned ity = (type > 0 && type <= 2) ? type : 0; - wafer = (itr->second)[ity]; - } - } else { - const auto& index = getIndex(layer, true); - wafer = 1 + hgpar_->lastModule_[index.first] - hgpar_->firstModule_[index.first]; - } - return wafer; -} - int HGCalDDDConstants::cellHex( double xx, double yy, const double& cellR, const std::vector& posX, const std::vector& posY) const { int num(0); From 255e4a99df3807cd2aa035da6807f7a653511b38 Mon Sep 17 00:00:00 2001 From: Sunanda Date: Thu, 30 Jun 2022 03:54:23 +0200 Subject: [PATCH 3/5] Code check --- Geometry/HGCalCommonData/interface/HGCalDDDConstants.h | 7 +++++-- Geometry/HGCalCommonData/src/HGCalDDDConstants.cc | 9 +++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h b/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h index fe7d11dbcc8c7..3a837607e44e9 100644 --- a/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h +++ b/Geometry/HGCalCommonData/interface/HGCalDDDConstants.h @@ -181,8 +181,11 @@ class HGCalDDDConstants { int waferFileIndex(unsigned int kk) const; std::tuple waferFileInfo(unsigned int kk) const; std::tuple waferFileInfoFromIndex(int kk) const; - inline bool waferFileInfoExist(int kk) const { return (hgpar_->waferInfoMap_.find(kk) != hgpar_->waferInfoMap_.end()); } - GlobalPoint waferLocal2Global(HepGeom::Point3D& loc, const DetId& id, bool useWafer, bool reco, bool debug) const; + inline bool waferFileInfoExist(int kk) const { + return (hgpar_->waferInfoMap_.find(kk) != hgpar_->waferInfoMap_.end()); + } + GlobalPoint waferLocal2Global( + HepGeom::Point3D& loc, const DetId& id, bool useWafer, bool reco, bool debug) const; inline double waferSepar(bool reco) const { return (reco ? hgpar_->sensorSeparation_ : HGCalParameters::k_ScaleToDDD * hgpar_->sensorSeparation_); } diff --git a/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc b/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc index b62b029a39f44..541b09988d61e 100644 --- a/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc +++ b/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc @@ -1186,7 +1186,7 @@ HGCalParameters::tileInfo HGCalDDDConstants::tileInfo(int zside, int layer, int auto itr = hgpar_->tileInfoMap_.find(indx); return ((itr == hgpar_->tileInfoMap_.end()) ? HGCalParameters::tileInfo() : itr->second); } - + std::pair HGCalDDDConstants::tileRings(int layer) const { if ((mode_ == HGCalGeometryMode::TrapezoidFile) || (mode_ == HGCalGeometryMode::TrapezoidModule) || (mode_ == HGCalGeometryMode::TrapezoidCassette)) { @@ -1465,7 +1465,7 @@ int HGCalDDDConstants::waferFileIndex(unsigned int kk) const { } else return 0; } - + std::tuple HGCalDDDConstants::waferFileInfo(unsigned int kk) const { if (kk < hgpar_->waferInfoMap_.size()) { auto itr = hgpar_->waferInfoMap_.begin(); @@ -1474,7 +1474,7 @@ std::tuple HGCalDDDConstants::waferFileInfo(unsigned int kk) cons } else return std::make_tuple(0, 0, 0); } - + std::tuple HGCalDDDConstants::waferFileInfoFromIndex(int kk) const { auto itr = hgpar_->waferInfoMap_.find(kk); if (itr != hgpar_->waferInfoMap_.end()) { @@ -1483,7 +1483,8 @@ std::tuple HGCalDDDConstants::waferFileInfoFromIndex(int kk) cons return std::make_tuple(0, 0, 0); } -GlobalPoint HGCalDDDConstants::waferLocal2Global(HepGeom::Point3D& loc, const DetId& id, bool useWafer, bool reco, bool debug) const { +GlobalPoint HGCalDDDConstants::waferLocal2Global( + HepGeom::Point3D& loc, const DetId& id, bool useWafer, bool reco, bool debug) const { HGCSiliconDetId detid(id); double x(0), y(0); if (useWafer) { From 97dbe35b1c986d765f404e8a93bca9199f8151ab Mon Sep 17 00:00:00 2001 From: Sunanda Date: Thu, 30 Jun 2022 06:58:25 +0200 Subject: [PATCH 4/5] Add one additional debug statement --- Geometry/HGCalCommonData/src/HGCalDDDConstants.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc b/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc index 541b09988d61e..9d8d088dbd474 100644 --- a/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc +++ b/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc @@ -1396,6 +1396,7 @@ void HGCalDDDConstants::waferFromPosition(const double x, << hexside; } } + edm::LogVerbatim("HGCalGeomX") << "Input x:y:layer " << x << ":" << y << ":" << layer << " Wafer " << waferU << ":" << waferV << " Cell " << cellU << ":" << cellV << ":" << celltype << " wt " << wt; } bool HGCalDDDConstants::waferInLayer(int wafer, int lay, bool reco) const { From c58eddd02c3954e2821a41a063da46c63ab76d46 Mon Sep 17 00:00:00 2001 From: Sunanda Date: Thu, 30 Jun 2022 07:09:17 +0200 Subject: [PATCH 5/5] Code check --- Geometry/HGCalCommonData/src/HGCalDDDConstants.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc b/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc index 9d8d088dbd474..e95e9cbeae6e9 100644 --- a/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc +++ b/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc @@ -1396,7 +1396,8 @@ void HGCalDDDConstants::waferFromPosition(const double x, << hexside; } } - edm::LogVerbatim("HGCalGeomX") << "Input x:y:layer " << x << ":" << y << ":" << layer << " Wafer " << waferU << ":" << waferV << " Cell " << cellU << ":" << cellV << ":" << celltype << " wt " << wt; + edm::LogVerbatim("HGCalGeomX") << "Input x:y:layer " << x << ":" << y << ":" << layer << " Wafer " << waferU << ":" + << waferV << " Cell " << cellU << ":" << cellV << ":" << celltype << " wt " << wt; } bool HGCalDDDConstants::waferInLayer(int wafer, int lay, bool reco) const {