Geant4-11
Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
G4AtimaFluctuations Class Reference

#include <G4AtimaFluctuations.hh>

Inheritance diagram for G4AtimaFluctuations:
G4VEmFluctuationModel

Public Member Functions

G4double Dispersion (const G4Material *, const G4DynamicParticle *, const G4double tcut, const G4double tmax, const G4double length) override
 
 G4AtimaFluctuations (const G4AtimaFluctuations &)=delete
 
 G4AtimaFluctuations (const G4String &nam="IonFlucAtima")
 
const G4StringGetName () const
 
void InitialiseMe (const G4ParticleDefinition *) override
 
G4AtimaFluctuationsoperator= (const G4AtimaFluctuations &right)=delete
 
G4double SampleFluctuations (const G4MaterialCutsCouple *, const G4DynamicParticle *, const G4double tcut, const G4double tmax, const G4double length, const G4double meanLoss) override
 
void SetParticleAndCharge (const G4ParticleDefinition *, G4double q2) override
 
 ~G4AtimaFluctuations () override
 

Private Member Functions

G4double EnergyTable_interpolate (const G4double *table, G4double xval, const G4double *y)
 

Private Attributes

G4double atomic_mass_unit
 
G4double beta2
 
G4double charge
 
G4double chargeSquare
 
G4double dedx_constant
 
G4double domega2dx_constant
 
G4double effChargeSquare
 
G4double electron_mass
 
G4double fine_structure
 
G4LossTableManagerfManager
 
G4Powg4calc
 
G4double kineticEnergy
 
G4double minLoss
 
G4double MLN10
 
const G4String name
 
const G4ParticleDefinitionparticle
 
G4double particleMass
 

Static Private Attributes

static const G4double element_atomic_weights [110]
 
static const G4double ls_X_coefficients_a [110][200]
 
static const G4double ls_X_coefficients_ahi [110][200]
 
static G4double stepE = 0.0
 
static G4double tableE [200] = {0.0}
 

Detailed Description

Definition at line 58 of file G4AtimaFluctuations.hh.

Constructor & Destructor Documentation

◆ G4AtimaFluctuations() [1/2]

G4AtimaFluctuations::G4AtimaFluctuations ( const G4String nam = "IonFlucAtima")
explicit

Definition at line 74 of file G4AtimaFluctuations.cc.

76 particle(nullptr),
78 charge(1.0),
79 chargeSquare(1.0),
80 effChargeSquare(1.0),
81 minLoss(0.001*CLHEP::eV)
82{
84 kineticEnergy = 0.0;
85 beta2 = 0.0;
86 MLN10 = 2.30258509299;
87 atomic_mass_unit = 931.4940954; // MeV/c^2
88 dedx_constant = 0.3070749187; //4*pi*Na*me*c^2*r_e^2 //MeV cm^2
89 electron_mass = 0.510998928; // MeV/c^2
90 fine_structure = 1.0/137.035999139;
91 domega2dx_constant = dedx_constant*electron_mass; //4*pi*Na*me*c^2*r_e^2 //MeV^2 cm^2
92 if(tableE[0] == 0.0) {
93 G4double logmin = 0.;
94 G4double logmax = 5.;
95 stepE = (logmax-logmin)/(G4double)(199);
96 for(G4int i=0; i<200; ++i){
97 tableE[i] = G4Exp(MLN10*(logmin + ((G4double)i)*stepE));
98 }
99 }
100}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
const G4ParticleDefinition * particle
static G4double tableE[200]
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
G4VEmFluctuationModel(const G4String &nam)
static constexpr double proton_mass_c2
static constexpr double eV

References atomic_mass_unit, beta2, dedx_constant, domega2dx_constant, electron_mass, fine_structure, g4calc, G4Exp(), G4Pow::GetInstance(), kineticEnergy, MLN10, stepE, and tableE.

◆ ~G4AtimaFluctuations()

G4AtimaFluctuations::~G4AtimaFluctuations ( )
override

Definition at line 104 of file G4AtimaFluctuations.cc.

105{}

◆ G4AtimaFluctuations() [2/2]

G4AtimaFluctuations::G4AtimaFluctuations ( const G4AtimaFluctuations )
delete

Member Function Documentation

◆ Dispersion()

G4double G4AtimaFluctuations::Dispersion ( const G4Material mat,
const G4DynamicParticle dp,
const G4double  tcut,
const G4double  tmax,
const G4double  length 
)
overridevirtual

Implements G4VEmFluctuationModel.

Definition at line 146 of file G4AtimaFluctuations.cc.

150{
152 const G4ParticleDefinition* p = dp->GetDefinition();
153 if(particle != p) { InitialiseMe(p); }
154
156 G4double zp = p->GetPDGCharge();
157 G4double ep = kineticEnergy/ap;// ep in MeV/u
158 G4double zt = mat->GetIonisation()->GetZeffective();
160
161 G4int z = G4lrint(zp);
162 if(z > 109) { z = 109; }
163
164 G4double gamma=1.0 + ep/atomic_mass_unit;
165 beta2=1.0-1.0/(gamma*gamma);
166 G4double beta = std::sqrt(beta2);
167 //z_eff_Pierce_Blann(Z, beta);
168 G4double zp_eff = zp*(1.0-G4Exp(-0.95*137.035999139*beta/g4calc->Z23(z)));
169 //
170 G4double f = domega2dx_constant*zp_eff*zp_eff*zt/at;
171 //
172 G4double cor =
173 24.89 * g4calc->powA(zt,1.2324)/(electron_mass*1e6 * beta2)*
174 G4Log( 2.0*electron_mass*1e6*beta2/(33.05*g4calc->powA(zt,1.6364)));
175 cor = std::max(cor, 0.0 );
176
177 //Lindhard corrections
178 if(ep<tableE[0])ep = tableE[0];
180
183 G4double dif = v4 - v3;
184 G4double X = v3+(dif*da/0.05);
185 X *= gamma*gamma;
186 //
187 G4double sse = 0.;
188 if(ep<30.0){
189 //Energy straggling Firsov
190 G4double factor = 4.8184e-3*g4calc->powA(zp+zt,8.0/3.0)/at;
191 sse = std::min(f*(X+cor), factor*beta2/fine_structure/fine_structure);
192 }else{
193 // sse = f*(X+cor);
194 sse = f*X;//09/10/2018
195 }
196 //
197 return sse*length/(cm)*mat->GetDensity()/(g/cm3);
198}
static const G4double e6[46]
G4double G4Log(G4double x)
Definition: G4Log.hh:226
static constexpr double cm3
Definition: G4SIunits.hh:101
static constexpr double g
Definition: G4SIunits.hh:168
static constexpr double cm
Definition: G4SIunits.hh:99
static const G4double ls_X_coefficients_ahi[110][200]
void InitialiseMe(const G4ParticleDefinition *) override
static const G4double element_atomic_weights[110]
static const G4double ls_X_coefficients_a[110][200]
G4double EnergyTable_interpolate(const G4double *table, G4double xval, const G4double *y)
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
G4double GetZeffective() const
G4double GetDensity() const
Definition: G4Material.hh:176
G4IonisParamMat * GetIonisation() const
Definition: G4Material.hh:222
static G4NistManager * Instance()
G4double GetAtomicMassAmu(const G4String &symb) const
G4double GetPDGCharge() const
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:230
G4double Z23(G4int Z) const
Definition: G4Pow.hh:125
T max(const T t1, const T t2)
brief Return the largest of the two arguments
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
int G4lrint(double ad)
Definition: templates.hh:134

References G4InuclParticleNames::ap, atomic_mass_unit, anonymous_namespace{G4PionRadiativeDecayChannel.cc}::beta, beta2, cm, cm3, domega2dx_constant, e6, electron_mass, element_atomic_weights, EnergyTable_interpolate(), fine_structure, g, g4calc, G4Exp(), G4Log(), G4lrint(), G4NistManager::GetAtomicMassAmu(), G4DynamicParticle::GetDefinition(), G4Material::GetDensity(), G4Material::GetIonisation(), G4DynamicParticle::GetKineticEnergy(), G4ParticleDefinition::GetPDGCharge(), G4ParticleDefinition::GetPDGMass(), G4IonisParamMat::GetZeffective(), InitialiseMe(), G4NistManager::Instance(), kineticEnergy, ls_X_coefficients_a, ls_X_coefficients_ahi, G4INCL::Math::max(), G4INCL::Math::min(), particle, G4Pow::powA(), tableE, and G4Pow::Z23().

Referenced by SampleFluctuations().

◆ EnergyTable_interpolate()

G4double G4AtimaFluctuations::EnergyTable_interpolate ( const G4double table,
G4double  xval,
const G4double y 
)
private

Definition at line 216 of file G4AtimaFluctuations.cc.

216 {
217 G4double r;
218 G4int num=200;
219 G4double lxval = G4Log(xval)/MLN10;
220 if(xval<table[0] || xval>table[num-1])return 0.0;
221 if(xval==table[num-1])return y[num-1];
222 G4int i = (G4int)(lxval/stepE);
223 i = std::min(std::max(i, 0), num-2);
224 G4double linstep = table[i+1] - table[i];
225 G4double x = 1.0 - ((xval - table[i])/linstep);
226 r = (x*y[i]) + ((1-x)*y[i+1]);
227 return r;
228}

References G4Log(), G4INCL::Math::max(), G4INCL::Math::min(), MLN10, and stepE.

Referenced by Dispersion().

◆ GetName()

const G4String & G4VEmFluctuationModel::GetName ( ) const
inlineinherited

Definition at line 121 of file G4VEmFluctuationModel.hh.

122{
123 return name;
124}

References G4VEmFluctuationModel::name.

Referenced by G4LossTableManager::Register(), and G4EmConfigurator::SetModelForRegion().

◆ InitialiseMe()

void G4AtimaFluctuations::InitialiseMe ( const G4ParticleDefinition part)
overridevirtual

Reimplemented from G4VEmFluctuationModel.

Definition at line 109 of file G4AtimaFluctuations.cc.

110{
111 particle = part;
112 particleMass = part->GetPDGMass();
113 charge = part->GetPDGCharge()/eplus;
116}
static constexpr double eplus
Definition: G4SIunits.hh:184

References charge, chargeSquare, effChargeSquare, eplus, G4ParticleDefinition::GetPDGCharge(), G4ParticleDefinition::GetPDGMass(), particle, and particleMass.

Referenced by Dispersion().

◆ operator=()

G4AtimaFluctuations & G4AtimaFluctuations::operator= ( const G4AtimaFluctuations right)
delete

◆ SampleFluctuations()

G4double G4AtimaFluctuations::SampleFluctuations ( const G4MaterialCutsCouple couple,
const G4DynamicParticle dp,
const G4double  tcut,
const G4double  tmax,
const G4double  length,
const G4double  meanLoss 
)
overridevirtual

Implements G4VEmFluctuationModel.

Definition at line 121 of file G4AtimaFluctuations.cc.

127{
128 // G4cout << "### meanLoss= " << meanLoss << G4endl;
129 if(meanLoss <= minLoss) return meanLoss;
130
131 // G4cout << "G4AtimaFluctuations::SampleFluctuations E(MeV)= "
132 // << dp->GetKineticEnergy()
133 // << " Elim(MeV)= " << parameter*charge*particleMass
134 // << " " << parameter << " " << charge << " " << particleMass << G4endl;
135
136 const G4Material* material = couple->GetMaterial();
137 G4double siga = Dispersion(material,dp,tcut,tmax,length);
138
139 CLHEP::HepRandomEngine* rndmEngine = G4Random::getTheEngine();
140 //G4cout << "meanLoss= " << meanLoss << " loss= " << siga << G4endl;
141 return G4RandGauss::shoot(rndmEngine,meanLoss,std::sqrt(siga));
142}
G4double Dispersion(const G4Material *, const G4DynamicParticle *, const G4double tcut, const G4double tmax, const G4double length) override
const G4Material * GetMaterial() const
ThreeVector shoot(const G4int Ap, const G4int Af)
string material
Definition: eplot.py:19

References Dispersion(), G4MaterialCutsCouple::GetMaterial(), eplot::material, minLoss, and G4INCL::DeJongSpin::shoot().

◆ SetParticleAndCharge()

void G4AtimaFluctuations::SetParticleAndCharge ( const G4ParticleDefinition part,
G4double  q2 
)
overridevirtual

Reimplemented from G4VEmFluctuationModel.

Definition at line 202 of file G4AtimaFluctuations.cc.

204{
205 if(part != particle) {
206 particle = part;
207 particleMass = part->GetPDGMass();
208 charge = part->GetPDGCharge()/eplus;
210 }
211 effChargeSquare = q2;
212}

References charge, chargeSquare, effChargeSquare, eplus, G4ParticleDefinition::GetPDGCharge(), G4ParticleDefinition::GetPDGMass(), particle, and particleMass.

Field Documentation

◆ atomic_mass_unit

G4double G4AtimaFluctuations::atomic_mass_unit
private

Definition at line 107 of file G4AtimaFluctuations.hh.

Referenced by Dispersion(), and G4AtimaFluctuations().

◆ beta2

G4double G4AtimaFluctuations::beta2
private

Definition at line 123 of file G4AtimaFluctuations.hh.

Referenced by Dispersion(), and G4AtimaFluctuations().

◆ charge

G4double G4AtimaFluctuations::charge
private

Definition at line 102 of file G4AtimaFluctuations.hh.

Referenced by InitialiseMe(), and SetParticleAndCharge().

◆ chargeSquare

G4double G4AtimaFluctuations::chargeSquare
private

Definition at line 103 of file G4AtimaFluctuations.hh.

Referenced by InitialiseMe(), and SetParticleAndCharge().

◆ dedx_constant

G4double G4AtimaFluctuations::dedx_constant
private

Definition at line 108 of file G4AtimaFluctuations.hh.

Referenced by G4AtimaFluctuations().

◆ domega2dx_constant

G4double G4AtimaFluctuations::domega2dx_constant
private

Definition at line 111 of file G4AtimaFluctuations.hh.

Referenced by Dispersion(), and G4AtimaFluctuations().

◆ effChargeSquare

G4double G4AtimaFluctuations::effChargeSquare
private

Definition at line 104 of file G4AtimaFluctuations.hh.

Referenced by InitialiseMe(), and SetParticleAndCharge().

◆ electron_mass

G4double G4AtimaFluctuations::electron_mass
private

Definition at line 109 of file G4AtimaFluctuations.hh.

Referenced by Dispersion(), and G4AtimaFluctuations().

◆ element_atomic_weights

const G4double G4AtimaFluctuations::element_atomic_weights
staticprivate

Definition at line 117 of file G4AtimaFluctuations.hh.

Referenced by Dispersion().

◆ fine_structure

G4double G4AtimaFluctuations::fine_structure
private

Definition at line 110 of file G4AtimaFluctuations.hh.

Referenced by Dispersion(), and G4AtimaFluctuations().

◆ fManager

G4LossTableManager* G4VEmFluctuationModel::fManager
privateinherited

◆ g4calc

G4Pow* G4AtimaFluctuations::g4calc
private

Definition at line 99 of file G4AtimaFluctuations.hh.

Referenced by Dispersion(), and G4AtimaFluctuations().

◆ kineticEnergy

G4double G4AtimaFluctuations::kineticEnergy
private

Definition at line 122 of file G4AtimaFluctuations.hh.

Referenced by Dispersion(), and G4AtimaFluctuations().

◆ ls_X_coefficients_a

const G4double G4AtimaFluctuations::ls_X_coefficients_a
staticprivate

Definition at line 115 of file G4AtimaFluctuations.hh.

Referenced by Dispersion().

◆ ls_X_coefficients_ahi

const G4double G4AtimaFluctuations::ls_X_coefficients_ahi
staticprivate

Definition at line 116 of file G4AtimaFluctuations.hh.

Referenced by Dispersion().

◆ minLoss

G4double G4AtimaFluctuations::minLoss
private

Definition at line 120 of file G4AtimaFluctuations.hh.

Referenced by SampleFluctuations().

◆ MLN10

G4double G4AtimaFluctuations::MLN10
private

Definition at line 106 of file G4AtimaFluctuations.hh.

Referenced by EnergyTable_interpolate(), and G4AtimaFluctuations().

◆ name

const G4String G4VEmFluctuationModel::name
privateinherited

◆ particle

const G4ParticleDefinition* G4AtimaFluctuations::particle
private

◆ particleMass

G4double G4AtimaFluctuations::particleMass
private

Definition at line 101 of file G4AtimaFluctuations.hh.

Referenced by InitialiseMe(), and SetParticleAndCharge().

◆ stepE

G4double G4AtimaFluctuations::stepE = 0.0
staticprivate

Definition at line 113 of file G4AtimaFluctuations.hh.

Referenced by EnergyTable_interpolate(), and G4AtimaFluctuations().

◆ tableE

G4double G4AtimaFluctuations::tableE = {0.0}
staticprivate

Definition at line 114 of file G4AtimaFluctuations.hh.

Referenced by Dispersion(), and G4AtimaFluctuations().


The documentation for this class was generated from the following files: