Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4INCLNucleus.hh
이 파일의 문서화 페이지로 가기
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, G4int strangess, 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();
86  theS += p->getS();
88  if(p->isNucleon()) {
91  }
92  if(p->isPion()) {
95  }
96  if(p->isKaon() || p->isAntiKaon()) {
99  }
101  };
102 
106  void applyFinalState(FinalState *);
107 
108  G4int getInitialA() const { return theInitialA; };
109  G4int getInitialZ() const { return theInitialZ; };
110  G4int getInitialS() const { return theInitialS; };
111 
117  void propagateParticles(G4double step);
118 
123 
129  G4double S = 0.0;
130  ParticleList const &outgoing = theStore->getOutgoingParticles();
131  for(ParticleIter i=outgoing.begin(), e=outgoing.end(); i!=e; ++i) {
132  const ParticleType t = (*i)->getType();
133  switch(t) {
134  case Proton:
135  case Neutron:
136  case DeltaPlusPlus:
137  case DeltaPlus:
138  case DeltaZero:
139  case DeltaMinus:
140  case Lambda:
141  case PiPlus:
142  case PiMinus:
143  case KPlus:
144  case KMinus:
145  case SigmaPlus:
146  case SigmaZero:
147  case SigmaMinus:
149  break;
150  case Composite:
151  S += (*i)->getZ() * thePotential->getSeparationEnergy(Proton)
152  + ((*i)->getA() - (*i)->getZ()) * thePotential->getSeparationEnergy(Neutron);
153  break;
154  default:
155  break;
156  }
157  }
158 
165  return S;
166  }
167 
173 
179 
185 
191 
196  G4bool decayOutgoingSigmaZero(G4double timeThreshold);
197 
203 
209 
216  G4bool decayMe();
217 
219  void emitInsidePions();
220 
223 
226 
229 
232 
238 
244 
250 
254  }
255 
258 
262  }
263 
266  return incomingMomentum;
267  }
268 
271 
274 
280 
283  ParticleList const &inside = theStore->getParticles();
284  for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
285  if((*i)->isDelta()) return true;
286  return false;
287  }
288 
291  ParticleList const &inside = theStore->getParticles();
292  for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
293  if((*i)->isAntiKaon()) return true;
294  return false;
295  }
296 
299  ParticleList const &inside = theStore->getParticles();
300  for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
301  if((*i)->isLambda()) return true;
302  return false;
303  }
304 
307  ParticleList const &inside = theStore->getParticles();
308  for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
309  if((*i)->isSigma()) return true;
310  return false;
311  }
312 
314  inline G4bool containsKaon() {
315  ParticleList const &inside = theStore->getParticles();
316  for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
317  if((*i)->isKaon()) return true;
318  return false;
319  }
320 
322  inline G4bool containsEtas() {
323  ParticleList const &inside = theStore->getParticles();
324  for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
325  if((*i)->isEta()) return true;
326  return false;
327  }
328 
331  ParticleList const &inside = theStore->getParticles();
332  for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
333  if((*i)->isOmega()) return true;
334  return false;
335  }
336 
340  std::string print();
341 
342  Store* getStore() const {return theStore; };
343  void setStore(Store *s) {
344  delete theStore;
345  theStore = s;
346  };
347 
349 
354  G4bool isEventTransparent() const;
355 
360  G4bool hasRemnant() const { return remnant; }
361 
365  void fillEventInfo(EventInfo *eventInfo);
366 
368 
371  const G4double theTransmissionRadius = theDensity->getTransmissionRadius(p);
372  const G4double theParticleZ = p->getZ();
373  return PhysicalConstants::eSquared*(theZ-theParticleZ)*theParticleZ/theTransmissionRadius;
374  }
375 
380  G4int Z, A, S;
381  };
382 
384  ConservationBalance getConservationBalance(EventInfo const &theEventInfo, const G4bool afterRecoil) const;
385 
387  void useFusionKinematics();
388 
397  G4double getSurfaceRadius(Particle const * const particle) const {
398  if(particle->isNucleon() || particle->isLambda() || particle->isResonance()){
399  const G4double pr = particle->getReflectionMomentum()/thePotential->getFermiMomentum(particle);
400  if(pr>=1.)
401  return getUniverseRadius();
402  else
403  return theDensity->getMaxRFromP(particle->getType(), pr);
404  }
405  else {
406  // Temporarily set RPION = RMAX
407  return getUniverseRadius();
408  //return 0.5*(theDensity->getTransmissionRadius(particle)+getUniverseRadius());
409  }
410  }
411 
414 
416  void setUniverseRadius(const G4double universeRadius) { theUniverseRadius=universeRadius; }
417 
420 
423 
426 
429  delete theProjectileRemnant;
431  }
432 
435 
438  delete theProjectileRemnant;
439  theProjectileRemnant = NULL;
440  }
441 
451 
453  inline void updatePotentialEnergy(Particle *p) const {
455  }
456 
458  void setDensity(NuclearDensity const * const d) {
459  theDensity=d;
462  };
463 
465  NuclearDensity const *getDensity() const { return theDensity; };
466 
469 
470  private:
477 
478  private:
494 
498 
505 
508 
514 
520 
523 
526 
528  };
529 
530 }
531 
532 #endif /* G4INCLNUCLEUS_HH_ */
void setProjectileRemnant(ProjectileRemnant *const c)
Set the projectile remnant.
ParticleList::const_iterator ParticleIter
NuclearPotential::INuclearPotential const * getPotential() const
Getter for thePotential.
G4bool decayInsideDeltas()
Force the decay of deltas inside the nucleus.
ProjectileRemnant * theProjectileRemnant
Pointer to the quasi-projectile.
G4double getTransmissionRadius(Particle const *const p) const
The radius used for calculating the transmission coefficient.
G4double computeExcitationEnergy() const
Compute the current excitation energy.
G4int emitInsideLambda()
Force emission of all Lambda (desexitation code with strangeness not implanted yet) ...
void finalizeProjectileRemnant(const G4double emissionTime)
Finalise the projectile remnant.
ParticleList const & getParticles() const
Definition: G4INCLStore.hh:253
ParticleSampler * theParticleSampler
#define INCL_DECLARE_ALLOCATION_POOL(T)
G4bool containsKaon()
Returns true if the nucleus contains any Kaons.
G4int getNumberOfEnteringNeutrons() const
void particleHasEntered(Particle *const particle)
Move a particle from incoming to inside.
Definition: G4INCLStore.cc:188
G4int getS() const
Returns the strangeness number.
G4bool containsOmegas()
Returns true if the nucleus contains any omegas.
void setIncomingAngularMomentum(const ThreeVector &j)
Set the incoming angular-momentum vector.
G4bool decayInsideStrangeParticles()
Force the transformation of strange particles into a Lambda;.
G4double initialEnergy
NuclearPotential::INuclearPotential const * thePotential
Pointer to the NuclearPotential object.
const char * p
Definition: xmltok.h:285
ProjectileRemnant * getProjectileRemnant() const
Get the projectile remnant.
void emitInsidePions()
Force emission of all pions inside the nucleus.
G4double initialInternalEnergy
G4double getSurfaceRadius(Particle const *const particle) const
Get the maximum allowed radius for a given particle.
Book & getBook()
Definition: G4INCLStore.hh:259
void setDensity(NuclearDensity const *const d)
Setter for theDensity.
void propagateParticles(G4double step)
G4double getMaxRFromP(const ParticleType t, const G4double p) const
Get the maximum allowed radius for a given momentum.
G4int theNnInitial
The number of entering neutrons.
void applyFinalState(FinalState *)
NuclearDensity const * theDensity
Pointer to the NuclearDensity object.
G4int getNumberOfEnteringKaons() const
void deleteProjectileRemnant()
Delete the projectile remnant.
G4bool isResonance() const
Is it a resonance?
G4double theExcitationEnergy
void computeOneNucleonRecoilKinematics()
Compute the recoil kinematics for a 1-nucleon remnant.
NuclearDensity const * getDensity() const
Getter for theDensity.
G4double getFermiMomentum(const Particle *const p) const
Return the Fermi momentum for a particle.
G4bool hasRemnant() const
Does the nucleus give a cascade remnant?
void updatePotentialEnergy(Particle *p) const
Update the particle potential energy.
double S(double temp)
G4int projectileZ
The charge number of the projectile.
G4int getInitialA() const
G4bool isLambda() const
Is this a Lambda?
G4int getNumberOfEnteringProtons() const
G4double computeTotalEnergy() const
Compute the current total energy.
void initializeParticles()
G4int theNpionplusInitial
The number of entering pions.
void fillEventInfo(EventInfo *eventInfo)
const XML_Char * s
Definition: expat.h:262
double G4double
Definition: G4Types.hh:76
bool G4bool
Definition: G4Types.hh:79
G4int theNkaonplusInitial
The number of entering kaons.
G4int theNkaonminusInitial
G4int getInitialZ() const
G4int getInitialS() const
void setDensity(NuclearDensity const *const d)
Setter for theDensity.
G4double getReflectionMomentum() const
Return the reflection momentum.
G4double getSeparationEnergy(const Particle *const p) const
Return the separation energy for a particle.
void useFusionKinematics()
Adjust the kinematics for complete-fusion events.
G4int projectileS
The strangeness number of the projectile.
void setUniverseRadius(const G4double universeRadius)
Setter for theUniverseRadius.
void setPotentialEnergy(G4double v)
Set the particle potential energy.
Float_t d
G4int getZ() const
Returns the charge number.
G4double getUniverseRadius() const
Getter for theUniverseRadius.
void setParticleNucleusCollision()
Set a particle-nucleus collision.
G4int getA() const
Returns the baryon number.
Simple container for output of event results.
G4bool decayMe()
Force the phase-space decay of the Nucleus.
const ThreeVector & getIncomingMomentum() const
Get the incoming momentum vector.
void incrementCascading()
Definition: G4INCLBook.hh:77
void emitInsideStrangeParticles()
Force emission of all strange particles inside the nucleus.
G4double getInitialInternalEnergy() const
G4bool isEventTransparent() const
Is the event transparent?
ThreeVector initialCenterOfMass
G4bool containsSigma()
Returns true if the nucleus contains any Sigma.
Nucleus(G4int mass, G4int charge, G4int strangess, Config const *const conf, const G4double universeRadius=-1.)
G4bool emitInsideKaon()
Force emission of all Kaon inside the nucleus.
G4bool isTargetSpectator() const
Struct for conservation laws.
G4int theNpionminusInitial
G4double theUniverseRadius
The radius of the universe.
virtual ~Nucleus()
ThreeVector incomingAngularMomentum
Nucleus & operator=(const Nucleus &rhs)
Dummy assignment operator to silence Coverity warning.
Class for constructing a projectile-like remnant.
int G4int
Definition: G4Types.hh:78
G4bool decayOutgoingSigmaZero(G4double timeThreshold)
Force the decay of outgoing Neutral Sigma.
ThreeVector incomingMomentum
G4bool decayOutgoingDeltas()
Force the decay of outgoing deltas.
void setIncomingMomentum(const ThreeVector &p)
Set the incoming momentum vector.
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
G4INCL::ParticleType getType() const
G4bool isNucleusNucleus
true if running a nucleus-nucleus collision
G4bool containsDeltas()
Returns true if the nucleus contains any deltas.
G4bool isKaon() const
Is this a Kaon?
G4int getNumberOfEnteringPions() const
G4int theNpInitial
The number of entering protons.
G4double getInitialEnergy() const
Get the initial energy.
const G4double eSquared
Coulomb conversion factor [MeV*fm].
G4double computeSeparationEnergyBalance() const
Outgoing - incoming separation energies.
G4bool isPion() const
Is this a pion?
void computeRecoilKinematics()
Compute the recoil momentum and spin of the nucleus.
G4double getTransmissionBarrier(Particle const *const p)
Get the transmission barrier.
G4bool isAntiKaon() const
Is this an antiKaon?
G4bool decayOutgoingNeutralKaon()
Force the transformation of outgoing Neutral Kaon into propation eigenstate.
ThreeVector computeCenterOfMass() const
Compute the current center-of-mass position.
G4bool containsAntiKaon()
Returns true if the nucleus contains any anti Kaons.
std::string print()
G4bool containsLambda()
Returns true if the nucleus contains any Lambda.
void setInitialEnergy(const G4double e)
Set the initial energy.
ParticleList const & getOutgoingParticles() const
Definition: G4INCLStore.hh:223
G4double getExcitationEnergy() const
Get the excitation energy of the nucleus.
G4bool decayOutgoingClusters()
Force the decay of unstable outgoing clusters.
G4bool isNucleon() const
void insertParticle(Particle *p)
Insert a new particle (e.g. a projectile) in the nucleus.
G4bool containsEtas()
Returns true if the nucleus contains any etas.
virtual G4double computePotentialEnergy(const Particle *const p) const =0
Store * getStore() const
void setNucleusNucleusCollision()
Set a nucleus-nucleus collision.
const ThreeVector & getIncomingAngularMomentum() const
Get the incoming angular-momentum vector.
G4int heaviside(G4int n)
G4bool getTryCompoundNucleus()
void setStore(Store *s)
G4int projectileA
The mass number of the projectile.
G4bool isNucleusNucleusCollision() const
Is it a nucleus-nucleus collision?
ConservationBalance getConservationBalance(EventInfo const &theEventInfo, const G4bool afterRecoil) const
Compute charge, mass, energy and momentum balance.
G4bool decayOutgoingPionResonances(G4double timeThreshold)
Force the decay of outgoing PionResonances (eta/omega).