OMSim
Geant4 for IceCube optical module studies
Loading...
Searching...
No Matches
OMSimLOM16.hh
Go to the documentation of this file.
1
6#pragma once
7
9#include "OMSimOpticalModule.hh"
10
12{
13public:
14 LOM16(G4bool pPlaceHarness = false);
15 ~LOM16();
16 void construction();
17 double getPressureVesselWeight() {return (5.38+5.35)*kg;};
18 int getNumberOfPMTs() { return m_totalNumberPMTs;};
19
20 G4String getName()
21 {
22 std::stringstream ss;
23 ss << "LOM16/" << m_index;
24 return ss.str();
25 }
26private:
27 G4UnionSolid* pressureVessel(const G4double pOutRad, G4String pSuffix);
28
29 //Lom specific functions
30 void placeCADSupportStructure();
31
32 void appendEquatorBand();
33
34 //for gelpad and PMT creation
35 void placePMTsAndGelpads(G4VSolid* lGelSolid,G4LogicalVolume* lGelLogical);
36 void setPMTAndGelpadPositions();
37 void createGelpadLogicalVolumes(G4VSolid* lGelSolid);
38 void placePMTs(G4LogicalVolume* lInnerVolumeLogical);
39 void placeGelpads(G4LogicalVolume* lInnerVolumeLogical);
40
41 //selection variables
42 G4bool m_placeHarness = true;
43 G4bool m_harnessUnion = true; //it should be true for the first module that you build, and then false
44
45 //vectors for positions and rotations
46 std::vector<G4ThreeVector> m_positionsPMT;
47 std::vector<G4ThreeVector> m_positionsGelpad;
48 std::vector<G4double> m_thetaPMT;
49 std::vector<G4double> m_phiPMT;
50
51 //helper variables
52 std::stringstream m_converter;
53 std::stringstream m_converter2;
54
55 //logical of gelpads
56 std::vector<G4LogicalVolume*> m_gelPadLogical;
57
58 G4String m_PMTModel = "pmt_Hamamatsu_4inch";
59
60 const G4double m_xInternalCAD = 68.248*mm;
61 const G4double m_yInternalCAD = 0*mm;
62 const G4double m_zInternalCAD = -124.218*mm;
63 const G4double m_gelPadDZ = 30.0*mm;
64 const G4double m_glassOutRad = 153.2*mm;
65 const G4double m_glassThick = 12.0*mm;
66 const G4double m_glassInRad = m_glassOutRad - m_glassThick;
67 const G4double m_cylinderHeight = 68.8*mm;
68 const G4double m_cylinderAngle = 2.5*deg;
69 const G4double m_gelThicknessFrontPMT = 3.6*mm;
70 const G4double m_gelThickness = 4.5*mm;
71 const G4double m_EqPMTrOffset = 2.6*mm;
72 const G4double m_EqPMTzOffset = 62.5*mm;
73 const G4double m_reflectorHalfZ = 15*mm;
74 const G4double m_reflectorConeSheetThickness = 0.5*mm;
75 const G4double m_reflectorConeToHolder = 1.55*mm;
76 const G4double m_thetaPolar = 36.0*deg;
77 const G4double m_thetaEquatorial = 62.0*deg;
78 const G4int m_numberPolarPMTs = 4;
79 const G4int m_numberEqPMTs = 4;
80 const G4double m_polarEquatorialPMTphiPhase = 45.0*deg;
81 const G4double m_equatorialTiltAngle = 15.0*deg;
82 const G4double m_polarPadOpeningAngle = 30.0*deg;
83 const G4double m_equatorialPadOpeningAngle = 22.0*deg;
84 const G4int m_totalNumberPMTs = (m_numberPolarPMTs + m_numberEqPMTs) * 2;
85
86 G4double m_PMToffset;
87 G4double m_maxPMTRadius;
88
89 const G4double m_equatorialBandWidth = 45 * mm; //Total width (both halves)
90 const G4double m_equatorialBandThickness = 1 * mm; //Thickness since its a 3D object
91};
Construction of the PMTs.
Definition OMSimLOM16.hh:12
~LOM16()
Definition OMSimLOM16.cc:17
double getPressureVesselWeight()
Virtual method to get the weight of the pressure vessel.
Definition OMSimLOM16.hh:17
int getNumberOfPMTs()
Virtual method to get the number of PMTs in the optical module.
Definition OMSimLOM16.hh:18
void construction()
Abstract method you have to define in order to make a derived class from OMSimDetectorComponent.
Definition OMSimLOM16.cc:41
Base class for OMs works as interface.
Definition OMSimOpticalModule.hh:23