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