Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4INCLNuclearPotentialIsospin.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 
49 #include "G4INCLParticleTable.hh"
50 #include "G4INCLGlobals.hh"
51 
52 namespace G4INCL {
53 
54  namespace NuclearPotential {
55 
56  // Constructors
58  : INuclearPotential(A, Z, aPionPotential)
59  {
60  initialize();
61  }
62 
63  // Destructor
65 
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;
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  vLambda = 28.;
108 
109  separationEnergy[PiPlus] = theProtonSeparationEnergy - theNeutronSeparationEnergy;
110  separationEnergy[PiZero] = 0.;
111  separationEnergy[PiMinus] = theNeutronSeparationEnergy - theProtonSeparationEnergy;
112 
113  separationEnergy[Eta] = 0.;
114  separationEnergy[Omega] = 0.;
116  separationEnergy[Photon] = 0.;
117 
118  separationEnergy[Lambda] = theNeutronSeparationEnergy;
119  separationEnergy[SigmaPlus] = theProtonSeparationEnergy;
120  separationEnergy[SigmaZero] = theNeutronSeparationEnergy;
121  separationEnergy[SigmaMinus] = 2*theNeutronSeparationEnergy - theProtonSeparationEnergy;
122  separationEnergy[KPlus] = theProtonSeparationEnergy - theNeutronSeparationEnergy;
123  separationEnergy[KZero] = 0.;
125  separationEnergy[KMinus] = theNeutronSeparationEnergy - theProtonSeparationEnergy;
126  separationEnergy[KShort] = 0.;
127  separationEnergy[KLong] = 0.;
128 
130  fermiEnergy[DeltaPlus] = vDeltaPlus - separationEnergy[DeltaPlus];
131  fermiEnergy[DeltaZero] = vDeltaZero - separationEnergy[DeltaZero];
132  fermiEnergy[DeltaMinus] = vDeltaMinus - separationEnergy[DeltaMinus];
133 
134  fermiEnergy[Lambda] = vLambda - separationEnergy[Lambda];
135  fermiMomentum[Lambda]=std::sqrt(std::pow(fermiEnergy[Lambda]+ml,2.0)-ml*ml);
136 
137  fermiEnergy[SigmaPlus] = vSigmaPlus - separationEnergy[SigmaPlus];
138  fermiEnergy[SigmaZero] = vSigmaZero - separationEnergy[SigmaZero];
139  fermiEnergy[SigmaMinus] = vSigmaMinus - separationEnergy[SigmaMinus];
140 
141  INCL_DEBUG("Table of separation energies [MeV] for A=" << theA << ", Z=" << theZ << ":" << '\n'
142  << " proton: " << separationEnergy[Proton] << '\n'
143  << " neutron: " << separationEnergy[Neutron] << '\n'
144  << " delta++: " << separationEnergy[DeltaPlusPlus] << '\n'
145  << " delta+: " << separationEnergy[DeltaPlus] << '\n'
146  << " delta0: " << separationEnergy[DeltaZero] << '\n'
147  << " delta-: " << separationEnergy[DeltaMinus] << '\n'
148  << " pi+: " << separationEnergy[PiPlus] << '\n'
149  << " pi0: " << separationEnergy[PiZero] << '\n'
150  << " pi-: " << separationEnergy[PiMinus] << '\n'
151  << " eta: " << separationEnergy[Eta] << '\n'
152  << " omega: " << separationEnergy[Omega] << '\n'
153  << " etaprime:" << separationEnergy[EtaPrime] << '\n'
154  << " photon: " << separationEnergy[Photon] << '\n'
155  << " lambda: " << separationEnergy[Lambda] << '\n'
156  << " sigmaplus: " << separationEnergy[SigmaPlus] << '\n'
157  << " sigmazero: " << separationEnergy[SigmaZero] << '\n'
158  << " sigmaminus: " << separationEnergy[SigmaMinus] << '\n'
159  << " kplus: " << separationEnergy[KPlus] << '\n'
160  << " kzero: " << separationEnergy[KZero] << '\n'
161  << " kzerobar: " << separationEnergy[KZeroBar] << '\n'
162  << " kminus: " << separationEnergy[KMinus] << '\n'
163  << " kshort: " << separationEnergy[KShort] << '\n'
164  << " klong: " << separationEnergy[KLong] << '\n'
165  );
166 
167  INCL_DEBUG("Table of Fermi energies [MeV] for A=" << theA << ", Z=" << theZ << ":" << '\n'
168  << " proton: " << fermiEnergy[Proton] << '\n'
169  << " neutron: " << fermiEnergy[Neutron] << '\n'
170  << " delta++: " << fermiEnergy[DeltaPlusPlus] << '\n'
171  << " delta+: " << fermiEnergy[DeltaPlus] << '\n'
172  << " delta0: " << fermiEnergy[DeltaZero] << '\n'
173  << " delta-: " << fermiEnergy[DeltaMinus] << '\n'
174  << " lambda: " << fermiEnergy[Lambda] << '\n'
175  << " sigma+: " << fermiEnergy[SigmaPlus] << '\n'
176  << " sigma0: " << fermiEnergy[SigmaZero] << '\n'
177  << " sigma-: " << fermiEnergy[SigmaMinus] << '\n'
178  );
179 
180  INCL_DEBUG("Table of Fermi momenta [MeV/c] for A=" << theA << ", Z=" << theZ << ":" << '\n'
181  << " proton: " << fermiMomentum[Proton] << '\n'
182  << " neutron: " << fermiMomentum[Neutron] << '\n'
183  );
184  }
185 
187 
188  switch( particle->getType() )
189  {
190  case Proton:
191  return vProton;
192  break;
193  case Neutron:
194  return vNeutron;
195  break;
196 
197  case PiPlus:
198  case PiZero:
199  case PiMinus:
200  return computePionPotentialEnergy(particle);
201  break;
202 
203  case SigmaPlus:
204  return vSigmaPlus;
205  break;
206  case SigmaZero:
207  return vSigmaZero;
208  break;
209  case Lambda:
210  return vLambda;
211  break;
212  case SigmaMinus:
213  return vSigmaMinus;
214  break;
215 
216  case Eta:
217  case Omega:
218  case EtaPrime:
219  return computePionResonancePotentialEnergy(particle);
220  break;
221 
222  case KPlus:
223  case KZero:
224  case KZeroBar:
225  case KMinus:
226  case KShort:
227  case KLong:
228  return computeKaonPotentialEnergy(particle);
229  break;
230 
231  case Photon:
232  return 0.0;
233  break;
234 
235  case DeltaPlusPlus:
236  return vDeltaPlusPlus;
237  break;
238  case DeltaPlus:
239  return vDeltaPlus;
240  break;
241  case DeltaZero:
242  return vDeltaZero;
243  break;
244  case DeltaMinus:
245  return vDeltaMinus;
246  break;
247  case Composite:
248  INCL_ERROR("No potential computed for particle of type Cluster.");
249  return 0.0;
250  break;
251  case UnknownParticle:
252  INCL_ERROR("Trying to compute potential energy for an unknown particle.");
253  return 0.0;
254  break;
255  }
256 
257  INCL_ERROR("There is no potential for this type of particle.");
258  return 0.0;
259  }
260 
261  }
262 }
263 
T max(const T t1, const T t2)
brief Return the largest of the two arguments
std::map< ParticleType, G4double > fermiEnergy
const G4int theA
The mass number of the nucleus.
G4ThreadLocal FermiMomentumFn getFermiMomentum
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)
G4double pow13(G4double x)
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)
NuclearPotentialIsospin(const G4int A, const G4int Z, const G4bool pionPotential)
G4double computeKaonPotentialEnergy(const Particle *const p) const
Compute the potential energy for the given kaon.
Isospin-dependent nuclear potential.
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)...