3 #include "G4LogicalVolumeStore.hh" 4 #include "G4Material.hh" 5 #include "G4UnitsTable.hh" 6 #include "G4EmCalculator.hh" 7 #include "G4UnitsTable.hh" 27 G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance();
28 G4LogicalVolumeStore::iterator ite;
30 for (ite = lvs->begin(); ite != lvs->end(); ite++) {
31 theVolumeMap[(*ite)->GetName()] = ii++;
35 const G4MaterialTable* matTable = G4Material::GetMaterialTable();
36 G4int matSize = matTable->size();
37 for( ii = 0; ii < matSize; ii++ ) {
38 theMaterialMap[ (*matTable)[
ii]->GetName()] = ii+1;
44 for(
int ii = 0; ii < matSize; ii++ ) {
45 float sup,sen,cab,
col,ele,oth,air;
46 sup=sen=cab=col=ele=0.;
49 cout <<
" material " << (*matTable)[
ii]->GetName() <<
" prepared" 51 if((*matTable)[ii]->GetName()==
"Air" 53 (*matTable)[ii]->GetName()==
"Vacuum" 59 if((*matTable)[ii]->GetName()==
"Carbon fibre str.") {
64 theX0Map[ (*matTable)[
ii]->GetName() ].push_back(sup);
65 theX0Map[ (*matTable)[
ii]->GetName() ].push_back(sen);
66 theX0Map[ (*matTable)[
ii]->GetName() ].push_back(cab);
67 theX0Map[ (*matTable)[
ii]->GetName() ].push_back(col);
68 theX0Map[ (*matTable)[
ii]->GetName() ].push_back(ele);
69 theX0Map[ (*matTable)[
ii]->GetName() ].push_back(oth);
70 theX0Map[ (*matTable)[
ii]->GetName() ].push_back(air);
72 theL0Map[ (*matTable)[
ii]->GetName() ].push_back(sup);
73 theL0Map[ (*matTable)[
ii]->GetName() ].push_back(sen);
74 theL0Map[ (*matTable)[
ii]->GetName() ].push_back(cab);
75 theL0Map[ (*matTable)[
ii]->GetName() ].push_back(col);
76 theL0Map[ (*matTable)[
ii]->GetName() ].push_back(ele);
77 theL0Map[ (*matTable)[
ii]->GetName() ].push_back(oth);
78 theL0Map[ (*matTable)[
ii]->GetName() ].push_back(air);
83 cout << endl << endl <<
"MaterialBudgetCategorizer::Fill X0 Map" << endl;
85 buildCategoryMap(theMaterialX0FileName, theX0Map);
88 buildHGCalCategoryMap(thehgcalMaterialX0FileName, theHGCalX0Map);
90 cout << endl << endl <<
"MaterialBudgetCategorizer::Fill L0 Map" << endl;
92 buildCategoryMap(theMaterialL0FileName, theL0Map);
95 buildHGCalCategoryMap(thehgcalMaterialL0FileName, theHGCalL0Map);
97 cout << endl << endl <<
"MaterialBudgetCategorizer::Material Summary --------" << endl;
99 for( ii = 0; ii < matSize; ii++ ) {
101 cout <<
" material " << (*matTable)[
ii]->GetName()
103 <<
"\t density = " << G4BestUnit((*matTable)[ii]->GetDensity(),
"Volumic Mass")
105 <<
"\t X0 = " << (*matTable)[
ii]->GetRadlen() <<
" mm" 107 <<
"\t Energy threshold for photons for 100 mm range = " 108 << G4BestUnit(calc.ComputeEnergyCutFromRangeCut(100, G4String(
"gamma"), (*matTable)[ii]->GetName()) ,
"Energy")
110 <<
" SUP " << theX0Map[ (*matTable)[
ii]->GetName() ][0]
111 <<
" SEN " << theX0Map[ (*matTable)[
ii]->GetName() ][1]
112 <<
" CAB " << theX0Map[ (*matTable)[
ii]->GetName() ][2]
113 <<
" COL " << theX0Map[ (*matTable)[
ii]->GetName() ][3]
114 <<
" ELE " << theX0Map[ (*matTable)[
ii]->GetName() ][4]
115 <<
" OTH " << theX0Map[ (*matTable)[
ii]->GetName() ][5]
116 <<
" AIR " << theX0Map[ (*matTable)[
ii]->GetName() ][6]
118 <<
"\t Lambda0 = " << (*matTable)[
ii]->GetNuclearInterLength() <<
" mm" 120 <<
" SUP " << theL0Map[ (*matTable)[
ii]->GetName() ][0]
121 <<
" SEN " << theL0Map[ (*matTable)[
ii]->GetName() ][1]
122 <<
" CAB " << theL0Map[ (*matTable)[
ii]->GetName() ][2]
123 <<
" COL " << theL0Map[ (*matTable)[
ii]->GetName() ][3]
124 <<
" ELE " << theL0Map[ (*matTable)[
ii]->GetName() ][4]
125 <<
" OTH " << theL0Map[ (*matTable)[
ii]->GetName() ][5]
126 <<
" AIR " << theL0Map[ (*matTable)[
ii]->GetName() ][6]
128 if( theX0Map[ (*matTable)[ii]->GetName() ][5] == 1 || theL0Map[ (*matTable)[ii]->GetName() ][5] == 1 )
129 std::cout <<
"WARNING: material with no category: " << (*matTable)[
ii]->GetName() << std::endl;
140 std::ifstream theMaterialFile(theMaterialFileName);
141 if (!theMaterialFile)
142 cms::Exception(
"LogicError") <<
" File not found " << theMaterialFileName;
145 float sup,sen,cab,
col,ele,oth,air;
146 sup=sen=cab=col=ele=0.;
149 while(theMaterialFile) {
150 theMaterialFile >> materialName;
151 theMaterialFile >> sup >> sen >> cab >> col >> ele;
154 theMap[materialName].clear();
155 theMap[materialName].push_back(sup);
156 theMap[materialName].push_back(sen);
157 theMap[materialName].push_back(cab);
158 theMap[materialName].push_back(col);
159 theMap[materialName].push_back(ele);
160 theMap[materialName].push_back(oth);
161 theMap[materialName].push_back(air);
162 cout <<
" material " << materialName <<
" filled " 178 std::ifstream theMaterialFile(theMaterialFileName);
179 if (!theMaterialFile)
180 cms::Exception(
"LogicError") <<
" File not found " << theMaterialFileName;
183 float Air,Cables,Copper,H_Scintillator,Lead,M_NEMA_FR4_plate,Silicon,StainlessSteel,WCu, oth;
184 Air=Cables=Copper=H_Scintillator=Lead=M_NEMA_FR4_plate=Silicon=StainlessSteel=WCu=0.;
187 while(theMaterialFile) {
188 theMaterialFile >> materialName;
189 theMaterialFile >> Air >> Cables >> Copper >> H_Scintillator >> Lead >> M_NEMA_FR4_plate >> Silicon >> StainlessSteel >> WCu;
191 if (materialName[0] ==
'#')
194 std::replace(materialName.begin(), materialName.end(),
'*',
' ');
196 theMap[materialName].clear();
197 theMap[materialName].push_back(Air );
198 theMap[materialName].push_back(Cables );
199 theMap[materialName].push_back(Copper );
200 theMap[materialName].push_back(H_Scintillator );
201 theMap[materialName].push_back(Lead );
202 theMap[materialName].push_back(M_NEMA_FR4_plate);
203 theMap[materialName].push_back(Silicon );
204 theMap[materialName].push_back(StainlessSteel );
205 theMap[materialName].push_back(WCu );
206 theMap[materialName].push_back(oth );
207 cout <<
" material " << materialName <<
" filled " << endl
208 <<
"\tAir " << Air << endl
209 <<
"\tCables " << Cables << endl
210 <<
"\tCopper " << Copper << endl
211 <<
"\tH_Scintillator " << H_Scintillator << endl
212 <<
"\tLead " << Lead << endl
213 <<
"\tM_NEMA_FR4_plate " << M_NEMA_FR4_plate << endl
214 <<
"\tSilicon " << Silicon << endl
215 <<
"\tStainlessSteel " << StainlessSteel << endl
216 <<
"\tWCu " << WCu << endl
def replace(string, replacements)
void buildCategoryMap(std::string theMaterialFileName, std::map< std::string, std::vector< float > > &theMap)
MaterialBudgetCategorizer()
std::string fullPath() const
void buildHGCalCategoryMap(std::string theMaterialFileName, std::map< std::string, std::vector< float > > &theMap)