OMSim
Geant4 for IceCube optical module studies
OMSimLOM18.hh
Go to the documentation of this file.
1 
5 #pragma once
6 
8 #include "OMSimOpticalModule.hh"
9 
10 #include <G4LogicalVolume.hh>
11 #include <G4Polycone.hh>
12 
13 class LOM18 : public OMSimOpticalModule
14 {
15 public:
16  LOM18(G4bool pPlaceHarness = false);
17  ~LOM18();
18  void construction();
19  double getPressureVesselWeight() {return 17.0*kg;};
20  int getNumberOfPMTs() { return m_totalNumberPMTs;};
21  G4String getName()
22  {
23  std::stringstream ss;
24  ss << "LOM18/" << m_index;
25  return ss.str();
26  }
27 private:
28 
29  G4Polycone* createLOM18OuterSolid();
30  G4Polycone* createLOM18InnerSolid();
31 
32  void appendEquatorBand();
33  void placeCADSupportStructure(G4LogicalVolume* lInnerVolumeLogical);
34  void placeCADPenetrator(G4LogicalVolume* lInnerVolumeLogical);
35 
36 
37  void setPMTPositions();
38  void createGelpadLogicalVolumes(G4Polycone* lGelSolid);
39 
40  void placePMTs(G4LogicalVolume* lInnerVolumeLogical);
41  void placeGelpads(G4LogicalVolume* lInnerVolumeLogical);
42 
43  //selection variables
44  G4bool m_placeHarness = true;
45  G4bool m_harnessUnion = true; //it should be true for the first module that you build, and then false
46 
47  //vectors for positions and rotations
48  std::vector<G4ThreeVector> m_positionsPMT;
49  std::vector<G4ThreeVector> m_positionsGelpad;
50  std::vector<G4double> m_thetaPMT;
51  std::vector<G4double> m_phiPMT;
52 
53 
54 
55 
56  //from PMTConstruction class (not readable directly...needs to be changed)
57  G4double m_totalLenght;
58  G4double m_outRad;
59  G4double m_spherePosY;
60  G4double m_ellipsePosY;
61  G4double m_ellipseZaxis;
62 
63  //helper variables
64  std::stringstream m_conv;
65  std::stringstream m_converter2;
66 
67  //logical of gelpads
68  std::vector<G4LogicalVolume*> m_gelPadLogical;
69 
70  G4double m_GlassEquatorWidth = 159*mm;
71  G4double m_GlassPoleLength = 270*mm;
72  G4double m_GlassThickPole = 12.5*mm;
73  G4double m_GlassThickEquator = 16.5*mm;
74 
75  G4double m_thetaCenter = 48.0*deg;
76  G4double m_thetaEquatorial = 60.0*deg;
77  G4int m_numberPolarPMTs = 1;
78  G4int m_NrCenterPMTs = 4;
79  G4int m_NrEquatorialPMTs = 4;
80  G4double m_EqPMTPhiPhase = 45.0*deg;
81 
82  //gelpad specific
83  G4double m_polarPadOpeningAngle = 30.0*deg;
84  G4double m_centerPadOpeningAngle = 10.0*deg;
85  G4double m_equatorialPadOpeningAngle = 5.0*deg;
86  G4double m_GelThicknessFrontPolarPMT = 3.5*mm;
87  G4double m_gelThicknessFrontCenterPMT = 12.93*mm;
88  G4double m_gelThicknessFrontEquatorialPMT = 14.52*mm;
89 
90  G4int m_numberPMTsPerHalf = m_numberPolarPMTs + m_NrCenterPMTs + m_NrEquatorialPMTs;
91  G4int m_totalNumberPMTs = (m_numberPolarPMTs + m_NrCenterPMTs + m_NrEquatorialPMTs) * 2;
92  //from PMT manager
93  G4double m_PMToffset;
94  G4double m_maxPMTRadius;
95 
96  public:
97  G4double m_cylinderAngle = 1.5*deg;
98  G4double m_glassOutRad;
99 };
100 
Construction of the PMTs.
Definition: OMSimLOM18.hh:14
void construction()
Definition: OMSimLOM18.cc:46
void setPMTPositions()
Definition: OMSimLOM18.cc:340
G4Polycone * createLOM18OuterSolid()
Definition: OMSimLOM18.cc:96
void placeGelpads(G4LogicalVolume *lInnerVolumeLogical)
Definition: OMSimLOM18.cc:556
void placePMTs(G4LogicalVolume *lInnerVolumeLogical)
Definition: OMSimLOM18.cc:536
G4Polycone * createLOM18InnerSolid()
Definition: OMSimLOM18.cc:169
double getPressureVesselWeight()
Virtual method to get the weight of the pressure vessel.
Definition: OMSimLOM18.hh:19
void placeCADPenetrator(G4LogicalVolume *lInnerVolumeLogical)
Definition: OMSimLOM18.cc:304
void placeCADSupportStructure(G4LogicalVolume *lInnerVolumeLogical)
Definition: OMSimLOM18.cc:270
void createGelpadLogicalVolumes(G4Polycone *lGelSolid)
Definition: OMSimLOM18.cc:444
int getNumberOfPMTs()
Virtual method to get the number of PMTs in the optical module.
Definition: OMSimLOM18.hh:20
Base class for OMs works as interface.
Definition: OMSimOpticalModule.hh:23