From d49283c0c15ac6b38a7df3cb6bdb03a2784fb637 Mon Sep 17 00:00:00 2001 From: Sunanda Date: Sat, 31 Oct 2020 23:24:12 +0100 Subject: [PATCH 1/4] Updates geometry building for EB/EE and solves the issue of failure --- .../interface/CaloGeometryLoader.icc | 17 ++++++++++++++--- .../plugins/EcalBarrelGeometryLoaderFromDDD.cc | 13 ++++++++----- .../plugins/EcalEndcapGeometryLoaderFromDDD.cc | 12 ++++++++---- .../src/EcalSimParametersFromDD.cc | 2 +- 4 files changed, 31 insertions(+), 13 deletions(-) diff --git a/Geometry/CaloEventSetup/interface/CaloGeometryLoader.icc b/Geometry/CaloEventSetup/interface/CaloGeometryLoader.icc index 67596debe9b7e..1941a33f738f7 100644 --- a/Geometry/CaloEventSetup/interface/CaloGeometryLoader.icc +++ b/Geometry/CaloEventSetup/interface/CaloGeometryLoader.icc @@ -20,11 +20,13 @@ #include "DetectorDescription/Core/interface/DDScope.h" #include "DetectorDescription/Core/interface/DDFilter.h" +#include "DD4hep/Filter.h" #include "CLHEP/Units/GlobalSystemOfUnits.h" #include #include +//#define EDM_ML_DEBUG template typename CaloGeometryLoader::PtrType CaloGeometryLoader::load(const DDCompactView* cpv, @@ -131,7 +133,10 @@ void CaloGeometryLoader::makeGeometry(const cms::DDCompactView* cpv, unsigned int counter(0); while (fv.firstChild()) { - if (boost::starts_with(fv.name(), "EA")) { +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << "Do child " << fv.name(); +#endif + if (boost::starts_with(dd4hep::dd::noNamespace(fv.name()), "EA")) { continue; } ++counter; @@ -203,7 +208,9 @@ unsigned int CaloGeometryLoader::getDetIdForDD4HepNode(const cms::DDFilteredV baseNumber.setSize(psize); size_t n = path.find("/") + 1; - edm::LogVerbatim("CaloGeometryBuilder") << path << " n " << n; +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << path << " n " << n; +#endif size_t start = n, startold = n; std::string det(""), num(""); bool done(false); @@ -222,7 +229,11 @@ unsigned int CaloGeometryLoader::getDetIdForDD4HepNode(const cms::DDFilteredV } } baseNumber.reverse(); - +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << "Base number with " << baseNumber.getLevels() << " levels"; + for (int k = 0; k < baseNumber.getLevels(); ++k) + edm::LogVerbatim("EcalGeom") << "[" << k << "] " << baseNumber.getLevelName(k) << ":" << baseNumber.getCopyNumber(k); +#endif return m_scheme.getUnitID(baseNumber); } diff --git a/Geometry/EcalAlgo/plugins/EcalBarrelGeometryLoaderFromDDD.cc b/Geometry/EcalAlgo/plugins/EcalBarrelGeometryLoaderFromDDD.cc index a939423bc2989..42d9d7b556042 100644 --- a/Geometry/EcalAlgo/plugins/EcalBarrelGeometryLoaderFromDDD.cc +++ b/Geometry/EcalAlgo/plugins/EcalBarrelGeometryLoaderFromDDD.cc @@ -29,12 +29,15 @@ void EcalBGL::fillGeom(EcalBarrelGeometry* geom, const HepGeom::Transform3D& tr, const DetId& id, const double& scale) { + static constexpr uint32_t maxSize = 11; std::vector pv; - pv.reserve(vv.size()); - for (unsigned int i(0); i != vv.size(); ++i) { - const CCGFloat factor(1 == i || 2 == i || 6 == i || 10 == i ? 1 : (CCGFloat)scale); - - pv.emplace_back(factor * vv[i]); + unsigned int size = (vv.size() > maxSize) ? maxSize : vv.size(); + unsigned int ioff = (vv.size() > maxSize) ? (vv.size() - maxSize) : 0; + pv.reserve(size); + for (unsigned int i(0); i != size; ++i) { + unsigned int ii = ioff + i; + const CCGFloat factor(1 == ii || 2 == ii || 6 == ii || 10 == ii ? 1 : (CCGFloat)scale); + pv.emplace_back(factor * vv[ii]); } std::vector corners(8); diff --git a/Geometry/EcalAlgo/plugins/EcalEndcapGeometryLoaderFromDDD.cc b/Geometry/EcalAlgo/plugins/EcalEndcapGeometryLoaderFromDDD.cc index dc93b7515d5b8..36bd9679c4519 100644 --- a/Geometry/EcalAlgo/plugins/EcalEndcapGeometryLoaderFromDDD.cc +++ b/Geometry/EcalAlgo/plugins/EcalEndcapGeometryLoaderFromDDD.cc @@ -27,11 +27,15 @@ void EcalEGL::fillGeom(EcalEndcapGeometry* geom, const HepGeom::Transform3D& tr, const DetId& id, const double& scale) { + static constexpr uint32_t maxSize = 11; std::vector pv; - pv.reserve(vv.size()); - for (unsigned int i(0); i != vv.size(); ++i) { - const CCGFloat factor(1 == i || 2 == i || 6 == i || 10 == i ? 1 : scale); - pv.emplace_back(factor * vv[i]); + unsigned int size = (vv.size() > maxSize) ? maxSize : vv.size(); + unsigned int ioff = (vv.size() > maxSize) ? (vv.size() - maxSize) : 0; + pv.reserve(size); + for (unsigned int i(0); i != size; ++i) { + unsigned int ii = ioff + i; + const CCGFloat factor(1 == ii || 2 == ii || 6 == ii || 10 == ii ? 1 : scale); + pv.emplace_back(factor * vv[ii]); } std::vector corners(8); diff --git a/Geometry/EcalCommonData/src/EcalSimParametersFromDD.cc b/Geometry/EcalCommonData/src/EcalSimParametersFromDD.cc index 4b3232f955cff..19a0f220c0e35 100644 --- a/Geometry/EcalCommonData/src/EcalSimParametersFromDD.cc +++ b/Geometry/EcalCommonData/src/EcalSimParametersFromDD.cc @@ -159,7 +159,7 @@ bool EcalSimParametersFromDD::build(const cms::DDCompactView* cpv, mypar.filter(refs, attribute, name); fv.mergedSpecifics(refs); while (fv.firstChild()) { - const std::string name{fv.name().data(), fv.name().size()}; + const std::string name{dd4hep::dd::noNamespace(fv.name()).data(), dd4hep::dd::noNamespace(fv.name()).size()}; const std::string matName{dd4hep::dd::noNamespace(fv.materialName()).data(), dd4hep::dd::noNamespace(fv.materialName()).size()}; if (std::find(php.lvNames_.begin(), php.lvNames_.end(), name) == php.lvNames_.end()) { From b5adba780a444adac7a6cd838482c7484fbbea62 Mon Sep 17 00:00:00 2001 From: Sunanda Date: Sat, 31 Oct 2020 23:37:30 +0100 Subject: [PATCH 2/4] Code check --- Geometry/CaloEventSetup/interface/CaloGeometryLoader.icc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Geometry/CaloEventSetup/interface/CaloGeometryLoader.icc b/Geometry/CaloEventSetup/interface/CaloGeometryLoader.icc index 1941a33f738f7..babbf5e80e1fe 100644 --- a/Geometry/CaloEventSetup/interface/CaloGeometryLoader.icc +++ b/Geometry/CaloEventSetup/interface/CaloGeometryLoader.icc @@ -207,7 +207,7 @@ unsigned int CaloGeometryLoader::getDetIdForDD4HepNode(const cms::DDFilteredV EcalBaseNumber baseNumber; baseNumber.setSize(psize); - size_t n = path.find("/") + 1; + size_t n = path.find('/') + 1; #ifdef EDM_ML_DEBUG edm::LogVerbatim("EcalGeom") << path << " n " << n; #endif @@ -232,7 +232,8 @@ unsigned int CaloGeometryLoader::getDetIdForDD4HepNode(const cms::DDFilteredV #ifdef EDM_ML_DEBUG edm::LogVerbatim("EcalGeom") << "Base number with " << baseNumber.getLevels() << " levels"; for (int k = 0; k < baseNumber.getLevels(); ++k) - edm::LogVerbatim("EcalGeom") << "[" << k << "] " << baseNumber.getLevelName(k) << ":" << baseNumber.getCopyNumber(k); + edm::LogVerbatim("EcalGeom") << "[" << k << "] " << baseNumber.getLevelName(k) << ":" + << baseNumber.getCopyNumber(k); #endif return m_scheme.getUnitID(baseNumber); } From b18a03020aac6120bc24704c6ba45051ca79d22d Mon Sep 17 00:00:00 2001 From: Sunanda Banerjee Date: Sun, 1 Nov 2020 06:48:23 -0600 Subject: [PATCH 3/4] Update EcalBarrelGeometryLoaderFromDDD.cc Correct EcalBarrelAlgo --- Geometry/EcalAlgo/plugins/EcalBarrelGeometryLoaderFromDDD.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Geometry/EcalAlgo/plugins/EcalBarrelGeometryLoaderFromDDD.cc b/Geometry/EcalAlgo/plugins/EcalBarrelGeometryLoaderFromDDD.cc index 42d9d7b556042..e205f909b31ca 100644 --- a/Geometry/EcalAlgo/plugins/EcalBarrelGeometryLoaderFromDDD.cc +++ b/Geometry/EcalAlgo/plugins/EcalBarrelGeometryLoaderFromDDD.cc @@ -36,7 +36,7 @@ void EcalBGL::fillGeom(EcalBarrelGeometry* geom, pv.reserve(size); for (unsigned int i(0); i != size; ++i) { unsigned int ii = ioff + i; - const CCGFloat factor(1 == ii || 2 == ii || 6 == ii || 10 == ii ? 1 : (CCGFloat)scale); + const CCGFloat factor(1 == i || 2 == i || 6 == i || 10 == i ? 1 : static_cast(scale)); pv.emplace_back(factor * vv[ii]); } From 9acca18bd2e788eb8807506d021805586be21948 Mon Sep 17 00:00:00 2001 From: Sunanda Banerjee Date: Sun, 1 Nov 2020 06:50:19 -0600 Subject: [PATCH 4/4] Update EcalEndcapGeometryLoaderFromDDD.cc Correct EcalEndcapGeometryLoaderFromDDD --- Geometry/EcalAlgo/plugins/EcalEndcapGeometryLoaderFromDDD.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Geometry/EcalAlgo/plugins/EcalEndcapGeometryLoaderFromDDD.cc b/Geometry/EcalAlgo/plugins/EcalEndcapGeometryLoaderFromDDD.cc index 36bd9679c4519..d28de5149502d 100644 --- a/Geometry/EcalAlgo/plugins/EcalEndcapGeometryLoaderFromDDD.cc +++ b/Geometry/EcalAlgo/plugins/EcalEndcapGeometryLoaderFromDDD.cc @@ -34,7 +34,7 @@ void EcalEGL::fillGeom(EcalEndcapGeometry* geom, pv.reserve(size); for (unsigned int i(0); i != size; ++i) { unsigned int ii = ioff + i; - const CCGFloat factor(1 == ii || 2 == ii || 6 == ii || 10 == ii ? 1 : scale); + const CCGFloat factor(1 == i || 2 == i || 6 == i || 10 == i ? 1 : scale); pv.emplace_back(factor * vv[ii]); }