OMSim
Geant4 for IceCube optical module studies
Loading...
Searching...
No Matches
OMSimMDOM.hh
Go to the documentation of this file.
1
5#pragma once
6#include "OMSimMDOMFlasher.hh"
8#include "OMSimOpticalModule.hh"
9
10class mDOMHarness;
11
13{
14
15public:
16 mDOM(G4bool p_placeHarness = true);
17 ~mDOM();
18 void construction();
19 double getPressureVesselWeight() { return 13.0 * kg; };
20 int getNumberOfPMTs() { return m_totalNumberPMTs; };
21 G4String getName()
22 {
23 std::stringstream ss;
24 ss << "/mDOM/" << m_index;
25 return ss.str();
26 }
27
28 G4int m_NrTotalLED;
29 std::vector<G4Transform3D> m_LEDTransformers;
30 std::vector<std::vector<G4double>> m_LEDAngFromSphere;
31
38 void runBeamOnFlasher(G4int pModuleIndex, G4int pLEDIndex) { m_flashers->runBeamOnFlasher(this, pModuleIndex, pLEDIndex); }
39
40private:
41 mDOMFlasher *m_flashers;
42 mDOMHarness *m_harness;
43 G4SubtractionSolid *equatorialReflector(G4VSolid *pSupportStructure, G4Cons *pReflCone, G4double pAngle, G4String pSuffix);
44 void setPMTPositions();
45 G4UnionSolid *pressureVessel(const G4double pOutRad, G4String pSuffix);
46 G4SubtractionSolid *substractHarnessPlug(G4VSolid *pSolid);
47 std::tuple<G4SubtractionSolid *, G4UnionSolid *> supportStructure();
48 G4SubtractionSolid *substractFlashers(G4VSolid *lSupStructureSolid);
49 void setLEDPositions();
50
51 G4bool m_placeHarness = true;
52 G4bool m_harnessUnion = true; // it should be true for the first module that you build, and then false
53 std::vector<G4ThreeVector> m_positionsPMT;
54 std::vector<G4RotationMatrix> m_PMTRotations;
55 std::vector<G4RotationMatrix> m_PMTRotPhi;
56 std::vector<G4ThreeVector> m_reflectorPositions;
57
58 G4double m_PMToffset;
59 G4double m_refConeIdealInRad;
60 const G4double m_glassThick = 13.5 * mm;
61
62public:
63 const G4double m_cylinderAngle = 2.8 * deg;
64 const G4double m_glassOutRad = 176.5 * mm;
65 const G4double m_cylinderHeight = 27.5 * mm;
66 const G4double m_glassInRad = m_glassOutRad - m_glassThick;
67
68private:
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 = 10.0 * 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 = 33.0 * deg;
77 const G4double m_thetaEquatorial = 72.0 * deg;
78 const G4int m_numberPolarPMTs = 4;
79 const G4int m_numberEqPMTs = 8;
80 const G4int mRefConeAngle = 51;
81 const G4double m_polarEquatorialPMTphiPhase = 0 * deg;
82 const G4int m_totalNumberPMTs = (m_numberPolarPMTs + m_numberEqPMTs) * 2;
83 const G4double m_supStructureRad = m_glassOutRad - m_glassThick - m_gelThickness;
84
85 const G4double m_thetaEqLED = 61 * deg; // 61 upper sphere, 180-61 lower sphere
86 const G4double m_thetaPolLED = 8.2 * deg; // 8.2 upper sphere, 180-8.2 lower sphere
87};
88
Defines the mDOMFlasher class for simulating the 10 flashers in an mDOM optical module.
Construction of the PMTs.
Base class for OMs works as interface.
Definition OMSimOpticalModule.hh:23
The mDOMFlasher class represents the 10 flashers in an mDOM optical module.
Definition OMSimMDOMFlasher.hh:45
void runBeamOnFlasher(mDOM *pMDOMInstance, G4int pModuleIndex, G4int pLEDIndex)
run/beamOn the specified flasher.
Definition OMSimMDOMFlasher.cc:90
Definition OMSimMDOMHarness.hh:13
Definition OMSimMDOM.hh:13
const G4double m_glassThick
maximum Glass thickness
Definition OMSimMDOM.hh:60
const G4double m_gelThickness
distance between inner glass surface and holding structure, filled with gel
Definition OMSimMDOM.hh:70
void construction()
Abstract method you have to define in order to make a derived class from OMSimDetectorComponent.
Definition OMSimMDOM.cc:48
double getPressureVesselWeight()
Virtual method to get the weight of the pressure vessel.
Definition OMSimMDOM.hh:19
const G4double m_glassOutRad
outer radius of galss cylinder (pressure vessel)
Definition OMSimMDOM.hh:64
const G4double m_reflectorHalfZ
half-height of reflector (before cutting to right form)
Definition OMSimMDOM.hh:73
const G4double m_reflectorConeToHolder
horizontal distance from K??rcher's construction
Definition OMSimMDOM.hh:75
const G4double m_cylinderAngle
Deviation angle of cylindrical part of the pressure vessel.
Definition OMSimMDOM.hh:63
std::vector< std::vector< G4double > > m_LEDAngFromSphere
stores rho (mm),theta (deg),phi (deg) of each LED from the center of its corresponding spherical part...
Definition OMSimMDOM.hh:30
const G4double m_EqPMTzOffset
z-offset of middle PMT circles w.r.t. center of glass sphere
Definition OMSimMDOM.hh:72
const G4double m_cylinderHeight
height of cylindrical part of glass half-vessel
Definition OMSimMDOM.hh:65
const G4double m_EqPMTrOffset
middle PMT circles are slightly further out due to m_EqPMTzOffset
Definition OMSimMDOM.hh:71
std::vector< G4Transform3D > m_LEDTransformers
coordinates from center of the module
Definition OMSimMDOM.hh:29
const G4double m_gelThicknessFrontPMT
distance between inner glass surface and tip of PMTs
Definition OMSimMDOM.hh:69
int getNumberOfPMTs()
Virtual method to get the number of PMTs in the optical module.
Definition OMSimMDOM.hh:20
void runBeamOnFlasher(G4int pModuleIndex, G4int pLEDIndex)
run/beamOn the specified flasher.
Definition OMSimMDOM.hh:38
const G4double m_reflectorConeSheetThickness
aluminum sheet thickness true for all reflective cones
Definition OMSimMDOM.hh:74
~mDOM()
Definition OMSimMDOM.cc:15