Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4INCLNuclearPotentialConstant.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 G4INCLNuclearPotentialConstant.cc
39 * \brief Isospin- and energy-independent nuclear potential.
40 *
41 * Provides a constant nuclear potential (V0).
42 *
43 * \date 17 January 2011
44 * \author Davide Mancusi
45 */
46
49
50namespace G4INCL {
51
52 namespace NuclearPotential {
53
54 // Constructors
56 : INuclearPotential(A, Z, aPionPotential)
57 {
58 initialize();
59 }
60
61 // Destructor
64
65 void NuclearPotentialConstant::initialize() {
68
69 const G4double theFermiMomentum = ParticleTable::getFermiMomentum(theA,theZ);
70
71 fermiMomentum[Proton] = theFermiMomentum;
72 const G4double theProtonFermiEnergy = std::sqrt(theFermiMomentum*theFermiMomentum + mp*mp) - mp;
73 fermiEnergy[Proton] = theProtonFermiEnergy;
74
75 fermiMomentum[Neutron] = theFermiMomentum;
76 const G4double theNeutronFermiEnergy = std::sqrt(theFermiMomentum*theFermiMomentum + mn*mn) - mn;
77 fermiEnergy[Neutron] = theNeutronFermiEnergy;
78
80 fermiEnergy[DeltaPlus] = fermiEnergy.find(Proton)->second;
83
84 fermiEnergy[SigmaPlus] = fermiEnergy.find(Proton)->second;
85 fermiEnergy[SigmaZero] = fermiEnergy.find(Proton)->second;
87
88 fermiEnergy[Lambda] = fermiEnergy.find(Neutron)->second;
89
90
92 separationEnergy[Proton] = theAverageSeparationEnergy;
93 separationEnergy[Neutron] = theAverageSeparationEnergy;
94
95 // Use separation energies from the ParticleTable
96 vNucleon = 0.5*(theProtonFermiEnergy + theNeutronFermiEnergy) + theAverageSeparationEnergy;
97 vDelta = vNucleon;
98 vSigma = -16.; // Caution: repulsive potential for Sigmas
99 vLambda = 28.;
101 separationEnergy[DeltaPlus] = vDelta - fermiEnergy.find(DeltaPlus)->second;
102 separationEnergy[DeltaZero] = vDelta - fermiEnergy.find(DeltaZero)->second;
103 separationEnergy[DeltaMinus] = vDelta - fermiEnergy.find(DeltaMinus)->second;
104
108
109 separationEnergy[Eta] = 0.;
113
124
125 INCL_DEBUG("Table of separation energies [MeV] for A=" << theA << ", Z=" << theZ << ":" << '\n'
126 << " proton: " << separationEnergy[Proton] << '\n'
127 << " neutron: " << separationEnergy[Neutron] << '\n'
128 << " delta++: " << separationEnergy[DeltaPlusPlus] << '\n'
129 << " delta+: " << separationEnergy[DeltaPlus] << '\n'
130 << " delta0: " << separationEnergy[DeltaZero] << '\n'
131 << " delta-: " << separationEnergy[DeltaMinus] << '\n'
132 << " pi+: " << separationEnergy[PiPlus] << '\n'
133 << " pi0: " << separationEnergy[PiZero] << '\n'
134 << " pi-: " << separationEnergy[PiMinus] << '\n'
135 << " eta: " << separationEnergy[Eta] << '\n'
136 << " omega: " << separationEnergy[Omega] << '\n'
137 << " etaprime:" << separationEnergy[EtaPrime] << '\n'
138 << " photon: " << separationEnergy[Photon] << '\n'
139 << " lambda: " << separationEnergy[Lambda] << '\n'
140 << " sigmaplus: " << separationEnergy[SigmaPlus] << '\n'
141 << " sigmazero: " << separationEnergy[SigmaZero] << '\n'
142 << " sigmaminus: " << separationEnergy[SigmaMinus] << '\n'
143 << " kplus: " << separationEnergy[KPlus] << '\n'
144 << " kzero: " << separationEnergy[KZero] << '\n'
145 << " kzerobar: " << separationEnergy[KZeroBar] << '\n'
146 << " kminus: " << separationEnergy[KMinus] << '\n'
147 << " kshort: " << separationEnergy[KShort] << '\n'
148 << " klong: " << separationEnergy[KLong] << '\n'
149 );
150
151 INCL_DEBUG("Table of Fermi energies [MeV] for A=" << theA << ", Z=" << theZ << ":" << '\n'
152 << " proton: " << fermiEnergy[Proton] << '\n'
153 << " neutron: " << fermiEnergy[Neutron] << '\n'
154 << " delta++: " << fermiEnergy[DeltaPlusPlus] << '\n'
155 << " delta+: " << fermiEnergy[DeltaPlus] << '\n'
156 << " delta0: " << fermiEnergy[DeltaZero] << '\n'
157 << " delta-: " << fermiEnergy[DeltaMinus] << '\n'
158 << " lambda: " << fermiEnergy[Lambda] << '\n'
159 << " sigmaplus: " << fermiEnergy[SigmaPlus] << '\n'
160 << " sigmazero: " << fermiEnergy[SigmaZero] << '\n'
161 << " sigmaminus: " << fermiEnergy[SigmaMinus] << '\n'
162 );
163
164 INCL_DEBUG("Table of Fermi momenta [MeV/c] for A=" << theA << ", Z=" << theZ << ":" << '\n'
165 << " proton: " << fermiMomentum[Proton] << '\n'
166 << " neutron: " << fermiMomentum[Neutron] << '\n'
167 );
168 }
169
171
172 switch( particle->getType() )
173 {
174 case Proton:
175 case Neutron:
176 return vNucleon;
177 break;
178
179 case PiPlus:
180 case PiZero:
181 case PiMinus:
182 return computePionPotentialEnergy(particle);
183 break;
184
185 case Eta:
186 case Omega:
187 case EtaPrime:
189 break;
190
191 case SigmaPlus:
192 case SigmaZero:
193 case SigmaMinus:
194 return vSigma;
195 break;
196 case Lambda:
197 return vLambda;
198 break;
199
200 case KPlus:
201 case KZero:
202 case KZeroBar:
203 case KMinus:
204 return computeKaonPotentialEnergy(particle);
205 break;
206
207 case Photon:
208 return 0.0;
209 break;
210
211 case DeltaPlusPlus:
212 case DeltaPlus:
213 case DeltaZero:
214 case DeltaMinus:
215 return vDelta;
216 break;
217 case UnknownParticle:
218 INCL_ERROR("Trying to compute potential energy of an unknown particle.");
219 return 0.0;
220 break;
221 default:
222 INCL_ERROR("Trying to compute potential energy of a malformed particle.");
223 return 0.0;
224 break;
225 }
226 }
227
228 }
229}
230
#define INCL_ERROR(x)
#define INCL_DEBUG(x)
Isospin- and energy-independent nuclear potential.
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
const G4double A[17]
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.
const G4int theZ
The charge number of the nucleus.
NuclearPotentialConstant(const G4int A, const G4int Z, const G4bool pionPotential)
virtual G4double computePotentialEnergy(const Particle *const p) const
G4INCL::ParticleType getType() const
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)