1 #ifndef _G4StationSimulatorOG_G4StationConstruction_h_
2 #define _G4StationSimulatorOG_G4StationConstruction_h_
11 #include <utl/TabulatedFunction.h>
13 #include <sdet/SDetector.h>
14 #include <mdet/MDetector.h>
15 #include <cdet/CDetector.h>
18 #include <G4VUserDetectorConstruction.hh>
19 #include <G4VSolid.hh>
21 #include <G4Colour.hh>
22 #include <G4Element.hh>
23 #include <G4ElementTable.hh>
24 #include <G4LogicalBorderSurface.hh>
25 #include <G4LogicalVolume.hh>
26 #include <G4Material.hh>
27 #include <G4MaterialTable.hh>
28 #include <G4PVPlacement.hh>
29 #include <G4SDManager.hh>
30 #include <G4Sphere.hh>
31 #include <G4ThreeVector.hh>
33 #include <G4VisAttributes.hh>
34 #include <G4GeometryManager.hh>
35 #include <G4PhysicalVolumeStore.hh>
36 #include <G4LogicalVolumeStore.hh>
37 #include <G4SolidStore.hh>
38 #include <G4RunManager.hh>
39 #include <CLHEP/Units/SystemOfUnits.h>
40 #include <G4SubtractionSolid.hh>
41 #include <G4UnionSolid.hh>
42 #include <G4NistManager.hh>
44 #include <G4Ellipsoid.hh>
47 namespace G4StationSimulatorOG {
52 {
fW = w;
fL = l;
fH = h; }
57 { l =
fL; w =
fW; h =
fH; }
125 G4StationConstruction(
const double simRadius,
const bool umdEnabled,
const double scintYield,
const bool martaEnabled);
128 virtual G4VPhysicalVolume*
Construct()
override;
205 G4Material*
Air =
nullptr;
213 G4Material*
CH3 =
nullptr;
215 G4Material*
CH2 =
nullptr;
216 G4Material*
C =
nullptr;
217 G4Material*
CO2 =
nullptr;
221 G4Material*
Al =
nullptr;
226 G4Material*
PVC =
nullptr;
227 G4Material*
PPO =
nullptr;
234 G4MaterialPropertiesTable*
airMPT =
nullptr;
void Cylinder(const mdet::Fiber &, const double l, const double r)
G4Box * umd_strip_surface_coat_large
G4LogicalVolume * umd_side_coat_log_small
std::vector< PMTConstruction > fPMTs
G4LogicalVolume * extra_clad1_log
virtual ~G4StationConstruction()
G4PVPlacement * umd_strip_phys_small
double fWindowRadius_SPMT
G4Material * fG4_Concrete
std::vector< G4ThreeVector > fRPCPositions
static double fgTankHalfHeight
G4PVPlacement * pixel_phy
G4LogicalVolume * gas_log
double fScintillatorSandwichPanelThickness
G4LogicalVolume * fInterface_log
double fSolarPanelTiltAngle
G4LogicalVolume * scin_sandwich_log
void GetDimensions(double &l, double &r) const
G4Material * ExpandedPolystyreneFoam
G4Material * fG4_Aluminum
G4PVPlacement * elecBox_phys
G4PVPlacement * extra_clad2_phy
G4PVPlacement * tank_phys
double fUMDThicknessCasing
G4LogicalVolume * elecBox_log
G4Box * scin_sandwich_solid
G4MaterialPropertiesTable * linerMPT
G4LogicalBorderSurface * umd_topsurface
static double fgTankRadius
void SetScintCoatingProperties()
G4ThreeVector fAlBoxThickness
void GetDimensions(double &l, double &w, double &h) const
double fFaceActiveRadius_SPMT
G4Box * umd_top_bot_coat_solid_small
G4LogicalVolume * top_log
G4Box * umd_strip_solid_large
G4LogicalVolume * ground_log
G4Box * umd_strip_solid_small
G4LogicalVolume * tank_log
G4LogicalVolume * pcb_log
G4PVPlacement * scin_sandwich_phys
G4MaterialPropertiesTable * linerOpticalMPT
G4PVPlacement * fInterface_phys
G4PVPlacement * umd_side1_coat_phys_large
G4LogicalVolume * side_log
G4LogicalVolume * umd_top_bot_coat_log_small
static double fDomeThickness_SPMT
Class to hold collection (x,y) points and provide interpolation between them.
virtual G4VPhysicalVolume * Construct() override
G4Ellipsoid * inner_solid
std::map< unsigned int, double > fFiberLenghts
G4LogicalVolume * bottom_log
G4PVPlacement * scin_phys1
void CreateExpandedPolystyreneFoam()
G4PVPlacement * bottom_phys
Geant4 Stepping user action class.
G4Box * umd_top_bot_coat_solid_large
G4PVPlacement * extra_clad1_phy
G4Ellipsoid * interface_out_aux
static utl::TabulatedFunction fgWaterABSORPTION
G4LogicalVolume * umd_fiber_core_log_large
G4PVPlacement * umd_side1_coat_phys_small
static utl::TabulatedFunction fgLinerSPECULARLOBECONSTANT
G4LogicalVolume * umd_fiber_core_log_small
void Box(const mdet::Scintillator &, const double w, const double l, const double h)
G4LogicalVolume * fPMT_log
G4LogicalVolume * inner_log
G4LogicalVolume * scin_casing_log
G4LogicalBorderSurface * umd_bottomsurface
G4LogicalVolume * fDome_log
G4LogicalVolume * umd_fiber_clad2_log_large
void CreatePrimitivesUMD()
G4Tubs * umd_fiber_clad2_solid_large
static double fPmtRmin_SPMT
G4PVPlacement * scin_casing_phys
G4Tubs * extra_clad2_solid
double fSolarPanelThickness
G4LogicalVolume * umd_fiber_clad1_log_large
static double fgInterfaceRmax
G4PVPlacement * umd_casing_phys_small
G4LogicalVolume * scin_roof_log
utl::TabulatedFunction fPmtSfaceRINDEX
G4PVPlacement * umd_strip_phys_large
G4LogicalVolume * umd_side_coat_log_large
G4Material * ExtrudedPolystyreneFoam
Actual muon-sensitive objects.
utl::TabulatedFunction fSInterfaceABSORPTION
void CreateScintillator()
static double fgTankThickness
G4SubtractionSolid * pmt_solid
G4ThreeVector fTankSupportCentralFootDimensions
G4LogicalVolume * spacer_log
G4PVPlacement * umd_bot_coat_phys_small
G4PVPlacement * umd_fiber_clad2_phys_small
G4PVPlacement * umd_casing_phys_large
G4PVPlacement * fInner_phys
G4LogicalVolume * glass_log
G4LogicalBorderSurface * umd_sidesurface
G4PVPlacement * umd_side2_coat_phys_large
G4LogicalVolume * umd_back_side_coat_log
G4LogicalVolume * al_box_log
utl::TabulatedFunction fPmtfaceRINDEX
G4Box * umd_back_side_coat_solid
G4PVPlacement * umd_fiber_clad1_phys_large
unsigned int fNScintillatorBars
G4PVPlacement * fDome_phys
G4Tubs * umd_fiber_clad1_solid_small
void SetDetectorParameters()
G4Tubs * extra_clad1_solid
G4Material * ScintCoating
G4LogicalVolume * scin_styro_log
G4SubtractionSolid * interface_solid
G4Material * fG4_Bakelite
G4PVPlacement * scin_roof_phys
G4PVPlacement * fPMT_phys1
G4SubtractionSolid * s_pmt_solid1
G4LogicalVolume * umd_fiber_clad2_log_small
utl::TabulatedFunction fPmtfaceABSORPTION
G4Tubs * umd_fiber_core_solid_large
double fScintillatorBarThickness
G4PVPlacement * extra_fiber_phy
G4ThreeVector fAlBoxInnerDimensions
G4StationSimulator & fG4StationSimulator
G4LogicalVolume * umd_casing_log_large
double fScintillatorRoofOffset
G4LogicalVolume * scin_log
double fTankSupportOuterFootDistanceToCenter
G4MaterialPropertiesTable * interfaceMPT
G4PVPlacement * fPMT_phys
double fScintillatorRoofThickness
G4Box * umd_casing_solid_small
utl::TabulatedFunction fLinerTYVEK_RINDEX
void CreateSodaLimeGlass()
G4SubtractionSolid * AlBox_solid
static double fInterfaceRadius_SPMT
G4LogicalVolume * fPMT_log1
G4ThreeVector fScintillatorPosition
G4ThreeVector fTankSupportCentralFootBaseDimensions
static double fGlassThickness_SPMT
G4OpticalSurface * fUMDScintSkinSurf
G4LogicalVolume * expHall_log
G4Box * umd_side_coat_solid_small
G4VPhysicalVolume * umd_strip_coat_phys_large
static double fgSIGMA_ALPHA
G4LogicalVolume * umd_strip_log_large
utl::TabulatedFunction fSInterfaceRINDEX
G4LogicalBorderSurface * topsurface
G4PVPlacement * umd_back_side_coat_phys
G4PVPlacement * umd_fiber_core_phys_small
G4PVPlacement * umd_side2_coat_phys_small
void AssembleTankSupport()
double fScintillatorHousingThickness
G4MaterialPropertiesTable * pmtdomeMPT
G4Tubs * umd_fiber_clad2_solid_small
static utl::TabulatedFunction fgLinerBACKSCATTERCONSTANT
G4OpticalSurface * fUMDScintSkinSurfBack
G4PVPlacement * scin_styro_phys
G4OpticalSurface * OpLinerSurface
G4LogicalVolume * umd_strip_coat_log_small
G4LogicalVolume * umd_strip_log_small
G4ThreeVector fTankSupportOuterFootBaseDimensions
G4VPhysicalVolume * umd_strip_coat_phys_small
static utl::TabulatedFunction fgPmtdomeRINDEX
double fInterfaceThickness
G4MaterialPropertiesTable * pmtfaceMPT
static double fgDomeRzmax
G4Box * scin_casing_solid
static double fPmtRmax_SPMT
static utl::TabulatedFunction fgLinerREFLECTIVITY
class that handles Geant4 SD Station simulation adopted from G4TankSimulator
G4Ellipsoid * interface_in_aux
G4LogicalVolume * extra_fiber_log
G4LogicalVolume * solarPanel_log
G4NistManager * fNistManager
G4SubtractionSolid * dome_solid
G4PVPlacement * umd_bot_coat_phys_large
G4Box * umd_casing_solid_large
G4ThreeVector fTankSupportOuterFootDimensions
double fScintillatorCasingThickness
void SetRequiredParameters()
G4PVPlacement * umd_top_coat_phys_small
static utl::TabulatedFunction fgLinerSPECULARSPIKECONSTANT
G4PVPlacement * ground_phys
static double fInterfaceThickness_SPMT
G4SubtractionSolid * pmt_solid1
void SetScintPropertyTable()
G4LogicalBorderSurface * sidesurface
G4MaterialPropertiesTable * waterMPT
static G4ThreeVector fgTankCenter
double fScintillatorCasingPadding
utl::TabulatedFunction fPmtSfaceABSORPTION
G4PVPlacement * umd_fiber_clad1_phys_small
G4Tubs * umd_fiber_core_solid_small
void CreatePrimitivesMARTA()
G4LogicalVolume * umd_fiber_clad1_log_small
static double fDomeRadius_SPMT
G4LogicalVolume * rpc_log
G4LogicalVolume * umd_casing_log_small
double fScintillatorHousingLength
G4PVPlacement * umd_fiber_core_phys_large
G4Tubs * extra_fiber_solid
G4Material * fSoda_lime_glass
utl::TabulatedFunction fLinerABSORPTION
Optical mdet::Fiber used to conect mdet::Scintillator to mdet::Pixel.
G4Ellipsoid * dome_in_aux
static double fgInterfaceRzmax
G4PVPlacement * umd_fiber_clad2_phys_large
static utl::TabulatedFunction fgInterfaceRINDEX
G4StationConstruction(const double simRadius, const bool umdEnabled, const double scintYield, const bool martaEnabled)
utl::TabulatedFunction fWaterRINDEX
std::map< mdet::Module::AreaKind, double > fModAreaLenghts
void GetDataForThisTank()
double fScintillatorBarWidth
G4ThreeVector fTankSupportTopSlabDimensions
G4PVPlacement * solarPanel_phys
static utl::TabulatedFunction fgPmtdomeABSORPTION
G4LogicalVolume * extra_clad2_log
G4Tubs * umd_fiber_clad1_solid_large
G4LogicalVolume * pixel_log
G4LogicalBorderSurface * bottomsurface
std::vector< G4double > fRPCRotations
G4Tubs * s_interface_solid
G4PVPlacement * expHall_phys
G4PVPlacement * umd_top_coat_phys_large
G4Ellipsoid * dome_out_aux
G4PVPlacement * side_phys
void CreateExtrudedPolystyreneFoam()
double fScintillatorBarLength
utl::TabulatedFunction fPmtSdomeRINDEX
static utl::TabulatedFunction fgInterfaceABSORPTION
G4ThreeVector fPMTPosition
G4VPhysicalVolume * CreateTank()
G4Box * umd_side_coat_solid_large
G4MaterialPropertiesTable * airMPT
G4MaterialPropertiesTable * pmtfaceMPT1
utl::TabulatedFunction fPmtSdomeABSORPTION
G4LogicalVolume * umd_strip_coat_log_large
double fScintillatorHousingWidth
G4LogicalVolume * umd_top_bot_coat_log_large
G4PVPlacement * scin_phys2
void SetMARTAParameters()