10 #include "G4LogicalVolumeStore.hh"
14 #include "G4SystemOfUnits.hh"
17 : theMaterialTable(), theMPDebugLevel(0),
18 theSiAbsLengthScalingFactor(0),
20 theTECWafer(), theTOBWafer(), theTIBWafer()
32 G4double theDensity = 2.33*
g/cm3;
33 G4double theAtomicWeight = 28.09*
g/mole;
34 G4double theAtomicNumber = 14.0;
36 theTECWafer =
new G4Material(
"TEC_Wafer", theAtomicNumber, theAtomicWeight, theDensity);
37 theTOBWafer =
new G4Material(
"TOB_Wafer", theAtomicNumber, theAtomicWeight, theDensity);
38 theTIBWafer =
new G4Material(
"TIB_Wafer", theAtomicNumber, theAtomicWeight, theDensity);
78 LogDebug(
"SimLaserAlignment:MaterialProperties") <<
" **** here comes the material table **** "
79 << *(G4Material::GetMaterialTable());
85 const G4int nEntries = 3;
88 G4double PhotonEnergy[nEntries] = { 1.10 * eV, 1.15 * eV, 1.20 * eV };
91 G4double Scintillation[nEntries] = { 0.1, 1.0, 0.1 };
94 G4double RefractiveIndex[nEntries] = { 3.5400, 3.5425, 3.5450 };
96 G4double RefractiveIndexMirror[nEntries] = { 1.50669, 1.50669, 1.50669 };
103 G4double RefractiveIndexGeneral[nEntries] = { 1.0, 1.0, 1.0 };
107 G4double AbsorptionLengthSi[nEntries] = { 1136 * micrometer, 1136 * micrometer, 1136 * micrometer };
109 G4double AbsorptionLengthSiBarrel[nEntries] = { 0.1 * fermi,
115 G4double AbsorptionLengthMirror[nEntries] = { 11.7 * cm, 0.5 * 11.7 * cm, 11.7 * cm };
121 G4double AbsorptionLengthDead[nEntries] = { 0.001 * micrometer, 0.001 * micrometer,
122 0.001 * micrometer };
125 G4double AbsorptionLengthGeneral[nEntries] = { 75 * cm, 75 * cm, 75 * cm };
128 G4double AbsorptionLengthTAir[nEntries] = { 10 *
m, 1.8 *
m, 10 *
m };
130 G4double AbsorptionLengthAl[nEntries] = { 10 * mm, 10 * mm, 10 * mm};
131 G4double AbsorptionLengthTOB_CF_Str[nEntries] = { 1 * cm, 10 * cm, 1 * cm };
132 G4double AbsorptionLengthTOBCF[nEntries] = { 0.1 * mm, 20 * mm, 0.1 * mm };
133 G4double AbsorptionLengthTIBCF[nEntries] = { 15.0 * cm, 15.0 * cm, 15.0 * cm };
136 G4double SiReflectivity[nEntries] = { 0.0, 0.0, 0.0 };
139 G4double TECEfficiency[nEntries] = { 0.9, 0.9, 0.9 };
140 G4double BarrelEfficiency[nEntries] = { 1.0, 1.0, 1.0 };
143 G4double Reflectivity[nEntries] = { 0.05, 0.05, 0.05 };
163 G4Material * theMaterial =
const_cast<G4Material*
>(*theMTEntry);
165 if (theMaterial->GetMaterialPropertiesTable())
167 theMPT = theMaterial->GetMaterialPropertiesTable();
171 theMPT =
new G4MaterialPropertiesTable;
175 if ( theMaterial->GetName() ==
"TEC_Wafer" )
177 theMPT->AddProperty(
"FASTCOMPONENT", PhotonEnergy, Scintillation, nEntries);
178 theMPT->AddProperty(
"SLOWCOMPONENT", PhotonEnergy, Scintillation, nEntries);
179 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndex, nEntries);
180 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthSi, nEntries);
181 theMPT->AddProperty(
"EFFICIENCY", PhotonEnergy, TECEfficiency, nEntries);
183 theMPT->AddConstProperty(
"SCINTILLATIONYIELD", 12000.0/MeV);
184 theMPT->AddConstProperty(
"RESOLTUIONSCALE", 1.0);
185 theMPT->AddConstProperty(
"FASTTIMECONSTANT", 20.0 * ns);
186 theMPT->AddConstProperty(
"SLOWTIMECONSTANT", 45.0 * ns);
187 theMPT->AddConstProperty(
"YIELDRATIO", 1.0);
190 theMaterial->SetMaterialPropertiesTable(
theMPT);
194 else if ( theMaterial->GetName() ==
"Silicon" )
196 theMPT->AddProperty(
"FASTCOMPONENT", PhotonEnergy, Scintillation, nEntries);
197 theMPT->AddProperty(
"SLOWCOMPONENT", PhotonEnergy, Scintillation, nEntries);
198 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndex, nEntries);
199 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthSi, nEntries);
200 theMPT->AddProperty(
"EFFICIENCY", PhotonEnergy, TECEfficiency, nEntries);
202 theMPT->AddConstProperty(
"SCINTILLATIONYIELD", 12000.0/MeV);
203 theMPT->AddConstProperty(
"RESOLTUIONSCALE", 1.0);
204 theMPT->AddConstProperty(
"FASTTIMECONSTANT", 20.0 * ns);
205 theMPT->AddConstProperty(
"SLOWTIMECONSTANT", 45.0 * ns);
206 theMPT->AddConstProperty(
"YIELDRATIO", 1.0);
209 theMaterial->SetMaterialPropertiesTable(
theMPT);
213 else if ( ( theMaterial->GetName() ==
"TOB_Wafer" ) ||
214 ( theMaterial->GetName() ==
"TIB_Wafer" ) )
216 theMPT->AddProperty(
"FASTCOMPONENT", PhotonEnergy, Scintillation, nEntries);
217 theMPT->AddProperty(
"SLOWCOMPONENT", PhotonEnergy, Scintillation, nEntries);
218 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndex, nEntries);
219 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthSiBarrel, nEntries);
220 theMPT->AddProperty(
"REFLECTIVITY", PhotonEnergy, SiReflectivity, nEntries);
221 theMPT->AddProperty(
"EFFICIENCY", PhotonEnergy, BarrelEfficiency, nEntries);
223 theMPT->AddConstProperty(
"SCINTILLATIONYIELD", 12000.0/MeV);
224 theMPT->AddConstProperty(
"RESOLTUIONSCALE", 1.0);
225 theMPT->AddConstProperty(
"FASTTIMECONSTANT", 20.0 * ns);
226 theMPT->AddConstProperty(
"SLOWTIMECONSTANT", 45.0 * ns);
227 theMPT->AddConstProperty(
"YIELDRATIO", 1.0);
230 theMaterial->SetMaterialPropertiesTable(
theMPT);
234 else if ( theMaterial->GetName() ==
"TIB_ledge_side" )
237 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndexGeneral, nEntries);
238 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthGeneral, nEntries);
241 theMaterial->SetMaterialPropertiesTable(
theMPT);
245 else if ( ( theMaterial->GetName() ==
"T_Air" ) ||
246 ( theMaterial->GetName() ==
"Air" ) )
249 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndexGeneral, nEntries);
251 theMPT->AddProperty(
"REFLECTIVITY", PhotonEnergy, SiReflectivity, nEntries);
253 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthTAir, nEntries);
256 theMaterial->SetMaterialPropertiesTable(
theMPT);
261 else if ( ( theMaterial->GetName() ==
"TIB_connector" ) ||
262 ( theMaterial->GetName() ==
"TIB_cylinder" ) ||
263 ( theMaterial->GetName() ==
"TID_Connector" ) )
266 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndexGeneral, nEntries);
268 theMPT->AddProperty(
"REFLECTIVITY", PhotonEnergy, SiReflectivity, nEntries);
270 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthDead, nEntries);
273 theMaterial->SetMaterialPropertiesTable(
theMPT);
277 else if ( theMaterial->GetName() ==
"Si O_2" )
280 theMPT->AddProperty(
"RINDEX", PhotonEnergy,RefractiveIndexMirror, nEntries);
282 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthMirror, nEntries);
284 theMPT->AddProperty(
"REFLECTIVITY",PhotonEnergy,Reflectivity, nEntries);
287 theMaterial->SetMaterialPropertiesTable(
theMPT);
291 else if ( ( theMaterial->GetName() ==
"TOB_Aluminium" ) ||
292 ( theMaterial->GetName() ==
"Aluminium" ) )
295 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndexGeneral, nEntries);
297 theMPT->AddProperty(
"REFLECTIVITY", PhotonEnergy, SiReflectivity, nEntries);
299 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthAl, nEntries);
302 theMaterial->SetMaterialPropertiesTable(
theMPT);
306 else if ( ( theMaterial->GetName() ==
"TOB_CF_Str" ) )
309 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndexGeneral, nEntries);
311 theMPT->AddProperty(
"REFLECTIVITY", PhotonEnergy, SiReflectivity, nEntries);
313 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthTOB_CF_Str, nEntries);
316 theMaterial->SetMaterialPropertiesTable(
theMPT);
320 else if ( ( theMaterial->GetName() ==
"TID_CF" ) ||
321 ( theMaterial->GetName() ==
"Nomex" ) ||
322 ( theMaterial->GetName() ==
"TOB_Nomex" ) ||
323 ( theMaterial->GetName() ==
"TID_Nomex" ) ||
324 ( theMaterial->GetName() ==
"TOB_plate_C" ) ||
325 ( theMaterial->GetName() ==
"TOB_rod" ) ||
326 ( theMaterial->GetName() ==
"TOB_cool_DS" ) ||
327 ( theMaterial->GetName() ==
"TOB_cool_SS" ) ||
328 ( theMaterial->GetName() ==
"TID_in_cable" ) ||
329 ( theMaterial->GetName() ==
"TOB_PA_rphi" ) ||
330 ( theMaterial->GetName() ==
"TOB_frame_ele" ) ||
331 ( theMaterial->GetName() ==
"TOB_PA_ster" ) ||
332 ( theMaterial->GetName() ==
"TOB_ICB" ) ||
333 ( theMaterial->GetName() ==
"TOB_CONN1" ) ||
334 ( theMaterial->GetName() ==
"TOB_CONN2" ) ||
335 ( theMaterial->GetName() ==
"TOB_CONN3" ) ||
336 ( theMaterial->GetName() ==
"TOB_rail" ) ||
337 ( theMaterial->GetName() ==
"TOB_sid_rail1" ) ||
338 ( theMaterial->GetName() ==
"TOB_sid_rail2" ) )
341 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndexGeneral, nEntries);
343 theMPT->AddProperty(
"REFLECTIVITY", PhotonEnergy, SiReflectivity, nEntries);
345 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthTOBCF, nEntries);
348 theMaterial->SetMaterialPropertiesTable(
theMPT);
352 else if ( ( theMaterial->GetName() ==
"TIB_CF" ) ||
353 ( theMaterial->GetName() ==
"TIB_cables_ax_out" ) ||
354 ( theMaterial->GetName() ==
"TIB_outer_supp" ) ||
355 ( theMaterial->GetName() ==
"TIB_PA_rphi" ) ||
356 ( theMaterial->GetName() ==
"TIB_rail" ) ||
357 ( theMaterial->GetName() ==
"TIB_sid_rail1" ) ||
358 ( theMaterial->GetName() ==
"TIB_sid_rail2" ) ||
359 ( theMaterial->GetName() ==
"TIB_mod_cool" ) )
362 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndexGeneral, nEntries);
364 theMPT->AddProperty(
"REFLECTIVITY", PhotonEnergy, SiReflectivity, nEntries);
366 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthTIBCF, nEntries);
369 theMaterial->SetMaterialPropertiesTable(
theMPT);
376 theMPT->AddProperty(
"RINDEX", PhotonEnergy, RefractiveIndexGeneral, nEntries);
378 theMPT->AddProperty(
"ABSLENGTH", PhotonEnergy, AbsorptionLengthGeneral, nEntries);
381 theMaterial->SetMaterialPropertiesTable(
theMPT);
389 const G4LogicalVolumeStore * theLogicalVolumeStore = G4LogicalVolumeStore::GetInstance();
390 std::vector<G4LogicalVolume*>::const_iterator theLogicalVolume;
392 for ( theLogicalVolume = theLogicalVolumeStore->begin(); theLogicalVolume != theLogicalVolumeStore->end(); theLogicalVolume++ )
394 if ( ( (*theLogicalVolume)->GetName() ==
"TECModule0StereoActive" ) ||
395 ( (*theLogicalVolume)->GetName() ==
"TECModule0RphiActive" ) ||
396 ( (*theLogicalVolume)->GetName() ==
"TECModule1StereoActive" ) ||
397 ( (*theLogicalVolume)->GetName() ==
"TECModule1RphiActive" ) ||
398 ( (*theLogicalVolume)->GetName() ==
"TECModule2RphiActive" ) ||
399 ( (*theLogicalVolume)->GetName() ==
"TECModule3RphiActive" ) ||
400 ( (*theLogicalVolume)->GetName() ==
"TECModule4StereoActive" ) ||
401 ( (*theLogicalVolume)->GetName() ==
"TECModule4RphiActive" ) ||
402 ( (*theLogicalVolume)->GetName() ==
"TECModule5RphiActive" ) ||
403 ( (*theLogicalVolume)->GetName() ==
"TECModule6RphiActive" ) )
410 std::cout <<
" AC1CMS: found a logical volume: " << (*theLogicalVolume)->GetName() << std::endl;
411 std::cout <<
" AC1CMS: the logical volume material = " << (*theLogicalVolume)->GetMaterial()->GetName() << std::endl;
412 std::cout <<
" AC1CMS: the MaterialPropertiesTable = " << std::endl;
413 (*theLogicalVolume)->GetMaterial()->GetMaterialPropertiesTable()->DumpTable();
416 else if ( ( (*theLogicalVolume)->GetName() ==
"TOBActiveSter0" ) ||
417 ( (*theLogicalVolume)->GetName() ==
"TOBActiveRphi0" ) ||
418 ( (*theLogicalVolume)->GetName() ==
"TOBActiveRphi2" ) ||
419 ( (*theLogicalVolume)->GetName() ==
"TOBActiveRphi4" ) )
426 std::cout <<
" AC1CMS: found a logical volume: " << (*theLogicalVolume)->GetName() << std::endl;
427 std::cout <<
" AC1CMS: the logical volume material = " << (*theLogicalVolume)->GetMaterial()->GetName() << std::endl;
428 std::cout <<
" AC1CMS: the MaterialPropertiesTable = " << std::endl;
429 (*theLogicalVolume)->GetMaterial()->GetMaterialPropertiesTable()->DumpTable();
432 else if ( ( (*theLogicalVolume)->GetName() ==
"TIBActiveSter0" ) ||
433 ( (*theLogicalVolume)->GetName() ==
"TIBActiveRphi0" ) ||
434 ( (*theLogicalVolume)->GetName() ==
"TIBActiveRphi2" ) )
441 std::cout <<
" AC1CMS: found a logical volume: " << (*theLogicalVolume)->GetName() << std::endl;
442 std::cout <<
" AC1CMS: the logical volume material = " << (*theLogicalVolume)->GetMaterial()->GetName() << std::endl;
443 std::cout <<
" AC1CMS: the MaterialPropertiesTable = " << std::endl;
444 (*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