fillCaloDimensionsMap fills a map of calorimeter dimensions for each sampling layer.
The map contains minR, maxR, minZ, maxZ and halfLengthZ for each sampling layer.
270 {
271
272
273 double minR = std::numeric_limits<double>::max();
274 double maxR = 0.0;
275 double minZ = std::numeric_limits<double>::max();
276 double maxZ = -std::numeric_limits<double>::max();
277
278
279 auto checkMinR = [&minR](
const CaloDetDescrElement* theDDE){
double r = theDDE->r();
if (
r < minR) minR =
r;};
280 auto checkMaxR = [&maxR](
const CaloDetDescrElement* theDDE){
double r = theDDE->r();
if (
r > maxR) maxR =
r;};
281 auto checkMinMaxZ = [&minZ,&maxZ](
const CaloDetDescrElement* theDDE){
double z = theDDE->z();
if (
z > maxZ) maxZ =
z;
if (
z < minZ) minZ =
z;};
282 auto calcHalfLengthZ = [&minZ, &maxZ](){return (maxZ - minZ) / 2.0;};
283
284
285 auto getMinRMaxRHalfLengthZ = [&minR, &maxR, &minZ, &maxZ, &caloSampleDDEElementsMap, &checkMinR, &checkMaxR, &checkMinMaxZ, &calcHalfLengthZ,
this](
CaloCell_ID::CaloSample currentSample) {
286
287 minR = std::numeric_limits<double>::max();
288 maxR = 0.0;
289 minZ = std::numeric_limits<double>::max();
290 maxZ = -std::numeric_limits<double>::max();
291
292 for (const CaloDetDescrElement* theDDE : caloSampleDDEElementsMap.at({getSampleName(currentSample), currentSample})) {
293 checkMinR(theDDE);
294 checkMaxR(theDDE);
295 checkMinMaxZ(theDDE);
296 }
297
298 return calcHalfLengthZ();
299 };
300
301
302 for (const CaloDetDescrElement* theDDE : caloSampleDDEElementsMap.at({getSampleName(CaloCell_ID::PreSamplerB), CaloCell_ID::PreSamplerB})) checkMinR(theDDE);
303
304
305 for (auto& currentSample : std::vector<std::pair<std::string, CaloCell_ID::CaloSample>>{{"TileBar2", CaloCell_ID::TileBar2}, {"TileGap2", CaloCell_ID::TileGap2}, {"TileExt2", CaloCell_ID::TileExt2}}) {
306 for (const CaloDetDescrElement* theDDE : caloSampleDDEElementsMap.at(currentSample)) checkMaxR(theDDE);
307 }
308
310 ATH_MSG_DEBUG(
"Max R in TileBar2, TileGap2 and TileExt2 is " << maxR);
311
312 caloDimensionsMap["CaloMinR"] = minR;
313 caloDimensionsMap["CaloMaxR"] = maxR;
314
315
317 for (const CaloDetDescrElement* theDDE : caloSampleDDEElementsMap.at(currentSample)) checkMinMaxZ(theDDE);
318 }
319
320 caloDimensionsMap["CaloMinZ"] = minZ;
321 caloDimensionsMap["CaloMaxZ"] = maxZ;
322
323 double halfLengthZ = calcHalfLengthZ();
324 ATH_MSG_DEBUG(
"Half length in Z for entire barrel is " << halfLengthZ);
325 caloDimensionsMap["CaloHalfLengthZ"] = halfLengthZ;
326
327 auto putMinRMaxRHalfLengthZInMap = [&caloDimensionsMap,&minR,&maxR,&halfLengthZ](const std::string& sampleString){
328
329
330 float smallOffset = 0.1;
331 if (std::fabs((maxR - minR)) < smallOffset) maxR = minR + smallOffset;
332 caloDimensionsMap[sampleString + "MinR"] = minR;
333 caloDimensionsMap[sampleString + "MaxR"] = maxR;
334 caloDimensionsMap[sampleString + "HalfLengthZ"] = halfLengthZ;
335 };
336
337 halfLengthZ = getMinRMaxRHalfLengthZ(CaloCell_ID::PreSamplerB);
338 putMinRMaxRHalfLengthZInMap("PreSamplerB");
339 halfLengthZ = getMinRMaxRHalfLengthZ(CaloCell_ID::EMB1);
340 putMinRMaxRHalfLengthZInMap("EMB1");
341 halfLengthZ = getMinRMaxRHalfLengthZ(CaloCell_ID::EMB2);
342 putMinRMaxRHalfLengthZInMap("EMB2");
343 halfLengthZ = getMinRMaxRHalfLengthZ(CaloCell_ID::EMB3);
344 putMinRMaxRHalfLengthZInMap("EMB3");
345 halfLengthZ = getMinRMaxRHalfLengthZ(CaloCell_ID::TileBar0);
346 putMinRMaxRHalfLengthZInMap("TileBar0");
347 halfLengthZ = getMinRMaxRHalfLengthZ(CaloCell_ID::TileBar1);
348 putMinRMaxRHalfLengthZInMap("TileBar1");
349 halfLengthZ = getMinRMaxRHalfLengthZ(CaloCell_ID::TileBar2);
350 putMinRMaxRHalfLengthZInMap("TileBar2");
351 halfLengthZ = getMinRMaxRHalfLengthZ(CaloCell_ID::TileGap1);
352
353}
std::vector< std::pair< std::string, CaloCell_ID::CaloSample > > m_caloCylinderSampleList
CaloSampling::CaloSample CaloSample