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

Last change on this file since 1316 was 1229, checked in by garnier, 14 years ago

update geant4.9.3 tag

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.6.2.2 2009/12/11 18:44:44 japost Exp $
27// GEANT4 tag $Name: geant4-09-03 $
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.