G4XTankFastCerenkov.h
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * DISCLAIMER *
4 // * *
5 // * The following disclaimer summarizes all the specific disclaimers *
6 // * of contributors to this software. The specific disclaimers,which *
7 // * govern, are listed with their locations in: *
8 // * http://cern.ch/geant4/license *
9 // * *
10 // * Neither the authors of this software system, nor their employing *
11 // * institutes,nor the agencies providing financial support for this *
12 // * work make any representation or warranty, express or implied, *
13 // * regarding this software system or assume any liability for its *
14 // * use. *
15 // * *
16 // * This code implementation is the intellectual property of the *
17 // * GEANT4 collaboration. *
18 // * By copying, distributing or modifying the Program (or any work *
19 // * based on the Program) you indicate your acceptance of this *
20 // * statement, and all its terms. *
21 // ********************************************************************
22 
23 #ifndef _G4XTankSimulatorAG_G4XTankFastCerenkov_h_
24 #define _G4XTankSimulatorAG_G4XTankFastCerenkov_h_
25 
26 #include <sdet/PMT.h>
27 using sdet::PMT;
28 #include <utl/Point.h>
29 using utl::Point;
30 #include <sevt/Station.h>
31 
32 #include <globals.hh>
33 #include <templates.hh>
34 #include <Randomize.hh>
35 #include <G4ThreeVector.hh>
36 #include <G4ParticleMomentum.hh>
37 #include <G4Step.hh>
38 #include <G4VContinuousProcess.hh>
39 #include <G4OpticalPhoton.hh>
40 #include <G4DynamicParticle.hh>
41 #include <G4Material.hh>
42 #include <G4PhysicsTable.hh>
43 #include <G4MaterialPropertiesTable.hh>
44 #include <G4PhysicsOrderedFreeVector.hh>
45 #include <G4ios.hh>
46 #include <G4Poisson.hh>
47 
48 //#include <G4FastTankSimulatorPS/G4FastTankConstruction.h>
49 
50 #define IN_TANK 0
51 #define DOWN_IN_TANK 1
52 #define IN_DOME_1 11
53 #define IN_DOME_2 12
54 #define IN_DOME_3 13
55 #define IN_INTERFACE_1 21
56 #define IN_INTERFACE_2 22
57 #define IN_INTERFACE_3 23
58 #define INWARD 31
59 #define OUTWARD 32
60 #define TARGET_PMT1 0
61 #define TARGET_PMT2 1
62 #define TARGET_PMT3 2
63 #define TARGET_WALL 3
64 #define TARGET_FLOOR 4
65 #define BOUNCED 10
66 
67 
68 namespace G4XTankSimulatorAG {
69 
70  class G4XTankFastCerenkov : public G4VContinuousProcess {
71 
72  public:
73 
74  G4XTankFastCerenkov(const G4String& processName = "Cerenkov");
76 
77  static void GetDataFromConstruction();
78  G4bool IsApplicable(const G4ParticleDefinition &);
79  void SetTrackSecondariesFirst(const G4bool);
80  void SetMaxNumPhotonsPerStep(const G4int);
81  G4PhysicsTable* GetPhysicsTable() const;
82  void DumpPhysicsTable() const;
83  G4VParticleChange* AlongStepDoIt(const G4Track &, const G4Step &);
84  G4double GetContinuousStepLimit(const G4Track &, G4double, G4double,
85  G4double &);
86 
87  private:
88 
89  void BuildThePhysicsTable();
90  G4double GetAverageNumberOfPhotons(const G4DynamicParticle *,
91  const G4Material *,
92  const G4MaterialPropertyVector *) const;
93  void TrackPhotonInTank();
94  void PropogateInTank(G4int);
95 
96  template<int pmtId>
97  G4bool TransitionToDome(G4int);
98  template<int pmtId>
99  G4bool PropogateInDome(G4int &);
100  template<int pmtId>
101  G4bool TransitionToInterface(G4int &);
102  template<int pmtId>
103  G4bool PropogateInInterface(G4int &);
104 
105  G4double GetSphereIntersect(const G4ThreeVector &, const G4double) const;
106  G4double GetEllipsoidIntersect(const G4ThreeVector &,
107  const G4double, const G4double) const;
108  void DoRayleighScatter();
109  G4bool ScatterOffRoof();
110  G4bool ScatterOffWall();
111  G4bool ScatterOffFloor();
112  void BackScatter();
113  void DiffuseScatterHorizontal(const G4ThreeVector &);
114  void DiffuseScatterVertical(const G4ThreeVector &);
115  void SpikeScatter(const G4ThreeVector &);
116  void LobeScatterHorizontal(const G4ThreeVector &);
117  void LobeScatterVertical(const G4ThreeVector &);
118 
120  G4int fMaxPhotons;
123 
125 
131 
132  static double fSigmaAlpha;
133 
135 
138 
142 
143 
144  // PMT positions (the zeroth position is dummy)
145  static G4ThreeVector fPMTPos[4];
146  // The height of the roof, referred to each PMT
147  static G4double fRoofPos[4];
148 
149  G4double fSampledRI;
150  G4double fRayleighConst;
151 
152  protected:
153 
154  G4PhysicsTable* fThePhysicsTable;
155 
156  };
157 
158 }
159 
160 #endif
void LobeScatterVertical(const G4ThreeVector &)
Point object.
Definition: Point.h:32
G4double GetEllipsoidIntersect(const G4ThreeVector &, const G4double, const G4double) const
Detector description interface for PMT-related data.
Definition: SDetector/PMT.h:26
static utl::TabulatedFunction fLinerBackscatter
Class to hold collection (x,y) points and provide interpolation between them.
G4double GetAverageNumberOfPhotons(const G4DynamicParticle *, const G4Material *, const G4MaterialPropertyVector *) const
G4double GetContinuousStepLimit(const G4Track &, G4double, G4double, G4double &)
G4XTankFastCerenkov(const G4String &processName="Cerenkov")
static utl::TabulatedFunction fDomeAbsLength
static utl::TabulatedFunction fLinerReflectivity
static utl::TabulatedFunction fInterfaceRIndex
static utl::TabulatedFunction fLinerSpecularSpike
void LobeScatterHorizontal(const G4ThreeVector &)
G4double GetSphereIntersect(const G4ThreeVector &, const G4double) const
static utl::TabulatedFunction fWaterAbsLength
static utl::TabulatedFunction fLinerSpecularLobe
static utl::TabulatedFunction fDomeRIndex
G4bool IsApplicable(const G4ParticleDefinition &)
G4VParticleChange * AlongStepDoIt(const G4Track &, const G4Step &)
void DiffuseScatterVertical(const G4ThreeVector &)
void DiffuseScatterHorizontal(const G4ThreeVector &)
static utl::TabulatedFunction fInterfaceAbsLength

, generated on Tue Sep 26 2023.