Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4DeexPrecoUtility.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// Geant4 class G4DeexPrecoUtility
28//
29// Author V.Ivanchenko 19.05.2025
30//
31
32#include "G4DeexPrecoUtility.hh"
33#include "G4SystemOfUnits.hh"
34
35namespace
36{
37 const G4double elim = 0.2*CLHEP::MeV; // low-energy limit for neutrons
38 const G4double alpha = 2.0; // extra factor for neutrons
39 const G4double beta = 1.0; // extra factor for the Coulomb barrier
40}
41
42//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
43
45 const G4double A13,
46 const G4double CB,
47 const G4double ekin)
48{
49 G4double e = std::max(ekin, elim);
50 G4double x;
51 switch (index) {
52 case 0:
53 x = alpha*(0.76 + 2.2/A13 + (2.12/(A13*A13) - 0.05)*CLHEP::MeV/e);
54 break;
55
56 case 1:
57 x = (1. + ProtonCValue(Z))*(1. - beta*ProtonKValue(Z)*CB/e);
58 break;
59
60 case 2:
61 x = (1. + ProtonCValue(Z)*0.5)*(1. - beta*(ProtonKValue(Z) + 0.06)*CB/e);
62 break;
63
64 case 3:
65 x = (1. + ProtonCValue(Z)/3.)*(1. - beta*(ProtonKValue(Z) + 0.12)*CB/e);
66 break;
67
68 case 4:
69 x = (1. + AlphaCValue(Z)*4./3.)*(1. - beta*(AlphaKValue(Z) - 0.06)*CB/e);
70 break;
71
72 default:
73 x = (1. + AlphaCValue(Z))*(1. - beta*AlphaKValue(Z)*CB/e);
74 break;
75 }
76 x = std::max(x, 0.0);
77 return x;
78}
79
81{
82 G4double res;
83 if (10 >= Z) { res = 0.42; }
84 else if (20 >= Z) { res = 0.42 + (Z - 10)*0.016; }
85 else if (30 >= Z) { res = 0.58 + (Z - 20)*0.01; }
86 else if (50 >= Z) { res = 0.68 + (Z - 30)*0.0045; }
87 else if (70 > Z) { res = 0.77 + (Z - 50)*0.0015; }
88 else { res = 0.8; }
89 return res;
90}
91
93{
94 G4double res;
95 if (10 >= Z) { res = 0.68; }
96 else if (20 >= Z) { res = 0.68 + (Z - 10)*0.014; }
97 else if (30 >= Z) { res = 0.82 + (Z - 20)*0.009; }
98 else if (50 >= Z) { res = 0.91 + (Z - 30)*0.003; }
99 else if (70 > Z) { res = 0.97 + (Z - 50)*0.0005; }
100 else { res = 0.98; }
101 return res;
102}
103
105{
106 G4double res;
107 if (10 >= Z) { res = 0.50; }
108 else if (20 >= Z) { res = 0.50 - (Z - 10)*0.022; }
109 else if (30 >= Z) { res = 0.28 - (Z - 20)*0.008; }
110 else if (50 >= Z) { res = 0.20 - (Z - 30)*0.0025; }
111 else if (70 > Z) { res = 0.15 - (Z - 50)*0.0025; }
112 else { res = 0.1; }
113 return res;
114}
115
117{
118 G4double res;
119 if (30 >= Z) { res = 0.10; }
120 else if (50 >= Z) { res = 0.10 - (Z - 30)*0.001; }
121 else if (70 >= Z) { res = 0.08 + (Z - 50)*0.001; }
122 else { res = 0.06; }
123 return res;
124}
125
128{
129 G4double a = 0.05*A;
130 G4double x = (A - Z)*1.3/(G4double)A;
131 switch (idx) {
132 case 0:
133 a *= (1. - x/A)*(1. - x/A);
134 break;
135
136 case 1:
137 a *= (1. + x/A)*(1. + x/A);
138 break;
139
140 case 2:
141 a *= (1. - 0.5/A)*(1. - 0.5/A);
142 break;
143
144 case 3:
145 a *= (1. - (1. + x)/A)*(1. - (1. + x)/A);
146 break;
147
148 case 4:
149 a *= (1. - (1. - x)/A)*(1. - (1. - x)/A);
150 break;
151
152 default:
153 a *= (1. - 1.5/A)*(1. - 1.5/A);
154 break;
155 }
156 return a;
157}
158
159//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
160
161
#define A13
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
const G4double A[17]
static G4double LevelDensity(const G4int Z, const G4int A, const G4int index)
static G4double AlphaCValue(const G4int Z)
static G4double ProtonKValue(const G4int Z)
static G4double AlphaKValue(const G4int Z)
static G4double ProtonCValue(const G4int Z)
static G4double CorrectionFactor(const G4int index, const G4int Z, const G4double A13, const G4double bCoulomb, const G4double ekin)