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();
G4MaterialPropertiesTable * theMPT
double theSiAbsLengthScalingFactor
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
MaterialProperties(int DebugLevel, double SiAbsLengthScale)
constructor
void setMaterialProperties()
define optical properties of materials in the detector
~MaterialProperties()
destructor
const G4MaterialTable * theMaterialTable