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 G4TankSimulatorASCII;
35 double G4TankConstruction::fExpHall_x, G4TankConstruction::fExpHall_y;
36 double G4TankConstruction::fExpHall_z;
38 double G4TankConstruction::fTankRadius;
39 double G4TankConstruction::fTankHalfHeight;
40 double G4TankConstruction::fTankThickness;
41 double G4TankConstruction::fTankPos_x;
42 double G4TankConstruction::fTankPos_y;
43 double G4TankConstruction::fTankPos_z;
49 double G4TankConstruction::fFaceRadius, G4TankConstruction::fFaceRadiusz;
50 double G4TankConstruction::fFaceActiveRadius, G4TankConstruction::fHeightz;
51 double G4TankConstruction::fPmtRmin, G4TankConstruction::fPmtRmax;
52 double G4TankConstruction::fPmtRzmin, G4TankConstruction::fPmtRzmax;
53 double G4TankConstruction::fInterfaceRmin, G4TankConstruction::fInterfaceRzmin;
54 double G4TankConstruction::fInterfaceRmax, G4TankConstruction::fInterfaceRzmax;
55 double G4TankConstruction::fInterfaceThickness, G4TankConstruction::fGlassThickness;
56 double G4TankConstruction::fDomeThickness;
57 double G4TankConstruction::fDomeRmin, G4TankConstruction::fDomeRmax;
58 double G4TankConstruction::fDomeRzmin, G4TankConstruction::fDomeRzmax;
59 double G4TankConstruction::fMinPhi, G4TankConstruction::fMaxPhi;
60 double G4TankConstruction::fMinTheta, G4TankConstruction::fMaxTheta;
61 double G4TankConstruction::fSolarPanelLength, G4TankConstruction::fSolarPanelWidth;
62 double G4TankConstruction::fSolarPanelThickness;
63 double G4TankConstruction::fSolarPanelX, G4TankConstruction::fSolarPanelY;
64 double G4TankConstruction::fSolarPanelZ, G4TankConstruction::fSolarPanelTiltAngle;
65 double G4TankConstruction::fElecBoxLength, G4TankConstruction::fElecBoxWidth;
66 double G4TankConstruction::fElecBoxThickness;
67 double G4TankConstruction::fElecBoxX, G4TankConstruction::fElecBoxY;
68 double G4TankConstruction::fElecBoxZ, G4TankConstruction::fElecBoxTiltAngle;
76 double G4TankConstruction::fSIGMA_ALPHA;
88 G4TankConstruction::G4TankConstruction() : expHall_phys(0)
136 vector<double>::iterator tfIt;
140 dynamic_cast<G4TankSimulator*
>(&RunController::GetInstance().GetModule(
"G4TankSimulatorASCII"));
144 if (!theCurrentDetectorStation)
return;
171 tfIt++) (*tfIt) *=
eV;
215 tfIt++) (*tfIt) *=
eV;
227 tfIt++) (*tfIt) *=
eV;
229 tfIt++) (*tfIt) *=
m;
250 vector<double> pmt_pp;
251 vector<double> pmt_face_abs;
252 vector<double> pmt_interface_abs;
253 vector<double> pmt_dome_abs;
264 size = pmt_pp.size();
266 if ( pmt_face_abs.size() != size ||
267 pmt_interface_abs.size() != size ||
268 pmt_dome_abs.size() != size )
270 ostringstream errMsg;
271 errMsg<<
"TabulatedFunction size mismatch for pmt properties";
277 for (
unsigned int i = 0; i < size; ++i)
291 vector<double> liner_pp;
292 vector<double> liner_rindex;
293 vector<double> liner_abs;
294 vector<double> liner_backscatter;
303 size = liner_pp.size();
305 if ( liner_rindex.size() != size ||
306 liner_abs.size() != size ||
307 liner_backscatter.size() != size )
309 ostringstream errMsg;
310 errMsg<<
"Tabulated function size mismatch for liner properties";
316 for (
unsigned int i = 0; i < size; ++i)
338 G4String name, symbol;
345 elN =
new G4Element(name =
"Nitrogen", symbol =
"N", z = 7, a);
347 elO =
new G4Element(name =
"Oxygen", symbol =
"O", z = 8, a);
349 elAl =
new G4Element(name =
"Aluminum", symbol =
"Al", z = 13, a);
351 elFe =
new G4Element(name =
"Iron", symbol =
"Fe", z = 26, a);
353 elH =
new G4Element(name =
"Hydrogen", symbol =
"H", z = 1, a);
355 elSi =
new G4Element(name =
"Silicon", symbol =
"Si", z = 14, a);
357 elB =
new G4Element(name =
"Boron", symbol =
"B", z = 5, a);
359 elNa =
new G4Element(name =
"Sodium", symbol =
"Na", z = 11, a);
361 elC =
new G4Element(name =
"Carbon", symbol =
"C", z = 6, a);
398 G4double density = 1.29e-03*
g/
cm3;
400 Air =
new G4Material(name =
"Air_G4Tank", density, nel = 2);
401 Air->AddElement(
elN, 0.7);
402 Air->AddElement(
elO, 0.3);
405 double airPP[2] = { 2.08*
eV, 4.20*
eV };
406 double airRINDEX[2] = { 1.000273, 1.000273 };
407 double airABSLENGTH[2] = { 10000.0*
m, 10000.0*
m };
409 airMPT =
new G4MaterialPropertiesTable();
410 airMPT->AddProperty(
"RINDEX", airPP, airRINDEX, 2);
411 airMPT->AddProperty(
"ABSLENGTH", airPP, airABSLENGTH, 2);
423 G4double density = 1.0*
g/
cm3;
430 Water =
new G4Material(name =
"Water", density, nel = 2);
436 waterMPT =
new G4MaterialPropertiesTable();
443 double* array_ppWATER =
new double[num+1];
444 double* array_waterRINDEX =
new double[num+1];
446 for ( index = 0; index < num; index++ )
452 waterMPT->AddProperty(
"RINDEX", array_ppWATER, array_waterRINDEX, num);
458 double* array_ppwaterABSORPTION =
new double[num+1];
459 double* array_waterABSORPTION =
new double[num+1];
461 for ( index = 0; index < num; index++ )
467 waterMPT->AddProperty(
"ABSLENGTH", array_ppwaterABSORPTION, array_waterABSORPTION, num);
474 delete[] array_ppWATER;
475 delete[] array_waterRINDEX;
476 delete[] array_ppwaterABSORPTION;
477 delete[] array_waterABSORPTION;
486 G4double
a = 1.*
g /
mole;
487 G4double density = universe_mean_density;
491 Vacuum =
new G4Material(name =
"Vacuum", z = 1, a, density,
492 kStateUndefined, STP_Temperature,
515 G4double density = 2.23*
g/
cm3;
516 G4int nel, natoms, ncomponents;
526 SiO2 =
new G4Material(name =
"SiO2", density, nel = 2);
528 SiO2->AddElement(
elO, natoms = 2);
530 B2O2 =
new G4Material(name =
"B2O2", density, nel = 2);
531 B2O2->AddElement(
elB, natoms = 2);
532 B2O2->AddElement(
elO, natoms = 2);
534 Na2O =
new G4Material(name =
"Na2O", density, nel = 2);
536 Na2O->AddElement(
elO, natoms = 1);
538 Pyrex =
new G4Material(name =
"Pyrex", density, ncomponents = 3);
552 double* array_pmtfaceRINDEX_PP =
new double[num+1];
553 double* array_pmtfaceRINDEX =
new double[num+1];
558 for ( index = 0; index < num; index++ )
564 pmtfaceMPT->AddProperty(
"RINDEX", array_pmtfaceRINDEX_PP, array_pmtfaceRINDEX, num);
570 double* array_pmtfaceABSORPTION_PP =
new double[num+1];
571 double* array_pmtfaceABSORPTION =
new double[num+1];
576 for ( index = 0; index < num; index++ )
585 pmtfaceMPT->AddProperty(
"ABSLENGTH", array_pmtfaceABSORPTION_PP, array_pmtfaceABSORPTION, num);
593 delete[] array_pmtfaceRINDEX_PP;
594 delete[] array_pmtfaceRINDEX;
595 delete[] array_pmtfaceABSORPTION_PP;
596 delete[] array_pmtfaceABSORPTION;
615 G4double density = 2.23 *
g /
cm3;
625 SiO2 =
new G4Material(name =
"SiO2", density, nel = 2);
627 SiO2->AddElement(
elO, natoms = 2);
629 B2O2 =
new G4Material(name =
"B2O2", density, nel = 2);
630 B2O2->AddElement(
elB, natoms = 2);
631 B2O2->AddElement(
elO, natoms = 2);
633 Na2O =
new G4Material(name =
"Na2O", density, nel = 2);
635 Na2O->AddElement(
elO, natoms = 1);
638 Pyrex1 =
new G4Material(name =
"Pyrex1", density, ncomponents = 3);
652 double* array_pmtface1RINDEX_PP =
new double[num+1];
653 double* array_pmtface1RINDEX =
new double[num+1];
655 for ( index = 0; index < num; index++ )
661 pmtfaceMPT1->AddProperty(
"RINDEX", array_pmtface1RINDEX_PP, array_pmtface1RINDEX, num);
668 double* array_pmtface1ABSORPTION_PP =
new double[num+1];
669 double* array_pmtface1ABSORPTION =
new double[num+1];
671 for ( index = 0; index < num; index++ )
677 pmtfaceMPT1->AddProperty(
"ABSLENGTH", array_pmtface1ABSORPTION_PP, array_pmtface1ABSORPTION, num);
681 delete[] array_pmtface1RINDEX_PP;
682 delete[] array_pmtface1RINDEX;
683 delete[] array_pmtface1ABSORPTION_PP;
684 delete[] array_pmtface1ABSORPTION;
691 G4double density = 1.20*
g/
cm3;
704 CH3 =
new G4Material(name =
"CH3", density, nel = 2);
705 CH3->AddElement(
elC, natoms = 1);
706 CH3->AddElement(
elH, natoms = 3);
708 CH2 =
new G4Material(name =
"CH2", density, nel = 2);
709 CH2->AddElement(
elC, natoms = 1);
710 CH2->AddElement(
elH, natoms = 2);
712 C =
new G4Material(name =
"C", density, nel = 1);
713 C->AddElement(
elC, natoms = 1);
715 CO2 =
new G4Material(name =
"CO2", density, nel = 2);
716 CO2->AddElement(
elC, natoms = 1);
717 CO2->AddElement(
elO, natoms = 2);
729 Lucite =
new G4Material(name=
"Lucite", density, nel=3);
741 double *array_pmtdomeRINDEX_PP =
new double[num+1];
742 double *array_pmtdomeRINDEX =
new double[num+1];
744 for ( index = 0; index < num; index++ )
750 pmtdomeMPT->AddProperty(
"RINDEX", array_pmtdomeRINDEX_PP, array_pmtdomeRINDEX, num);
756 double *array_pmtdomeABSORPTION_PP =
new double[num+1];
757 double *array_pmtdomeABSORPTION =
new double[num+1];
759 for ( index = 0; index < num; index++ )
765 pmtdomeMPT->AddProperty(
"ABSLENGTH", array_pmtdomeABSORPTION_PP, array_pmtdomeABSORPTION, num);
772 delete[] array_pmtdomeRINDEX_PP;
773 delete[] array_pmtdomeRINDEX;
774 delete[] array_pmtdomeABSORPTION_PP;
775 delete[] array_pmtdomeABSORPTION;
785 G4double density = 0.97*
g/
cm3;
791 Interface =
new G4Material(name =
"Interface", density, nel = 3);
803 double* array_interfaceRINDEX_PP =
new double[num+1];
804 double* array_interfaceRINDEX =
new double[num+1];
806 for ( index = 0; index < num; index++ )
812 interfaceMPT->AddProperty(
"RINDEX", array_interfaceRINDEX_PP, array_interfaceRINDEX, num);
818 double* array_interfaceABSORPTION_PP =
new double[num+1];
819 double* array_interfaceABSORPTION =
new double[num+1];
821 for ( index = 0; index < num; index++ )
827 interfaceMPT->AddProperty(
"ABSLENGTH", array_interfaceABSORPTION_PP, array_interfaceABSORPTION, num);
834 delete[] array_interfaceRINDEX_PP;
835 delete[] array_interfaceRINDEX;
836 delete[] array_interfaceABSORPTION_PP;
837 delete[] array_interfaceABSORPTION;
846 G4double density = 0.94*
g/
cm3;
849 vector<double>::iterator It;
856 HDPE =
new G4Material(name =
"HDPE", density, nel = 2);
857 HDPE->AddElement(
elC, natoms = 2);
858 HDPE->AddElement(
elH, natoms = 4);
860 linerMPT =
new G4MaterialPropertiesTable();
867 double* array_linerABSORPTION_PP =
new double[num+1];
868 double* array_linerABSORPTION =
new double[num+1];
870 for ( index = 0; index < num; index++ )
876 linerMPT->AddProperty(
"ABSLENGTH", array_linerABSORPTION_PP, array_linerABSORPTION, num);
883 delete[] array_linerABSORPTION_PP;
884 delete[] array_linerABSORPTION;
920 double* array_linerSPECULARLOBECONSTANT_PP =
new double[num+1];
921 double* array_linerSPECULARLOBECONSTANT =
new double[num+1];
923 for ( index = 0; index < num; index++ )
930 array_linerSPECULARLOBECONSTANT_PP,
931 array_linerSPECULARLOBECONSTANT, num);
935 double* array_linerSPECULARSPIKECONSTANT_PP =
new double[num+1];
936 double* array_linerSPECULARSPIKECONSTANT =
new double[num+1];
938 for ( index = 0; index < num; index++ )
945 array_linerSPECULARSPIKECONSTANT_PP,
946 array_linerSPECULARSPIKECONSTANT, num);
950 double* array_linerREFLECTIVITY_PP =
new double[num+1];
951 double* array_linerREFLECTIVITY =
new double[num+1];
953 for ( index = 0; index < num; index++ )
961 array_linerREFLECTIVITY_PP,
962 array_linerREFLECTIVITY, num);
966 double* array_linerBACKSCATTERCONSTANT_PP =
new double[num+1];
967 double* array_linerBACKSCATTERCONSTANT =
new double[num+1];
969 for ( index = 0; index < num; index++ )
976 array_linerBACKSCATTERCONSTANT_PP,
977 array_linerBACKSCATTERCONSTANT, num);
980 double* array_TYVEK_RINDEX_PP =
new double[num+1];
981 double* array_TYVEK_RINDEX =
new double[num+1];
983 for ( index = 0; index < num; index++ )
992 array_TYVEK_RINDEX_PP,
993 array_TYVEK_RINDEX, num);
1004 delete[] array_linerSPECULARLOBECONSTANT_PP;
1005 delete[] array_linerSPECULARLOBECONSTANT;
1007 delete[] array_linerSPECULARSPIKECONSTANT_PP;
1008 delete[] array_linerSPECULARSPIKECONSTANT;
1010 delete[] array_linerREFLECTIVITY_PP;
1011 delete[] array_linerREFLECTIVITY;
1013 delete[] array_linerBACKSCATTERCONSTANT_PP;
1014 delete[] array_linerBACKSCATTERCONSTANT;
1016 delete[] array_TYVEK_RINDEX_PP;
1017 delete[] array_TYVEK_RINDEX;
1029 G4double density = 2.700*
g/
cm3;
1030 G4double
a = 29.98*
g/
mole;
1033 Al =
new G4Material(name =
"Aluminum", z = 13, a, density);
1043 double fractionmass;
1044 G4double density = 1.2 *
g /
cm3;
1045 Dirt =
new G4Material(name =
"Dirt", density, ncomponents = 4);
1058 G4double density = 1.06*
g/
cm3;
1065 Polystyrene =
new G4Material(name =
"Polystyrene", density, nel = 2);
1075 G4double density = 0.7*
g/
cm3;
1082 Plastic =
new G4Material(name =
"Plastic", density, nel = 2);
1093 G4double density = 7.800*
g/
cm3;
1094 G4double
a = 55.845*
g/
mole;
1097 theIron =
new G4Material(name =
"Iron", z = 26, a, density);
1149 expHall_log->SetVisAttributes(G4VisAttributes::Invisible);
1161 G4ThreeVector(0, 0,- fGroundThickness),
1169 G4SDManager *SDMan = G4SDManager::GetSDMpointer();
1231 G4ThreeVector(dome1_x, dome1_y, dome1_z),
inner_log,
1234 G4ThreeVector(dome2_x, dome2_y, dome2_z),
inner_log,
1237 G4ThreeVector(dome3_x, dome3_y, dome3_z),
inner_log,
1251 pmt1_phys =
new G4PVPlacement(0, G4ThreeVector(dome1_x, dome1_y, dome1_z),
1253 pmt2_phys =
new G4PVPlacement(0, G4ThreeVector(dome2_x, dome2_y, dome2_z),
1255 pmt3_phys =
new G4PVPlacement(0, G4ThreeVector(dome3_x, dome3_y, dome3_z),
1264 pmt1_phys1 =
new G4PVPlacement(0, G4ThreeVector(dome1_x, dome1_y, dome1_z),
1266 pmt2_phys1 =
new G4PVPlacement(0, G4ThreeVector(dome2_x, dome2_y, dome2_z),
1268 pmt3_phys1 =
new G4PVPlacement(0, G4ThreeVector(dome3_x, dome3_y, dome3_z),
1280 interface1_phys =
new G4PVPlacement(0, G4ThreeVector(dome1_x, dome1_y, dome1_z),
1282 interface2_phys =
new G4PVPlacement(0, G4ThreeVector(dome2_x, dome2_y, dome2_z),
1284 interface3_phys =
new G4PVPlacement(0, G4ThreeVector(dome3_x, dome3_y, dome3_z),
1292 dome1_phys =
new G4PVPlacement(0, G4ThreeVector(dome1_x, dome1_y, dome1_z),
1294 dome2_phys =
new G4PVPlacement(0, G4ThreeVector(dome2_x, dome2_y, dome2_z),
1296 dome3_phys =
new G4PVPlacement(0, G4ThreeVector(dome3_x, dome3_y, dome3_z),
1307 SDName =
"/Tank/pmt1";
1310 SDName=
"/Tank/pmt2";
1313 SDName=
"/Tank/pmt3";
1316 SDMan->AddNewDetector(PMT1SD);
1317 SDMan->AddNewDetector(PMT2SD);
1318 SDMan->AddNewDetector(PMT3SD);
1320 pmt1_log->SetSensitiveDetector(PMT1SD);
1321 pmt2_log->SetSensitiveDetector(PMT2SD);
1322 pmt3_log->SetSensitiveDetector(PMT3SD);
1336 G4RotationMatrix *solarPanelRot =
new G4RotationMatrix();
1337 solarPanelRot->rotate(M_PI/2, G4ThreeVector(0, 0, 1));
1358 G4RotationMatrix *elecBoxRot =
new G4RotationMatrix();
1359 elecBoxRot->rotate(M_PI/2, G4ThreeVector(0, 0, 1));
1401 double Y=-Width/2.+
fScinWidth*(double(ibar)+0.5);
1402 scin_phys =
new G4PVPlacement(0, G4ThreeVector(0,Y,0),
1410 for (
int i=0;i<2;i++)
1412 double sign=(i==0?1.:-1.);
1415 (i==0?
"shieldTop0":
"shieldBot"),
shield_log, pMother,
true, i );
1421 "shieldTop1",
shield_log, pMother,
true, 2 );
1424 G4String
Name =
"/Tank/ASCII_scin";
1426 SDMan->AddNewDetector(ASCII_SCIN);
1427 scin_log->SetSensitiveDetector(ASCII_SCIN);
1440 G4GeometryManager::GetInstance()->OpenGeometry();
1441 G4PhysicalVolumeStore::GetInstance()->Clean();
1442 G4LogicalVolumeStore::GetInstance()->Clean();
1443 G4SolidStore::GetInstance()->Clean();
1460 G4RunManager::GetRunManager()->DefineWorldVolume(
CreateTank(),
true);
G4SubtractionSolid * dome_solid
G4LogicalVolume * interface2_log
static double fElecBoxThickness
static double fSolarPanelLength
unsigned int GetNPoints() const
static double fTankRadius
G4VPhysicalVolume * top_phys
G4VPhysicalVolume * CreateTank(void)
G4MaterialPropertiesTable * pmtfaceMPT
const utl::TabulatedFunction & GetDomeRefractionIndex() const
Refraction index for the PMT dome.
G4LogicalBorderSurface * bottomsurface
Detector description interface for Station-related data.
G4VPhysicalVolume * inner2_phys
class that handles Geant4 SD simulation
G4LogicalVolume * interface3_log
void CreateMaterials(void)
static double fGlassThickness
void GetDataForThisTank(void)
G4LogicalVolume * pmt3_log
G4LogicalVolume * scin_log
G4LogicalVolume * bottom_log
ArrayIterator XEnd()
end of array of X
G4Ellipsoid * dome_out_aux
G4VPhysicalVolume * scin_phys
CoordinateSystemPtr GetCoordinateSystem() const
Get the coordinate system of the current internal representation.
Class to hold collection (x,y) points and provide interpolation between them.
static double fInterfaceRzmax
G4LogicalBorderSurface * topsurface
static double fInterfaceRmin
const utl::TabulatedFunction & GetLinerSpecularLobe() const
Tyvek liner specular lobe constant as a function of photon energy.
G4VPhysicalVolume * elecBox_phys
G4MaterialPropertiesTable * interfaceMPT
static utl::TabulatedFunction fLinerSPECULARLOBECONSTANT
G4LogicalVolume * pmt1_log
G4VPhysicalVolume * enclosure_phys
G4VPhysicalVolume * solarPanel_phys
static utl::TabulatedFunction fLinerBACKSCATTERCONSTANT
G4LogicalVolume * pmt1_log1
G4LogicalVolume * pmt2_log1
G4LogicalVolume * interface1_log
G4Ellipsoid * interface_out_aux
const PMT & GetPMT(const int id) const
Get specified PMT by id.
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 fSIGMA_ALPHA
void CreatePrimitives(void)
G4VPhysicalVolume * tank_phys
TransformerConstructor< DerivedCSPolicy > CoordinateSystem
The normal coordinate system type.
const utl::TabulatedFunction & GetWaterAbsorptionLength() const
Water absorption length as a function of photon energy.
G4VPhysicalVolume * interface3_phys
static utl::TabulatedFunction fWaterABSORPTION
G4SubtractionSolid * interface_solid
void SetDetectorParameters(void)
Exception for reporting variable out of valid range.
static double fInterfaceThickness
static double fSolarPanelX
void CreateAluminium(void)
static utl::TabulatedFunction fLinerTYVEK_RINDEX
static const sdet::Station * GetCurrentDetectorStation()
static double fTankHalfHeight
void SetRequiredParameters(void)
G4VPhysicalVolume * pmt1_phys
Class representing a document branch.
static double fSolarPanelZ
const utl::TabulatedFunction & GetLinerReflectivity() const
Tyvek liner reflectivity as a function of photon energy.
static double fSolarPanelTiltAngle
double fScinHeightAboveGround
G4VPhysicalVolume * shield_phys[3]
static double fInterfaceRmax
static double fSolarPanelY
G4VPhysicalVolume * pmt2_phys1
double GetX(const CoordinateSystemPtr &coordinateSystem) const
G4VPhysicalVolume * Construct(void)
G4MaterialPropertiesTable * pmtdomeMPT
G4VPhysicalVolume * pmt2_phys
G4LogicalVolume * shield_log
G4MaterialPropertiesTable * airMPT
G4LogicalVolume * dome1_log
static utl::TabulatedFunction fInterfaceABSORPTION
G4LogicalVolume * solarPanel_log
G4LogicalVolume * pmt2_log
void CreateInterface(void)
const utl::Point & GetPosition() const
PMT position.
G4LogicalVolume * dome3_log
G4LogicalVolume * enclosure_log
G4LogicalVolume * tank_log
double GetRadius() const
Radius of the tank (water only)
G4MaterialPropertiesTable * linerMPT
static double fSolarPanelWidth
double GetHeight() const
Height of the tank (water only)
G4MaterialPropertiesTable * linerOpticalMPT
static double fElecBoxTiltAngle
G4SubtractionSolid * pmt_solid
G4VPhysicalVolume * dome2_phys
void GetData(bool &b) const
Overloads of the GetData member template function.
G4VPhysicalVolume * interface2_phys
void CreateElements(void)
static double fFaceRadiusz
G4Ellipsoid * inner_solid
static utl::TabulatedFunction fPmtfaceABSORPTION
const utl::TabulatedFunction & GetLinerSpecularSpike() const
Tyvek liner specular spike constant as a function of photon energy.
static utl::TabulatedFunction fPmtdomeRINDEX
G4Ellipsoid * dome_in_aux
ArrayIterator YBegin()
begin of array of Y
G4VPhysicalVolume * interface1_phys
double GetY(const CoordinateSystemPtr &coordinateSystem) const
void SetXMLParameters(void)
G4VPhysicalVolume * inner1_phys
G4LogicalVolume * top_log
G4SubtractionSolid * pmt_solid1
G4LogicalBorderSurface * sidesurface
static double fTankThickness
G4LogicalVolume * elecBox_log
G4LogicalVolume * inner_log
G4VPhysicalVolume * ground_phys
ArrayIterator XBegin()
begin of array of X
double GetThickness() const
Thickness of the tank walls.
G4VPhysicalVolume * expHall_phys
G4VPhysicalVolume * pmt1_phys1
G4LogicalVolume * dome2_log
static utl::TabulatedFunction fLinerSPECULARSPIKECONSTANT
const utl::TabulatedFunction & GetWaterRefractionIndex() const
Water refraction index as a function of photon energy.
static double fDomeThickness
G4VPhysicalVolume * inner3_phys
G4MaterialPropertiesTable * waterMPT
Detector description interface for SDetector-related data.
static double fSolarPanelThickness
Main configuration utility.
class that handles PMT hits
G4OpticalSurface * OpLinerSurface
ArrayIterator YEnd()
end of array of Y
static double fInterfaceRzmin
G4VPhysicalVolume * bottom_phys
static utl::TabulatedFunction fLinerABSORPTION
class that handles PMT hits
G4LogicalVolume * side_log
double fEnclosureThickness
const utl::TabulatedFunction & GetFaceRefractionIndex() const
Refraction index for the PMT face.
static double fElecBoxWidth
double GetLinerSigmaAlpha() const
Tyvek liner sigma_alpha roughness parameter.
static double fFaceRadius
double Y(const double x) const
Get or interpolate the Y value that corresponds to parameter x.
#define ERROR(message)
Macro for logging error messages.
static utl::TabulatedFunction fPmtfaceRINDEX
static double fElecBoxLength
G4LogicalVolume * expHall_log
void CreatePolystyrene(void)
const utl::TabulatedFunction & GetRTVRefractionIndex() const
Refraction index for the interface between PMT face and dome (RTV)
G4VPhysicalVolume * dome3_phys
G4LogicalVolume * pmt3_log1
G4MaterialPropertiesTable * pmtfaceMPT1
G4LogicalVolume * ground_log
G4VPhysicalVolume * dome1_phys
utl::Branch GetTopBranch(const std::string &id)
Get top branch for moduleConfigLink with given id (XML files)
G4VPhysicalVolume * pmt3_phys
static utl::TabulatedFunction fLinerREFLECTIVITY
G4VPhysicalVolume * pmt3_phys1
static utl::TabulatedFunction fPmtdomeABSORPTION
static double fFaceActiveRadius
G4Ellipsoid * interface_in_aux
static utl::TabulatedFunction fWaterRINDEX
static utl::TabulatedFunction fInterfaceRINDEX
G4VPhysicalVolume * side_phys