193 const auto& wafers =
args.value<std::vector<std::string> >(
"WaferName");
194 const auto& covers =
args.value<std::vector<std::string> >(
"CoverName");
197 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalTBModuleX: Material " << genMat <<
" with " << wafers.size() <<
" wafers";
199 for (
auto wafer : wafers) {
203 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalTBModuleX: " << covers.size() <<
" covers";
205 for (
auto cover : covers) {
210 const auto& materials =
args.value<std::vector<std::string> >(
"MaterialNames");
211 const auto&
names =
args.value<std::vector<std::string> >(
"VolumeNames");
212 const auto& layerThick =
args.value<std::vector<double> >(
"Thickness");
213 std::vector<int> copyNumber;
214 copyNumber.resize(materials.size(), 1);
216 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalTBModuleX: " << materials.size() <<
" types of volumes";
217 for (
unsigned int i = 0;
i <
names.size(); ++
i)
220 <<
" first copy number " << copyNumber[
i];
222 const auto& blockThick =
args.value<std::vector<double> >(
"BlockThick");
223 const auto& inOut =
args.value<
int>(
"InOut");
224 const auto& layerFrontIn =
args.value<std::vector<int> >(
"LayerFrontIn");
225 const auto& layerBackIn =
args.value<std::vector<int> >(
"LayerBackIn");
226 std::vector<int> layerFrontOut;
227 std::vector<int> layerBackOut;
229 layerFrontOut =
args.value<std::vector<int> >(
"LayerFrontOut");
230 layerBackOut =
args.value<std::vector<int> >(
"LayerBackOut");
233 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalTBModuleX: " << blockThick.size() <<
" blocks with in/out " << inOut;
234 for (
unsigned int i = 0;
i < blockThick.size(); ++
i) {
237 <<
" with inner layers " << layerFrontIn[
i] <<
":" << layerBackIn[
i]
238 <<
" and outer layers " << layerFrontOut[
i] <<
":" << layerBackOut[
i];
241 <<
" with inner layers " << layerFrontIn[
i] <<
":" << layerBackIn[
i];
244 const auto& layerType =
args.value<std::vector<int> >(
"LayerType");
245 const auto& layerSense =
args.value<std::vector<int> >(
"LayerSense");
246 const auto& maxModule =
args.value<std::vector<int> >(
"MaxModule");
248 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalTBModuleX: " << layerType.size() <<
" layers";
249 for (
unsigned int i = 0;
i < layerType.size(); ++
i)
250 edm::LogVerbatim(
"HGCalGeom") <<
"Layer [" <<
i <<
"] with material type " << layerType[
i] <<
" sensitive class "
251 << layerSense[
i] <<
" and " << maxModule[
i] <<
" maximum row/columns";
253 const auto& zMinBlock =
args.value<
double>(
"zMinBlock");
254 const auto& rMaxFine =
args.value<
double>(
"rMaxFine");
255 const auto& waferW =
args.value<
double>(
"waferW");
256 const auto& waferGap =
args.value<
double>(
"waferGap");
257 const auto& absorbW =
args.value<
double>(
"absorberW");
258 const auto& absorbH =
args.value<
double>(
"absorberH");
259 const auto&
rMax =
args.value<
double>(
"rMax");
260 const auto& rMaxB =
args.value<
double>(
"rMaxB");
261 double waferTot = waferW + waferGap;
266 <<
" gap among wafers " <<
convertCmToMm(waferGap) <<
" absorber width "
269 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalTBModuleX: NameSpace " << ns.name() <<
" Parent Name " <<
idName;
271 std::unordered_set<int> copies;
275 double zi(zMinBlock);
276 for (
unsigned int i = 0;
i < blockThick.size();
i++) {
277 double zo = zi + blockThick[
i];
285 dd4hep::Solid solid = dd4hep::Tube(0, rMaxB, 0.5 * blockThick[
i], 0.0, 2._pi);
286 ns.addSolidNS(ns.prepend(
name), solid);
288 double zz = zi + 0.5 * blockThick[
i];
292 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalTBModuleX: " << glog.name() <<
" number " <<
i <<
" positioned in "
293 <<
args.parentName() <<
" at " <<
r1 <<
" with no rotation";
294 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalTBModuleX: \t\tInside Block " <<
i <<
" Layers " << layerFrontIn[
i] <<
":"
296 <<
" thickness " <<
convertCmToMm(blockThick[
i]) <<
" ignore Center 0";
316 -0.5 * blockThick[
i],
322 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalTBModuleX: \t\tInside Block " <<
i <<
" Layers " << layerFrontOut[
i]
323 <<
":" << layerBackOut[
i] <<
" zFront " <<
convertCmToMm(-0.5 * blockThick[
i])
324 <<
" thickness " <<
convertCmToMm(blockThick[
i]) <<
" ignore Center 1";
344 -0.5 * blockThick[
i],
353 <<
convertCmToMm(zi) <<
" with " << copies.size() <<
" different wafer copy numbers";