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