Geant4
9.6.p02
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
geant4_9_6_p02
source
processes
electromagnetic
standard
src
G4hIonisation.cc
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
// $Id$
27
//
28
// -------------------------------------------------------------------
29
//
30
// GEANT4 Class file
31
//
32
//
33
// File name: G4hIonisation
34
//
35
// Author: Laszlo Urban
36
//
37
// Creation date: 30.05.1997
38
//
39
// Modifications:
40
//
41
// corrected by L.Urban on 24/09/97
42
// several bugs corrected by L.Urban on 13/01/98
43
// 07-04-98 remove 'tracking cut' of the ionizing particle, mma
44
// 22-10-98 cleanup L.Urban
45
// 02-02-99 bugs fixed , L.Urban
46
// 29-07-99 correction in BuildLossTable for low energy, L.Urban
47
// 10-02-00 modifications , new e.m. structure, L.Urban
48
// 10-08-00 V.Ivanchenko change BuildLambdaTable, in order to
49
// simulate energy losses of ions; correction to
50
// cross section for particles with spin 1 is inserted as well
51
// 28-05-01 V.Ivanchenko minor changes to provide ANSI -wall compilation
52
// 10-08-01 new methods Store/Retrieve PhysicsTable (mma)
53
// 14-08-01 new function ComputeRestrictedMeandEdx() + 'cleanup' (mma)
54
// 29-08-01 PostStepDoIt: correction for spin 1/2 (instead of 1) (mma)
55
// 17-09-01 migration of Materials to pure STL (mma)
56
// 25-09-01 completion of RetrievePhysicsTable() (mma)
57
// 29-10-01 all static functions no more inlined
58
// 08-11-01 Charge renamed zparticle; added to the dedx
59
// 27-03-02 Bug fix in scaling of lambda table (V.Ivanchenko)
60
// 09-04-02 Update calculation of tables for GenericIons (V.Ivanchenko)
61
// 30-04-02 V.Ivanchenko update to new design
62
// 04-12-02 Add verbose level definition (VI)
63
// 23-12-02 Change interface in order to move to cut per region (V.Ivanchenko)
64
// 26-12-02 Secondary production moved to derived classes (V.Ivanchenko)
65
// 13-02-03 SubCutoff regime is assigned to a region (V.Ivanchenko)
66
// 23-05-03 Define default integral + BohrFluctuations (V.Ivanchenko)
67
// 03-06-03 Fix initialisation problem for STD ionisation (V.Ivanchenko)
68
// 04-08-03 Set integral=false to be default (V.Ivanchenko)
69
// 08-08-03 STD substitute standard (V.Ivanchenko)
70
// 12-11-03 G4EnergyLossSTD -> G4EnergyLossProcess (V.Ivanchenko)
71
// 27-05-04 Set integral to be a default regime (V.Ivanchenko)
72
// 08-11-04 Migration to new interface of Store/Retrieve tables (V.Ivantchenko)
73
// 24-03-05 Optimize internal interfaces (V.Ivantchenko)
74
// 12-08-05 SetStepLimits(0.2, 0.1*mm) (mma)
75
// 10-01-06 SetStepLimits -> SetStepFunction (V.Ivanchenko)
76
// 26-05-06 scale negative particles from pi- and pbar,
77
// positive from pi+ and p (VI)
78
// 14-01-07 use SetEmModel() and SetFluctModel() from G4VEnergyLossProcess (mma)
79
// 12-09-08 Removed CorrectionsAlongStep (VI)
80
// 27-05-10 Added G4ICRU73QOModel for anti-protons (VI)
81
//
82
// -------------------------------------------------------------------
83
//
84
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
85
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
86
87
#include "
G4hIonisation.hh
"
88
#include "
G4PhysicalConstants.hh
"
89
#include "
G4SystemOfUnits.hh
"
90
#include "
G4Electron.hh
"
91
#include "
G4Proton.hh
"
92
#include "
G4AntiProton.hh
"
93
#include "
G4BraggModel.hh
"
94
#include "
G4BetheBlochModel.hh
"
95
#include "
G4IonFluctuations.hh
"
96
#include "
G4UniversalFluctuation.hh
"
97
#include "
G4BohrFluctuations.hh
"
98
#include "
G4UnitsTable.hh
"
99
#include "
G4PionPlus.hh
"
100
#include "
G4PionMinus.hh
"
101
#include "
G4KaonPlus.hh
"
102
#include "
G4KaonMinus.hh
"
103
#include "
G4ICRU73QOModel.hh
"
104
105
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
106
107
using namespace
std;
108
109
G4hIonisation::G4hIonisation
(
const
G4String
&
name
)
110
:
G4VEnergyLossProcess
(name),
111
isInitialised(false)
112
{
113
SetStepFunction
(0.2, 0.1*
mm
);
114
SetProcessSubType
(
fIonisation
);
115
SetSecondaryParticle
(
G4Electron::Electron
());
116
mass = 0.0;
117
ratio = 0.0;
118
eth = 2*
MeV
;
119
}
120
121
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
122
123
G4hIonisation::~G4hIonisation
()
124
{}
125
126
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
127
128
G4bool
G4hIonisation::IsApplicable
(
const
G4ParticleDefinition
&
p
)
129
{
130
return
(p.
GetPDGCharge
() != 0.0 && p.
GetPDGMass
() > 10.0*
MeV
&&
131
!p.
IsShortLived
());
132
}
133
134
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
135
136
G4double
G4hIonisation::MinPrimaryEnergy
(
const
G4ParticleDefinition
*,
137
const
G4Material
*,
138
G4double
cut)
139
{
140
G4double
x
= 0.5*cut/
electron_mass_c2
;
141
G4double
gam
= x*ratio + std::sqrt((1. + x)*(1. + x*ratio*ratio));
142
return
mass*(gam - 1.0);
143
}
144
145
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
146
147
void
G4hIonisation::InitialiseEnergyLossProcess
(
148
const
G4ParticleDefinition
*
part
,
149
const
G4ParticleDefinition
* bpart)
150
{
151
if
(!isInitialised) {
152
153
const
G4ParticleDefinition
* theBaseParticle = 0;
154
G4String
pname
= part->
GetParticleName
();
155
G4double
q = part->
GetPDGCharge
();
156
157
// standard base particles
158
if
(part == bpart || pname ==
"proton"
||
159
pname ==
"anti_proton"
||
160
pname ==
"pi+"
|| pname ==
"pi-"
||
161
pname ==
"kaon+"
|| pname ==
"kaon-"
)
162
{
163
theBaseParticle = 0;
164
}
165
// select base particle
166
else
if
(bpart == 0) {
167
168
if
(part->
GetPDGSpin
() == 0.0) {
169
if
(q > 0.0) { theBaseParticle =
G4KaonPlus::KaonPlus
(); }
170
else
{ theBaseParticle =
G4KaonMinus::KaonMinus
(); }
171
}
else
{
172
if
(q > 0.0) { theBaseParticle =
G4Proton::Proton
(); }
173
else
{ theBaseParticle =
G4AntiProton::AntiProton
(); }
174
}
175
176
// base particle defined by interface
177
}
else
{
178
theBaseParticle = bpart;
179
}
180
SetBaseParticle
(theBaseParticle);
181
182
mass = part->
GetPDGMass
();
183
ratio =
electron_mass_c2
/mass;
184
eth = 2.0*
MeV
*mass/
proton_mass_c2
;
185
186
if
(!
EmModel
(1)) {
187
if
(q > 0.0) {
SetEmModel
(
new
G4BraggModel
(),1); }
188
else
{
SetEmModel
(
new
G4ICRU73QOModel
(),1); }
189
}
190
EmModel
(1)->
SetLowEnergyLimit
(
MinKinEnergy
());
191
192
// model limit defined for protons
193
//eth = (EmModel(1)->HighEnergyLimit())*mass/proton_mass_c2;
194
EmModel
(1)->
SetHighEnergyLimit
(eth);
195
AddEmModel
(1,
EmModel
(1),
new
G4IonFluctuations
());
196
197
if
(!
FluctModel
()) {
SetFluctModel
(
new
G4UniversalFluctuation
()); }
198
199
if
(!
EmModel
(2)) {
SetEmModel
(
new
G4BetheBlochModel
(),2); }
200
EmModel
(2)->
SetLowEnergyLimit
(eth);
201
EmModel
(2)->
SetHighEnergyLimit
(
MaxKinEnergy
());
202
AddEmModel
(2,
EmModel
(2),
FluctModel
());
203
204
isInitialised =
true
;
205
}
206
}
207
208
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
209
210
void
G4hIonisation::PrintInfo
()
211
{}
212
213
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Generated on Sat May 25 2013 14:33:37 for Geant4 by
1.8.4