Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4INCLNuclearPotentialIsospin.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// INCL++ intra-nuclear cascade model
27// Alain Boudard, CEA-Saclay, France
28// Joseph Cugnon, University of Liege, Belgium
29// Jean-Christophe David, CEA-Saclay, France
30// Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland
31// Sylvie Leray, CEA-Saclay, France
32// Davide Mancusi, CEA-Saclay, France
33//
34#define INCLXX_IN_GEANT4_MODE 1
35
36#include "globals.hh"
37
38/** \file G4INCLNuclearPotentialIsospin.cc
39 * \brief Isospin-dependent nuclear potential.
40 *
41 * Provides an isospin-dependent nuclear potential.
42 *
43 * \date 28 February 2011
44 * \author Davide Mancusi
45 */
46
50#include "G4INCLGlobals.hh"
51
52namespace G4INCL {
53
54 namespace NuclearPotential {
55
56 // Constructors
58 : INuclearPotential(A, Z, aPionPotential)
59 {
60 initialize();
61 }
62
63 // Destructor
65
66 void NuclearPotentialIsospin::initialize() {
67 const G4double ZOverA = ((G4double) theZ) / ((G4double) theA);
68
72
73 const G4double theFermiMomentum = ParticleTable::getFermiMomentum(theA,theZ);
74
75 fermiMomentum[Proton] = theFermiMomentum * Math::pow13(2.*ZOverA);
76 const G4double theProtonFermiEnergy = std::sqrt(fermiMomentum[Proton]*fermiMomentum[Proton] + mp*mp) - mp;
77 fermiEnergy[Proton] = theProtonFermiEnergy;
78 // Use separation energies from the ParticleTable
79 const G4double theProtonSeparationEnergy = ParticleTable::getSeparationEnergy(Proton,theA,theZ);
80 separationEnergy[Proton] = theProtonSeparationEnergy;
81 vProton = theProtonFermiEnergy + theProtonSeparationEnergy;
82
83 fermiMomentum[Neutron] = theFermiMomentum * Math::pow13(2.*(1.-ZOverA));
84 const G4double theNeutronFermiEnergy = std::sqrt(fermiMomentum[Neutron]*fermiMomentum[Neutron] + mn*mn) - mn;
85 fermiEnergy[Neutron] = theNeutronFermiEnergy;
86 // Use separation energies from the ParticleTable
87 const G4double theNeutronSeparationEnergy = ParticleTable::getSeparationEnergy(Neutron,theA,theZ);
88 separationEnergy[Neutron] = theNeutronSeparationEnergy;
89 vNeutron = theNeutronFermiEnergy + theNeutronSeparationEnergy;
90
91 const G4double separationEnergyDeltaPlusPlus = 2.*theProtonSeparationEnergy - theNeutronSeparationEnergy;
92 separationEnergy[DeltaPlusPlus] = separationEnergyDeltaPlusPlus;
93 separationEnergy[DeltaPlus] = theProtonSeparationEnergy;
94 separationEnergy[DeltaZero] = theNeutronSeparationEnergy;
95 const G4double separationEnergyDeltaMinus = 2.*theNeutronSeparationEnergy - theProtonSeparationEnergy;
96 separationEnergy[DeltaMinus] = separationEnergyDeltaMinus;
97
98 const G4double tinyMargin = 1E-7;
99 vDeltaPlus = vProton;
100 vDeltaZero = vNeutron;
101 vDeltaPlusPlus = std::max(separationEnergyDeltaPlusPlus + tinyMargin, 2.*vDeltaPlus - vDeltaZero);
102 vDeltaMinus = std::max(separationEnergyDeltaMinus + tinyMargin, 2.*vDeltaZero - vDeltaPlus);
103
104 vSigmaMinus = -16.; // Repulsive potential, from Eur. Phys.J.A. (2016) 52:21
105 vSigmaZero = -16.; // hypothesis: same potential for each sigma
106 vSigmaPlus = -16.;
107
108 vLambda = 28.;
109 const G4double asy = (theA - 2.*theZ)/theA;
110 if(asy>0.11)vLambda = 56.549-678.73*asy+4905.35*std::pow(asy,2.)-9789.1*std::pow(asy,3.); // Jose Luis Rodriguez-Sanchez et al., Rapid Communication PRC
111
112 const G4double theLambdaSeparationEnergy = ParticleTable::getSeparationEnergy(Lambda,theA,theZ);
113
114 separationEnergy[PiPlus] = theProtonSeparationEnergy - theNeutronSeparationEnergy;
116 separationEnergy[PiMinus] = theNeutronSeparationEnergy - theProtonSeparationEnergy;
117
118 separationEnergy[Eta] = 0.;
122
123 separationEnergy[Lambda] = theLambdaSeparationEnergy;
124 separationEnergy[SigmaPlus] = theProtonSeparationEnergy + theLambdaSeparationEnergy - theNeutronSeparationEnergy;
125 separationEnergy[SigmaZero] = theLambdaSeparationEnergy;
126 separationEnergy[SigmaMinus] = theNeutronSeparationEnergy + theLambdaSeparationEnergy - theProtonSeparationEnergy;
127
128 separationEnergy[KPlus] = theProtonSeparationEnergy - theLambdaSeparationEnergy;
129 separationEnergy[KZero] = (theNeutronSeparationEnergy - theLambdaSeparationEnergy);
130 separationEnergy[KZeroBar] = (theLambdaSeparationEnergy - theNeutronSeparationEnergy);
131 separationEnergy[KMinus] = 2.*theNeutronSeparationEnergy - theProtonSeparationEnergy-theLambdaSeparationEnergy;
132
133 separationEnergy[KShort] = (theNeutronSeparationEnergy - theLambdaSeparationEnergy);
134 separationEnergy[KLong] = (theNeutronSeparationEnergy - theLambdaSeparationEnergy);
135
140
142 if (fermiEnergy[Lambda] <= 0.)
144 else
145 fermiMomentum[Lambda]=std::sqrt(std::pow(fermiEnergy[Lambda]+ml,2.0)-ml*ml);
146
150
151 INCL_DEBUG("Table of separation energies [MeV] for A=" << theA << ", Z=" << theZ << ":" << '\n'
152 << " proton: " << separationEnergy[Proton] << '\n'
153 << " neutron: " << separationEnergy[Neutron] << '\n'
154 << " delta++: " << separationEnergy[DeltaPlusPlus] << '\n'
155 << " delta+: " << separationEnergy[DeltaPlus] << '\n'
156 << " delta0: " << separationEnergy[DeltaZero] << '\n'
157 << " delta-: " << separationEnergy[DeltaMinus] << '\n'
158 << " pi+: " << separationEnergy[PiPlus] << '\n'
159 << " pi0: " << separationEnergy[PiZero] << '\n'
160 << " pi-: " << separationEnergy[PiMinus] << '\n'
161 << " eta: " << separationEnergy[Eta] << '\n'
162 << " omega: " << separationEnergy[Omega] << '\n'
163 << " etaprime:" << separationEnergy[EtaPrime] << '\n'
164 << " photon: " << separationEnergy[Photon] << '\n'
165 << " lambda: " << separationEnergy[Lambda] << '\n'
166 << " sigmaplus: " << separationEnergy[SigmaPlus] << '\n'
167 << " sigmazero: " << separationEnergy[SigmaZero] << '\n'
168 << " sigmaminus: " << separationEnergy[SigmaMinus] << '\n'
169 << " kplus: " << separationEnergy[KPlus] << '\n'
170 << " kzero: " << separationEnergy[KZero] << '\n'
171 << " kzerobar: " << separationEnergy[KZeroBar] << '\n'
172 << " kminus: " << separationEnergy[KMinus] << '\n'
173 << " kshort: " << separationEnergy[KShort] << '\n'
174 << " klong: " << separationEnergy[KLong] << '\n'
175 );
176
177 INCL_DEBUG("Table of Fermi energies [MeV] for A=" << theA << ", Z=" << theZ << ":" << '\n'
178 << " proton: " << fermiEnergy[Proton] << '\n'
179 << " neutron: " << fermiEnergy[Neutron] << '\n'
180 << " delta++: " << fermiEnergy[DeltaPlusPlus] << '\n'
181 << " delta+: " << fermiEnergy[DeltaPlus] << '\n'
182 << " delta0: " << fermiEnergy[DeltaZero] << '\n'
183 << " delta-: " << fermiEnergy[DeltaMinus] << '\n'
184 << " lambda: " << fermiEnergy[Lambda] << '\n'
185 << " sigma+: " << fermiEnergy[SigmaPlus] << '\n'
186 << " sigma0: " << fermiEnergy[SigmaZero] << '\n'
187 << " sigma-: " << fermiEnergy[SigmaMinus] << '\n'
188 );
189
190 INCL_DEBUG("Table of Fermi momenta [MeV/c] for A=" << theA << ", Z=" << theZ << ":" << '\n'
191 << " proton: " << fermiMomentum[Proton] << '\n'
192 << " neutron: " << fermiMomentum[Neutron] << '\n'
193 );
194 }
195
197
198 switch( particle->getType() )
199 {
200 case Proton:
201 return vProton;
202 break;
203 case Neutron:
204 return vNeutron;
205 break;
206
207 case PiPlus:
208 case PiZero:
209 case PiMinus:
210 return computePionPotentialEnergy(particle);
211 break;
212
213 case SigmaPlus:
214 return vSigmaPlus;
215 break;
216 case SigmaZero:
217 return vSigmaZero;
218 break;
219 case Lambda:
220 return vLambda;
221 break;
222 case SigmaMinus:
223 return vSigmaMinus;
224 break;
225
226 case Eta:
227 case Omega:
228 case EtaPrime:
230 break;
231
232 case KPlus:
233 case KZero:
234 case KZeroBar:
235 case KMinus:
236 case KShort:
237 case KLong:
238 return computeKaonPotentialEnergy(particle);
239 break;
240
241 case Photon:
242 return 0.0;
243 break;
244
245 case DeltaPlusPlus:
246 return vDeltaPlusPlus;
247 break;
248 case DeltaPlus:
249 return vDeltaPlus;
250 break;
251 case DeltaZero:
252 return vDeltaZero;
253 break;
254 case DeltaMinus:
255 return vDeltaMinus;
256 break;
257 case Composite:
258 INCL_ERROR("No potential computed for particle of type Cluster.");
259 return 0.0;
260 break;
261 case UnknownParticle:
262 INCL_ERROR("Trying to compute potential energy for an unknown particle.");
263 return 0.0;
264 break;
265 }
266
267 INCL_ERROR("There is no potential for this type of particle.");
268 return 0.0;
269 }
270
271 }
272}
273
double A(double temperature)
#define INCL_ERROR(x)
#define INCL_DEBUG(x)
Isospin- and energy-independent nuclear potential.
Isospin-dependent nuclear potential.
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4double computePionPotentialEnergy(const Particle *const p) const
Compute the potential energy for the given pion.
std::map< ParticleType, G4double > fermiMomentum
const G4int theA
The mass number of the nucleus.
std::map< ParticleType, G4double > separationEnergy
G4double computePionResonancePotentialEnergy(const Particle *const p) const
Compute the potential energy for the given pion resonances (Eta, Omega and EtaPrime and Gamma also).
G4double computeKaonPotentialEnergy(const Particle *const p) const
Compute the potential energy for the given kaon.
std::map< ParticleType, G4double > fermiEnergy
const G4int theZ
The charge number of the nucleus.
NuclearPotentialIsospin(const G4int A, const G4int Z, const G4bool pionPotential)
virtual G4double computePotentialEnergy(const Particle *const p) const
G4INCL::ParticleType getType() const
G4double pow13(G4double x)
G4ThreadLocal FermiMomentumFn getFermiMomentum
G4ThreadLocal SeparationEnergyFn getSeparationEnergy
Static pointer to the separation-energy function.
G4double getINCLMass(const G4int A, const G4int Z, const G4int S)
Get INCL nuclear mass (in MeV/c^2)