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

Last change on this file since 1252 was 1197, checked in by garnier, 15 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.