// // ******************************************************************** // * License and Disclaimer * // * * // * The Geant4 software is copyright of the Copyright Holders of * // * the Geant4 Collaboration. It is provided under the terms and * // * conditions of the Geant4 Software License, included in the file * // * LICENSE and available at http://cern.ch/geant4/license . These * // * include a list of copyright holders. * // * * // * Neither the authors of this software system, nor their employing * // * institutes,nor the agencies providing financial support for this * // * work make any representation or warranty, express or implied, * // * regarding this software system or assume any liability for its * // * use. Please see the license in the file LICENSE and URL above * // * for the full disclaimer and the limitation of liability. * // * * // * This code implementation is the result of the scientific and * // * technical work of the GEANT4 collaboration. * // * By using, copying, modifying or distributing the software (or * // * any work based on the software) you agree to acknowledge its * // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // /// \file Run.hh /// \brief Definition of the Run class #ifndef Run_h #define Run_h 1 #include "G4Electron.hh" #include "G4Gamma.hh" #include "G4Positron.hh" #include "G4Run.hh" #include "globals.hh" class DetectorConstruction; class G4ParticleDefinition; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... class Run : public G4Run { public: Run(DetectorConstruction*); ~Run() override = default; void SetPrimary(G4ParticleDefinition* particle, G4double energy); void AddEnergy(G4double edep) { fEnergyDeposit += edep; fEnergyDeposit2 += edep * edep; }; void AddTrakLenCharg(G4double length) { fTrakLenCharged += length; fTrakLenCharged2 += length * length; }; void AddTrakLenNeutr(G4double length) { fTrakLenNeutral += length; fTrakLenNeutral2 += length * length; }; void AddMscProjTheta(G4double theta) { if (std::abs(theta) <= fMscThetaCentral) { fMscEntryCentral++; fMscProjecTheta += theta; fMscProjecTheta2 += theta * theta; } }; void CountStepsCharg(G4int nSteps) { fNbStepsCharged += nSteps; fNbStepsCharged2 += nSteps * nSteps; }; void CountStepsNeutr(G4int nSteps) { fNbStepsNeutral += nSteps; fNbStepsNeutral2 += nSteps * nSteps; }; void CountParticles(G4ParticleDefinition* part) { if (part == G4Gamma::Gamma()) ++fNbGamma; else if (part == G4Electron::Electron()) ++fNbElect; else if (part == G4Positron::Positron()) ++fNbPosit; }; void CountTransmit(G4int flag) { if (flag == 1) ++fTransmit[0]; else if (flag == 2) { ++fTransmit[0]; ++fTransmit[1]; } }; void CountReflect(G4int flag) { if (flag == 1) ++fReflect[0]; else if (flag == 2) { ++fReflect[0]; ++fReflect[1]; } }; void AddEnergyLeak(G4double eleak, G4int index) { fEnergyLeak[index] += eleak; fEnergyLeak2[index] += eleak * eleak; }; G4double ComputeMscHighland(); void CountGammaProcesses(G4int* type) { for (G4int i = 0; i < 4; ++i) { fTypes[i] += type[i]; } } void Merge(const G4Run*) override; void EndOfRun(); private: DetectorConstruction* fDetector = nullptr; G4ParticleDefinition* fParticle = nullptr; G4double fEkin = 0.; G4double fEnergyDeposit = 0., fEnergyDeposit2 = 0.; G4double fTrakLenCharged = 0., fTrakLenCharged2 = 0.; G4double fTrakLenNeutral = 0., fTrakLenNeutral2 = 0.; G4double fNbStepsCharged = 0., fNbStepsCharged2 = 0.; G4double fNbStepsNeutral = 0., fNbStepsNeutral2 = 0.; G4double fMscProjecTheta = 0., fMscProjecTheta2 = 0.; G4double fMscThetaCentral = 0.; G4int fNbGamma = 0, fNbElect = 0, fNbPosit = 0; G4int fTransmit[2] = {0, 0}, fReflect[2] = {0, 0}; G4int fMscEntryCentral = 0; G4int fTypes[4] = {0, 0, 0, 0}; G4double fEnergyLeak[2] = {0, 0}, fEnergyLeak2[2] = {0, 0}; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #endif