Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4ContinuousGainOfEnergy.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26////////////////////////////////////////////////////////////////////////////////
27// Class: G4ContinuousGainOfEnergy
28// Author: L. Desorgher
29// Organisation: SpaceIT GmbH
30//
31// Continuous process acting on adjoint particles to compute the continuous
32// gain of energy of charged particles when they are tracked back.
33////////////////////////////////////////////////////////////////////////////////
34
35#ifndef G4ContinuousGainOfEnergy_h
36#define G4ContinuousGainOfEnergy_h 1
37
38#include "globals.hh"
41
42class G4Material;
46class G4Step;
47class G4Track;
48class G4VEmModel;
50
52{
53 public:
54 explicit G4ContinuousGainOfEnergy(const G4String& name = "EnergyGain",
56
58
59 G4VParticleChange* AlongStepDoIt(const G4Track&, const G4Step&) override;
60
62
64 {
65 fDirectEnergyLossProcess = aProcess;
66 };
67
69
70 void ProcessDescription(std::ostream&) const override;
71 void DumpInfo() const override { ProcessDescription(G4cout); };
72
75 delete;
76
77 protected:
79 G4double previousStepSize,
80 G4double currentMinimumStep,
81 G4double& currentSafety) override;
82
83 private:
84 void DefineMaterial(const G4MaterialCutsCouple* couple);
85 void SetDynamicMassCharge(const G4Track& track, G4double energy);
86
87 const G4Material* fCurrentMaterial = nullptr;
88 const G4MaterialCutsCouple* fCurrentCouple = nullptr;
89
90 G4VEmModel* fCurrentModel = nullptr;
91 G4VEnergyLossProcess* fDirectEnergyLossProcess = nullptr;
92 G4ParticleDefinition* fDirectPartDef = nullptr;
93
94 G4double fCurrentTcut = 0.;
95 G4double fPreStepKinEnergy = 1.;
96 G4double fLinLossLimit = 0.05;
97 G4double fMassRatio = 1.;
98
99 size_t fCurrentCoupleIndex = 9999999;
100
101 G4bool fIsIon = false;
102 G4bool fLossFluctuationFlag = true;
103 G4bool fLossFluctuationArePossible = true;
104};
105
106///////////////////////////////////////////////////////
107inline void G4ContinuousGainOfEnergy::DefineMaterial(
108 const G4MaterialCutsCouple* couple)
109{
110 if(couple != fCurrentCouple)
111 {
112 fCurrentCouple = couple;
113 fCurrentMaterial = couple->GetMaterial();
114 fCurrentCoupleIndex = couple->GetIndex();
115
116 const std::vector<G4double>* aVec =
118 fCurrentTcut = (*aVec)[fCurrentCoupleIndex];
119 }
120}
121
122#endif
G4ProcessType
@ fElectromagnetic
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
G4GLOB_DLL std::ostream G4cout
void SetDirectEnergyLossProcess(G4VEnergyLossProcess *aProcess)
G4ContinuousGainOfEnergy & operator=(const G4ContinuousGainOfEnergy &right)=delete
void SetDirectParticle(G4ParticleDefinition *p)
G4double GetContinuousStepLimit(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double &currentSafety) override
G4VParticleChange * AlongStepDoIt(const G4Track &, const G4Step &) override
void ProcessDescription(std::ostream &) const override
G4ContinuousGainOfEnergy(G4ContinuousGainOfEnergy &)=delete
const G4Material * GetMaterial() const
const std::vector< G4double > * GetEnergyCutsVector(std::size_t pcIdx) const
static G4ProductionCutsTable * GetProductionCutsTable()
Definition: G4Step.hh:62