File indexing completed on 2026-09-16 08:30:42
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 "G4Run.hh"
0033 #include "G4VProcess.hh"
0034 #include "globals.hh"
0035
0036 #include <map>
0037
0038 class DetectorConstruction;
0039 class G4ParticleDefinition;
0040
0041
0042
0043 class Run : public G4Run
0044 {
0045 public:
0046 Run(DetectorConstruction*);
0047 ~Run() override = default;
0048
0049 public:
0050 void SetPrimary(G4ParticleDefinition* particle, G4double energy);
0051 void CountProcesses(const G4VProcess* process);
0052 void ParticleCount(G4String, G4double, G4double);
0053 void AddEdep(G4double edep);
0054 void AddEflow(G4double eflow);
0055 void ParticleFlux(G4String, G4double);
0056
0057 G4int GetIonId(G4String);
0058
0059 void Merge(const G4Run*) override;
0060 void EndOfRun();
0061
0062 private:
0063 struct ParticleData
0064 {
0065 ParticleData() : fCount(0), fEmean(0.), fEmin(0.), fEmax(0.), fTmean(-1.) {}
0066 ParticleData(G4int count, G4double ekin, G4double emin, G4double emax, G4double meanLife)
0067 : fCount(count), fEmean(ekin), fEmin(emin), fEmax(emax), fTmean(meanLife)
0068 {}
0069 G4int fCount;
0070 G4double fEmean;
0071 G4double fEmin;
0072 G4double fEmax;
0073 G4double fTmean;
0074 };
0075
0076 private:
0077
0078 void Merge(std::map<G4String, ParticleData>& destinationMap,
0079 const std::map<G4String, ParticleData>& sourceMap) const;
0080
0081 static std::map<G4String, G4int> fgIonMap;
0082 static G4int fgIonId;
0083
0084 DetectorConstruction* fDetector = nullptr;
0085 G4ParticleDefinition* fParticle = nullptr;
0086 G4double fEkin = 0.;
0087
0088 G4double fEnergyDeposit = 0., fEnergyDeposit2 = 0.;
0089 G4double fEnergyFlow = 0., fEnergyFlow2 = 0.;
0090 std::map<G4String, G4int> fProcCounter;
0091 std::map<G4String, ParticleData> fParticleDataMap1;
0092 std::map<G4String, ParticleData> fParticleDataMap2;
0093 };
0094
0095
0096
0097 #endif