Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Phase2-hgx276x Treat the units correctly in the dd4hep algos for HGCal #32860

Merged
merged 6 commits into from Feb 11, 2021
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
55 changes: 32 additions & 23 deletions Geometry/HGCalCommonData/plugins/dd4hep/DDAHcalModuleAlgo.cc
Expand Up @@ -10,15 +10,15 @@
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/Utilities/interface/Exception.h"
#include "Geometry/HGCalCommonData/interface/AHCalParameters.h"
#include "Geometry/HGCalCommonData/plugins/dd4hep/HGCalDD4HepHelper.h"

//#define EDM_ML_DEBUG
using namespace angle_units::operators;

static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext& ctxt, xml_h e) {
cms::DDNamespace ns(ctxt, e, true);
cms::DDAlgoArguments args(ctxt, e);
static constexpr double tol = 0.00001;
static constexpr double f2mm = (1.0 / dd4hep::mm);
static constexpr double tol = 0.00001 * dd4hep::mm;

const auto& tile = args.value<std::string>("TileName"); // Scintillator tile
const auto& materials = args.value<std::vector<std::string> >("MaterialNames"); // Materials
Expand All @@ -30,8 +30,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext
edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: Tile " << tile;
edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << materials.size() << " types of volumes";
for (unsigned int i = 0; i < names.size(); ++i)
edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names[i] << " of thickness " << (f2mm * thick[i])
<< " filled with " << materials[i] << " first copy number " << copyNumber[i];
edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names[i] << " of thickness "
<< HGCalDD4HepHelper::convert2mm(thick[i]) << " filled with " << materials[i]
<< " first copy number " << copyNumber[i];
#endif
const auto& layers = args.value<std::vector<int> >("Layers"); // Number of layers in a section
const auto& layerThick = args.value<std::vector<double> >("LayerThick"); // Thickness of each section
Expand All @@ -40,8 +41,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << layers.size() << " blocks";
for (unsigned int i = 0; i < layers.size(); ++i)
edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << (f2mm * layerThick[i]) << " with "
<< layers[i] << " layers";
edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << HGCalDD4HepHelper::convert2mm(layerThick[i])
<< " with " << layers[i] << " layers";
edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << layerType.size() << " layers";
for (unsigned int i = 0; i < layerType.size(); ++i)
edm::LogVerbatim("HGCalGeom") << "Layer [" << i << "] with material type " << layerType[i] << " sensitive class "
Expand All @@ -55,14 +56,16 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext
edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << widths.size() << " sizes for width "
<< "and height:";
for (unsigned int i = 0; i < widths.size(); ++i)
edm::LogVerbatim("HGCalGeom") << " [" << i << "] " << (f2mm * widths[i]) << ":" << (f2mm * heights[i]);
edm::LogVerbatim("HGCalGeom") << " [" << i << "] " << HGCalDD4HepHelper::convert2mm(widths[i]) << ":"
<< HGCalDD4HepHelper::convert2mm(heights[i]);
edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << tileN.size() << " tile positioning parameters";
for (unsigned int i = 0; i < tileN.size(); ++i)
edm::LogVerbatim("HGCalGeom") << " [" << i << "] " << tileN[i] << ":" << (f2mm * tileStep[i]);
edm::LogVerbatim("HGCalGeom") << " [" << i << "] " << tileN[i] << ":" << HGCalDD4HepHelper::convert2mm(tileStep[i]);
#endif
const auto& zMinBlock = args.value<double>("zMinBlock"); // Starting z-value of the block
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: zStart " << (f2mm * zMinBlock) << " NameSpace " << ns.name();
edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: zStart " << HGCalDD4HepHelper::convert2mm(zMinBlock)
<< " NameSpace " << ns.name();
#endif

// Mother module
Expand All @@ -83,8 +86,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext

std::string name = "HGCal" + names[ii] + std::to_string(copy);
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo test: Layer " << ly << ":" << ii << " Front " << (f2mm * zi)
<< " Back " << (f2mm * zo) << " superlayer thickness " << (f2mm * layerThick[i]);
edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo test: Layer " << ly << ":" << ii << " Front "
<< HGCalDD4HepHelper::convert2mm(zi) << " Back "
<< HGCalDD4HepHelper::convert2mm(zo) << " superlayer thickness "
<< HGCalDD4HepHelper::convert2mm(layerThick[i]);
#endif
dd4hep::Material matter = ns.material(materials[ii]);
dd4hep::Volume glog;
Expand All @@ -94,17 +99,19 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext
glog = dd4hep::Volume(solid.name(), solid, matter);
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << solid.name() << " Box made of " << materials[ii]
<< " of dimensions " << (f2mm * 0.5 * widths[0]) << ", "
<< (f2mm * 0.5 * heights[0]) << ", " << (f2mm * 0.5 * thick[ii]);
<< " of dimensions " << HGCalDD4HepHelper::convert2mm(0.5 * widths[0]) << ", "
<< HGCalDD4HepHelper::convert2mm(0.5 * heights[0]) << ", "
<< HGCalDD4HepHelper::convert2mm(0.5 * thick[ii]);
#endif
} else {
dd4hep::Solid solid = dd4hep::Box(0.5 * widths[1], 0.5 * heights[1], 0.5 * thick[ii]);
ns.addSolidNS(ns.prepend(name), solid);
glog = dd4hep::Volume(solid.name(), solid, matter);
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << solid.name() << " Box made of " << materials[ii]
<< " of dimensions " << (f2mm * 0.5 * widths[1]) << ", "
<< (f2mm * 0.5 * heights[1]) << ", " << (f2mm * 0.5 * thick[ii]);
<< " of dimensions " << HGCalDD4HepHelper::convert2mm(0.5 * widths[1]) << ", "
<< HGCalDD4HepHelper::convert2mm(0.5 * heights[1]) << ", "
<< HGCalDD4HepHelper::convert2mm(0.5 * thick[ii]);
#endif
int ncol = tileN[0] / 2;
int nrow = tileN[1] / 2;
Expand All @@ -130,9 +137,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext
glog.placeVolume(glog1, copy, dd4hep::Transform3D(rotation, tran));
#ifdef EDM_ML_DEBUG
kount++;
edm::LogVerbatim("HGCalGeom")
<< "DDAHcalModuleAlgo: " << tile << " number " << copy << " positioned in " << glog.name() << " at ("
<< (f2mm * xpos) << ", " << (f2mm * ypos) << ", 0) with no rotation";
edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << tile << " number " << copy << " positioned in "
<< glog.name() << " at (" << HGCalDD4HepHelper::convert2mm(xpos) << ","
<< HGCalDD4HepHelper::convert2mm(ypos) << ",0) with no rotation";
#endif
}
}
Expand All @@ -146,20 +153,22 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext
++copyNumber[ii];
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HGCalGeom") << "DDAHcalModuleAlgo: " << glog.name() << " number " << copy << " positioned in "
<< module.name() << " at (0, 0, " << (f2mm * zz) << ") with no rotation";
<< module.name() << " at (0,0," << HGCalDD4HepHelper::convert2mm(zz)
<< ") with no rotation";
#endif
zz += (0.5 * thick[ii]);
} // End of loop over layers in a block
zi = zo;
laymin = laymax;
if (fabs(thickTot - layerThick[i]) > tol) {
if (thickTot > layerThick[i]) {
edm::LogError("HGCalGeom") << "Thickness of the partition " << (f2mm * layerThick[i])
<< " is smaller than thickness " << (f2mm * thickTot)
edm::LogError("HGCalGeom") << "Thickness of the partition " << HGCalDD4HepHelper::convert2mm(layerThick[i])
<< " is smaller than thickness " << HGCalDD4HepHelper::convert2mm(thickTot)
<< " of all its components **** ERROR ****\n";
} else {
edm::LogWarning("HGCalGeom") << "Thickness of the partition " << (f2mm * layerThick[i])
<< " does not match with " << (f2mm * thickTot) << " of the components\n";
edm::LogWarning("HGCalGeom") << "Thickness of the partition " << HGCalDD4HepHelper::convert2mm(layerThick[i])
<< " does not match with " << HGCalDD4HepHelper::convert2mm(thickTot)
<< " of the components\n";
}
}
} // End of loop over blocks
Expand Down