3 #include <fwk/RunController.h>
4 #include <fwk/CentralConfig.h>
6 #include <sdet/SDetector.h>
8 #include <utl/CoordinateSystem.h>
10 #include <utl/TabulatedFunction.h>
11 #include <utl/Reader.h>
30 using std::ostringstream;
32 using namespace G4XTankSimulatorAG;
35 double G4XTankConstruction::fExpHall_z;
36 double G4XTankConstruction::fExpHall_r;
38 double G4XTankConstruction::fTankRadius;
39 double G4XTankConstruction::fTankHalfHeight;
40 double G4XTankConstruction::fTankThickness;
41 double G4XTankConstruction::fTankPos_x;
42 double G4XTankConstruction::fTankPos_y;
43 double G4XTankConstruction::fTankPos_z;
45 double G4XTankConstruction::fGroundThickness;
51 double G4XTankConstruction::fFaceRadius, G4XTankConstruction::fFaceRadiusz;
52 double G4XTankConstruction::fFaceActiveRadius, G4XTankConstruction::fHeightz;
53 double G4XTankConstruction::fPmtRmin, G4XTankConstruction::fPmtRmax;
54 double G4XTankConstruction::fPmtRzmin, G4XTankConstruction::fPmtRzmax;
55 double G4XTankConstruction::fInterfaceRmin, G4XTankConstruction::fInterfaceRzmin;
56 double G4XTankConstruction::fInterfaceRmax, G4XTankConstruction::fInterfaceRzmax;
57 double G4XTankConstruction::fInterfaceThickness, G4XTankConstruction::fGlassThickness;
58 double G4XTankConstruction::fDomeThickness;
59 double G4XTankConstruction::fDomeRmin, G4XTankConstruction::fDomeRmax;
60 double G4XTankConstruction::fDomeRzmin, G4XTankConstruction::fDomeRzmax;
61 double G4XTankConstruction::fMinPhi, G4XTankConstruction::fMaxPhi;
62 double G4XTankConstruction::fMinTheta, G4XTankConstruction::fMaxTheta;
63 double G4XTankConstruction::fSolarPanelLength, G4XTankConstruction::fSolarPanelWidth;
64 double G4XTankConstruction::fSolarPanelThickness;
65 double G4XTankConstruction::fSolarPanelX, G4XTankConstruction::fSolarPanelY;
66 double G4XTankConstruction::fSolarPanelZ, G4XTankConstruction::fSolarPanelTiltAngle;
67 double G4XTankConstruction::fElecBoxLength, G4XTankConstruction::fElecBoxWidth;
68 double G4XTankConstruction::fElecBoxThickness;
69 double G4XTankConstruction::fElecBoxX, G4XTankConstruction::fElecBoxY;
70 double G4XTankConstruction::fElecBoxZ, G4XTankConstruction::fElecBoxTiltAngle;
78 double G4XTankConstruction::fSIGMA_ALPHA;
90 G4XTankConstruction::G4XTankConstruction(
double cDepth ) : expHall_phys(0)
136 vector<double>::iterator tfIt;
140 dynamic_cast<G4XTankSimulator*
>(&RunController::GetInstance().GetModule(
"G4XTankSimulatorAG"));
144 if (!theCurrentDetectorStation)
return;
173 tfIt++) (*tfIt) *=
eV;
217 tfIt++) (*tfIt) *=
eV;
229 tfIt++) (*tfIt) *=
eV;
231 tfIt++) (*tfIt) *=
m;
248 useAtt[
"use"] = std::string(
"yes");
249 Branch amigaSimB = TopBranch_B.
GetChild(
"AmigaSimulation", useAtt);
253 cout <<
"Tank+Ground beneath will be simulated within a cylinder of radius " <<
fExpHall_r/CLHEP::m <<
" m\n";
258 vector<double> pmt_pp;
259 vector<double> pmt_face_abs;
260 vector<double> pmt_interface_abs;
261 vector<double> pmt_dome_abs;
265 TopBranch_A.
GetChild(
"interface_AbsLength").
GetData(pmt_interface_abs);
272 size = pmt_pp.size();
274 if ( pmt_face_abs.size() != size ||
275 pmt_interface_abs.size() != size ||
276 pmt_dome_abs.size() != size )
278 ostringstream errMsg;
279 errMsg<<
"TabulatedFunction size mismatch for pmt properties";
285 for (
unsigned int i = 0; i < size; ++i)
299 vector<double> liner_pp;
300 vector<double> liner_rindex;
301 vector<double> liner_abs;
302 vector<double> liner_backscatter;
311 size = liner_pp.size();
313 if ( liner_rindex.size() != size ||
314 liner_abs.size() != size ||
315 liner_backscatter.size() != size )
317 ostringstream errMsg;
318 errMsg<<
"Tabulated function size mismatch for liner properties";
324 for (
unsigned int i = 0; i < size; ++i)
346 G4String name, symbol;
353 elN =
new G4Element(name =
"Nitrogen", symbol =
"N", z = 7, a);
355 elO =
new G4Element(name =
"Oxygen", symbol =
"O", z = 8, a);
357 elAl =
new G4Element(name =
"Aluminum", symbol =
"Al", z = 13, a);
359 elFe =
new G4Element(name =
"Iron", symbol =
"Fe", z = 26, a);
361 elH =
new G4Element(name =
"Hydrogen", symbol =
"H", z = 1, a);
363 elSi =
new G4Element(name =
"Silicon", symbol =
"Si", z = 14, a);
365 elB =
new G4Element(name =
"Boron", symbol =
"B", z = 5, a);
367 elNa =
new G4Element(name =
"Sodium", symbol =
"Na", z = 11, a);
369 elC =
new G4Element(name =
"Carbon", symbol =
"C", z = 6, a);
371 elMg =
new G4Element(name =
"Magnesium", symbol =
"Mg", z = 12, a);
373 elCl =
new G4Element (name =
"Chlorine", symbol =
"C", z = 17, a);
375 elK =
new G4Element (name =
"Potassium", symbol =
"K", z = 19, a);
377 elTi =
new G4Element (name =
"Titanium", symbol =
"Ti", z = 22, a);
379 elCa =
new G4Element (name =
"Calcium", symbol =
"Ca", z = 20, a);
412 G4double density = 1.29e-03*
g/
cm3;
414 Air =
new G4Material(name =
"Air_G4XTank", density, nel = 2);
415 Air->AddElement(
elN, 0.7);
416 Air->AddElement(
elO, 0.3);
419 double airPP[2] = { 2.08*
eV, 4.20*
eV };
420 double airRINDEX[2] = { 1.000273, 1.000273 };
421 double airABSLENGTH[2] = { 10000.0*
m, 10000.0*
m };
423 airMPT =
new G4MaterialPropertiesTable();
424 airMPT->AddProperty(
"RINDEX", airPP, airRINDEX, 2);
425 airMPT->AddProperty(
"ABSLENGTH", airPP, airABSLENGTH, 2);
437 G4double density = 1.0*
g/
cm3;
444 Water =
new G4Material(name =
"Water", density, nel = 2);
450 waterMPT =
new G4MaterialPropertiesTable();
457 double* array_ppWATER =
new double[num+1];
458 double* array_waterRINDEX =
new double[num+1];
460 for ( index = 0; index < num; index++ )
466 waterMPT->AddProperty(
"RINDEX", array_ppWATER, array_waterRINDEX, num);
472 double* array_ppwaterABSORPTION =
new double[num+1];
473 double* array_waterABSORPTION =
new double[num+1];
475 for ( index = 0; index < num; index++ )
481 waterMPT->AddProperty(
"ABSLENGTH", array_ppwaterABSORPTION, array_waterABSORPTION, num);
488 delete[] array_ppWATER;
489 delete[] array_waterRINDEX;
490 delete[] array_ppwaterABSORPTION;
491 delete[] array_waterABSORPTION;
500 G4double
a = 1.*
g /
mole;
501 G4double density = universe_mean_density;
505 Vacuum =
new G4Material(name =
"Vacuum", z = 1, a, density,
506 kStateUndefined, STP_Temperature,
529 G4double density = 2.23*
g/
cm3;
530 G4int nel, natoms, ncomponents;
540 SiO2 =
new G4Material(name =
"SiO2", density, nel = 2);
542 SiO2->AddElement(
elO, natoms = 2);
544 B2O2 =
new G4Material(name =
"B2O2", density, nel = 2);
545 B2O2->AddElement(
elB, natoms = 2);
546 B2O2->AddElement(
elO, natoms = 2);
548 Na2O =
new G4Material(name =
"Na2O", density, nel = 2);
550 Na2O->AddElement(
elO, natoms = 1);
552 Pyrex =
new G4Material(name =
"Pyrex", density, ncomponents = 3);
566 double* array_pmtfaceRINDEX_PP =
new double[num+1];
567 double* array_pmtfaceRINDEX =
new double[num+1];
572 for ( index = 0; index < num; index++ )
578 pmtfaceMPT->AddProperty(
"RINDEX", array_pmtfaceRINDEX_PP, array_pmtfaceRINDEX, num);
584 double* array_pmtfaceABSORPTION_PP =
new double[num+1];
585 double* array_pmtfaceABSORPTION =
new double[num+1];
590 for ( index = 0; index < num; index++ )
599 pmtfaceMPT->AddProperty(
"ABSLENGTH", array_pmtfaceABSORPTION_PP, array_pmtfaceABSORPTION, num);
607 delete[] array_pmtfaceRINDEX_PP;
608 delete[] array_pmtfaceRINDEX;
609 delete[] array_pmtfaceABSORPTION_PP;
610 delete[] array_pmtfaceABSORPTION;
629 G4double density = 2.23 *
g /
cm3;
639 SiO2 =
new G4Material(name =
"SiO2", density, nel = 2);
641 SiO2->AddElement(
elO, natoms = 2);
643 B2O2 =
new G4Material(name =
"B2O2", density, nel = 2);
644 B2O2->AddElement(
elB, natoms = 2);
645 B2O2->AddElement(
elO, natoms = 2);
647 Na2O =
new G4Material(name =
"Na2O", density, nel = 2);
649 Na2O->AddElement(
elO, natoms = 1);
652 Pyrex1 =
new G4Material(name =
"Pyrex1", density, ncomponents = 3);
666 double* array_pmtface1RINDEX_PP =
new double[num+1];
667 double* array_pmtface1RINDEX =
new double[num+1];
669 for ( index = 0; index < num; index++ )
675 pmtfaceMPT1->AddProperty(
"RINDEX", array_pmtface1RINDEX_PP, array_pmtface1RINDEX, num);
682 double* array_pmtface1ABSORPTION_PP =
new double[num+1];
683 double* array_pmtface1ABSORPTION =
new double[num+1];
685 for ( index = 0; index < num; index++ )
691 pmtfaceMPT1->AddProperty(
"ABSLENGTH", array_pmtface1ABSORPTION_PP, array_pmtface1ABSORPTION, num);
695 delete[] array_pmtface1RINDEX_PP;
696 delete[] array_pmtface1RINDEX;
697 delete[] array_pmtface1ABSORPTION_PP;
698 delete[] array_pmtface1ABSORPTION;
705 G4double density = 1.20*
g/
cm3;
718 CH3 =
new G4Material(name =
"CH3", density, nel = 2);
719 CH3->AddElement(
elC, natoms = 1);
720 CH3->AddElement(
elH, natoms = 3);
722 CH2 =
new G4Material(name =
"CH2", density, nel = 2);
723 CH2->AddElement(
elC, natoms = 1);
724 CH2->AddElement(
elH, natoms = 2);
726 C =
new G4Material(name =
"C", density, nel = 1);
727 C->AddElement(
elC, natoms = 1);
729 CO2 =
new G4Material(name =
"CO2", density, nel = 2);
730 CO2->AddElement(
elC, natoms = 1);
731 CO2->AddElement(
elO, natoms = 2);
743 Lucite =
new G4Material(name=
"Lucite", density, nel=3);
755 double *array_pmtdomeRINDEX_PP =
new double[num+1];
756 double *array_pmtdomeRINDEX =
new double[num+1];
758 for ( index = 0; index < num; index++ )
764 pmtdomeMPT->AddProperty(
"RINDEX", array_pmtdomeRINDEX_PP, array_pmtdomeRINDEX, num);
770 double *array_pmtdomeABSORPTION_PP =
new double[num+1];
771 double *array_pmtdomeABSORPTION =
new double[num+1];
773 for ( index = 0; index < num; index++ )
779 pmtdomeMPT->AddProperty(
"ABSLENGTH", array_pmtdomeABSORPTION_PP, array_pmtdomeABSORPTION, num);
786 delete[] array_pmtdomeRINDEX_PP;
787 delete[] array_pmtdomeRINDEX;
788 delete[] array_pmtdomeABSORPTION_PP;
789 delete[] array_pmtdomeABSORPTION;
799 G4double density = 0.97*
g/
cm3;
805 Interface =
new G4Material(name =
"Interface", density, nel = 3);
817 double* array_interfaceRINDEX_PP =
new double[num+1];
818 double* array_interfaceRINDEX =
new double[num+1];
820 for ( index = 0; index < num; index++ )
826 interfaceMPT->AddProperty(
"RINDEX", array_interfaceRINDEX_PP, array_interfaceRINDEX, num);
832 double* array_interfaceABSORPTION_PP =
new double[num+1];
833 double* array_interfaceABSORPTION =
new double[num+1];
835 for ( index = 0; index < num; index++ )
841 interfaceMPT->AddProperty(
"ABSLENGTH", array_interfaceABSORPTION_PP, array_interfaceABSORPTION, num);
848 delete[] array_interfaceRINDEX_PP;
849 delete[] array_interfaceRINDEX;
850 delete[] array_interfaceABSORPTION_PP;
851 delete[] array_interfaceABSORPTION;
860 G4double density = 0.94*
g/
cm3;
863 vector<double>::iterator It;
870 HDPE =
new G4Material(name =
"HDPE", density, nel = 2);
871 HDPE->AddElement(
elC, natoms = 2);
872 HDPE->AddElement(
elH, natoms = 4);
874 linerMPT =
new G4MaterialPropertiesTable();
881 double* array_linerABSORPTION_PP =
new double[num+1];
882 double* array_linerABSORPTION =
new double[num+1];
884 for ( index = 0; index < num; index++ )
890 linerMPT->AddProperty(
"ABSLENGTH", array_linerABSORPTION_PP, array_linerABSORPTION, num);
897 delete[] array_linerABSORPTION_PP;
898 delete[] array_linerABSORPTION;
934 double* array_linerSPECULARLOBECONSTANT_PP =
new double[num+1];
935 double* array_linerSPECULARLOBECONSTANT =
new double[num+1];
937 for ( index = 0; index < num; index++ )
944 array_linerSPECULARLOBECONSTANT_PP,
945 array_linerSPECULARLOBECONSTANT, num);
949 double* array_linerSPECULARSPIKECONSTANT_PP =
new double[num+1];
950 double* array_linerSPECULARSPIKECONSTANT =
new double[num+1];
952 for ( index = 0; index < num; index++ )
959 array_linerSPECULARSPIKECONSTANT_PP,
960 array_linerSPECULARSPIKECONSTANT, num);
964 double* array_linerREFLECTIVITY_PP =
new double[num+1];
965 double* array_linerREFLECTIVITY =
new double[num+1];
967 for ( index = 0; index < num; index++ )
975 array_linerREFLECTIVITY_PP,
976 array_linerREFLECTIVITY, num);
980 double* array_linerBACKSCATTERCONSTANT_PP =
new double[num+1];
981 double* array_linerBACKSCATTERCONSTANT =
new double[num+1];
983 for ( index = 0; index < num; index++ )
990 array_linerBACKSCATTERCONSTANT_PP,
991 array_linerBACKSCATTERCONSTANT, num);
994 double* array_TYVEK_RINDEX_PP =
new double[num+1];
995 double* array_TYVEK_RINDEX =
new double[num+1];
997 for ( index = 0; index < num; index++ )
1006 array_TYVEK_RINDEX_PP,
1007 array_TYVEK_RINDEX, num);
1018 delete[] array_linerSPECULARLOBECONSTANT_PP;
1019 delete[] array_linerSPECULARLOBECONSTANT;
1021 delete[] array_linerSPECULARSPIKECONSTANT_PP;
1022 delete[] array_linerSPECULARSPIKECONSTANT;
1024 delete[] array_linerREFLECTIVITY_PP;
1025 delete[] array_linerREFLECTIVITY;
1027 delete[] array_linerBACKSCATTERCONSTANT_PP;
1028 delete[] array_linerBACKSCATTERCONSTANT;
1030 delete[] array_TYVEK_RINDEX_PP;
1031 delete[] array_TYVEK_RINDEX;
1043 G4double density = 2.700*
g/
cm3;
1044 G4double
a = 29.98*
g/
mole;
1047 Al =
new G4Material(name =
"Aluminum", z = 13, a, density);
1054 G4double fSoilDensity = 2.38 *
g /
cm3;
1057 SiO2 =
new G4Material (
"SiO2", fSoilDensity, nel = 2 );
1058 SiO2->AddElement (
elSi, natoms = 1 );
1059 SiO2->AddElement (
elO , natoms = 2 );
1061 Al2O3 =
new G4Material (
"Al2O3", fSoilDensity, nel = 2 );
1063 Al2O3->AddElement (
elO , natoms = 3 );
1065 Fe2O3 =
new G4Material (
"Fe2O3", fSoilDensity, nel = 2 );
1067 Fe2O3->AddElement (
elO , natoms = 3 );
1069 TiO2 =
new G4Material (
"TiO2", fSoilDensity, nel = 2 );
1070 TiO2->AddElement (
elTi, natoms = 1 );
1071 TiO2->AddElement (
elO , natoms = 2 );
1073 CaO =
new G4Material (
"CaO", fSoilDensity, nel = 2 );
1074 CaO->AddElement (
elCa, natoms = 1 );
1075 CaO->AddElement (
elO , natoms = 1 );
1077 MgO =
new G4Material (
"MgO", fSoilDensity, nel = 2 );
1078 MgO->AddElement (
elMg, natoms = 1 );
1079 MgO->AddElement (
elO , natoms = 1 );
1081 K2O =
new G4Material (
"K2O", fSoilDensity, nel = 2 );
1082 K2O->AddElement (
elK, natoms = 2 );
1083 K2O->AddElement (
elO , natoms = 1 );
1085 Na2O =
new G4Material (
"Na2O", fSoilDensity, nel = 2 );
1086 Na2O->AddElement (
elNa, natoms = 2 );
1087 Na2O->AddElement (
elO , natoms = 1 );
1092 Ground =
new G4Material(name =
"Ground", fSoilDensity, ncomponents = 8);
1156 expHall_log->SetVisAttributes(G4VisAttributes::Invisible);
1164 cout <<
"XXX Enabling ground beneath the tank XXX\n";
1176 G4SDManager *SDMan = G4SDManager::GetSDMpointer();
1238 G4ThreeVector(dome1_x, dome1_y, dome1_z),
inner_log,
1241 G4ThreeVector(dome2_x, dome2_y, dome2_z),
inner_log,
1244 G4ThreeVector(dome3_x, dome3_y, dome3_z),
inner_log,
1258 pmt1_phys =
new G4PVPlacement(0, G4ThreeVector(dome1_x, dome1_y, dome1_z),
1260 pmt2_phys =
new G4PVPlacement(0, G4ThreeVector(dome2_x, dome2_y, dome2_z),
1262 pmt3_phys =
new G4PVPlacement(0, G4ThreeVector(dome3_x, dome3_y, dome3_z),
1271 pmt1_phys1 =
new G4PVPlacement(0, G4ThreeVector(dome1_x, dome1_y, dome1_z),
1273 pmt2_phys1 =
new G4PVPlacement(0, G4ThreeVector(dome2_x, dome2_y, dome2_z),
1275 pmt3_phys1 =
new G4PVPlacement(0, G4ThreeVector(dome3_x, dome3_y, dome3_z),
1287 interface1_phys =
new G4PVPlacement(0, G4ThreeVector(dome1_x, dome1_y, dome1_z),
1289 interface2_phys =
new G4PVPlacement(0, G4ThreeVector(dome2_x, dome2_y, dome2_z),
1291 interface3_phys =
new G4PVPlacement(0, G4ThreeVector(dome3_x, dome3_y, dome3_z),
1299 dome1_phys =
new G4PVPlacement(0, G4ThreeVector(dome1_x, dome1_y, dome1_z),
1301 dome2_phys =
new G4PVPlacement(0, G4ThreeVector(dome2_x, dome2_y, dome2_z),
1303 dome3_phys =
new G4PVPlacement(0, G4ThreeVector(dome3_x, dome3_y, dome3_z),
1314 SDName =
"/Tank/pmt1";
1317 SDName=
"/Tank/pmt2";
1320 SDName=
"/Tank/pmt3";
1323 SDMan->AddNewDetector(PMT1SD);
1324 SDMan->AddNewDetector(PMT2SD);
1325 SDMan->AddNewDetector(PMT3SD);
1327 pmt1_log->SetSensitiveDetector(PMT1SD);
1328 pmt2_log->SetSensitiveDetector(PMT2SD);
1329 pmt3_log->SetSensitiveDetector(PMT3SD);
1343 G4RotationMatrix *solarPanelRot =
new G4RotationMatrix();
1344 solarPanelRot->rotate(M_PI/2, G4ThreeVector(0, 0, 1));
1365 G4RotationMatrix *elecBoxRot =
new G4RotationMatrix();
1366 elecBoxRot->rotate(M_PI/2, G4ThreeVector(0, 0, 1));
1383 G4GeometryManager::GetInstance()->OpenGeometry();
1384 G4PhysicalVolumeStore::GetInstance()->Clean();
1385 G4LogicalVolumeStore::GetInstance()->Clean();
1386 G4SolidStore::GetInstance()->Clean();
1399 G4RunManager::GetRunManager()->DefineWorldVolume(
CreateTank(),
true);
G4LogicalVolume * tank_log
static double fFaceRadiusz
G4VPhysicalVolume * pmt1_phys
G4VPhysicalVolume * pmt1_phys1
G4LogicalVolume * expHall_log
G4LogicalVolume * pmt2_log1
G4Ellipsoid * interface_out_aux
G4VPhysicalVolume * pmt2_phys1
G4VPhysicalVolume * ground_phys
unsigned int GetNPoints() const
void CreateAluminium(void)
static double fSolarPanelX
G4VPhysicalVolume * side_phys
G4SubtractionSolid * pmt_solid
const utl::TabulatedFunction & GetDomeRefractionIndex() const
Refraction index for the PMT dome.
G4VPhysicalVolume * solarPanel_phys
G4MaterialPropertiesTable * airMPT
Detector description interface for Station-related data.
G4VPhysicalVolume * inner1_phys
static utl::TabulatedFunction fLinerBACKSCATTERCONSTANT
static utl::TabulatedFunction fLinerABSORPTION
G4SubtractionSolid * interface_solid
static double fSolarPanelThickness
G4LogicalVolume * pmt3_log1
ArrayIterator XEnd()
end of array of X
static double fInterfaceThickness
CoordinateSystemPtr GetCoordinateSystem() const
Get the coordinate system of the current internal representation.
Class to hold collection (x,y) points and provide interpolation between them.
G4Ellipsoid * dome_in_aux
static utl::TabulatedFunction fInterfaceABSORPTION
G4VPhysicalVolume * tank_phys
std::map< std::string, std::string > AttributeMap
const utl::TabulatedFunction & GetLinerSpecularLobe() const
Tyvek liner specular lobe constant as a function of photon energy.
G4LogicalVolume * dome2_log
static double fElecBoxTiltAngle
static double fInterfaceRzmax
class that handles Geant4 SD simulation
static double fInterfaceRzmin
G4VPhysicalVolume * interface2_phys
G4MaterialPropertiesTable * pmtdomeMPT
static double fTankRadius
const PMT & GetPMT(const int id) const
Get specified PMT by id.
G4VPhysicalVolume * pmt3_phys
void PushBack(const double x, const double y)
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
G4LogicalVolume * ground_log
G4LogicalVolume * inner_log
TransformerConstructor< DerivedCSPolicy > CoordinateSystem
The normal coordinate system type.
const utl::TabulatedFunction & GetWaterAbsorptionLength() const
Water absorption length as a function of photon energy.
G4VPhysicalVolume * inner2_phys
G4LogicalVolume * pmt3_log
Exception for reporting variable out of valid range.
void CreateInterface(void)
G4VPhysicalVolume * Construct(void)
static const sdet::Station * GetCurrentDetectorStation()
static double fFaceRadius
G4VPhysicalVolume * pmt3_phys1
Class representing a document branch.
static double fTankHalfHeight
G4LogicalVolume * pmt1_log1
const utl::TabulatedFunction & GetLinerReflectivity() const
Tyvek liner reflectivity as a function of photon energy.
G4VPhysicalVolume * CreateTank(void)
static double fSolarPanelLength
G4VPhysicalVolume * dome2_phys
G4Ellipsoid * interface_in_aux
G4VPhysicalVolume * interface1_phys
G4LogicalVolume * interface2_log
double GetX(const CoordinateSystemPtr &coordinateSystem) const
G4LogicalVolume * side_log
G4MaterialPropertiesTable * interfaceMPT
static utl::TabulatedFunction fInterfaceRINDEX
G4MaterialPropertiesTable * waterMPT
G4LogicalBorderSurface * bottomsurface
static double fGlassThickness
static utl::TabulatedFunction fLinerTYVEK_RINDEX
const utl::Point & GetPosition() const
PMT position.
G4LogicalVolume * interface3_log
static utl::TabulatedFunction fPmtfaceRINDEX
G4VPhysicalVolume * dome1_phys
void SetDetectorParameters(void)
double GetRadius() const
Radius of the tank (water only)
static double fElecBoxThickness
void SetRequiredParameters(double)
double GetHeight() const
Height of the tank (water only)
static double fElecBoxLength
G4VPhysicalVolume * dome3_phys
G4LogicalVolume * top_log
static utl::TabulatedFunction fPmtdomeABSORPTION
void GetData(bool &b) const
Overloads of the GetData member template function.
G4Ellipsoid * inner_solid
void SetXMLParameters(void)
G4LogicalVolume * interface1_log
G4SubtractionSolid * dome_solid
G4VPhysicalVolume * elecBox_phys
G4LogicalVolume * dome1_log
static double fInterfaceRmin
const utl::TabulatedFunction & GetLinerSpecularSpike() const
Tyvek liner specular spike constant as a function of photon energy.
G4SubtractionSolid * pmt_solid1
G4LogicalBorderSurface * sidesurface
static utl::TabulatedFunction fWaterRINDEX
ArrayIterator YBegin()
begin of array of Y
class that handles PMT hits
G4LogicalVolume * dome3_log
G4Ellipsoid * dome_out_aux
G4MaterialPropertiesTable * pmtfaceMPT1
G4VPhysicalVolume * inner3_phys
static utl::TabulatedFunction fPmtdomeRINDEX
double GetY(const CoordinateSystemPtr &coordinateSystem) const
static utl::TabulatedFunction fLinerREFLECTIVITY
static utl::TabulatedFunction fLinerSPECULARSPIKECONSTANT
G4VPhysicalVolume * bottom_phys
static double fSolarPanelTiltAngle
static double fSolarPanelWidth
static double fSIGMA_ALPHA
G4VPhysicalVolume * pmt2_phys
G4OpticalSurface * OpLinerSurface
G4MaterialPropertiesTable * linerMPT
G4LogicalVolume * pmt2_log
G4MaterialPropertiesTable * linerOpticalMPT
G4VPhysicalVolume * interface3_phys
G4LogicalVolume * bottom_log
static utl::TabulatedFunction fWaterABSORPTION
G4LogicalVolume * pmt1_log
ArrayIterator XBegin()
begin of array of X
double GetThickness() const
Thickness of the tank walls.
G4LogicalBorderSurface * topsurface
void GetDataForThisTank(void)
const utl::TabulatedFunction & GetWaterRefractionIndex() const
Water refraction index as a function of photon energy.
G4VPhysicalVolume * expHall_phys
static double fFaceActiveRadius
void CreatePrimitives(void)
static double fTankThickness
Main configuration utility.
static double fInterfaceRmax
ArrayIterator YEnd()
end of array of Y
G4MaterialPropertiesTable * pmtfaceMPT
static double fDomeThickness
const utl::TabulatedFunction & GetFaceRefractionIndex() const
Refraction index for the PMT face.
G4LogicalVolume * elecBox_log
double GetLinerSigmaAlpha() const
Tyvek liner sigma_alpha roughness parameter.
void CreateElements(void)
double Y(const double x) const
Get or interpolate the Y value that corresponds to parameter x.
static utl::TabulatedFunction fLinerSPECULARLOBECONSTANT
static double fSolarPanelZ
G4VPhysicalVolume * top_phys
#define ERROR(message)
Macro for logging error messages.
static double fElecBoxWidth
static double fSolarPanelY
const utl::TabulatedFunction & GetRTVRefractionIndex() const
Refraction index for the interface between PMT face and dome (RTV)
void CreateMaterials(void)
utl::Branch GetTopBranch(const std::string &id)
Get top branch for moduleConfigLink with given id (XML files)
static utl::TabulatedFunction fPmtfaceABSORPTION
static double fGroundThickness
G4LogicalVolume * solarPanel_log