Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4INCLNuclearPotentialConstant.cc
이 파일의 문서화 페이지로 가기
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 
48 #include "G4INCLParticleTable.hh"
49 
50 namespace G4INCL {
51 
52  namespace NuclearPotential {
53 
54  // Constructors
56  : INuclearPotential(A, Z, aPionPotential)
57  {
58  initialize();
59  }
60 
61  // Destructor
63  }
64 
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;
81  fermiEnergy[DeltaZero] = fermiEnergy.find(Neutron)->second;
82  fermiEnergy[DeltaMinus] = fermiEnergy.find(Neutron)->second;
83 
84  fermiEnergy[SigmaPlus] = fermiEnergy.find(Proton)->second;
85  fermiEnergy[SigmaZero] = fermiEnergy.find(Proton)->second;
86  fermiEnergy[SigmaMinus] = 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.;
104 
105  separationEnergy[PiPlus] = 0.;
106  separationEnergy[PiZero] = 0.;
108 
109  separationEnergy[Eta] = 0.;
110  separationEnergy[Omega] = 0.;
112  separationEnergy[Photon] = 0.;
113 
114  separationEnergy[Lambda] = 0.;
118  separationEnergy[KPlus] = 0.;
119  separationEnergy[KZero] = 0.;
121  separationEnergy[KMinus] = 0.;
122  separationEnergy[KShort] = 0.;
123  separationEnergy[KLong] = 0.;
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:
188  return computePionResonancePotentialEnergy(particle);
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 
std::map< ParticleType, G4double > fermiEnergy
const G4int theA
The mass number of the nucleus.
G4ThreadLocal FermiMomentumFn getFermiMomentum
NuclearPotentialConstant(const G4int A, const G4int Z, const G4bool pionPotential)
virtual G4double computePotentialEnergy(const Particle *const p) const
const G4int theZ
The charge number of the nucleus.
#define INCL_DEBUG(x)
Float_t Z
double G4double
Definition: G4Types.hh:76
bool G4bool
Definition: G4Types.hh:79
#define INCL_ERROR(x)
G4double getINCLMass(const G4int A, const G4int Z)
Get INCL nuclear mass (in MeV/c^2)
std::map< ParticleType, G4double > separationEnergy
G4double computePionPotentialEnergy(const Particle *const p) const
Compute the potential energy for the given pion.
std::map< ParticleType, G4double > fermiMomentum
double A(double temperature)
G4double computeKaonPotentialEnergy(const Particle *const p) const
Compute the potential energy for the given kaon.
Isospin- and energy-independent nuclear potential.
int G4int
Definition: G4Types.hh:78
G4INCL::ParticleType getType() const
G4ThreadLocal SeparationEnergyFn getSeparationEnergy
Static pointer to the separation-energy function.
G4double computePionResonancePotentialEnergy(const Particle *const p) const
Compute the potential energy for the given pion resonances (Eta, Omega and EtaPrime and Gamma also)...