source: trunk/source/processes/electromagnetic/muons/include/G4EnergyLossForExtrapolator.hh@ 900

Last change on this file since 900 was 819, checked in by garnier, 17 years ago

import all except CVS

File size: 10.2 KB
Line 
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: G4EnergyLossForExtrapolator.hh,v 1.9 2007/07/28 13:44:25 vnivanch Exp $
27// GEANT4 tag $Name: $
28//
29//---------------------------------------------------------------------------
30//
31// ClassName: G4EnergyLossForExtrapolator
32//
33// Description: This class provide calculation of energy loss, fluctuation,
34// and msc angle
35//
36// Author: 09.12.04 V.Ivanchenko
37//
38// Modification:
39// 08-04-05 Rename Propogator -> Extrapolator
40// 16-03-06 Add muon tables
41// 21-03-06 Add verbosity defined in the constructor and Initialisation
42// start only when first public method is called (V.Ivanchenko)
43// 03-05-06 Remove unused pointer G4Material* from number of methods (VI)
44// 28-07-07 Add maxEnergyTransfer for computation of energy loss (VI)
45//
46//----------------------------------------------------------------------------
47//
48
49//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
50
51#ifndef G4EnergyLossForExtrapolator_h
52#define G4EnergyLossForExtrapolator_h 1
53
54
55#include "globals.hh"
56#include "G4PhysicsTable.hh"
57#include <vector>
58
59class G4ParticleDefinition;
60class G4Material;
61class G4MaterialCutsCouple;
62class G4ProductionCuts;
63
64//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
65
66class G4EnergyLossForExtrapolator
67{
68public:
69 G4EnergyLossForExtrapolator(G4int verb = 1);
70
71 ~G4EnergyLossForExtrapolator();
72
73 G4double ComputeDEDX(G4double kinEnergy, const G4ParticleDefinition*);
74
75 G4double ComputeRange(G4double kinEnergy, const G4ParticleDefinition*);
76
77 G4double ComputeEnergy(G4double range, const G4ParticleDefinition*);
78
79 G4double EnergyAfterStep(G4double kinEnergy, G4double step,
80 const G4Material*, const G4ParticleDefinition*);
81
82 G4double EnergyBeforeStep(G4double kinEnergy, G4double step,
83 const G4Material*, const G4ParticleDefinition*);
84
85 inline G4double EnergyAfterStep(G4double kinEnergy, G4double step,
86 const G4Material*, const G4String& particleName);
87
88 inline G4double EnergyBeforeStep(G4double kinEnergy, G4double step,
89 const G4Material*, const G4String& particleName);
90
91 inline G4double AverageScatteringAngle(G4double kinEnergy, G4double step,
92 const G4Material*, const G4ParticleDefinition* part);
93
94 inline G4double AverageScatteringAngle(G4double kinEnergy, G4double step,
95 const G4Material*, const G4String& particleName);
96
97 inline G4double EnergyDispersion(G4double kinEnergy, G4double step,
98 const G4Material*, const G4ParticleDefinition*);
99
100 inline G4double EnergyDispersion(G4double kinEnergy, G4double step,
101 const G4Material*, const G4String& particleName);
102
103 inline void SetVerbose(G4int val);
104
105 inline void SetMinKinEnergy(G4double);
106
107 inline void SetMaxKinEnergy(G4double);
108
109 inline void SetMaxEnergyTransfer(G4double);
110
111private:
112
113 void Initialisation();
114
115 G4PhysicsTable* PrepareTable();
116
117 const G4ParticleDefinition* FindParticle(const G4String& name);
118
119 void ComputeElectronDEDX(const G4ParticleDefinition* part, G4PhysicsTable* table);
120
121 void ComputeMuonDEDX(const G4ParticleDefinition* part, G4PhysicsTable* table);
122
123 void ComputeProtonDEDX(const G4ParticleDefinition* part, G4PhysicsTable* table);
124
125 G4double ComputeTrueStep(const G4Material*, const G4ParticleDefinition* part,
126 G4double kinEnergy, G4double stepLength);
127
128 inline G4double ComputeValue(G4double x, const G4PhysicsTable* table);
129
130 inline G4double ComputeScatteringAngle(G4double x);
131
132 // hide assignment operator
133 G4EnergyLossForExtrapolator & operator=(const G4EnergyLossForExtrapolator &right);
134 G4EnergyLossForExtrapolator(const G4EnergyLossForExtrapolator&);
135
136 const G4ParticleDefinition* currentParticle;
137 const G4ParticleDefinition* electron;
138 const G4ParticleDefinition* positron;
139 const G4ParticleDefinition* muonPlus;
140 const G4ParticleDefinition* muonMinus;
141 const G4ParticleDefinition* proton;
142
143 G4ProductionCuts* cuts;
144 std::vector<const G4MaterialCutsCouple*> couples;
145
146 G4String currentParticleName;
147
148 G4PhysicsTable* dedxElectron;
149 G4PhysicsTable* dedxPositron;
150 G4PhysicsTable* dedxMuon;
151 G4PhysicsTable* dedxProton;
152 G4PhysicsTable* rangeElectron;
153 G4PhysicsTable* rangePositron;
154 G4PhysicsTable* rangeMuon;
155 G4PhysicsTable* rangeProton;
156 G4PhysicsTable* invRangeElectron;
157 G4PhysicsTable* invRangePositron;
158 G4PhysicsTable* invRangeMuon;
159 G4PhysicsTable* invRangeProton;
160
161 const G4Material* currentMaterial;
162 G4int index;
163 G4double electronDensity;
164 G4double radLength;
165 G4double mass;
166 G4double charge2;
167 G4double kineticEnergy;
168 G4double gam;
169 G4double bg2;
170 G4double beta2;
171 G4double tmax;
172
173 G4double linLossLimit;
174 G4double emin;
175 G4double emax;
176 G4double maxEnergyTransfer;
177
178 G4int nbins;
179 G4int nmat;
180 G4int verbose;
181 G4bool isInitialised;
182};
183
184//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
185
186inline G4double G4EnergyLossForExtrapolator::EnergyAfterStep(G4double kinEnergy,
187 G4double step,
188 const G4Material* mat,
189 const G4String& name)
190{
191 return EnergyAfterStep(kinEnergy,step,mat,FindParticle(name));
192}
193
194//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
195
196inline G4double G4EnergyLossForExtrapolator::EnergyBeforeStep(G4double kinEnergy,
197 G4double step,
198 const G4Material* mat,
199 const G4String& name)
200{
201 return EnergyBeforeStep(kinEnergy,step,mat,FindParticle(name));
202}
203
204//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
205
206inline G4double G4EnergyLossForExtrapolator::AverageScatteringAngle(G4double kinEnergy,
207 G4double step,
208 const G4Material* mat,
209 const G4String& name)
210{
211 return AverageScatteringAngle(kinEnergy,step,mat,FindParticle(name));
212}
213
214//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
215
216inline G4double G4EnergyLossForExtrapolator::EnergyDispersion(G4double kinEnergy,
217 G4double step,
218 const G4Material* mat,
219 const G4String& name)
220{
221 return EnergyDispersion(kinEnergy,step,mat,FindParticle(name));
222}
223
224//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
225
226inline G4double G4EnergyLossForExtrapolator::AverageScatteringAngle(G4double kinEnergy,
227 G4double stepLength,
228 const G4Material* mat,
229 const G4ParticleDefinition* part)
230{
231 if(!isInitialised) Initialisation();
232 G4double theta = 0.0;
233 if(mat && part && kinEnergy > 0.0) {
234 G4double step = ComputeTrueStep(mat,part,kinEnergy,stepLength);
235 if(step > 0.001*radLength) theta = ComputeScatteringAngle(stepLength);
236 }
237 return theta;
238}
239
240//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
241
242inline G4double G4EnergyLossForExtrapolator::ComputeScatteringAngle(G4double x)
243{
244 G4double t = x/radLength;
245 return 19.23*MeV*std::sqrt(charge2*t)*(1.0 + 0.038*std::log(t))/(beta2*gam*mass);
246}
247
248//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
249
250inline G4double G4EnergyLossForExtrapolator::EnergyDispersion(
251 G4double kinEnergy,
252 G4double stepLength,
253 const G4Material* mat,
254 const G4ParticleDefinition* part)
255{
256 if(!isInitialised) Initialisation();
257 G4double sig2 = 0.0;
258 if(mat && part ) {
259 G4double step = ComputeTrueStep(mat,part,kinEnergy,stepLength);
260 sig2 = (1.0/beta2 - 0.5)* twopi_mc2_rcl2 * tmax*step * electronDensity * charge2;
261 }
262 return sig2;
263}
264
265//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
266
267inline G4double G4EnergyLossForExtrapolator::ComputeValue(G4double x,
268 const G4PhysicsTable* table)
269{
270 G4double res = 0.0;
271 bool b;
272 res = ((*table)[index])->GetValue(x, b);
273 return res;
274}
275
276//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
277
278inline void G4EnergyLossForExtrapolator::SetVerbose(G4int val)
279{
280 verbose = val;
281}
282
283//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
284
285inline void G4EnergyLossForExtrapolator::SetMinKinEnergy(G4double val)
286{
287 emin = val;
288}
289
290//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
291
292inline void G4EnergyLossForExtrapolator::SetMaxKinEnergy(G4double val)
293{
294 emax = val;
295}
296
297//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
298
299inline void G4EnergyLossForExtrapolator::SetMaxEnergyTransfer(G4double val)
300{
301 maxEnergyTransfer = val;
302}
303
304//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
305
306#endif
307
Note: See TracBrowser for help on using the repository browser.