source: trunk/source/processes/electromagnetic/lowenergy/src/G4OrlicLiCrossSection.cc@ 1346

Last change on this file since 1346 was 1337, checked in by garnier, 15 years ago

tag geant4.9.4 beta 1 + modifs locales

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