ATLAS Offline Software
Loading...
Searching...
No Matches
PixelMaterialMap.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "PixelMaterialMap.h"
7
8#include <iostream>
9
10PixelMaterialMap::Key::Key(int layerdisk_in, int typenum_in, const std::string & volumeName_in):
11 layerdisk(layerdisk_in),
12 typenum(typenum_in),
13 volumeName(volumeName_in)
14{}
15
16bool
18{
19 return
20 ((volumeName < rhs.volumeName) ||
21 (volumeName == rhs.volumeName && layerdisk < rhs.layerdisk) ||
22 (volumeName == rhs.volumeName && layerdisk == rhs.layerdisk && typenum < rhs.typenum));
23}
24
25
27{
28 for (const auto& rec : *mapTable) {
29 int layerdisk = rec->getInt("LAYERDISK");
30 int typenum = rec->getInt("TYPENUM");
31 std::string volumeName = rec->getString("VOLUMENAME");
32 std::string material = rec->getString("MATERIAL");
33 addMaterial(layerdisk, typenum, volumeName, material);
34 }
35}
36
37std::string
38PixelMaterialMap::getMaterial(int layerdisk, int typenum, const std::string & volumeName) const
39{
40 // If not found try (layerdisk, 0) then (0, typenum), then (0,0)
41 mapType::const_iterator iter;
42 iter = m_matmap.find(Key(layerdisk, typenum, volumeName));
43 if (iter == m_matmap.end() && typenum) {
44 iter = m_matmap.find(Key(layerdisk, 0, volumeName));
45 }
46 if (iter == m_matmap.end() && layerdisk) {
47 iter = m_matmap.find(Key(0, typenum, volumeName));
48 }
49 if (iter == m_matmap.end() && typenum && layerdisk) {
50 iter = m_matmap.find(Key(0, 0, volumeName));
51 }
52 if (iter != m_matmap.end()) {
53 return iter->second;
54 } else {
55 std::cout << "ERROR: PixelMaterialMap::getMaterial Cannot find material for volumeName: " << volumeName << std::endl;
56 return "";
57 }
58}
59
60
61void
62PixelMaterialMap::addMaterial(int layerdisk, int typenum, const std::string & volumeName, const std::string & materialName)
63{
64 m_matmap[Key(layerdisk, typenum, volumeName)] = materialName;
65}
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
Definition of the abstract IRDBRecordset interface.
Key(int layerdisk_in, int typenum_in, const std::string &volumeName_in)
bool operator<(const Key &rhs) const
void addMaterial(int layerdisk, int typenum, const std::string &volumeName, const std::string &materialName)
std::string getMaterial(int layerdisk, int typenum, const std::string &volumeName) const
PixelMaterialMap(const IRDBRecordset_ptr &mapTable)