File indexing completed on 2026-04-09 07:52:09
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #ifndef Run_h
0030 #define Run_h 1
0031
0032 #include "DetectorConstruction.hh"
0033
0034 #include "G4Run.hh"
0035 #include "G4VProcess.hh"
0036 #include "globals.hh"
0037
0038 #include <map>
0039
0040 class DetectorConstruction;
0041 class G4ParticleDefinition;
0042
0043
0044
0045 class Run : public G4Run
0046 {
0047 public:
0048 Run(DetectorConstruction* detector);
0049 ~Run() override = default;
0050
0051 public:
0052 void SetPrimary(G4ParticleDefinition* particle, G4double energy);
0053 void CountProcesses(const G4VProcess* process);
0054 void ParticleCount(G4int, G4String, G4double, G4double);
0055 void AddEdep(G4int, G4double);
0056 void AddTotEdep(G4double);
0057 void AddEleak(G4double);
0058 void AddEtotal(G4double);
0059 void AddTrackStatus(G4int);
0060
0061 void Merge(const G4Run*) override;
0062 void EndOfRun();
0063
0064 private:
0065 struct ParticleData
0066 {
0067 ParticleData() : fCount(0), fEmean(0.), fEmin(0.), fEmax(0.), fTmean(-1.) {}
0068 ParticleData(G4int count, G4double ekin, G4double emin, G4double emax, G4double meanLife)
0069 : fCount(count), fEmean(ekin), fEmin(emin), fEmax(emax), fTmean(meanLife)
0070 {}
0071 G4int fCount;
0072 G4double fEmean;
0073 G4double fEmin;
0074 G4double fEmax;
0075 G4double fTmean;
0076 };
0077
0078 private:
0079 DetectorConstruction* fDetector = nullptr;
0080 G4ParticleDefinition* fParticle = nullptr;
0081 G4double fEkin = 0.;
0082
0083 G4int fStatus[3] = {0, 0, 0};
0084
0085 G4double fEdeposit[kMaxAbsor], fEmin[kMaxAbsor], fEmax[kMaxAbsor];
0086 G4double fTotEdep[3] = {0., 0., 0.};
0087 G4double fEleak[3] = {0., 0., 0.};
0088 G4double fEtotal[3] = {0., 0., 0.};
0089
0090 std::map<G4String, G4int> fProcCounter;
0091 std::map<G4String, ParticleData> fParticleDataMap[kMaxAbsor];
0092 };
0093
0094
0095
0096 #endif