Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-23 09:22:23

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 /// \file optical/OpNovice2/include/RunAction.hh
0027 /// \brief Definition of the RunAction class
0028 //
0029 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0030 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0031 
0032 #ifndef Run_h
0033 #define Run_h 1
0034 
0035 #include "G4OpBoundaryProcess.hh"
0036 #include "G4Run.hh"
0037 
0038 class G4ParticleDefinition;
0039 
0040 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0041 class Run : public G4Run
0042 {
0043   public:
0044     Run();
0045     ~Run() override = default;
0046 
0047     void SetPrimary(G4ParticleDefinition* particle, G4double energy, G4bool polarized,
0048                     G4double polarization);
0049 
0050     //  particle energy
0051     void AddCerenkovEnergy(G4double en) { fCerenkovEnergy += en; }
0052     void AddScintillationEnergy(G4double en) { fScintEnergy += en; }
0053     void AddWLSAbsorptionEnergy(G4double en) { fWLSAbsorptionEnergy += en; }
0054     void AddWLSEmissionEnergy(G4double en) { fWLSEmissionEnergy += en; }
0055     void AddWLS2AbsorptionEnergy(G4double en) { fWLS2AbsorptionEnergy += en; }
0056     void AddWLS2EmissionEnergy(G4double en) { fWLS2EmissionEnergy += en; }
0057 
0058     // number of particles
0059     void AddCerenkov() { fCerenkovCount += 1; }
0060     void AddScintillation() { fScintCount += 1; }
0061     void AddRayleigh() { fRayleighCount += 1; }
0062     void AddWLSAbsorption() { fWLSAbsorptionCount += 1; }
0063     void AddWLSEmission() { fWLSEmissionCount += 1; }
0064     void AddWLS2Absorption() { fWLS2AbsorptionCount += 1; }
0065     void AddWLS2Emission() { fWLS2EmissionCount += 1; }
0066 
0067     void AddOpAbsorption() { fOpAbsorption += 1; }
0068     void AddOpAbsorptionPrior() { fOpAbsorptionPrior += 1; }
0069 
0070     void AddFresnelRefraction() { fBoundaryProcs[FresnelRefraction] += 1; }
0071     void AddFresnelReflection() { fBoundaryProcs[FresnelReflection] += 1; }
0072     void AddTransmission() { fBoundaryProcs[Transmission] += 1; }
0073     void AddTotalInternalReflection() { fBoundaryProcs[TotalInternalReflection] += 1; }
0074     void AddLambertianReflection() { fBoundaryProcs[LambertianReflection] += 1; }
0075     void AddLobeReflection() { fBoundaryProcs[LobeReflection] += 1; }
0076     void AddSpikeReflection() { fBoundaryProcs[SpikeReflection] += 1; }
0077     void AddBackScattering() { fBoundaryProcs[BackScattering] += 1; }
0078     void AddAbsorption() { fBoundaryProcs[Absorption] += 1; }
0079     void AddDetection() { fBoundaryProcs[Detection] += 1; }
0080     void AddNotAtBoundary() { fBoundaryProcs[NotAtBoundary] += 1; }
0081     void AddSameMaterial() { fBoundaryProcs[SameMaterial] += 1; }
0082     void AddStepTooSmall() { fBoundaryProcs[StepTooSmall] += 1; }
0083     void AddNoRINDEX() { fBoundaryProcs[NoRINDEX] += 1; }
0084 
0085     void AddTotalSurface() { fTotalSurface += 1; }
0086     void AddPolishedLumirrorAirReflection() { fBoundaryProcs[PolishedLumirrorAirReflection] += 1; }
0087     void AddPolishedLumirrorGlueReflection()
0088     {
0089       fBoundaryProcs[PolishedLumirrorGlueReflection] += 1;
0090     }
0091     void AddPolishedAirReflection() { fBoundaryProcs[PolishedAirReflection] += 1; }
0092     void AddPolishedTeflonAirReflection() { fBoundaryProcs[PolishedTeflonAirReflection] += 1; }
0093     void AddPolishedTiOAirReflection() { fBoundaryProcs[PolishedTiOAirReflection] += 1; }
0094     void AddPolishedTyvekAirReflection() { fBoundaryProcs[PolishedTyvekAirReflection] += 1; }
0095     void AddPolishedVM2000AirReflection() { fBoundaryProcs[PolishedVM2000AirReflection] += 1; }
0096     void AddPolishedVM2000GlueReflection() { fBoundaryProcs[PolishedVM2000GlueReflection] += 1; }
0097 
0098     void AddEtchedLumirrorAirReflection() { fBoundaryProcs[EtchedLumirrorAirReflection] += 1; }
0099     void AddEtchedLumirrorGlueReflection() { fBoundaryProcs[EtchedLumirrorGlueReflection] += 1; }
0100     void AddEtchedAirReflection() { fBoundaryProcs[EtchedAirReflection] += 1; }
0101     void AddEtchedTeflonAirReflection() { fBoundaryProcs[EtchedTeflonAirReflection] += 1; }
0102     void AddEtchedTiOAirReflection() { fBoundaryProcs[EtchedTiOAirReflection] += 1; }
0103     void AddEtchedTyvekAirReflection() { fBoundaryProcs[EtchedTyvekAirReflection] += 1; }
0104     void AddEtchedVM2000AirReflection() { fBoundaryProcs[EtchedVM2000AirReflection] += 1; }
0105     void AddEtchedVM2000GlueReflection() { fBoundaryProcs[EtchedVM2000GlueReflection] += 1; }
0106 
0107     void AddGroundLumirrorAirReflection() { fBoundaryProcs[GroundLumirrorAirReflection] += 1; }
0108     void AddGroundLumirrorGlueReflection() { fBoundaryProcs[GroundLumirrorGlueReflection] += 1; }
0109     void AddGroundAirReflection() { fBoundaryProcs[GroundAirReflection] += 1; }
0110     void AddGroundTeflonAirReflection() { fBoundaryProcs[GroundTeflonAirReflection] += 1; }
0111     void AddGroundTiOAirReflection() { fBoundaryProcs[GroundTiOAirReflection] += 1; }
0112     void AddGroundTyvekAirReflection() { fBoundaryProcs[GroundTyvekAirReflection] += 1; }
0113     void AddGroundVM2000AirReflection() { fBoundaryProcs[GroundVM2000AirReflection] += 1; }
0114     void AddGroundVM2000GlueReflection() { fBoundaryProcs[GroundVM2000GlueReflection] += 1; }
0115 
0116     void AddDichroic() { fBoundaryProcs[Dichroic] += 1; }
0117     void AddCoatedDielectricRefraction() { fBoundaryProcs[CoatedDielectricRefraction] += 1; }
0118     void AddCoatedDielectricReflection() { fBoundaryProcs[CoatedDielectricReflection] += 1; }
0119     void AddCoatedDielectricFrustratedTransmission()
0120     {
0121       fBoundaryProcs[CoatedDielectricFrustratedTransmission] += 1;
0122     }
0123 
0124     void Merge(const G4Run*) override;
0125 
0126     void EndOfRun();
0127 
0128   private:
0129     // primary particle
0130     G4ParticleDefinition* fParticle = nullptr;
0131     G4double fEkin = -1.;
0132     G4bool fPolarized = false;
0133     G4double fPolarization = 0.;
0134 
0135     G4double fCerenkovEnergy = 0.;
0136     G4double fScintEnergy = 0.;
0137     G4double fWLSAbsorptionEnergy = 0.;
0138     G4double fWLSEmissionEnergy = 0.;
0139     G4double fWLS2AbsorptionEnergy = 0.;
0140     G4double fWLS2EmissionEnergy = 0.;
0141 
0142     // number of particles
0143     G4int fCerenkovCount = 0;
0144     G4int fScintCount = 0;
0145     G4int fWLSAbsorptionCount = 0;
0146     G4int fWLSEmissionCount = 0;
0147     G4int fWLS2AbsorptionCount = 0;
0148     G4int fWLS2EmissionCount = 0;
0149     // number of events
0150     G4int fRayleighCount = 0;
0151 
0152     // non-boundary processes
0153     G4int fOpAbsorption = 0;
0154 
0155     // prior to boundary:
0156     G4int fOpAbsorptionPrior = 0;
0157 
0158     // boundary proc
0159     std::vector<G4int> fBoundaryProcs;
0160 
0161     G4int fTotalSurface = 0;
0162 };
0163 
0164 #endif /* Run_h */