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>
12 #include <utl/AugerUnits.h>
31 using std::ostringstream;
33 using namespace G4TankSimulatorOG;
36 double G4TankConstruction::fExpHall_x;
37 double G4TankConstruction::fExpHall_y;
38 double G4TankConstruction::fExpHall_z;
39 double G4TankConstruction::fGroundThickness;
41 double G4TankConstruction::fTankRadius;
42 double G4TankConstruction::fTankHalfHeight;
43 double G4TankConstruction::fTankThickness;
44 double G4TankConstruction::fTankPos_x;
45 double G4TankConstruction::fTankPos_y;
46 double G4TankConstruction::fTankPos_z;
52 double G4TankConstruction::fFaceRadius, G4TankConstruction::fFaceRadiusz;
53 double G4TankConstruction::fFaceActiveRadius, G4TankConstruction::fHeightz;
54 double G4TankConstruction::fPmtRmin, G4TankConstruction::fPmtRmax;
55 double G4TankConstruction::fPmtRzmin, G4TankConstruction::fPmtRzmax;
56 double G4TankConstruction::fInterfaceRmin, G4TankConstruction::fInterfaceRzmin;
57 double G4TankConstruction::fInterfaceRmax, G4TankConstruction::fInterfaceRzmax;
58 double G4TankConstruction::fInterfaceThickness, G4TankConstruction::fGlassThickness;
59 double G4TankConstruction::fDomeThickness;
60 double G4TankConstruction::fDomeRmin, G4TankConstruction::fDomeRmax;
61 double G4TankConstruction::fDomeRzmin, G4TankConstruction::fDomeRzmax;
62 double G4TankConstruction::fMinPhi, G4TankConstruction::fMaxPhi;
63 double G4TankConstruction::fMinTheta, G4TankConstruction::fMaxTheta;
64 double G4TankConstruction::fSolarPanelLength, G4TankConstruction::fSolarPanelWidth;
65 double G4TankConstruction::fSolarPanelThickness;
66 double G4TankConstruction::fSolarPanelX, G4TankConstruction::fSolarPanelY;
67 double G4TankConstruction::fSolarPanelZ, G4TankConstruction::fSolarPanelTiltAngle;
68 double G4TankConstruction::fElecBoxLength, G4TankConstruction::fElecBoxWidth;
69 double G4TankConstruction::fElecBoxThickness;
70 double G4TankConstruction::fElecBoxX, G4TankConstruction::fElecBoxY;
71 double G4TankConstruction::fElecBoxZ, G4TankConstruction::fElecBoxTiltAngle;
79 double G4TankConstruction::fSIGMA_ALPHA;
91 G4TankConstruction::G4TankConstruction() : expHall_phys(0)
137 vector<double>::iterator tfIt;
141 dynamic_cast<G4TankSimulator*
>(&RunController::GetInstance().GetModule(
"G4TankSimulatorOG"));
145 if (!theCurrentDetectorStation)
return;
172 tfIt++) (*tfIt) *=
eV;
216 tfIt++) (*tfIt) *=
eV;
228 tfIt++) (*tfIt) *=
eV;
230 tfIt++) (*tfIt) *=
m;
247 vector<double> pmt_pp;
248 vector<double> pmt_face_abs;
249 vector<double> pmt_interface_abs;
250 vector<double> pmt_dome_abs;
261 size = pmt_pp.size();
263 if ( pmt_face_abs.size() != size ||
264 pmt_interface_abs.size() != size ||
265 pmt_dome_abs.size() != size )
267 ostringstream errMsg;
268 errMsg<<
"TabulatedFunction size mismatch for pmt properties";
274 for (
unsigned int i = 0; i < size; ++i)
288 vector<double> liner_pp;
289 vector<double> liner_rindex;
290 vector<double> liner_abs;
291 vector<double> liner_backscatter;
300 size = liner_pp.size();
302 if ( liner_rindex.size() != size ||
303 liner_abs.size() != size ||
304 liner_backscatter.size() != size )
306 ostringstream errMsg;
307 errMsg<<
"Tabulated function size mismatch for liner properties";
313 for (
unsigned int i = 0; i < size; ++i)
335 G4String name, symbol;
342 elN =
new G4Element(name =
"Nitrogen", symbol =
"N", z = 7, a);
344 elO =
new G4Element(name =
"Oxygen", symbol =
"O", z = 8, a);
346 elAl =
new G4Element(name =
"Aluminum", symbol =
"Al", z = 13, a);
348 elFe =
new G4Element(name =
"Iron", symbol =
"Fe", z = 26, a);
350 elH =
new G4Element(name =
"Hydrogen", symbol =
"H", z = 1, a);
352 elSi =
new G4Element(name =
"Silicon", symbol =
"Si", z = 14, a);
354 elB =
new G4Element(name =
"Boron", symbol =
"B", z = 5, a);
356 elNa =
new G4Element(name =
"Sodium", symbol =
"Na", z = 11, a);
358 elC =
new G4Element(name =
"Carbon", symbol =
"C", z = 6, a);
390 G4double density = 1.29e-03*
g/
cm3;
392 Air =
new G4Material(name =
"Air_G4Tank", density, nel = 2);
393 Air->AddElement(
elN, 0.7);
394 Air->AddElement(
elO, 0.3);
397 double airPP[2] = { 2.08*
eV, 4.20*
eV };
398 double airRINDEX[2] = { 1.000273, 1.000273 };
399 double airABSLENGTH[2] = { 10000.0*
m, 10000.0*
m };
401 airMPT =
new G4MaterialPropertiesTable();
402 airMPT->AddProperty(
"RINDEX", airPP, airRINDEX, 2);
403 airMPT->AddProperty(
"ABSLENGTH", airPP, airABSLENGTH, 2);
415 G4double density = 1.0*
g/
cm3;
422 Water =
new G4Material(name =
"Water", density, nel = 2);
428 waterMPT =
new G4MaterialPropertiesTable();
435 double* array_ppWATER =
new double[num+1];
436 double* array_waterRINDEX =
new double[num+1];
438 for ( index = 0; index < num; index++ )
444 waterMPT->AddProperty(
"RINDEX", array_ppWATER, array_waterRINDEX, num);
450 double* array_ppwaterABSORPTION =
new double[num+1];
451 double* array_waterABSORPTION =
new double[num+1];
453 for ( index = 0; index < num; index++ )
459 waterMPT->AddProperty(
"ABSLENGTH", array_ppwaterABSORPTION, array_waterABSORPTION, num);
466 delete[] array_ppWATER;
467 delete[] array_waterRINDEX;
468 delete[] array_ppwaterABSORPTION;
469 delete[] array_waterABSORPTION;
478 G4double
a = 1.*
g /
mole;
479 G4double density = universe_mean_density;
483 Vacuum =
new G4Material(name =
"Vacuum", z = 1, a, density,
484 kStateUndefined, STP_Temperature,
507 G4double density = 2.23*
g/
cm3;
508 G4int nel, natoms, ncomponents;
518 SiO2 =
new G4Material(name =
"SiO2", density, nel = 2);
520 SiO2->AddElement(
elO, natoms = 2);
522 B2O2 =
new G4Material(name =
"B2O2", density, nel = 2);
523 B2O2->AddElement(
elB, natoms = 2);
524 B2O2->AddElement(
elO, natoms = 2);
526 Na2O =
new G4Material(name =
"Na2O", density, nel = 2);
528 Na2O->AddElement(
elO, natoms = 1);
530 Pyrex =
new G4Material(name =
"Pyrex", density, ncomponents = 3);
544 double* array_pmtfaceRINDEX_PP =
new double[num+1];
545 double* array_pmtfaceRINDEX =
new double[num+1];
550 for ( index = 0; index < num; index++ )
556 pmtfaceMPT->AddProperty(
"RINDEX", array_pmtfaceRINDEX_PP, array_pmtfaceRINDEX, num);
562 double* array_pmtfaceABSORPTION_PP =
new double[num+1];
563 double* array_pmtfaceABSORPTION =
new double[num+1];
568 for ( index = 0; index < num; index++ )
577 pmtfaceMPT->AddProperty(
"ABSLENGTH", array_pmtfaceABSORPTION_PP, array_pmtfaceABSORPTION, num);
585 delete[] array_pmtfaceRINDEX_PP;
586 delete[] array_pmtfaceRINDEX;
587 delete[] array_pmtfaceABSORPTION_PP;
588 delete[] array_pmtfaceABSORPTION;
607 G4double density = 2.23 *
g /
cm3;
617 SiO2 =
new G4Material(name =
"SiO2", density, nel = 2);
619 SiO2->AddElement(
elO, natoms = 2);
621 B2O2 =
new G4Material(name =
"B2O2", density, nel = 2);
622 B2O2->AddElement(
elB, natoms = 2);
623 B2O2->AddElement(
elO, natoms = 2);
625 Na2O =
new G4Material(name =
"Na2O", density, nel = 2);
627 Na2O->AddElement(
elO, natoms = 1);
630 Pyrex1 =
new G4Material(name =
"Pyrex1", density, ncomponents = 3);
644 double* array_pmtface1RINDEX_PP =
new double[num+1];
645 double* array_pmtface1RINDEX =
new double[num+1];
647 for ( index = 0; index < num; index++ )
653 pmtfaceMPT1->AddProperty(
"RINDEX", array_pmtface1RINDEX_PP, array_pmtface1RINDEX, num);
660 double* array_pmtface1ABSORPTION_PP =
new double[num+1];
661 double* array_pmtface1ABSORPTION =
new double[num+1];
663 for ( index = 0; index < num; index++ )
669 pmtfaceMPT1->AddProperty(
"ABSLENGTH", array_pmtface1ABSORPTION_PP, array_pmtface1ABSORPTION, num);
673 delete[] array_pmtface1RINDEX_PP;
674 delete[] array_pmtface1RINDEX;
675 delete[] array_pmtface1ABSORPTION_PP;
676 delete[] array_pmtface1ABSORPTION;
683 G4double density = 1.20*
g/
cm3;
696 CH3 =
new G4Material(name =
"CH3", density, nel = 2);
697 CH3->AddElement(
elC, natoms = 1);
698 CH3->AddElement(
elH, natoms = 3);
700 CH2 =
new G4Material(name =
"CH2", density, nel = 2);
701 CH2->AddElement(
elC, natoms = 1);
702 CH2->AddElement(
elH, natoms = 2);
704 C =
new G4Material(name =
"C", density, nel = 1);
705 C->AddElement(
elC, natoms = 1);
707 CO2 =
new G4Material(name =
"CO2", density, nel = 2);
708 CO2->AddElement(
elC, natoms = 1);
709 CO2->AddElement(
elO, natoms = 2);
721 Lucite =
new G4Material(name=
"Lucite", density, nel=3);
733 double *array_pmtdomeRINDEX_PP =
new double[num+1];
734 double *array_pmtdomeRINDEX =
new double[num+1];
736 for ( index = 0; index < num; index++ )
742 pmtdomeMPT->AddProperty(
"RINDEX", array_pmtdomeRINDEX_PP, array_pmtdomeRINDEX, num);
748 double *array_pmtdomeABSORPTION_PP =
new double[num+1];
749 double *array_pmtdomeABSORPTION =
new double[num+1];
751 for ( index = 0; index < num; index++ )
757 pmtdomeMPT->AddProperty(
"ABSLENGTH", array_pmtdomeABSORPTION_PP, array_pmtdomeABSORPTION, num);
764 delete[] array_pmtdomeRINDEX_PP;
765 delete[] array_pmtdomeRINDEX;
766 delete[] array_pmtdomeABSORPTION_PP;
767 delete[] array_pmtdomeABSORPTION;
777 G4double density = 0.97*
g/
cm3;
783 Interface =
new G4Material(name =
"Interface", density, nel = 3);
795 double* array_interfaceRINDEX_PP =
new double[num+1];
796 double* array_interfaceRINDEX =
new double[num+1];
798 for ( index = 0; index < num; index++ )
804 interfaceMPT->AddProperty(
"RINDEX", array_interfaceRINDEX_PP, array_interfaceRINDEX, num);
810 double* array_interfaceABSORPTION_PP =
new double[num+1];
811 double* array_interfaceABSORPTION =
new double[num+1];
813 for ( index = 0; index < num; index++ )
819 interfaceMPT->AddProperty(
"ABSLENGTH", array_interfaceABSORPTION_PP, array_interfaceABSORPTION, num);
826 delete[] array_interfaceRINDEX_PP;
827 delete[] array_interfaceRINDEX;
828 delete[] array_interfaceABSORPTION_PP;
829 delete[] array_interfaceABSORPTION;
838 G4double density = 0.94*
g/
cm3;
841 vector<double>::iterator It;
848 HDPE =
new G4Material(name =
"HDPE", density, nel = 2);
849 HDPE->AddElement(
elC, natoms = 2);
850 HDPE->AddElement(
elH, natoms = 4);
852 linerMPT =
new G4MaterialPropertiesTable();
859 double* array_linerABSORPTION_PP =
new double[num+1];
860 double* array_linerABSORPTION =
new double[num+1];
862 for ( index = 0; index < num; index++ )
868 linerMPT->AddProperty(
"ABSLENGTH", array_linerABSORPTION_PP, array_linerABSORPTION, num);
875 delete[] array_linerABSORPTION_PP;
876 delete[] array_linerABSORPTION;
912 double* array_linerSPECULARLOBECONSTANT_PP =
new double[num+1];
913 double* array_linerSPECULARLOBECONSTANT =
new double[num+1];
915 for ( index = 0; index < num; index++ )
922 array_linerSPECULARLOBECONSTANT_PP,
923 array_linerSPECULARLOBECONSTANT, num);
927 double* array_linerSPECULARSPIKECONSTANT_PP =
new double[num+1];
928 double* array_linerSPECULARSPIKECONSTANT =
new double[num+1];
930 for ( index = 0; index < num; index++ )
937 array_linerSPECULARSPIKECONSTANT_PP,
938 array_linerSPECULARSPIKECONSTANT, num);
942 double* array_linerREFLECTIVITY_PP =
new double[num+1];
943 double* array_linerREFLECTIVITY =
new double[num+1];
945 for ( index = 0; index < num; index++ )
953 array_linerREFLECTIVITY_PP,
954 array_linerREFLECTIVITY, num);
958 double* array_linerBACKSCATTERCONSTANT_PP =
new double[num+1];
959 double* array_linerBACKSCATTERCONSTANT =
new double[num+1];
961 for ( index = 0; index < num; index++ )
968 array_linerBACKSCATTERCONSTANT_PP,
969 array_linerBACKSCATTERCONSTANT, num);
972 double* array_TYVEK_RINDEX_PP =
new double[num+1];
973 double* array_TYVEK_RINDEX =
new double[num+1];
975 for ( index = 0; index < num; index++ )
984 array_TYVEK_RINDEX_PP,
985 array_TYVEK_RINDEX, num);
996 delete[] array_linerSPECULARLOBECONSTANT_PP;
997 delete[] array_linerSPECULARLOBECONSTANT;
999 delete[] array_linerSPECULARSPIKECONSTANT_PP;
1000 delete[] array_linerSPECULARSPIKECONSTANT;
1002 delete[] array_linerREFLECTIVITY_PP;
1003 delete[] array_linerREFLECTIVITY;
1005 delete[] array_linerBACKSCATTERCONSTANT_PP;
1006 delete[] array_linerBACKSCATTERCONSTANT;
1008 delete[] array_TYVEK_RINDEX_PP;
1009 delete[] array_TYVEK_RINDEX;
1021 G4double density = 2.700*
g/
cm3;
1022 G4double
a = 29.98*
g/
mole;
1025 Al =
new G4Material(name =
"Aluminum", z = 13, a, density);
1035 double fractionmass;
1036 G4double density = 1.2 *
g /
cm3;
1037 Dirt =
new G4Material(name =
"Dirt", density, ncomponents = 4);
1089 expHall_log->SetVisAttributes(G4VisAttributes::Invisible);
1107 G4SDManager *SDMan = G4SDManager::GetSDMpointer();
1168 G4ThreeVector(dome1_x, dome1_y, dome1_z),
inner_log,
1171 G4ThreeVector(dome2_x, dome2_y, dome1_z),
inner_log,
1174 G4ThreeVector(dome3_x, dome3_y, dome1_z),
inner_log,
1188 pmt1_phys =
new G4PVPlacement(0, G4ThreeVector(dome1_x, dome1_y, dome1_z),
1190 pmt2_phys =
new G4PVPlacement(0, G4ThreeVector(dome2_x, dome2_y, dome2_z),
1192 pmt3_phys =
new G4PVPlacement(0, G4ThreeVector(dome3_x, dome3_y, dome3_z),
1201 pmt1_phys1 =
new G4PVPlacement(0, G4ThreeVector(dome1_x, dome1_y, dome1_z),
1203 pmt2_phys1 =
new G4PVPlacement(0, G4ThreeVector(dome2_x, dome2_y, dome2_z),
1205 pmt3_phys1 =
new G4PVPlacement(0, G4ThreeVector(dome3_x, dome3_y, dome3_z),
1217 interface1_phys =
new G4PVPlacement(0, G4ThreeVector(dome1_x, dome1_y, dome1_z),
1219 interface2_phys =
new G4PVPlacement(0, G4ThreeVector(dome2_x, dome2_y, dome2_z),
1221 interface3_phys =
new G4PVPlacement(0, G4ThreeVector(dome3_x, dome3_y, dome3_z),
1229 dome1_phys =
new G4PVPlacement(0, G4ThreeVector(dome1_x, dome1_y, dome1_z),
1231 dome2_phys =
new G4PVPlacement(0, G4ThreeVector(dome2_x, dome2_y, dome2_z),
1233 dome3_phys =
new G4PVPlacement(0, G4ThreeVector(dome3_x, dome3_y, dome3_z),
1244 SDName =
"/Tank/pmt1";
1247 SDName=
"/Tank/pmt2";
1250 SDName=
"/Tank/pmt3";
1253 SDMan->AddNewDetector(PMT1SD);
1254 SDMan->AddNewDetector(PMT2SD);
1255 SDMan->AddNewDetector(PMT3SD);
1257 pmt1_log->SetSensitiveDetector(PMT1SD);
1258 pmt2_log->SetSensitiveDetector(PMT2SD);
1259 pmt3_log->SetSensitiveDetector(PMT3SD);
1273 G4RotationMatrix *solarPanelRot =
new G4RotationMatrix();
1274 solarPanelRot->rotate(M_PI/2, G4ThreeVector(0, 0, 1));
1295 G4RotationMatrix *elecBoxRot =
new G4RotationMatrix();
1296 elecBoxRot->rotate(M_PI/2, G4ThreeVector(0, 0, 1));
1313 G4GeometryManager::GetInstance()->OpenGeometry();
1314 G4PhysicalVolumeStore::GetInstance()->Clean();
1315 G4LogicalVolumeStore::GetInstance()->Clean();
1316 G4SolidStore::GetInstance()->Clean();
1328 G4RunManager::GetRunManager()->DefineWorldVolume(
CreateTank(),
true);
G4VPhysicalVolume * expHall_phys
G4LogicalVolume * expHall_log
static utl::TabulatedFunction fPmtdomeRINDEX
void CreateAluminium(void)
unsigned int GetNPoints() const
static double fGlassThickness
G4OpticalSurface * OpLinerSurface
G4SubtractionSolid * pmt_solid1
G4SubtractionSolid * pmt_solid
const utl::TabulatedFunction & GetDomeRefractionIndex() const
Refraction index for the PMT dome.
G4Ellipsoid * dome_in_aux
G4VPhysicalVolume * solarPanel_phys
static double fSolarPanelThickness
Detector description interface for Station-related data.
static utl::TabulatedFunction fLinerTYVEK_RINDEX
G4VPhysicalVolume * pmt1_phys
G4LogicalVolume * interface1_log
G4LogicalVolume * solarPanel_log
G4LogicalVolume * pmt1_log1
G4VPhysicalVolume * dome1_phys
G4VPhysicalVolume * pmt2_phys
static double fInterfaceRzmax
static double fGroundThickness
G4MaterialPropertiesTable * linerOpticalMPT
static double fTankThickness
G4VPhysicalVolume * inner2_phys
G4LogicalBorderSurface * sidesurface
ArrayIterator XEnd()
end of array of X
CoordinateSystemPtr GetCoordinateSystem() const
Get the coordinate system of the current internal representation.
G4SubtractionSolid * interface_solid
static double fInterfaceRmin
Class to hold collection (x,y) points and provide interpolation between them.
G4MaterialPropertiesTable * interfaceMPT
void GetDataForThisTank(void)
const utl::TabulatedFunction & GetLinerSpecularLobe() const
Tyvek liner specular lobe constant as a function of photon energy.
G4MaterialPropertiesTable * pmtfaceMPT
class that handles PMT hits
G4VPhysicalVolume * tank_phys
static utl::TabulatedFunction fPmtdomeABSORPTION
G4LogicalVolume * ground_log
static utl::TabulatedFunction fInterfaceABSORPTION
const PMT & GetPMT(const int id) const
Get specified PMT by id.
G4SubtractionSolid * dome_solid
static double fDomeThickness
G4LogicalVolume * interface2_log
G4LogicalVolume * dome1_log
void PushBack(const double x, const double y)
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
static double fTankRadius
static utl::TabulatedFunction fLinerSPECULARSPIKECONSTANT
static double fSolarPanelZ
static double fSolarPanelY
TransformerConstructor< DerivedCSPolicy > CoordinateSystem
The normal coordinate system type.
const utl::TabulatedFunction & GetWaterAbsorptionLength() const
Water absorption length as a function of photon energy.
static utl::TabulatedFunction fLinerSPECULARLOBECONSTANT
G4VPhysicalVolume * interface2_phys
Exception for reporting variable out of valid range.
static double fFaceRadiusz
static double fElecBoxTiltAngle
static utl::TabulatedFunction fLinerREFLECTIVITY
static utl::TabulatedFunction fPmtfaceRINDEX
static double fElecBoxLength
G4VPhysicalVolume * pmt3_phys1
static double fElecBoxThickness
Class representing a document branch.
const utl::TabulatedFunction & GetLinerReflectivity() const
Tyvek liner reflectivity as a function of photon energy.
G4MaterialPropertiesTable * waterMPT
static double fSolarPanelTiltAngle
G4VPhysicalVolume * dome2_phys
G4Ellipsoid * inner_solid
double GetX(const CoordinateSystemPtr &coordinateSystem) const
G4LogicalBorderSurface * bottomsurface
static utl::TabulatedFunction fLinerBACKSCATTERCONSTANT
G4Ellipsoid * dome_out_aux
G4LogicalVolume * tank_log
const utl::Point & GetPosition() const
PMT position.
void CreatePrimitives(void)
G4LogicalVolume * pmt2_log
G4VPhysicalVolume * ground_phys
void CreateInterface(void)
double GetRadius() const
Radius of the tank (water only)
double GetHeight() const
Height of the tank (water only)
static double fInterfaceThickness
static utl::TabulatedFunction fInterfaceRINDEX
G4LogicalBorderSurface * topsurface
void SetXMLParameters(void)
void GetData(bool &b) const
Overloads of the GetData member template function.
void SetRequiredParameters(void)
static double fSolarPanelWidth
G4MaterialPropertiesTable * airMPT
static double fSolarPanelX
G4VPhysicalVolume * inner3_phys
G4VPhysicalVolume * pmt2_phys1
const utl::TabulatedFunction & GetLinerSpecularSpike() const
Tyvek liner specular spike constant as a function of photon energy.
G4VPhysicalVolume * bottom_phys
class that handles Geant4 SD simulation
ArrayIterator YBegin()
begin of array of Y
G4VPhysicalVolume * side_phys
static utl::TabulatedFunction fWaterRINDEX
G4VPhysicalVolume * elecBox_phys
G4Ellipsoid * interface_out_aux
G4LogicalVolume * dome3_log
static utl::TabulatedFunction fPmtfaceABSORPTION
double GetY(const CoordinateSystemPtr &coordinateSystem) const
G4VPhysicalVolume * CreateTank(void)
static const sdet::Station * GetCurrentDetectorStation()
G4LogicalVolume * pmt2_log1
G4LogicalVolume * pmt3_log
static double fSIGMA_ALPHA
ArrayIterator XBegin()
begin of array of X
double GetThickness() const
Thickness of the tank walls.
void CreateMaterials(void)
static double fSolarPanelLength
G4LogicalVolume * elecBox_log
void SetDetectorParameters(void)
G4VPhysicalVolume * pmt3_phys
const utl::TabulatedFunction & GetWaterRefractionIndex() const
Water refraction index as a function of photon energy.
G4VPhysicalVolume * dome3_phys
Detector description interface for SDetector-related data.
G4LogicalVolume * dome2_log
Main configuration utility.
static double fInterfaceRzmin
G4VPhysicalVolume * Construct(void)
G4LogicalVolume * interface3_log
static double fFaceRadius
ArrayIterator YEnd()
end of array of Y
G4LogicalVolume * inner_log
G4VPhysicalVolume * top_phys
static utl::TabulatedFunction fWaterABSORPTION
G4LogicalVolume * bottom_log
const utl::TabulatedFunction & GetFaceRefractionIndex() const
Refraction index for the PMT face.
G4LogicalVolume * top_log
static double fTankHalfHeight
double GetLinerSigmaAlpha() const
Tyvek liner sigma_alpha roughness parameter.
double Y(const double x) const
Get or interpolate the Y value that corresponds to parameter x.
static utl::TabulatedFunction fLinerABSORPTION
G4LogicalVolume * pmt1_log
G4Ellipsoid * interface_in_aux
#define ERROR(message)
Macro for logging error messages.
static double fInterfaceRmax
G4VPhysicalVolume * interface1_phys
G4MaterialPropertiesTable * pmtfaceMPT1
const utl::TabulatedFunction & GetRTVRefractionIndex() const
Refraction index for the interface between PMT face and dome (RTV)
G4MaterialPropertiesTable * linerMPT
utl::Branch GetTopBranch(const std::string &id)
Get top branch for moduleConfigLink with given id (XML files)
G4VPhysicalVolume * interface3_phys
G4VPhysicalVolume * pmt1_phys1
G4LogicalVolume * pmt3_log1
void CreateElements(void)
static double fFaceActiveRadius
G4VPhysicalVolume * inner1_phys
static double fElecBoxWidth
G4MaterialPropertiesTable * pmtdomeMPT
G4LogicalVolume * side_log