Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4PaulKxsModel.cc
Go to the documentation of this file.
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 //
27 // History:
28 // -----------
29 // 21 Apr 2008 H. Abdelohauwed - 1st implementation
30 // 29 Apr 2009 ALF Major Design Revision
31 // 22 Oct 2011 ALF Warning removals and Z checks fix for alphas
32 // 29 Oct 2011 ALF Changed name to G4PAulKxsModel
33 //
34 // -------------------------------------------------------------------
35 
36 // Class description:
37 // Low Energy Electromagnetic Physics, Cross section, p ionisation, K shell
38 // Further documentation available from http://www.ge.infn.it/geant4/lowE
39 
40 // -------------------------------------------------------------------
41 
42 #include <fstream>
43 #include <iomanip>
44 
45 #include "G4PaulKxsModel.hh"
46 
47 #include "globals.hh"
48 #include "G4SystemOfUnits.hh"
49 #include "G4ios.hh"
50 #include "G4EMDataSet.hh"
51 #include "G4LogLogInterpolation.hh"
52 #include "G4Proton.hh"
53 #include "G4Alpha.hh"
54 
55 
57 {
58 
59 
60  interpolation = new G4LogLogInterpolation();
61 
62 
63  for (G4int i=4; i<93; i++) {
64  protonDataSetMap[i] = new G4EMDataSet(i,interpolation);
65  protonDataSetMap[i]->LoadData("pixe/kpcsPaul/kcs-");
66  }
67  for (G4int i=6; i<93; i++) {
68  alphaDataSetMap[i] = new G4EMDataSet(i,interpolation);
69  alphaDataSetMap[i]->LoadData("pixe/kacsPaul/kacs-");
70  }
71 
72 
73 
74 
75 }
76 
78 {
79 
80  protonDataSetMap.clear();
81  alphaDataSetMap.clear();
82  delete interpolation;
83 
84 }
85 
87 {
88 
89  G4Proton* aProtone = G4Proton::Proton();
90  G4Alpha* aAlpha = G4Alpha::Alpha();
91 
92  G4double sigma = 0;
93 
94  if (massIncident == aProtone->GetPDGMass() && zTarget < 93 && zTarget > 3)
95  {
96 
97  // G4EMDataSet* currentDataset = protonDataSetMap[zTarget];
98  // currentDataset->GetEnergies
99 
100  if (energyIncident > protonDataSetMap[zTarget]->GetEnergies(0).back() ||
101  energyIncident < protonDataSetMap[zTarget]->GetEnergies(0).front() )
102  {sigma = 0;}
103  else {
104  sigma = protonDataSetMap[zTarget]->FindValue(energyIncident/MeV);
105  }
106  }
107  else
108  {
109  if (massIncident == aAlpha->GetPDGMass() && zTarget < 93 && zTarget > 5)
110  {
111  if (energyIncident > alphaDataSetMap[zTarget]->GetEnergies(0).back() ||
112  energyIncident < alphaDataSetMap[zTarget]->GetEnergies(0).front() )
113  {sigma = 0;}
114  else {
115  sigma = alphaDataSetMap[zTarget]->FindValue(energyIncident/MeV);
116  }
117  }
118  else
119  {
120 
121 // G4Exception("G4PaulKxsModel::CalculateKCrossSection()","de0004",JustWarning, "Energy deposited locally");
122  sigma = 0.;
123 
124  }
125  }
126 
127 
128  // sigma is in internal units (mm^2)
129  return sigma;
130 }
131 
132 
133 
134 
135 
136 
137 
138 
139 
140 
141 
142 
G4double CalculateKCrossSection(G4int zTarget, G4double massIncident, G4double energyIncident)
int G4int
Definition: G4Types.hh:78
virtual ~G4PaulKxsModel()
static G4Proton * Proton()
Definition: G4Proton.cc:93
G4double GetPDGMass() const
static constexpr double MeV
Definition: G4SIunits.hh:214
static G4Alpha * Alpha()
Definition: G4Alpha.cc:89
double G4double
Definition: G4Types.hh:76