Geant4-11
G4ecpssrFormFactorMixsModel.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// History:
27// -----------
28// 01 Oct 2011 A.M., S.I. - 1st implementation
29//
30// Class description
31// ----------------
32// Computation of K, L & M shell ECPSSR ionisation cross sections for protons and alphas
33// Based on the work of A. Taborda et al.
34// EXRS2012 proceedings
35// ---------------------------------------------------------------------------------------
36
37#include <fstream>
38#include <iomanip>
39#include "globals.hh"
40#include "G4ios.hh"
41#include "G4SystemOfUnits.hh"
42#include "G4EMDataSet.hh"
43#include "G4LinInterpolation.hh"
44#include "G4Proton.hh"
45#include "G4Alpha.hh"
47
48//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
49
51{
53
54 for (G4int i=29; i<93; i++)
55 {
57 protonM1DataSetMap[i]->LoadData("pixe/ecpssr/proton/m1-i01m001c01-");
58
60 protonM2DataSetMap[i]->LoadData("pixe/ecpssr/proton/m2-i01m001c01-");
61
63 protonM3DataSetMap[i]->LoadData("pixe/ecpssr/proton/m3-i01m001c01-");
64
66 protonM4DataSetMap[i]->LoadData("pixe/ecpssr/proton/m4-i01m001c01-");
67
69 protonM5DataSetMap[i]->LoadData("pixe/ecpssr/proton/m5-i01m001c01-");
70 }
71
77
78 for (G4int i=29; i<93; i++)
79 {
81 alphaM1DataSetMap[i]->LoadData("pixe/ecpssr/alpha/m1-i02m004c02-");
82
84 alphaM2DataSetMap[i]->LoadData("pixe/ecpssr/alpha/m2-i02m004c02-");
85
87 alphaM3DataSetMap[i]->LoadData("pixe/ecpssr/alpha/m3-i02m004c02-");
88
90 alphaM4DataSetMap[i]->LoadData("pixe/ecpssr/alpha/m4-i02m004c02-");
91
93 alphaM5DataSetMap[i]->LoadData("pixe/ecpssr/alpha/m5-i02m004c02-");
94
95 }
96
102}
103
104//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
105
107{
108 protonM1DataSetMap.clear();
109 alphaM1DataSetMap.clear();
110
111 protonM2DataSetMap.clear();
112 alphaM2DataSetMap.clear();
113
114 protonM3DataSetMap.clear();
115 alphaM3DataSetMap.clear();
116
117 protonM4DataSetMap.clear();
118 alphaM4DataSetMap.clear();
119
120 protonM5DataSetMap.clear();
121 alphaM5DataSetMap.clear();
122
123 delete interpolation;
124}
125
126//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
127
129{
130 G4Proton* aProton = G4Proton::Proton();
131 G4Alpha* aAlpha = G4Alpha::Alpha();
132 G4double sigma = 0;
133 G4int mShellIndex = mShellId -1;
134
135 if (energyIncident > 0.1*MeV && energyIncident < 100*MeV && zTarget < 93 && zTarget > 28) {
136
137 if (massIncident == aProton->GetPDGMass())
138 {
139 sigma = protonMiXsVector[mShellIndex][zTarget]->FindValue(energyIncident/MeV);
140 if (sigma !=0 && energyIncident > protonMiXsVector[mShellIndex][zTarget]->GetEnergies(0).back()*MeV) return 0.;
141 }
142 else if (massIncident == aAlpha->GetPDGMass())
143 {
144 sigma = alphaMiXsVector[mShellIndex][zTarget]->FindValue(energyIncident/MeV);
145 if (sigma !=0 && energyIncident > alphaMiXsVector[mShellIndex][zTarget]->GetEnergies(0).back()*MeV) return 0.;
146 }
147 else
148 {
149 sigma = 0.;
150 }
151 }
152
153 // sigma is in internal units: it has been converted from
154 // the input file in barns bt the EmDataset
155 return sigma;
156}
157
158//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
159
161{
162 // mShellId
163 return CalculateMiCrossSection (zTarget, massIncident, energyIncident, 1);
164}
165
166//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
167
169{
170 // mShellId
171 return CalculateMiCrossSection (zTarget, massIncident, energyIncident, 2);
172}
173
174//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
175
177{
178 return CalculateMiCrossSection (zTarget, massIncident, energyIncident, 3);
179}
180
181//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
182
184{
185 return CalculateMiCrossSection (zTarget, massIncident, energyIncident, 4);
186}
187
188//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
189
191{
192 return CalculateMiCrossSection (zTarget, massIncident, energyIncident, 5);
193}
static constexpr double MeV
Definition: G4SIunits.hh:200
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
static G4Alpha * Alpha()
Definition: G4Alpha.cc:88
static G4Proton * Proton()
Definition: G4Proton.cc:92
std::vector< std::map< G4int, G4VEMDataSet * > > alphaMiXsVector
std::map< G4int, G4VEMDataSet * > protonM4DataSetMap
std::map< G4int, G4VEMDataSet * > protonM2DataSetMap
std::vector< std::map< G4int, G4VEMDataSet * > > protonMiXsVector
G4double CalculateM1CrossSection(G4int zTarget, G4double massIncident, G4double energyIncident) override
G4double CalculateM3CrossSection(G4int zTarget, G4double massIncident, G4double energyIncident) override
std::map< G4int, G4VEMDataSet * > alphaM1DataSetMap
std::map< G4int, G4VEMDataSet * > protonM1DataSetMap
std::map< G4int, G4VEMDataSet * > alphaM4DataSetMap
G4double CalculateM4CrossSection(G4int zTarget, G4double massIncident, G4double energyIncident) override
std::map< G4int, G4VEMDataSet * > alphaM5DataSetMap
G4double CalculateM5CrossSection(G4int zTarget, G4double massIncident, G4double energyIncident) override
std::map< G4int, G4VEMDataSet * > protonM5DataSetMap
G4double CalculateMiCrossSection(G4int zTarget, G4double massIncident, G4double energyIncident, G4int mShellId)
std::map< G4int, G4VEMDataSet * > protonM3DataSetMap
std::map< G4int, G4VEMDataSet * > alphaM3DataSetMap
G4double CalculateM2CrossSection(G4int zTarget, G4double massIncident, G4double energyIncident) override
std::map< G4int, G4VEMDataSet * > alphaM2DataSetMap