File indexing completed on 2026-09-15 08:29:15
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
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043 #ifndef RunAction_h
0044 #define RunAction_h 1
0045
0046 #include "DetectorConstruction.hh"
0047
0048 #include "G4ThreeVector.hh"
0049 #include "G4UserRunAction.hh"
0050 #include "globals.hh"
0051
0052 #include <iostream>
0053
0054 class PrimaryGeneratorAction;
0055 class Run;
0056 class G4Run;
0057 class TrackingAction;
0058
0059 class RunAction : public G4UserRunAction
0060 {
0061 public:
0062 RunAction(DetectorConstruction*, PrimaryGeneratorAction*);
0063 ~RunAction() override = default;
0064
0065 void BeginOfRunAction(const G4Run*) override;
0066 void EndOfRunAction(const G4Run*) override;
0067
0068 void SetRndmFreq(G4int val) { fSaveRndm = val; }
0069 G4int GetRndmFreq() const { return fSaveRndm; }
0070 G4Run* GenerateRun() override;
0071
0072
0073 G4double GetEdepALL() const { return fEdepAll; }
0074 void SetEdepALL(G4double vall) { fEdepAll = vall; }
0075 void AddEdepALL(G4double vall)
0076 {
0077 fEdepAll += vall;
0078 fEdepAll_err += vall * vall;
0079 }
0080
0081 G4double GetEdepMedium() const { return fEdepMedium; }
0082 void SetEdepMedium(G4double vall) { fEdepMedium = vall; }
0083 void AddEdepMedium(G4double vall)
0084 {
0085 fEdepMedium += vall;
0086 fEdepMedium_err += vall * vall;
0087 }
0088
0089 G4double GetEdepSlice() const { return fEdepSlice; }
0090 void SetEdepSlice(G4double vall) { fEdepSlice = vall; }
0091 void AddEdepSlice(G4double vall)
0092 {
0093 fEdepSlice += vall;
0094 fEdepSlice_err += vall * vall;
0095 }
0096
0097 G4double GetEdepSoma() const { return fEdepSoma; }
0098 void SetEdepSoma(G4double vall) { fEdepSoma = vall; }
0099 void AddEdepSoma(G4double vall)
0100 {
0101 fEdepSoma += vall;
0102 fEdepSoma_err += vall * vall;
0103 }
0104
0105
0106 G4double GetEdepDend() const { return fEdepDend; }
0107 void SetEdepDend(G4double vall) { fEdepDend = vall; }
0108 void AddEdepDend(G4double vall)
0109 {
0110 fEdepDend += vall;
0111 fEdepDend_err += vall * vall;
0112 }
0113
0114
0115 G4double GetEdepAxon() const { return fEdepAxon; }
0116 void SetEdepAxon(G4double vall) { fEdepAxon = vall; }
0117 void AddEdepAxon(G4double vall)
0118 {
0119 fEdepAxon += vall;
0120 fEdepAxon_err += vall * vall;
0121 }
0122
0123
0124 G4double GetEdepNeuron() const { return fEdepNeuron; }
0125 void SetEdepNeuron(G4double vall) { fEdepNeuron = vall; }
0126 void AddEdepNeuron(G4double vall)
0127 {
0128 fEdepNeuron += vall;
0129 fEdepNeuron_err += vall * vall;
0130 }
0131
0132 G4int GetNumEvent() const { return fNumEvent; }
0133 void SetNumEvent(G4int i) { fNumEvent = i; }
0134
0135 private:
0136
0137
0138
0139 void CreateHistogram();
0140 void WriteHistogram();
0141
0142
0143
0144
0145 void PrintRunInfo(const G4Run* run);
0146
0147 G4bool fDebug{false};
0148
0149 DetectorConstruction* fDetector;
0150 PrimaryGeneratorAction* fPrimary;
0151 Run* fRun{nullptr};
0152
0153
0154
0155 G4double fEdepAll{0.0};
0156 G4double fEdepAll_err{0.0};
0157 G4double fEdepMedium{0.0};
0158 G4double fEdepMedium_err{0.0};
0159 G4double fEdepSlice{0.0};
0160 G4double fEdepSlice_err{0.0};
0161 G4double fEdepSoma{0.0};
0162 G4double fEdepSoma_err{0.0};
0163 G4double fEdepDend{0.0};
0164 G4double fEdepDend_err{0.0};
0165 G4double fEdepAxon{0.0};
0166 G4double fEdepAxon_err{0.0};
0167 G4double fEdepNeuron{0.0};
0168 G4double fEdepNeuron_err{0.0};
0169 G4int fNumEvent{0};
0170 G4int fSaveRndm{0};
0171 };
0172
0173 #endif