10 #include "G4LogicalVolumeStore.hh"
14 #include "G4SystemOfUnits.hh"
19 theSiAbsLengthScalingFactor(0),
34 G4double theDensity = 2.33 *
g / cm3;
35 G4double theAtomicWeight = 28.09 *
g / mole;
36 G4double theAtomicNumber = 14.0;
38 theTECWafer =
new G4Material(
"TEC_Wafer", theAtomicNumber, theAtomicWeight, theDensity);
39 theTOBWafer =
new G4Material(
"TOB_Wafer", theAtomicNumber, theAtomicWeight, theDensity);
40 theTIBWafer =
new G4Material(
"TIB_Wafer", theAtomicNumber, theAtomicWeight, theDensity);
85 LogDebug(
"SimLaserAlignment:MaterialProperties")
86 <<
" **** here comes the material table **** " << *(G4Material::GetMaterialTable());
92 const G4int nEntries = 3;
95 G4double PhotonEnergy[nEntries] = {1.10 * eV, 1.15 * eV, 1.20 * eV};
98 G4double Scintillation[nEntries] = {0.1, 1.0, 0.1};
101 G4double RefractiveIndex[nEntries] = {3.5400, 3.5425, 3.5450};
103 G4double RefractiveIndexMirror[nEntries] = {1.50669, 1.50669, 1.50669};
110 G4double RefractiveIndexGeneral[nEntries] = {1.0, 1.0, 1.0};
115 G4double AbsorptionLengthSi[nEntries] = {1136 * micrometer, 1136 * micrometer, 1136 * micrometer};
117 G4double AbsorptionLengthSiBarrel[nEntries] = {0.1 *
fermi, 0.1 *
fermi, 0.1 *
fermi};
120 G4double AbsorptionLengthMirror[nEntries] = {11.7 * cm, 0.5 * 11.7 * cm, 11.7 * cm};
126 G4double AbsorptionLengthDead[nEntries] = {0.001 * micrometer, 0.001 * micrometer, 0.001 * micrometer};
129 G4double AbsorptionLengthGeneral[nEntries] = {75 * cm, 75 * cm, 75 * cm};
132 G4double AbsorptionLengthTAir[nEntries] = {10 *
m, 1.8 *
m, 10 *
m};
134 G4double AbsorptionLengthAl[nEntries] = {10 * mm, 10 * mm, 10 * mm};
135 G4double AbsorptionLengthTOB_CF_Str[nEntries] = {1 * cm, 10 * cm, 1 * cm};
136 G4double AbsorptionLengthTOBCF[nEntries] = {0.1 * mm, 20 * mm, 0.1 * mm};
137 G4double AbsorptionLengthTIBCF[nEntries] = {15.0 * cm, 15.0 * cm, 15.0 * cm};
140 G4double SiReflectivity[nEntries] = {0.0, 0.0, 0.0};
143 G4double TECEfficiency[nEntries] = {0.9, 0.9, 0.9};
144 G4double BarrelEfficiency[nEntries] = {1.0, 1.0, 1.0};
147 G4double Reflectivity[nEntries] = {0.05, 0.05, 0.05};
165 G4Material *theMaterial = const_cast<G4Material *>(*theMTEntry);
167 if (theMaterial->GetMaterialPropertiesTable()) {
168 theMPT = theMaterial->GetMaterialPropertiesTable();
170 theMPT =
new G4MaterialPropertiesTable;
174 if (theMaterial->GetName() ==
"TEC_Wafer") {
175 theMPT->AddProperty(
"FASTCOMPONENT", PhotonEnergy, Scintillation, nEntries);
176 theMPT->AddProperty(
"SLOWCOMPONENT", PhotonEnergy, Scintillation, nEntries);
177 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndex, nEntries);
178 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthSi, nEntries);
179 theMPT->AddProperty(
"EFFICIENCY", PhotonEnergy, TECEfficiency, nEntries);
181 theMPT->AddConstProperty(
"SCINTILLATIONYIELD", 12000.0 /
MeV);
182 theMPT->AddConstProperty(
"RESOLTUIONSCALE", 1.0);
183 theMPT->AddConstProperty(
"FASTTIMECONSTANT", 20.0 * ns);
184 theMPT->AddConstProperty(
"SLOWTIMECONSTANT", 45.0 * ns);
185 theMPT->AddConstProperty(
"YIELDRATIO", 1.0);
188 theMaterial->SetMaterialPropertiesTable(
theMPT);
192 else if (theMaterial->GetName() ==
"Silicon") {
193 theMPT->AddProperty(
"FASTCOMPONENT", PhotonEnergy, Scintillation, nEntries);
194 theMPT->AddProperty(
"SLOWCOMPONENT", PhotonEnergy, Scintillation, nEntries);
195 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndex, nEntries);
196 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthSi, nEntries);
197 theMPT->AddProperty(
"EFFICIENCY", PhotonEnergy, TECEfficiency, nEntries);
199 theMPT->AddConstProperty(
"SCINTILLATIONYIELD", 12000.0 /
MeV);
200 theMPT->AddConstProperty(
"RESOLTUIONSCALE", 1.0);
201 theMPT->AddConstProperty(
"FASTTIMECONSTANT", 20.0 * ns);
202 theMPT->AddConstProperty(
"SLOWTIMECONSTANT", 45.0 * ns);
203 theMPT->AddConstProperty(
"YIELDRATIO", 1.0);
206 theMaterial->SetMaterialPropertiesTable(
theMPT);
210 else if ((theMaterial->GetName() ==
"TOB_Wafer") || (theMaterial->GetName() ==
"TIB_Wafer")) {
211 theMPT->AddProperty(
"FASTCOMPONENT", PhotonEnergy, Scintillation, nEntries);
212 theMPT->AddProperty(
"SLOWCOMPONENT", PhotonEnergy, Scintillation, nEntries);
213 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndex, nEntries);
214 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthSiBarrel, nEntries);
215 theMPT->AddProperty(
"REFLECTIVITY", PhotonEnergy, SiReflectivity, nEntries);
216 theMPT->AddProperty(
"EFFICIENCY", PhotonEnergy, BarrelEfficiency, nEntries);
218 theMPT->AddConstProperty(
"SCINTILLATIONYIELD", 12000.0 /
MeV);
219 theMPT->AddConstProperty(
"RESOLTUIONSCALE", 1.0);
220 theMPT->AddConstProperty(
"FASTTIMECONSTANT", 20.0 * ns);
221 theMPT->AddConstProperty(
"SLOWTIMECONSTANT", 45.0 * ns);
222 theMPT->AddConstProperty(
"YIELDRATIO", 1.0);
225 theMaterial->SetMaterialPropertiesTable(
theMPT);
229 else if (theMaterial->GetName() ==
"TIB_ledge_side") {
231 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndexGeneral, nEntries);
232 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthGeneral, nEntries);
235 theMaterial->SetMaterialPropertiesTable(
theMPT);
239 else if ((theMaterial->GetName() ==
"T_Air") || (theMaterial->GetName() ==
"Air")) {
241 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndexGeneral, nEntries);
243 theMPT->AddProperty(
"REFLECTIVITY", PhotonEnergy, SiReflectivity, nEntries);
245 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthTAir, nEntries);
248 theMaterial->SetMaterialPropertiesTable(
theMPT);
253 else if ((theMaterial->GetName() ==
"TIB_connector") || (theMaterial->GetName() ==
"TIB_cylinder") ||
254 (theMaterial->GetName() ==
"TID_Connector")) {
256 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndexGeneral, nEntries);
258 theMPT->AddProperty(
"REFLECTIVITY", PhotonEnergy, SiReflectivity, nEntries);
260 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthDead, nEntries);
263 theMaterial->SetMaterialPropertiesTable(
theMPT);
267 else if (theMaterial->GetName() ==
"Si O_2") {
269 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndexMirror, nEntries);
271 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthMirror, nEntries);
273 theMPT->AddProperty(
"REFLECTIVITY", PhotonEnergy, Reflectivity, nEntries);
276 theMaterial->SetMaterialPropertiesTable(
theMPT);
280 else if ((theMaterial->GetName() ==
"TOB_Aluminium") || (theMaterial->GetName() ==
"Aluminium")) {
282 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndexGeneral, nEntries);
284 theMPT->AddProperty(
"REFLECTIVITY", PhotonEnergy, SiReflectivity, nEntries);
286 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthAl, nEntries);
289 theMaterial->SetMaterialPropertiesTable(
theMPT);
293 else if ((theMaterial->GetName() ==
"TOB_CF_Str")) {
295 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndexGeneral, nEntries);
297 theMPT->AddProperty(
"REFLECTIVITY", PhotonEnergy, SiReflectivity, nEntries);
299 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthTOB_CF_Str, nEntries);
302 theMaterial->SetMaterialPropertiesTable(
theMPT);
306 else if ((theMaterial->GetName() ==
"TID_CF") || (theMaterial->GetName() ==
"Nomex") ||
307 (theMaterial->GetName() ==
"TOB_Nomex") || (theMaterial->GetName() ==
"TID_Nomex") ||
308 (theMaterial->GetName() ==
"TOB_plate_C") || (theMaterial->GetName() ==
"TOB_rod") ||
309 (theMaterial->GetName() ==
"TOB_cool_DS") || (theMaterial->GetName() ==
"TOB_cool_SS") ||
310 (theMaterial->GetName() ==
"TID_in_cable") || (theMaterial->GetName() ==
"TOB_PA_rphi") ||
311 (theMaterial->GetName() ==
"TOB_frame_ele") || (theMaterial->GetName() ==
"TOB_PA_ster") ||
312 (theMaterial->GetName() ==
"TOB_ICB") || (theMaterial->GetName() ==
"TOB_CONN1") ||
313 (theMaterial->GetName() ==
"TOB_CONN2") || (theMaterial->GetName() ==
"TOB_CONN3") ||
314 (theMaterial->GetName() ==
"TOB_rail") || (theMaterial->GetName() ==
"TOB_sid_rail1") ||
315 (theMaterial->GetName() ==
"TOB_sid_rail2")) {
317 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndexGeneral, nEntries);
319 theMPT->AddProperty(
"REFLECTIVITY", PhotonEnergy, SiReflectivity, nEntries);
321 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthTOBCF, nEntries);
324 theMaterial->SetMaterialPropertiesTable(
theMPT);
328 else if ((theMaterial->GetName() ==
"TIB_CF") || (theMaterial->GetName() ==
"TIB_cables_ax_out") ||
329 (theMaterial->GetName() ==
"TIB_outer_supp") || (theMaterial->GetName() ==
"TIB_PA_rphi") ||
330 (theMaterial->GetName() ==
"TIB_rail") || (theMaterial->GetName() ==
"TIB_sid_rail1") ||
331 (theMaterial->GetName() ==
"TIB_sid_rail2") || (theMaterial->GetName() ==
"TIB_mod_cool")) {
333 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndexGeneral, nEntries);
335 theMPT->AddProperty(
"REFLECTIVITY", PhotonEnergy, SiReflectivity, nEntries);
337 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthTIBCF, nEntries);
340 theMaterial->SetMaterialPropertiesTable(
theMPT);
346 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndexGeneral, nEntries);
348 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthGeneral, nEntries);
351 theMaterial->SetMaterialPropertiesTable(
theMPT);
359 const G4LogicalVolumeStore *theLogicalVolumeStore = G4LogicalVolumeStore::GetInstance();
360 std::vector<G4LogicalVolume *>::const_iterator theLogicalVolume;
362 for (theLogicalVolume = theLogicalVolumeStore->begin(); theLogicalVolume != theLogicalVolumeStore->end();
363 theLogicalVolume++) {
364 if (((*theLogicalVolume)->GetName() ==
"TECModule0StereoActive") ||
365 ((*theLogicalVolume)->GetName() ==
"TECModule0RphiActive") ||
366 ((*theLogicalVolume)->GetName() ==
"TECModule1StereoActive") ||
367 ((*theLogicalVolume)->GetName() ==
"TECModule1RphiActive") ||
368 ((*theLogicalVolume)->GetName() ==
"TECModule2RphiActive") ||
369 ((*theLogicalVolume)->GetName() ==
"TECModule3RphiActive") ||
370 ((*theLogicalVolume)->GetName() ==
"TECModule4StereoActive") ||
371 ((*theLogicalVolume)->GetName() ==
"TECModule4RphiActive") ||
372 ((*theLogicalVolume)->GetName() ==
"TECModule5RphiActive") ||
373 ((*theLogicalVolume)->GetName() ==
"TECModule6RphiActive")) {
378 std::cout <<
" AC1CMS: found a logical volume: " << (*theLogicalVolume)->GetName() << std::endl;
379 std::cout <<
" AC1CMS: the logical volume material = " << (*theLogicalVolume)->GetMaterial()->GetName()
381 std::cout <<
" AC1CMS: the MaterialPropertiesTable = " << std::endl;
382 (*theLogicalVolume)->GetMaterial()->GetMaterialPropertiesTable()->DumpTable();
384 }
else if (((*theLogicalVolume)->GetName() ==
"TOBActiveSter0") ||
385 ((*theLogicalVolume)->GetName() ==
"TOBActiveRphi0") ||
386 ((*theLogicalVolume)->GetName() ==
"TOBActiveRphi2") ||
387 ((*theLogicalVolume)->GetName() ==
"TOBActiveRphi4")) {
392 std::cout <<
" AC1CMS: found a logical volume: " << (*theLogicalVolume)->GetName() << std::endl;
393 std::cout <<
" AC1CMS: the logical volume material = " << (*theLogicalVolume)->GetMaterial()->GetName()
395 std::cout <<
" AC1CMS: the MaterialPropertiesTable = " << std::endl;
396 (*theLogicalVolume)->GetMaterial()->GetMaterialPropertiesTable()->DumpTable();
398 }
else if (((*theLogicalVolume)->GetName() ==
"TIBActiveSter0") ||
399 ((*theLogicalVolume)->GetName() ==
"TIBActiveRphi0") ||
400 ((*theLogicalVolume)->GetName() ==
"TIBActiveRphi2")) {
405 std::cout <<
" AC1CMS: found a logical volume: " << (*theLogicalVolume)->GetName() << std::endl;
406 std::cout <<
" AC1CMS: the logical volume material = " << (*theLogicalVolume)->GetMaterial()->GetName()
408 std::cout <<
" AC1CMS: the MaterialPropertiesTable = " << std::endl;
409 (*theLogicalVolume)->GetMaterial()->GetMaterialPropertiesTable()->DumpTable();