File indexing completed on 2026-04-08 07:54:03
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 G4ParticleDefinition;
0039
0040
0041
0042 class Run : public G4Run
0043 {
0044 public:
0045 Run() = default;
0046 ~Run() override = default;
0047
0048 public:
0049 void ParticleCount(G4String, G4double, G4double);
0050 void Balance(G4double, G4double);
0051 void EventTiming(G4double);
0052 void PrimaryTiming(G4double);
0053 void EvisEvent(G4double);
0054
0055 void SetTimeWindow(G4double, G4double);
0056 void CountInTimeWindow(G4String, G4bool, G4bool, G4bool);
0057
0058 void SetPrimary(G4ParticleDefinition* particle, G4double energy);
0059 void EndOfRun();
0060
0061 void Merge(const G4Run*) override;
0062
0063 private:
0064 struct ParticleData
0065 {
0066 ParticleData() : fCount(0), fEmean(0.), fEmin(0.), fEmax(0.), fTmean(-1.) {}
0067 ParticleData(G4int count, G4double ekin, G4double emin, G4double emax, G4double meanLife)
0068 : fCount(count), fEmean(ekin), fEmin(emin), fEmax(emax), fTmean(meanLife)
0069 {}
0070 G4int fCount;
0071 G4double fEmean;
0072 G4double fEmin;
0073 G4double fEmax;
0074 G4double fTmean;
0075 };
0076
0077 private:
0078 G4ParticleDefinition* fParticle = nullptr;
0079 G4double fEkin = 0.;
0080
0081 std::map<G4String, ParticleData> fParticleDataMap;
0082 G4int fDecayCount = 0, fTimeCount = 0;
0083 G4double fEkinTot[3] = {0., DBL_MAX, 0.};
0084 G4double fPbalance[3] = {0., DBL_MAX, 0.};
0085 G4double fEventTime[3] = {0., DBL_MAX, 0.};
0086 G4double fPrimaryTime = 0.;
0087 G4double fEvisEvent[3] = {0., DBL_MAX, 0.};
0088
0089 private:
0090 struct ActivityData
0091 {
0092 ActivityData() : fNlife_t1(0), fNlife_t2(0), fNdecay_t1t2(0) {}
0093 ActivityData(G4int n1, G4int n2, G4int nd) : fNlife_t1(n1), fNlife_t2(n2), fNdecay_t1t2(nd)
0094 {}
0095 G4int fNlife_t1;
0096 G4int fNlife_t2;
0097 G4int fNdecay_t1t2;
0098 };
0099
0100 std::map<G4String, ActivityData> fActivityMap;
0101 G4double fTimeWindow1 = 0., fTimeWindow2 = 0.;
0102 };
0103
0104
0105
0106 #endif