Geant4  10.02.p03
G4INCLNucleus.hh
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 /*
39  * G4INCLNucleus.hh
40  *
41  * \date Jun 5, 2009
42  * \author Pekka Kaitaniemi
43  */
44 
45 #ifndef G4INCLNUCLEUS_HH_
46 #define G4INCLNUCLEUS_HH_
47 
48 #include <list>
49 #include <string>
50 
51 #include "G4INCLParticle.hh"
52 #include "G4INCLEventInfo.hh"
53 #include "G4INCLCluster.hh"
54 #include "G4INCLFinalState.hh"
55 #include "G4INCLStore.hh"
56 #include "G4INCLGlobals.hh"
57 #include "G4INCLParticleTable.hh"
58 #include "G4INCLConfig.hh"
59 #include "G4INCLConfigEnums.hh"
60 #include "G4INCLCluster.hh"
62 
63 namespace G4INCL {
64 
65  class Nucleus : public Cluster {
66  public:
67  Nucleus(G4int mass, G4int charge, Config const * const conf, const G4double universeRadius=-1.);
68  virtual ~Nucleus();
69 
71  Nucleus(const Nucleus &rhs);
72 
74  Nucleus &operator=(const Nucleus &rhs);
75 
80  void initializeParticles();
81 
84  theZ += p->getZ();
85  theA += p->getA();
87  if(p->isNucleon()) {
90  }
92  };
93 
98 
99  G4int getInitialA() const { return theInitialA; };
100  G4int getInitialZ() const { return theInitialZ; };
101 
107  void propagateParticles(G4double step);
108 
111 
117  G4double S = 0.0;
118  ParticleList const &outgoing = theStore->getOutgoingParticles();
119  for(ParticleIter i=outgoing.begin(), e=outgoing.end(); i!=e; ++i) {
120  const ParticleType t = (*i)->getType();
121  switch(t) {
122  case Proton:
123  case Neutron:
124  case DeltaPlusPlus:
125  case DeltaPlus:
126  case DeltaZero:
127  case DeltaMinus:
129  break;
130  case Composite:
131  S += (*i)->getZ() * thePotential->getSeparationEnergy(Proton)
132  + ((*i)->getA() - (*i)->getZ()) * thePotential->getSeparationEnergy(Neutron);
133  break;
134  case PiPlus:
136  break;
137  case PiMinus:
139  break;
140  default:
141  break;
142  }
143  }
144 
147  return S;
148  }
149 
155 
161 
167 
174  G4bool decayMe();
175 
177  void emitInsidePions();
178 
181 
187 
193 
199 
203  }
204 
207 
210  incomingMomentum = p;
211  }
212 
215  return incomingMomentum;
216  }
217 
220 
223 
229 
232  ParticleList const &inside = theStore->getParticles();
233  for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
234  if((*i)->isDelta()) return true;
235  return false;
236  }
237 
241  std::string print();
242 
243  Store* getStore() const {return theStore; };
244  void setStore(Store *s) {
245  delete theStore;
246  theStore = s;
247  };
248 
250 
255  G4bool isEventTransparent() const;
256 
261  G4bool hasRemnant() const { return remnant; }
262 
266  void fillEventInfo(EventInfo *eventInfo);
267 
269 
272  const G4double theTransmissionRadius = theDensity->getTransmissionRadius(p);
273  const G4double theParticleZ = p->getZ();
274  return PhysicalConstants::eSquared*(theZ-theParticleZ)*theParticleZ/theTransmissionRadius;
275  }
276 
282  };
283 
285  ConservationBalance getConservationBalance(EventInfo const &theEventInfo, const G4bool afterRecoil) const;
286 
288  void useFusionKinematics();
289 
298  G4double getSurfaceRadius(Particle const * const particle) const {
299  if(particle->isPion())
300  // Temporarily set RPION = RMAX
301  return getUniverseRadius();
302  //return 0.5*(theDensity->getTransmissionRadius(particle)+getUniverseRadius());
303  else {
304  const G4double pr = particle->getReflectionMomentum()/thePotential->getFermiMomentum(particle);
305  if(pr>=1.)
306  return getUniverseRadius();
307  else
308  return theDensity->getMaxRFromP(particle->getType(), pr);
309  }
310  }
311 
314 
316  void setUniverseRadius(const G4double universeRadius) { theUniverseRadius=universeRadius; }
317 
320 
323 
326 
329  delete theProjectileRemnant;
331  }
332 
335 
338  delete theProjectileRemnant;
339  theProjectileRemnant = NULL;
340  }
341 
351 
353  inline void updatePotentialEnergy(Particle *p) const {
355  }
356 
358  void setDensity(NuclearDensity const * const d) {
359  theDensity=d;
362  };
363 
365  NuclearDensity const *getDensity() const { return theDensity; };
366 
369 
370  private:
377 
378  private:
388 
392 
397 
400 
406 
412 
415 
418 
420  };
421 
422 }
423 
424 #endif /* G4INCLNUCLEUS_HH_ */
G4bool isNucleon() const
void initializeParticles()
G4bool containsDeltas()
Returns true if the nucleus contains any deltas.
ThreeVector incomingMomentum
G4double computeTotalEnergy() const
Compute the current total energy.
Store * getStore() const
void setIncomingAngularMomentum(const ThreeVector &j)
Set the incoming angular-momentum vector.
void setIncomingMomentum(const ThreeVector &p)
Set the incoming momentum vector.
const G4double eSquared
Coulomb conversion factor [MeV*fm].
ThreeVector incomingAngularMomentum
G4bool isPion() const
Is this a pion?
std::string print()
double S(double temp)
Float_t d
virtual ~Nucleus()
G4bool decayOutgoingClusters()
Force the decay of unstable outgoing clusters.
void setInitialEnergy(const G4double e)
Set the initial energy.
G4int heaviside(G4int n)
G4bool isEventTransparent() const
Is the event transparent?
G4int getInitialZ() const
G4bool isNucleusNucleus
true if running a nucleus-nucleus collision
void computeOneNucleonRecoilKinematics()
Compute the recoil kinematics for a 1-nucleon remnant.
ParticleList const & getOutgoingParticles() const
Definition: G4INCLStore.hh:223
void applyFinalState(FinalState *)
void setDensity(NuclearDensity const *const d)
Setter for theDensity.
G4double getFermiMomentum(const Particle *const p) const
Return the Fermi momentum for a particle.
G4double getReflectionMomentum() const
Return the reflection momentum.
G4int projectileA
The mass number of the projectile.
const ThreeVector & getIncomingAngularMomentum() const
Get the incoming angular-momentum vector.
G4double getMaxRFromP(const ParticleType t, const G4double p) const
Get the maximum allowed radius for a given momentum.
G4double initialInternalEnergy
Class for constructing a projectile-like remnant.
void setParticleNucleusCollision()
Set a particle-nucleus collision.
G4double computeExcitationEnergy() const
Compute the current excitation energy.
Struct for conservation laws.
G4double getSeparationEnergy(const Particle *const p) const
Return the separation energy for a particle.
G4int projectileZ
The charge number of the projectile.
G4int getA() const
Returns the baryon number.
G4int getZ() const
Returns the charge number.
G4double computeSeparationEnergyBalance() const
Outgoing - incoming separation energies.
Nucleus & operator=(const Nucleus &rhs)
Dummy assignment operator to silence Coverity warning.
G4int getNumberOfEnteringNeutrons() const
int G4int
Definition: G4Types.hh:78
G4double getTransmissionRadius(Particle const *const p) const
The radius used for calculating the transmission coefficient.
void updatePotentialEnergy(Particle *p) const
Update the particle potential energy.
G4double getInitialEnergy() const
Get the initial energy.
static const double s
Definition: G4SIunits.hh:168
void useFusionKinematics()
Adjust the kinematics for complete-fusion events.
G4bool isTargetSpectator() const
G4INCL::ParticleType getType() const
G4bool decayOutgoingDeltas()
Force the decay of outgoing deltas.
Simple container for output of event results.
void setDensity(NuclearDensity const *const d)
Setter for theDensity.
Book & getBook()
Definition: G4INCLStore.hh:259
bool G4bool
Definition: G4Types.hh:79
G4double getExcitationEnergy() const
Get the excitation energy of the nucleus.
NuclearDensity const * theDensity
Pointer to the NuclearDensity object.
void setPotentialEnergy(G4double v)
Set the particle potential energy.
ParticleList const & getParticles() const
Definition: G4INCLStore.hh:253
void setUniverseRadius(const G4double universeRadius)
Setter for theUniverseRadius.
G4bool hasRemnant() const
Does the nucleus give a cascade remnant?
G4double getSurfaceRadius(Particle const *const particle) const
Get the maximum allowed radius for a given particle.
void deleteProjectileRemnant()
Delete the projectile remnant.
G4bool isNucleusNucleusCollision() const
Is it a nucleus-nucleus collision?
G4int theNpInitial
The number of entering protons.
G4bool decayMe()
Force the phase-space decay of the Nucleus.
INCL_DECLARE_ALLOCATION_POOL(Nucleus)
ParticleSampler * theParticleSampler
G4int theNnInitial
The number of entering neutrons.
ProjectileRemnant * getProjectileRemnant() const
Get the projectile remnant.
void incrementCascading()
Definition: G4INCLBook.hh:77
G4bool getTryCompoundNucleus()
G4int getInitialA() const
G4double getInitialInternalEnergy() const
G4double theExcitationEnergy
ThreeVector computeCenterOfMass() const
Compute the current center-of-mass position.
void propagateParticles(G4double step)
G4bool decayInsideDeltas()
Force the decay of deltas inside the nucleus.
void finalizeProjectileRemnant(const G4double emissionTime)
Finalise the projectile remnant.
NuclearPotential::INuclearPotential const * thePotential
Pointer to the NuclearPotential object.
G4double getTransmissionBarrier(Particle const *const p)
Get the transmission barrier.
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
G4double getUniverseRadius() const
Getter for theUniverseRadius.
void emitInsidePions()
Force emission of all pions inside the nucleus.
NuclearDensity const * getDensity() const
Getter for theDensity.
void setProjectileRemnant(ProjectileRemnant *const c)
Set the projectile remnant.
void setStore(Store *s)
NuclearPotential::INuclearPotential const * getPotential() const
Getter for thePotential.
G4int getNumberOfEnteringProtons() const
void fillEventInfo(EventInfo *eventInfo)
void insertParticle(Particle *p)
Insert a new particle (e.g. a projectile) in the nucleus.
virtual G4double computePotentialEnergy(const Particle *const p) const =0
double G4double
Definition: G4Types.hh:76
Nucleus(G4int mass, G4int charge, Config const *const conf, const G4double universeRadius=-1.)
void computeRecoilKinematics()
Compute the recoil momentum and spin of the nucleus.
ThreeVector initialCenterOfMass
const ThreeVector & getIncomingMomentum() const
Get the incoming momentum vector.
ConservationBalance getConservationBalance(EventInfo const &theEventInfo, const G4bool afterRecoil) const
Compute charge, mass, energy and momentum balance.
void setNucleusNucleusCollision()
Set a nucleus-nucleus collision.
G4double initialEnergy
ProjectileRemnant * theProjectileRemnant
Pointer to the quasi-projectile.
ParticleList::const_iterator ParticleIter
void particleHasEntered(Particle *const particle)
Move a particle from incoming to inside.
Definition: G4INCLStore.cc:188
G4double theUniverseRadius
The radius of the universe.