CMS 3D CMS Logo

MaterialBudgetCategorizer.cc
Go to the documentation of this file.
2 
3 #include "G4LogicalVolumeStore.hh"
4 #include "G4Material.hh"
5 #include "G4UnitsTable.hh"
6 #include "G4EmCalculator.hh"
7 #include "G4UnitsTable.hh"
8 
11 
12 #include <fstream>
13 #include <vector>
14 
16  //----- Build map volume name - volume index
17  G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance();
18  G4LogicalVolumeStore::iterator ite;
19  int ii = 0;
20  for (ite = lvs->begin(); ite != lvs->end(); ite++) {
21  theVolumeMap[(*ite)->GetName()] = ii++;
22  }
23 
24  if (mode.compare("Tracker") == 0) {
25  std::string theMaterialX0FileName = edm::FileInPath("Validation/Geometry/data/trackerMaterials.x0").fullPath();
26  buildCategoryMap(theMaterialX0FileName, theX0Map);
27  std::string theMaterialL0FileName = edm::FileInPath("Validation/Geometry/data/trackerMaterials.l0").fullPath();
28  buildCategoryMap(theMaterialL0FileName, theL0Map);
29  } else if (mode.compare("Mtd") == 0) {
30  std::string theMaterialX0FileName = edm::FileInPath("Validation/Geometry/data/mtdMaterials.x0").fullPath();
31  buildCategoryMap(theMaterialX0FileName, theX0Map);
32  std::string theMaterialL0FileName = edm::FileInPath("Validation/Geometry/data/mtdMaterials.l0").fullPath();
33  buildCategoryMap(theMaterialL0FileName, theL0Map);
34  } else if (mode.compare("HGCal") == 0) {
35  std::string thehgcalMaterialX0FileName = edm::FileInPath("Validation/Geometry/data/hgcalMaterials.x0").fullPath();
36  buildHGCalCategoryMap(thehgcalMaterialX0FileName, theHGCalX0Map);
37  std::string thehgcalMaterialL0FileName = edm::FileInPath("Validation/Geometry/data/hgcalMaterials.l0").fullPath();
38  buildHGCalCategoryMap(thehgcalMaterialL0FileName, theHGCalL0Map);
39  }
40 }
41 
43  std::map<std::string, std::vector<float> >& theMap) {
44  std::ifstream theMaterialFile(theMaterialFileName);
45 
46  if (!theMaterialFile)
47  cms::Exception("LogicError") << " File not found " << theMaterialFileName;
48 
49  float sup, sen, cab, col, ele, oth, air;
50  sup = sen = cab = col = ele = 0.;
51 
52  std::string materialName;
53 
54  while (theMaterialFile) {
55  theMaterialFile >> materialName;
56  theMaterialFile >> sup >> sen >> cab >> col >> ele;
57 
58  if (materialName[0] == '#') //Ignore comments
59  continue;
60 
61  oth = 0.000;
62  air = 0.000;
63  theMap[materialName].clear(); // clear before re-filling
64  theMap[materialName].push_back(sup); // sup
65  theMap[materialName].push_back(sen); // sen
66  theMap[materialName].push_back(cab); // cab
67  theMap[materialName].push_back(col); // col
68  theMap[materialName].push_back(ele); // ele
69  theMap[materialName].push_back(oth); // oth
70  theMap[materialName].push_back(air); // air
71  edm::LogInfo("MaterialBudget") << "MaterialBudgetCategorizer: Material " << materialName << " filled: "
72  << "\n\tSUP " << sup << "\n\tSEN " << sen << "\n\tCAB " << cab << "\n\tCOL " << col
73  << "\n\tELE " << ele << "\n\tOTH " << oth << "\n\tAIR " << air
74  << "\n\tAdd up to: " << sup + sen + cab + col + ele + oth + air;
75  }
76 }
77 
79  std::map<std::string, std::vector<float> >& theMap) {
80  std::ifstream theMaterialFile(theMaterialFileName);
81  if (!theMaterialFile)
82  cms::Exception("LogicError") << " File not found " << theMaterialFileName;
83 
84  // fill everything as "other"
85  float air, cables, copper, h_scintillator, lead, hgc_g10_fr4, silicon, stainlesssteel, wcu, oth, epoxy, kapton,
86  aluminium, polystyrene, hgc_eeconnector, hgc_heconnector;
87  air = cables = copper = h_scintillator = lead = hgc_g10_fr4 = silicon = stainlesssteel = wcu = epoxy = kapton =
88  aluminium = polystyrene = hgc_eeconnector = hgc_heconnector = 0.;
89 
90  std::string materialName;
91  while (theMaterialFile) {
92  theMaterialFile >> materialName;
93  theMaterialFile >> air >> cables >> copper >> h_scintillator >> lead >> hgc_g10_fr4 >> silicon >> stainlesssteel >>
94  wcu >> epoxy >> kapton >> aluminium >> polystyrene >> hgc_eeconnector >> hgc_heconnector;
95  // Skip comments
96  if (materialName[0] == '#')
97  continue;
98  // Substitute '*' with spaces
99  std::replace(materialName.begin(), materialName.end(), '*', ' ');
100  oth = 0.000;
101  theMap[materialName].clear(); // clear before re-filling
102  theMap[materialName].push_back(air); // air
103  theMap[materialName].push_back(cables); // cables
104  theMap[materialName].push_back(copper); // copper
105  theMap[materialName].push_back(h_scintillator); // h_scintillator
106  theMap[materialName].push_back(lead); // lead
107  theMap[materialName].push_back(hgc_g10_fr4); // hgc_g10_fr4
108  theMap[materialName].push_back(silicon); // silicon
109  theMap[materialName].push_back(stainlesssteel); // stainlesssteel
110  theMap[materialName].push_back(wcu); // wcu
111  theMap[materialName].push_back(oth); // oth
112  theMap[materialName].push_back(epoxy); // epoxy
113  theMap[materialName].push_back(kapton); // kapton
114  theMap[materialName].push_back(aluminium); // aluminium
115  theMap[materialName].push_back(polystyrene); // polystyrene
116  theMap[materialName].push_back(hgc_eeconnector); // hgc_eeconnector
117  theMap[materialName].push_back(hgc_heconnector); // hgc_heconnector
118  edm::LogInfo("MaterialBudget") << "MaterialBudgetCategorizer: material " << materialName << " filled " << std::endl
119  << "\tair " << air << std::endl
120  << "\tcables " << cables << std::endl
121  << "\tcopper " << copper << std::endl
122  << "\th_scintillator " << h_scintillator << std::endl
123  << "\tlead " << lead << std::endl
124  << "\thgc_g10_fr4 " << hgc_g10_fr4 << std::endl
125  << "\tsilicon " << silicon << std::endl
126  << "\tstainlesssteel " << stainlesssteel << std::endl
127  << "\twcu " << wcu << std::endl
128  << "\tepoxy " << epoxy << std::endl
129  << "\tkapton " << kapton << std::endl
130  << "\taluminium " << aluminium << std::endl
131  << "\tpolystyrene " << polystyrene << std::endl
132  << "\thgc_eeconnector " << hgc_eeconnector << std::endl
133  << "\thgc_heconnector " << hgc_heconnector << std::endl
134  << "\tOTH " << oth;
135  }
136 }
std::map< std::string, std::vector< float > > theHGCalX0Map
def replace(string, replacements)
void buildCategoryMap(std::string theMaterialFileName, std::map< std::string, std::vector< float > > &theMap)
std::map< std::string, int > theVolumeMap
ii
Definition: cuy.py:589
std::map< std::string, std::vector< float > > theHGCalL0Map
Log< level::Info, false > LogInfo
col
Definition: cuy.py:1009
std::map< std::string, std::vector< float > > theX0Map
std::map< std::string, std::vector< float > > theL0Map
const std::string & fullPath() const
Definition: FileInPath.cc:144
void buildHGCalCategoryMap(std::string theMaterialFileName, std::map< std::string, std::vector< float > > &theMap)