OMSim
Geant4 for IceCube optical module studies
OMSimMDOM.hh
Go to the documentation of this file.
1 
5 #pragma once
6 #include "OMSimMDOMFlasher.hh"
8 #include "OMSimOpticalModule.hh"
9 
10 class mDOMHarness;
11 
12 class mDOM : public OMSimOpticalModule
13 {
14 
15 public:
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 
40 private:
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 
62 public:
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 
68 private:
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