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

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

nvx fichiers dans CVS

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