Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 // Pekka Kaitaniemi, CEA and Helsinki Institute of Physics
28 // Davide Mancusi, CEA
29 // Alain Boudard, CEA
30 // Sylvie Leray, CEA
31 // Joseph Cugnon, University of Liege
32 //
33 #define INCLXX_IN_GEANT4_MODE 1
34 
35 #include "globals.hh"
36 
37 /** \file G4INCLNuclearPotentialIsospin.cc
38  * \brief Isospin-dependent nuclear potential.
39  *
40  * Provides an isospin-dependent nuclear potential.
41  *
42  * \date 28 February 2011
43  * \author Davide Mancusi
44  */
45 
48 #include "G4INCLParticleTable.hh"
49 #include "G4INCLGlobals.hh"
50 
51 namespace G4INCL {
52 
53  namespace NuclearPotential {
54 
55  // Constructors
56  NuclearPotentialIsospin::NuclearPotentialIsospin(const G4int A, const G4int Z, const G4bool aPionPotential)
57  : INuclearPotential(A, Z, aPionPotential)
58  {
59  initialize();
60  }
61 
62  // Destructor
64 
65  void NuclearPotentialIsospin::initialize() {
66  const G4double ZOverA = ((G4double) theZ) / ((G4double) theA);
67 
70 
71  const G4double theFermiMomentum = ParticleTable::getFermiMomentum(theA,theZ);
72 
73  fermiMomentum[Proton] = theFermiMomentum * Math::pow13(2.*ZOverA);
74  const G4double theProtonFermiEnergy = std::sqrt(fermiMomentum[Proton]*fermiMomentum[Proton] + mp*mp) - mp;
75  fermiEnergy[Proton] = theProtonFermiEnergy;
76  // Use separation energies from the ParticleTable
77  const G4double theProtonSeparationEnergy = ParticleTable::getSeparationEnergy(Proton,theA,theZ);
78  separationEnergy[Proton] = theProtonSeparationEnergy;
79  vProton = theProtonFermiEnergy + theProtonSeparationEnergy;
80 
81  fermiMomentum[Neutron] = theFermiMomentum * Math::pow13(2.*(1.-ZOverA));
82  const G4double theNeutronFermiEnergy = std::sqrt(fermiMomentum[Neutron]*fermiMomentum[Neutron] + mn*mn) - mn;
83  fermiEnergy[Neutron] = theNeutronFermiEnergy;
84  // Use separation energies from the ParticleTable
85  const G4double theNeutronSeparationEnergy = ParticleTable::getSeparationEnergy(Neutron,theA,theZ);
86  separationEnergy[Neutron] = theNeutronSeparationEnergy;
87  vNeutron = theNeutronFermiEnergy + theNeutronSeparationEnergy;
88 
89  vDeltaPlus = vProton;
90  vDeltaZero = vNeutron;
91  vDeltaPlusPlus = 2.*vDeltaPlus - vDeltaZero;
92  vDeltaMinus = 2.*vDeltaZero - vDeltaPlus;
93 
94  separationEnergy[DeltaPlusPlus] = 2.*theProtonSeparationEnergy - theNeutronSeparationEnergy;
95  separationEnergy[DeltaPlus] = theProtonSeparationEnergy;
96  separationEnergy[DeltaZero] = theNeutronSeparationEnergy;
97  separationEnergy[DeltaMinus] = 2.*theNeutronSeparationEnergy - theProtonSeparationEnergy;
98 
99  separationEnergy[PiPlus] = theProtonSeparationEnergy - theNeutronSeparationEnergy;
100  separationEnergy[PiZero] = 0.;
101  separationEnergy[PiMinus] = theNeutronSeparationEnergy - theProtonSeparationEnergy;
102 
104  fermiEnergy[DeltaPlus] = vDeltaPlus - separationEnergy[DeltaPlus];
105  fermiEnergy[DeltaZero] = vDeltaZero - separationEnergy[DeltaZero];
106  fermiEnergy[DeltaMinus] = vDeltaMinus - separationEnergy[DeltaMinus];
107 
108  INCL_DEBUG("Table of separation energies [MeV] for A=" << theA << ", Z=" << theZ << ":" << std::endl
109  << " proton: " << separationEnergy[Proton] << std::endl
110  << " neutron: " << separationEnergy[Neutron] << std::endl
111  << " delta++: " << separationEnergy[DeltaPlusPlus] << std::endl
112  << " delta+: " << separationEnergy[DeltaPlus] << std::endl
113  << " delta0: " << separationEnergy[DeltaZero] << std::endl
114  << " delta-: " << separationEnergy[DeltaMinus] << std::endl
115  << " pi+: " << separationEnergy[PiPlus] << std::endl
116  << " pi0: " << separationEnergy[PiZero] << std::endl
117  << " pi-: " << separationEnergy[PiMinus] << std::endl
118  );
119 
120  INCL_DEBUG("Table of Fermi energies [MeV] for A=" << theA << ", Z=" << theZ << ":" << std::endl
121  << " proton: " << fermiEnergy[Proton] << std::endl
122  << " neutron: " << fermiEnergy[Neutron] << std::endl
123  << " delta++: " << fermiEnergy[DeltaPlusPlus] << std::endl
124  << " delta+: " << fermiEnergy[DeltaPlus] << std::endl
125  << " delta0: " << fermiEnergy[DeltaZero] << std::endl
126  << " delta-: " << fermiEnergy[DeltaMinus] << std::endl
127  );
128 
129  INCL_DEBUG("Table of Fermi momenta [MeV/c] for A=" << theA << ", Z=" << theZ << ":" << std::endl
130  << " proton: " << fermiMomentum[Proton] << std::endl
131  << " neutron: " << fermiMomentum[Neutron] << std::endl
132  );
133  }
134 
136 
137  switch( particle->getType() )
138  {
139  case Proton:
140  return vProton;
141  break;
142  case Neutron:
143  return vNeutron;
144  break;
145 
146  case PiPlus:
147  case PiZero:
148  case PiMinus:
149  return computePionPotentialEnergy(particle);
150  break;
151 
152  case DeltaPlusPlus:
153  return vDeltaPlusPlus;
154  break;
155  case DeltaPlus:
156  return vDeltaPlus;
157  break;
158  case DeltaZero:
159  return vDeltaZero;
160  break;
161  case DeltaMinus:
162  return vDeltaMinus;
163  break;
164  case Composite:
165  INCL_ERROR("No potential computed for particle of type Cluster.");
166  return 0.0;
167  break;
168  case UnknownParticle:
169  INCL_ERROR("Trying to compute potential energy for an unknown particle.");
170  return 0.0;
171  break;
172  }
173 
174  INCL_ERROR("There is no potential for this type of particle.");
175  return 0.0;
176  }
177 
178  }
179 }
180 
virtual G4double computePotentialEnergy(const Particle *const p) const
std::map< ParticleType, G4double > fermiEnergy
#define INCL_ERROR(x)
int G4int
Definition: G4Types.hh:78
bool G4bool
Definition: G4Types.hh:79
const G4int theA
The mass number of the nucleus.
Isospin-dependent nuclear potential.
Isospin- and energy-independent nuclear potential.
G4ThreadLocal SeparationEnergyFn getSeparationEnergy
Static pointer to the separation-energy function.
G4double getINCLMass(const G4int A, const G4int Z)
Get INCL nuclear mass (in MeV/c^2)
G4INCL::ParticleType getType() const
NuclearPotentialIsospin(const G4int A, const G4int Z, const G4bool pionPotential)
std::map< ParticleType, G4double > separationEnergy
const G4int theZ
The charge number of the nucleus.
G4double computePionPotentialEnergy(const Particle *const p) const
Compute the potential energy for the given pion.
double G4double
Definition: G4Types.hh:76
#define INCL_DEBUG(x)
std::map< ParticleType, G4double > fermiMomentum
G4double pow13(G4double x)
G4ThreadLocal FermiMomentumFn getFermiMomentum