Geant4  9.6.p02
 All Classes 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 
48 #include "G4INCLParticleTable.hh"
49 #include "G4INCLGlobals.hh"
50 
51 namespace G4INCL {
52 
53  namespace NuclearPotential {
54 
55  // Constructors
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  G4double theFermiMomentum;
73  // Use momentum RMS from tables to define the Fermi momentum for light
74  // nuclei
75  theFermiMomentum = Math::sqrtFiveThirds * ParticleTable::getMomentumRMS(theA,theZ);
76  else
77  theFermiMomentum = PhysicalConstants::Pf;
78 
79  fermiMomentum[Proton] = theFermiMomentum * Math::pow13(2.*ZOverA);
80  const G4double theProtonFermiEnergy = std::sqrt(fermiMomentum[Proton]*fermiMomentum[Proton] + mp*mp) - mp;
81  fermiEnergy[Proton] = theProtonFermiEnergy;
82  // Use separation energies from the ParticleTable
83  const G4double theProtonSeparationEnergy = ParticleTable::getSeparationEnergy(Proton,theA,theZ);
84  separationEnergy[Proton] = theProtonSeparationEnergy;
85  vProton = theProtonFermiEnergy + theProtonSeparationEnergy;
86 
87  fermiMomentum[Neutron] = theFermiMomentum * Math::pow13(2.*(1.-ZOverA));
88  const G4double theNeutronFermiEnergy = std::sqrt(fermiMomentum[Neutron]*fermiMomentum[Neutron] + mn*mn) - mn;
89  fermiEnergy[Neutron] = theNeutronFermiEnergy;
90  // Use separation energies from the ParticleTable
91  const G4double theNeutronSeparationEnergy = ParticleTable::getSeparationEnergy(Neutron,theA,theZ);
92  separationEnergy[Neutron] = theNeutronSeparationEnergy;
93  vNeutron = theNeutronFermiEnergy + theNeutronSeparationEnergy;
94 
95  vDeltaPlus = vProton;
96  vDeltaZero = vNeutron;
97  vDeltaPlusPlus = 2.*vDeltaPlus - vDeltaZero;
98  vDeltaMinus = 2.*vDeltaZero - vDeltaPlus;
99 
100  separationEnergy[DeltaPlusPlus] = 2.*theProtonSeparationEnergy - theNeutronSeparationEnergy;
101  separationEnergy[DeltaPlus] = theProtonSeparationEnergy;
102  separationEnergy[DeltaZero] = theNeutronSeparationEnergy;
103  separationEnergy[DeltaMinus] = 2.*theNeutronSeparationEnergy - theProtonSeparationEnergy;
104 
106  fermiEnergy[DeltaPlus] = vDeltaPlus - separationEnergy[DeltaPlus];
107  fermiEnergy[DeltaZero] = vDeltaZero - separationEnergy[DeltaZero];
108  fermiEnergy[DeltaMinus] = vDeltaMinus - separationEnergy[DeltaMinus];
109  }
110 
112 
113  switch( particle->getType() )
114  {
115  case Proton:
116  return vProton;
117  break;
118  case Neutron:
119  return vNeutron;
120  break;
121 
122  case PiPlus:
123  case PiZero:
124  case PiMinus:
125  return computePionPotentialEnergy(particle);
126  break;
127 
128  case DeltaPlusPlus:
129  return vDeltaPlusPlus;
130  break;
131  case DeltaPlus:
132  return vDeltaPlus;
133  break;
134  case DeltaZero:
135  return vDeltaZero;
136  break;
137  case DeltaMinus:
138  return vDeltaMinus;
139  break;
140  case Composite:
141  ERROR("No potential computed for particle of type Cluster.");
142  return 0.0;
143  break;
144  case UnknownParticle:
145  ERROR("Trying to compute potential energy for an unknown particle.");
146  return 0.0;
147  break;
148  }
149 
150  ERROR("There is no potential for this type of particle.");
151  return 0.0;
152  }
153 
154  }
155 }
156