Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4DNAPTBAugerModel.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// Authors: S. Meylan and C. Villagrasa (IRSN, France)
27// Models come from
28// M. Bug et al, Rad. Phys and Chem. 130, 459-479 (2017)
29//
30
31#include "G4DNAPTBAugerModel.hh"
33#include "G4SystemOfUnits.hh"
34#include "Randomize.hh"
35#include "G4Electron.hh"
36
37#include "G4Material.hh"
38
39using namespace std;
40
41G4DNAPTBAugerModel::G4DNAPTBAugerModel(const G4String& modelAugerName): modelName(modelAugerName)
42{
43 verboseLevel = 0;
44 minElectronEnergy = 0.0;
45 // To inform the user that the Auger model is enabled
46 G4cout << modelName <<" is constructed" << G4endl;
47}
48
50{
51 if( verboseLevel>0 ) G4cout << modelName <<" is deleted" << G4endl;
52}
53
55{
56 verboseLevel = 0;
57
58 if( verboseLevel>0 )
59 {
60 G4cout << "PTB Auger model is initialised " << G4endl;
61 }
62
63}
64
65//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
66
67void G4DNAPTBAugerModel::ComputeAugerEffect(std::vector<G4DynamicParticle*>* fvect, const G4String& materialNameIni, G4double bindingEnergy)
68{
69 // Rename material if modified NIST material
70 // This is needed when material is obtained from G4MaterialCutsCouple
71 G4String materialName = materialNameIni;
72 if(materialName.find("_MODIFIED") != 0u){
73 materialName = materialName.substr(0,materialName.size()-9);
74 }
75
76 // check if there is a k-shell ionisation and find the ionised atom
77 G4int atomId(0);
78
79 atomId = DetermineIonisedAtom(atomId, materialName, bindingEnergy);
80
81 if(atomId!=0)
82 {
83 G4double kineticEnergy = CalculAugerEnergyFor(atomId);
84
85 if(kineticEnergy<0)
86 {
87 G4cerr<<"**************************"<<G4endl;
88 G4cerr<<"FatalError. Auger kineticEnergy: "<<kineticEnergy<<G4endl;
89 exit(EXIT_FAILURE);
90 }
91
92 if(atomId==1 || atomId==2 || atomId==3)
93 {
94 GenerateAugerWithRandomDirection(fvect, kineticEnergy);
95 }
96 else if(atomId==4)
97 {
98 GenerateAugerWithRandomDirection(fvect, kineticEnergy);
99 GenerateAugerWithRandomDirection(fvect, kineticEnergy);
100 }
101 }
102}
103
104//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
105
106G4int G4DNAPTBAugerModel::DetermineIonisedAtom(G4int atomId, const G4String& materialName, G4double bindingEnergy)
107{
108 if(materialName=="THF" || materialName=="backbone_THF"){
109 if(bindingEnergy==305.07){
110 atomId=1; //"carbon";
111 }
112 else if(bindingEnergy==557.94){
113 atomId=2; //"oxygen";
114 }
115 }
116 else if(materialName=="PY" || materialName=="PU"
117 || materialName=="cytosine_PY" || materialName=="thymine_PY"
118 || materialName=="adenine_PU" || materialName=="guanine_PU"
119 )
120 {
121 if(bindingEnergy==307.52){
122 atomId=1; //"carbon";
123 }
124 else if(bindingEnergy==423.44){
125 atomId=4; //"nitrogen";
126 }
127 }
128 else if(materialName=="TMP"|| materialName=="backbone_TMP"){
129 if(bindingEnergy==209.59 || bindingEnergy==152.4)
130 atomId=3; //"carbonTMP";
131 }
132
133 return atomId;
134}
135
136//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
137
138G4double G4DNAPTBAugerModel::CalculAugerEnergyFor(G4int atomId)
139{
140 G4double kineticEnergy;
141
142 if(atomId==2) // oxygen
143 {
144 kineticEnergy = 495*eV;
145 }
146 else
147 {
148 G4double f1, f2, f3, g1, g2, Y;
149
150 Y = G4UniformRand();
151
152 if(atomId == 1){ // carbon
153 f1 = -7.331e-2;
154 f2 = -3.306e-5;
155 f3 = 2.433e0;
156 g1 = 4.838e-1;
157 g2 = 3.886e0;
158 }
159 else if(atomId == 4){ // nitrogen
160 f1 = -7.518e-2;
161 f2 = 1.178e-4;
162 f3 = 2.600e0;
163 g1 = 4.639e-1;
164 g2 = 3.770e0;
165 }
166 else// if(atomId == 3) // carbon_TMP
167 {
168 f1 = -5.700e-2;
169 f2 = 1.200e-4;
170 f3 = 2.425e0;
171 g1 = 5.200e-1;
172 g2 = 2.560e0;
173 }
174
175 kineticEnergy = pow(10, f1*pow( abs( log10(Y) ) , g1) + f2*pow( abs( log10(Y) ) , g2) + f3 )*eV;
176 }
177
178 return kineticEnergy;
179}
180
181//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
182
184{
185 minElectronEnergy = cut;
186}
187
188//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
189
190void G4DNAPTBAugerModel::GenerateAugerWithRandomDirection(std::vector<G4DynamicParticle*>* fvect, G4double kineticEnergy)
191{
192 // Isotropic angular distribution for the outcoming e-
193 G4double newcosTh = 1.-2.*G4UniformRand();
194 G4double newsinTh = std::sqrt(1.-newcosTh*newcosTh);
195 G4double newPhi = twopi*G4UniformRand();
196
197 G4double xDir = newsinTh*std::sin(newPhi);
198 G4double yDir = newsinTh*std::cos(newPhi);
199 G4double zDir = newcosTh;
200
201 G4ThreeVector ElectronDirection(xDir,yDir,zDir);
202
203 // generation of new particle
204 auto dp = new G4DynamicParticle (G4Electron::Electron(), ElectronDirection, kineticEnergy) ;
205 fvect->push_back(dp);
206}
G4double Y(G4double density)
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
G4GLOB_DLL std::ostream G4cerr
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
#define G4UniformRand()
Definition Randomize.hh:52
virtual ~G4DNAPTBAugerModel()
~G4DNAPTBAugerModel Destructor
void ComputeAugerEffect(std::vector< G4DynamicParticle * > *fvect, const G4String &materialNameIni, G4double bindingEnergy)
ComputeAugerEffect Main method to be called by the ionisation model.
void SetCutForAugerElectrons(G4double cut)
SetCutForAugerElectrons Set the cut for the auger electrons production.
virtual void Initialise()
Initialise Set the verbose value.
G4DNAPTBAugerModel(const G4String &modelName)
G4DNAPTBAugerModel Constructor.
static G4Electron * Electron()
Definition G4Electron.cc:91