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