source: trunk/source/processes/electromagnetic/lowenergy/src/G4OrlicLCrossSection.cc@ 1197

Last change on this file since 1197 was 1007, checked in by garnier, 17 years ago

update to geant4.9.2

File size: 10.0 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: G4OrlicLCrossSection.cc,v 1.5 2008/12/18 13:01:30 gunter Exp $
27// GEANT4 tag $Name: geant4-09-02 $
28//
29// Author: Haifa Ben Abdelouahed
30//
31//
32// History:
33// -----------
34// 23 Apr 2008 H. Ben Abdelouahed 1st implementation
35// 28 Apr 2008 MGP Major revision according to a design iteration
36//
37// -------------------------------------------------------------------
38// Class description:
39// Low Energy Electromagnetic Physics, Cross section, proton ionisation, L shell
40// Further documentation available from http://www.ge.infn.it/geant4/lowE
41// -------------------------------------------------------------------
42
43
44#include "globals.hh"
45#include "G4OrlicLCrossSection.hh"
46#include "G4AtomicTransitionManager.hh"
47#include "G4Proton.hh"
48
49
50G4OrlicLCrossSection::G4OrlicLCrossSection()
51{ }
52
53G4OrlicLCrossSection::~G4OrlicLCrossSection()
54{ }
55
56//this L-CrossSection calculation method is done according to
57//I.ORLIC, C.H.SOW and S.M.TANG,International Journal of PIXE.Vol.4(1997) 217-230
58
59
60//*****************************************************************************************************************************************
61
62G4double G4OrlicLCrossSection::CalculateL1CrossSection(G4int zTarget, G4double energyIncident)
63
64{
65
66 G4AtomicTransitionManager* transitionManager = G4AtomicTransitionManager::Instance();
67
68 G4double massIncident;
69
70 G4Proton* aProtone = G4Proton::Proton();
71
72 massIncident = aProtone->GetPDGMass();
73
74 G4double l1BindingEnergy = (transitionManager->Shell(zTarget,1)->BindingEnergy())/keV;
75
76 G4double lamda = massIncident/electron_mass_c2;
77
78 G4double normalizedEnergy = (energyIncident/keV)/(lamda*l1BindingEnergy);
79
80 G4double x = std::log(normalizedEnergy);
81
82 G4double a0 = 0.;
83 G4double a1 = 0.;
84 G4double a2 = 0.;
85 G4double a3 = 0.;
86 G4double a4 = 0.;
87 G4double a5 = 0.;
88 G4double a6 = 0.;
89 G4double a7 = 0.;
90 G4double a8 = 0.;
91 G4double a9 = 0.;
92
93
94 if ( zTarget>=14 && zTarget<=40)
95 {
96 a0=12.5081;
97 a1=0.2177;
98 a2=-0.3758;
99 a3=0.0096;
100 a4=0.0073;
101 a5=0.0022;
102 a6=0.;
103 a7=0.;
104 a8=0.;
105 a9=0.;
106 }
107 else
108 {
109 if ( zTarget>=41 && zTarget<=50 )
110 {
111 a0=11.274881;
112 a1=-0.187401;
113 a2=-0.943341;
114 a3=-1.47817;
115 a4=-1.282343;
116 a5=-0.386544;
117 a6=-0.037932;
118 a7=0.;
119 a8=0.;
120 a9=0.;
121 }
122
123 else
124 {
125 if ( zTarget>=51 && zTarget<=60 )
126 {
127 a0=11.242637;
128 a1=-0.162515;
129 a2=1.035774;
130 a3=3.970908;
131 a4=3.968233;
132 a5=1.655714;
133 a6=0.058885;
134 a7=-0.155743;
135 a8=-0.042228;
136 a9=-0.003371;
137 }
138
139 else
140 {
141 if ( zTarget>=61 && zTarget<=70 )
142 {
143 a0=6.476722;
144 a1=-25.804787;
145 a2=-54.061629;
146 a3=-56.684589;
147 a4=-33.223367;
148 a5=-11.034979;
149 a6=-2.042851;
150 a7=-0.194075;
151 a8=-0.007252;
152 a9=0.;
153 }
154 else
155 {
156 if ( zTarget>=71 && zTarget<=80 )
157 {
158 a0=12.776794;
159 a1=6.562907;
160 a2=10.158703;
161 a3=7.432592;
162 a4=2.332036;
163 a5=0.317946;
164 a6=0.014479;
165 a7=0.;
166 a8=0.;
167 a9=0.;
168 }
169 else
170 {
171 if ( zTarget>=81 && zTarget<=92 )
172 {
173 a0=28.243087;
174 a1=50.199585;
175 a2=58.281684;
176 a3=34.130538;
177 a4=10.268531;
178 a5=1.525302;
179 a6=0.08835;
180 a7=0.;
181 a8=0.;
182 a9=0.;
183 }
184 else
185 {
186 G4cout << "ERREUR: L1 Cross-Section exist only for ZTarget between 14 and 92!!! " << G4endl;
187
188 }
189 }
190 }
191 }
192 }
193 }
194
195
196G4double analyticalFunction = a0 + (a1*x)+(a2*x*x)+(a3*std::pow(x,3))+(a4*std::pow(x,4))+(a5*std::pow(x,5))+(a6*std::pow(x,6))+
197 (a7*std::pow(x,7))+(a8*std::pow(x,8))+(a9*std::pow(x,9));
198
199
200
201 G4double L1crossSection = std::exp(analyticalFunction)/(l1BindingEnergy*l1BindingEnergy);
202
203 return L1crossSection;
204}
205
206//*****************************************************************************************************************************************
207
208
209G4double G4OrlicLCrossSection::CalculateL2CrossSection(G4int zTarget, G4double energyIncident)
210
211{
212
213 G4AtomicTransitionManager* transitionManager = G4AtomicTransitionManager::Instance();
214
215 G4double massIncident;
216
217
218 G4Proton* aProtone = G4Proton::Proton();
219
220 massIncident = aProtone->GetPDGMass();
221
222 G4double L2crossSection;
223
224 if (zTarget<41)
225 {
226 L2crossSection =0.;
227 }
228 else
229 {
230
231 G4double l2BindingEnergy = (transitionManager->Shell(zTarget,2)->BindingEnergy())/keV;
232
233 G4double lamda = massIncident/electron_mass_c2;
234
235 G4double normalizedEnergy = (energyIncident/keV)/(lamda*l2BindingEnergy);
236
237 G4double x = std::log(normalizedEnergy);
238
239 G4double a0 = 0.;
240 G4double a1 = 0.;
241 G4double a2 = 0.;
242 G4double a3 = 0.;
243 G4double a4 = 0.;
244 G4double a5 = 0.;
245
246 if ( zTarget>=41 && zTarget<=50 )
247 {
248 a0=11.194798;
249 a1=0.178807;
250 a2=-0.449865;
251 a3=-0.063528;
252 a4=-0.015364;
253 a5=0.;
254 }
255
256 else
257 {
258 if ( zTarget>=51 && zTarget<=60 )
259 {
260 a0=11.241409;
261 a1=0.149635;
262 a2=-0.633269;
263 a3=-0.17834;
264 a4=-0.034743;
265 a5=0.006474;
266
267 }
268
269 else
270 {
271 if ( zTarget>=61 && zTarget<=70 )
272 {
273 a0=11.247424;
274 a1=0.203051;
275 a2=-0.219083;
276 a3=0.164514;
277 a4=0.058692;
278 a5=0.007866;
279 }
280 else
281 {
282 if ( zTarget>=71 && zTarget<=80 )
283 {
284 a0=11.229924;
285 a1=-0.087241;
286 a2=-0.753908;
287 a3=-0.181546;
288 a4=-0.030406;
289 a5=0.;
290 }
291 else
292 {
293 if ( zTarget>=81 && zTarget<=92 )
294 {
295 a0=11.586671;
296 a1=0.730838;
297 a2=-0.056713;
298 a3=0.053262;
299 a4=-0.003672;
300 a5=0.;
301 }
302 else
303 {
304 G4cout << "ERREUR: L2 Cross-Section exist only for ZTarget between 14 and 92!!! " << G4endl;
305
306 }
307 }
308 }
309 }
310 }
311
312
313 G4double analyticalFunction = a0 + (a1*x)+(a2*x*x)+(a3*std::pow(x,3))+(a4*std::pow(x,4))+(a5*std::pow(x,5));
314
315
316 L2crossSection = std::exp(analyticalFunction)/(l2BindingEnergy*l2BindingEnergy);
317
318 }
319
320 return L2crossSection;
321}
322
323//*****************************************************************************************************************************************
324
325
326G4double G4OrlicLCrossSection::CalculateL3CrossSection(G4int zTarget, G4double energyIncident)
327
328{
329
330 G4AtomicTransitionManager* transitionManager = G4AtomicTransitionManager::Instance();
331
332 G4double massIncident;
333
334
335 G4Proton* aProtone = G4Proton::Proton();
336
337 massIncident = aProtone->GetPDGMass();
338
339
340 G4double L3crossSection;
341
342 if (zTarget<41)
343 {
344 L3crossSection =0.;
345 }
346 else
347 {
348
349 G4double l3BindingEnergy = (transitionManager->Shell(zTarget,3)->BindingEnergy())/keV;
350
351
352 G4double lamda = massIncident/electron_mass_c2;
353
354 G4double normalizedEnergy = (energyIncident/keV)/(lamda*l3BindingEnergy);
355
356 G4double x = std::log(normalizedEnergy);
357
358
359 G4double a0 = 0.;
360 G4double a1 = 0.;
361 G4double a2 = 0.;
362 G4double a3 = 0.;
363 G4double a4 = 0.;
364
365 if ( zTarget>=41 && zTarget<=50 )
366 {
367 a0=11.91837;
368 a1=0.03064;
369 a2=-0.657644;
370 a3=-0.14532;
371 a4=-0.026059;
372 }
373
374 else
375 {
376 if ( zTarget>=51 && zTarget<=60 )
377 {
378 a0=11.909485;
379 a1=0.15918;
380 a2=-0.588004;
381 a3=-0.159466;
382 a4=-0.033184;
383 }
384
385 else
386 {
387 if ( zTarget>=61 && zTarget<=70 )
388 {
389 a0=11.878472;
390 a1=-0.137007;
391 a2=-0.959475;
392 a3=-0.316505;
393 a4=-0.054154;
394 }
395 else
396 {
397 if ( zTarget>=71 && zTarget<=80 )
398 {
399 a0=11.802538;
400 a1=-0.371796;
401 a2=-1.052238;
402 a3=-0.28766;
403 a4=-0.042608;
404 }
405 else
406 {
407 if ( zTarget>=81 && zTarget<=92 )
408 {
409 a0=11.423712;
410 a1=-1.428823;
411 a2=-1.946979;
412 a3=-0.585198;
413 a4=-0.076467;
414 }
415 else
416 {
417 G4cout << "ERREUR: L3 Cross-Section exist only for ZTarget between 14 and 92!!! " << G4endl;
418
419 }
420 }
421 }
422 }
423 }
424
425
426 G4double analyticalFunction = a0 + (a1*x)+(a2*x*x)+(a3*std::pow(x,3))+(a4*std::pow(x,4));
427
428
429 L3crossSection = std::exp(analyticalFunction)/(l3BindingEnergy*l3BindingEnergy);
430
431 }
432
433 return L3crossSection;
434}
Note: See TracBrowser for help on using the repository browser.