Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 /// \file optical/OpNovice2/include/RunAction.hh 27 /// \brief Definition of the RunAction class 28 // 29 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 30 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 31 32 #ifndef Run_h 33 #define Run_h 1 34 35 #include "G4OpBoundaryProcess.hh" 36 #include "G4Run.hh" 37 38 class G4ParticleDefinition; 39 40 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 41 class Run : public G4Run 42 { 43 public: 44 Run(); 45 ~Run() override = default; 46 47 void SetPrimary(G4ParticleDefinition* particle, G4double energy, G4bool polarized, 48 G4double polarization); 49 50 // particle energy 51 void AddCerenkovEnergy(G4double en) { fCerenkovEnergy += en; } 52 void AddScintillationEnergy(G4double en) { fScintEnergy += en; } 53 void AddWLSAbsorptionEnergy(G4double en) { fWLSAbsorptionEnergy += en; } 54 void AddWLSEmissionEnergy(G4double en) { fWLSEmissionEnergy += en; } 55 void AddWLS2AbsorptionEnergy(G4double en) { fWLS2AbsorptionEnergy += en; } 56 void AddWLS2EmissionEnergy(G4double en) { fWLS2EmissionEnergy += en; } 57 58 // number of particles 59 void AddCerenkov() { fCerenkovCount += 1; } 60 void AddScintillation() { fScintCount += 1; } 61 void AddRayleigh() { fRayleighCount += 1; } 62 void AddWLSAbsorption() { fWLSAbsorptionCount += 1; } 63 void AddWLSEmission() { fWLSEmissionCount += 1; } 64 void AddWLS2Absorption() { fWLS2AbsorptionCount += 1; } 65 void AddWLS2Emission() { fWLS2EmissionCount += 1; } 66 67 void AddOpAbsorption() { fOpAbsorption += 1; } 68 void AddOpAbsorptionPrior() { fOpAbsorptionPrior += 1; } 69 70 void AddFresnelRefraction() { fBoundaryProcs[FresnelRefraction] += 1; } 71 void AddFresnelReflection() { fBoundaryProcs[FresnelReflection] += 1; } 72 void AddTransmission() { fBoundaryProcs[Transmission] += 1; } 73 void AddTotalInternalReflection() { fBoundaryProcs[TotalInternalReflection] += 1; } 74 void AddLambertianReflection() { fBoundaryProcs[LambertianReflection] += 1; } 75 void AddLobeReflection() { fBoundaryProcs[LobeReflection] += 1; } 76 void AddSpikeReflection() { fBoundaryProcs[SpikeReflection] += 1; } 77 void AddBackScattering() { fBoundaryProcs[BackScattering] += 1; } 78 void AddAbsorption() { fBoundaryProcs[Absorption] += 1; } 79 void AddDetection() { fBoundaryProcs[Detection] += 1; } 80 void AddNotAtBoundary() { fBoundaryProcs[NotAtBoundary] += 1; } 81 void AddSameMaterial() { fBoundaryProcs[SameMaterial] += 1; } 82 void AddStepTooSmall() { fBoundaryProcs[StepTooSmall] += 1; } 83 void AddNoRINDEX() { fBoundaryProcs[NoRINDEX] += 1; } 84 85 void AddTotalSurface() { fTotalSurface += 1; } 86 void AddPolishedLumirrorAirReflection() { fBoundaryProcs[PolishedLumirrorAirReflection] += 1; } 87 void AddPolishedLumirrorGlueReflection() 88 { 89 fBoundaryProcs[PolishedLumirrorGlueReflection] += 1; 90 } 91 void AddPolishedAirReflection() { fBoundaryProcs[PolishedAirReflection] += 1; } 92 void AddPolishedTeflonAirReflection() { fBoundaryProcs[PolishedTeflonAirReflection] += 1; } 93 void AddPolishedTiOAirReflection() { fBoundaryProcs[PolishedTiOAirReflection] += 1; } 94 void AddPolishedTyvekAirReflection() { fBoundaryProcs[PolishedTyvekAirReflection] += 1; } 95 void AddPolishedVM2000AirReflection() { fBoundaryProcs[PolishedVM2000AirReflection] += 1; } 96 void AddPolishedVM2000GlueReflection() { fBoundaryProcs[PolishedVM2000GlueReflection] += 1; } 97 98 void AddEtchedLumirrorAirReflection() { fBoundaryProcs[EtchedLumirrorAirReflection] += 1; } 99 void AddEtchedLumirrorGlueReflection() { fBoundaryProcs[EtchedLumirrorGlueReflection] += 1; } 100 void AddEtchedAirReflection() { fBoundaryProcs[EtchedAirReflection] += 1; } 101 void AddEtchedTeflonAirReflection() { fBoundaryProcs[EtchedTeflonAirReflection] += 1; } 102 void AddEtchedTiOAirReflection() { fBoundaryProcs[EtchedTiOAirReflection] += 1; } 103 void AddEtchedTyvekAirReflection() { fBoundaryProcs[EtchedTyvekAirReflection] += 1; } 104 void AddEtchedVM2000AirReflection() { fBoundaryProcs[EtchedVM2000AirReflection] += 1; } 105 void AddEtchedVM2000GlueReflection() { fBoundaryProcs[EtchedVM2000GlueReflection] += 1; } 106 107 void AddGroundLumirrorAirReflection() { fBoundaryProcs[GroundLumirrorAirReflection] += 1; } 108 void AddGroundLumirrorGlueReflection() { fBoundaryProcs[GroundLumirrorGlueReflection] += 1; } 109 void AddGroundAirReflection() { fBoundaryProcs[GroundAirReflection] += 1; } 110 void AddGroundTeflonAirReflection() { fBoundaryProcs[GroundTeflonAirReflection] += 1; } 111 void AddGroundTiOAirReflection() { fBoundaryProcs[GroundTiOAirReflection] += 1; } 112 void AddGroundTyvekAirReflection() { fBoundaryProcs[GroundTyvekAirReflection] += 1; } 113 void AddGroundVM2000AirReflection() { fBoundaryProcs[GroundVM2000AirReflection] += 1; } 114 void AddGroundVM2000GlueReflection() { fBoundaryProcs[GroundVM2000GlueReflection] += 1; } 115 116 void AddDichroic() { fBoundaryProcs[Dichroic] += 1; } 117 void AddCoatedDielectricRefraction() { fBoundaryProcs[CoatedDielectricRefraction] += 1; } 118 void AddCoatedDielectricReflection() { fBoundaryProcs[CoatedDielectricReflection] += 1; } 119 void AddCoatedDielectricFrustratedTransmission() 120 { 121 fBoundaryProcs[CoatedDielectricFrustratedTransmission] += 1; 122 } 123 124 void Merge(const G4Run*) override; 125 126 void EndOfRun(); 127 128 private: 129 // primary particle 130 G4ParticleDefinition* fParticle = nullptr; 131 G4double fEkin = -1.; 132 G4bool fPolarized = false; 133 G4double fPolarization = 0.; 134 135 G4double fCerenkovEnergy = 0.; 136 G4double fScintEnergy = 0.; 137 G4double fWLSAbsorptionEnergy = 0.; 138 G4double fWLSEmissionEnergy = 0.; 139 G4double fWLS2AbsorptionEnergy = 0.; 140 G4double fWLS2EmissionEnergy = 0.; 141 142 // number of particles 143 G4int fCerenkovCount = 0; 144 G4int fScintCount = 0; 145 G4int fWLSAbsorptionCount = 0; 146 G4int fWLSEmissionCount = 0; 147 G4int fWLS2AbsorptionCount = 0; 148 G4int fWLS2EmissionCount = 0; 149 // number of events 150 G4int fRayleighCount = 0; 151 152 // non-boundary processes 153 G4int fOpAbsorption = 0; 154 155 // prior to boundary: 156 G4int fOpAbsorptionPrior = 0; 157 158 // boundary proc 159 std::vector<G4int> fBoundaryProcs; 160 161 G4int fTotalSurface = 0; 162 }; 163 164 #endif /* Run_h */ 165