OMSim
Geant4 for IceCube optical module studies
OMSimLOM16.hh
Go to the documentation of this file.
1 
6 #pragma once
7 
9 #include "OMSimOpticalModule.hh"
10 
11 class LOM16 : public OMSimOpticalModule
12 {
13 public:
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  }
26 private:
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