Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
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"
58#include "G4INCLConfig.hh"
59#include "G4INCLConfigEnums.hh"
60#include "G4INCLCluster.hh"
62
63namespace G4INCL {
64
66
67 class Nucleus : public Cluster {
68 public:
69 Nucleus(G4int mass, G4int charge, G4int strangess, Config const * const conf, const G4double universeRadius=-1., AnnihilationType AType=Def);
70 virtual ~Nucleus();
71
72 /// \brief Dummy copy constructor to silence Coverity warning
73 Nucleus(const Nucleus &rhs);
74
75 /// \brief Dummy assignment operator to silence Coverity warning
77
79 void setAType(AnnihilationType type);
80
81 /**
82 * Call the Cluster method to generate the initial distribution of
83 * particles. At the beginning all particles are assigned as spectators.
84 */
86
87 /// \brief Insert a new particle (e.g. a projectile) in the nucleus.
89 theZ += p->getZ();
90 theA += p->getA();
91 theS += p->getS();
92 theStore->particleHasEntered(p);
93 if(p->isNucleon()) {
96 }
97 if(p->isLambda())
98 theNlInitial++;
99 if(p->getType() == SigmaPlus)
100 theNSpInitial++;
101 if(p->getType() == SigmaZero)
102 theNSzInitial++;
103 if(p->getType() == SigmaMinus)
104 theNSmInitial++;
105
106 if(p->isPion()) {
107 theNpionplusInitial += Math::heaviside(ParticleTable::getIsospin(p->getType()));
108 theNpionminusInitial += Math::heaviside(-ParticleTable::getIsospin(p->getType()));
109 }
110 if(p->isKaon() || p->isAntiKaon()) {
111 theNkaonplusInitial += Math::heaviside(ParticleTable::getIsospin(p->getType()));
112 theNkaonminusInitial += Math::heaviside(-ParticleTable::getIsospin(p->getType()));
113 }
114 if(p->isAntiNucleon()) {
115 if (p->getZ()<0) theNantiprotonInitial += Math::heaviside(-ParticleTable::getIsospin(p->getType()));
116 else theNantineutronInitial += Math::heaviside(ParticleTable::getIsospin(p->getType()));
117 }
118 if(!p->isTargetSpectator()) theStore->getBook().incrementCascading();
119 };
120
121 /**
122 * Apply reaction final state information to the nucleus.
123 */
125
126 G4int getInitialA() const { return theInitialA; };
127 G4int getInitialZ() const { return theInitialZ; };
128 G4int getInitialS() const { return theInitialS; };
129
130 /**
131 * Propagate the particles one time step.
132 *
133 * @param step length of the time step
134 */
135 void propagateParticles(G4double step);
136
137 G4int getNumberOfEnteringProtons() const { return theNpInitial; };
138 G4int getNumberOfEnteringNeutrons() const { return theNnInitial; };
139 G4int getNumberOfEnteringPions() const { return theNpionplusInitial+theNpionminusInitial; };
140 G4int getNumberOfEnteringKaons() const { return theNkaonplusInitial+theNkaonminusInitial; };
141 G4int getNumberOfEnteringantiProtons() const { return theNantiprotonInitial; };
142 G4int getNumberOfEnteringantiNeutrons() const { return theNantineutronInitial; };
143
144 /** \brief Outgoing - incoming separation energies.
145 *
146 * Used by CDPP.
147 */
149 G4double S = 0.0;
150 ParticleList const &outgoing = theStore->getOutgoingParticles();
151 for(ParticleIter i=outgoing.begin(), e=outgoing.end(); i!=e; ++i) {
152 const ParticleType t = (*i)->getType();
153 switch(t) {
154 case Proton:
155 case Neutron:
156 case DeltaPlusPlus:
157 case DeltaPlus:
158 case DeltaZero:
159 case DeltaMinus:
160 case Lambda:
161 case PiPlus:
162 case PiMinus:
163 case KPlus:
164 case KMinus:
165 case KZero:
166 case KZeroBar:
167 case KShort:
168 case KLong:
169 case SigmaPlus:
170 case SigmaZero:
171 case SigmaMinus:
172 S += thePotential->getSeparationEnergy(*i);
173 break;
174 case antiSigmaPlus:
175 case antiSigmaZero:
176 case antiSigmaMinus:
177 case antiLambda:
178 case antiProton:
179 case antiNeutron:
180 S -= thePotential->getSeparationEnergy(*i);
181 break;
182 case Composite:
183 S += (*i)->getZ() * thePotential->getSeparationEnergy(Proton)
184 + ((*i)->getA() + (*i)->getS() - (*i)->getZ()) * thePotential->getSeparationEnergy(Neutron)
185 - (*i)->getS() * thePotential->getSeparationEnergy(Lambda);
186 break;
187 case antiComposite:
188 S -= (*i)->getZ() * thePotential->getSeparationEnergy(antiProton)
189 + ((*i)->getA() + (*i)->getS() - (*i)->getZ()) * thePotential->getSeparationEnergy(antiNeutron);
190 break;
191 default:
192 break;
193 }
194 }
195
196 S -= theNpInitial * thePotential->getSeparationEnergy(Proton);
197 S -= theNnInitial * thePotential->getSeparationEnergy(Neutron);
198 S -= theNlInitial * thePotential->getSeparationEnergy(Lambda);
199 S -= theNSpInitial * thePotential->getSeparationEnergy(SigmaPlus);
200 S -= theNSzInitial * thePotential->getSeparationEnergy(SigmaZero);
201 S -= theNSmInitial * thePotential->getSeparationEnergy(SigmaMinus);
202 S -= theNpionplusInitial*thePotential->getSeparationEnergy(PiPlus);;
203 S -= theNkaonplusInitial*thePotential->getSeparationEnergy(KPlus);
204 S -= theNpionminusInitial*thePotential->getSeparationEnergy(PiMinus);
205 S -= theNkaonminusInitial*thePotential->getSeparationEnergy(KMinus);
206 S += theNantiprotonInitial*thePotential->getSeparationEnergy(antiProton);
207 S += theNantineutronInitial*thePotential->getSeparationEnergy(antiNeutron);
208 return S;
209 }
210
211 /** \brief Force the decay of outgoing deltas.
212 *
213 * \return true if any delta was forced to decay.
214 */
216
217 /** \brief Force the decay of deltas inside the nucleus.
218 *
219 * \return true if any delta was forced to decay.
220 */
222
223 /** \brief Force the transformation of strange particles into a Lambda;
224 *
225 * \return true if any strange particles was forced to absorb.
226 */
228
229 /** \brief Force the decay of outgoing PionResonances (eta/omega).
230 *
231 * \return true if any eta was forced to decay.
232 */
234
235 /** \brief Force the decay of outgoing Neutral Sigma.
236 *
237 * \return true if any Sigma was forced to decay.
238 */
240
241 /** \brief Force the transformation of outgoing Neutral Kaon into propation eigenstate.
242 *
243 * \return true if any kaon was forced to decay.
244 */
246
247 /** \brief Force the decay of unstable outgoing clusters.
248 *
249 * \return true if any cluster was forced to decay.
250 */
252
253 /** \brief Force the phase-space decay of the Nucleus.
254 *
255 * Only applied if Z==0 or N==0.
256 *
257 * \return true if the nucleus was forced to decay.
258 */
259 G4bool decayMe();
260
261 /// \brief Force emission of all pions inside the nucleus.
262 void emitInsidePions();
263
264 /// \brief Force emission of all strange particles inside the nucleus.
266
267 /// \brief Force emission of all Lambda (desexitation code with strangeness not implanted yet)
269
270 /// \brief Force emission of all Antilambda
272
273 /// \brief Force emission of all Kaon inside the nucleus
275
276 /// \brief Force emission of all Antinucleon inside the nucleus
278
279 /** \brief Compute the recoil momentum and spin of the nucleus. */
281
282 /** \brief Compute the current center-of-mass position.
283 *
284 * \return the center-of-mass position vector [fm].
285 */
287
288 /** \brief Compute the current total energy.
289 *
290 * \return the total energy [MeV]
291 */
293
294 /** \brief Compute the current excitation energy.
295 *
296 * \return the excitation energy [MeV]
297 */
299
300 /** \brief Set the incoming angular-momentum vector. */
302 incomingAngularMomentum = j;
303 }
304
305 /** \brief Get the incoming angular-momentum vector. */
306 const ThreeVector &getIncomingAngularMomentum() const { return incomingAngularMomentum; }
307
308 /** \brief Set the incoming momentum vector. */
310 incomingMomentum = p;
311 }
312
313 /** \brief Get the incoming momentum vector. */
315 return incomingMomentum;
316 }
317
318 /** \brief Set the initial energy. */
319 void setInitialEnergy(const G4double e) { initialEnergy = e; }
320
321 /** \brief Get the initial energy. */
322 G4double getInitialEnergy() const { return initialEnergy; }
323
324 /** \brief Get the excitation energy of the nucleus.
325 *
326 * Method computeRecoilKinematics() should be called first.
327 */
329
330 ///\brief Returns true if the nucleus contains any deltas.
332 ParticleList const &inside = theStore->getParticles();
333 for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
334 if((*i)->isDelta()) return true;
335 return false;
336 }
337
338 ///\brief Returns true if the nucleus contains any anti Kaons.
340 ParticleList const &inside = theStore->getParticles();
341 for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
342 if((*i)->isAntiKaon()) return true;
343 return false;
344 }
345
346 ///\brief Returns true if the nucleus contains any Lambda.
348 ParticleList const &inside = theStore->getParticles();
349 for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
350 if((*i)->isLambda()) return true;
351 return false;
352 }
353
354 ///\brief Returns true if the nucleus contains any Antilambda.
356 ParticleList const &inside = theStore->getParticles();
357 for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
358 if((*i)->isAntiLambda()) return true;
359 return false;
360 }
361
362 ///\brief Returns true if the nucleus contains any Sigma.
364 ParticleList const &inside = theStore->getParticles();
365 for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
366 if((*i)->isSigma()) return true;
367 return false;
368 }
369
370 ///\brief Returns true if the nucleus contains any Kaons.
372 ParticleList const &inside = theStore->getParticles();
373 for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
374 if((*i)->isKaon()) return true;
375 return false;
376 }
377
378 ///\brief Returns true if the nucleus contains any Antinucleons.
380 ParticleList const &inside = theStore->getParticles();
381 for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
382 if((*i)->isAntiNucleon()) return true;
383 return false;
384 }
385
386 ///\brief Returns true if the nucleus contains any etas.
388 ParticleList const &inside = theStore->getParticles();
389 for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
390 if((*i)->isEta()) return true;
391 return false;
392 }
393
394 ///\brief Returns true if the nucleus contains any omegas.
396 ParticleList const &inside = theStore->getParticles();
397 for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
398 if((*i)->isOmega()) return true;
399 return false;
400 }
401
402 ///\brief Resets the src partners.
403 inline void resetSrc(){
404 ParticleList const &inside = theStore->getParticles();
405 for(ParticleIter i=inside.begin(), e=inside.end(); i!=e; ++i)
406 (*i)->resetSrcPartner();
407 }
408
409 inline void setSrcInternalEnergy(double value){
410 srcInternalEnergy = value;
411 }
412
413 inline void updateInternalEnergy(double value){
414 initialInternalEnergy += value;
415 }
416
418 return srcInternalEnergy;
419 }
420
421
422
423 /**
424 * Print the nucleus info
425 */
426 std::string print();
427
428 Store* getStore() const {return theStore; };
429 void setStore(Store *str) {
430 delete theStore;
431 theStore = str;
432 };
433
434 G4double getInitialInternalEnergy() const { return initialInternalEnergy; };
435
436 /** \brief Is the event transparent?
437 *
438 * To be called at the end of the cascade.
439 **/
441
442 /** \brief Does the nucleus give a cascade remnant?
443 *
444 * To be called after computeRecoilKinematics().
445 **/
446 G4bool hasRemnant() const { return remnant; }
447
448 /**
449 * Fill the event info which contains INCL output data
450 */
451 void fillEventInfo(EventInfo *eventInfo);
452
453 G4bool getTryCompoundNucleus() { return tryCN; }
454
455 /// \brief Get the transmission barrier
457 const G4double theTransmissionRadius = theDensity->getTransmissionRadius(p);
458 const G4double theParticleZ = p->getZ();
459 return PhysicalConstants::eSquared*(theZ-theParticleZ)*theParticleZ/theTransmissionRadius;
460 }
461
462 /// \brief Struct for conservation laws
468
469 void restoreSrcPartner(Particle *particle, ThreeVector m);
470
471 /// \brief Compute charge, mass, energy and momentum balance
472 ConservationBalance getConservationBalance(EventInfo const &theEventInfo, const G4bool afterRecoil) const;
473
474 /// \brief Adjust the kinematics for complete-fusion events
475 void useFusionKinematics();
476
477 /** \brief Get the maximum allowed radius for a given particle.
478 *
479 * Calls the NuclearDensity::getMaxRFromP() method for nucleons and deltas,
480 * and the NuclearDensity::getTrasmissionRadius() method for pions.
481 *
482 * \param particle pointer to a particle
483 * \return surface radius
484 */
485 G4double getSurfaceRadius(Particle const * const particle) const {
486 if(particle->isNucleon() || particle->isLambda() || particle->isResonance()){
487 const G4double pr = particle->getReflectionMomentum()/thePotential->getFermiMomentum(particle);
488 if(pr>=1.)
489 return getUniverseRadius();
490 else
491 return theDensity->getMaxRFromP(particle->getType(), pr);
492 }
493 else {
494 // Temporarily set RPION = RMAX
495 return getUniverseRadius();
496 //return 0.5*(theDensity->getTransmissionRadius(particle)+getUniverseRadius());
497 }
498 }
499
500 /// \brief Getter for theUniverseRadius.
501 G4double getUniverseRadius() const { return theUniverseRadius; }
502
503 /// \brief Setter for theUniverseRadius.
504 void setUniverseRadius(const G4double universeRadius) { theUniverseRadius=universeRadius; }
505
506 /// \brief Is it a nucleus-nucleus collision?
507 G4bool isNucleusNucleusCollision() const { return isNucleusNucleus; }
508
509 /// \brief Set a nucleus-nucleus collision
510 void setNucleusNucleusCollision() { isNucleusNucleus=true; }
511
512 /// \brief Set a particle-nucleus collision
513 void setParticleNucleusCollision() { isNucleusNucleus=false; }
514
515 /// \brief Set the projectile remnant
517 delete theProjectileRemnant;
518 theProjectileRemnant = c;
519 }
520
521 /// \brief Get the projectile remnant
522 ProjectileRemnant *getProjectileRemnant() const { return theProjectileRemnant; }
523
524 /// \brief Delete the projectile remnant
526 delete theProjectileRemnant;
527 theProjectileRemnant = NULL;
528 }
529
530 /** \brief Finalise the projectile remnant
531 *
532 * Complete the treatment of the projectile remnant. If it contains
533 * nucleons, assign its excitation energy and spin. Move stuff to the
534 * outgoing list, if appropriate.
535 *
536 * \param emissionTime the emission time of the projectile remnant
537 */
538 void finalizeProjectileRemnant(const G4double emissionTime);
539
540 /// \brief Update the particle potential energy.
541 inline void updatePotentialEnergy(Particle *p) const {
542 p->setPotentialEnergy(thePotential->computePotentialEnergy(p));
543 }
544
545 /// \brief Setter for theDensity
546 void setDensity(NuclearDensity const * const d) {
547 theDensity=d;
549 theParticleSampler->setDensity(theDensity);
550 };
551
552 /// \brief Getter for theDensity
553 NuclearDensity const *getDensity() const { return theDensity; };
554
555 /// \brief Getter for thePotential
556 NuclearPotential::INuclearPotential const *getPotential() const { return thePotential; };
557
558 /// \brief Getter for theAnnihilationType
559 AnnihilationType getAnnihilationType() const { return theAType; }; //D
560
561 /// \brief Setter for theAnnihilationType
563 theAType = at;
564 }; //D
565
566 private:
567 /** \brief Compute the recoil kinematics for a 1-nucleon remnant.
568 *
569 * Puts the remnant nucleon on mass shell and tries to enforce approximate
570 * energy conservation by modifying the masses of the outgoing particles.
571 */
572 void computeOneNucleonRecoilKinematics();
573
574 private:
575
576 G4int theInitialZ, theInitialA, theInitialS;
577 /// \brief The number of entering protons
578 G4int theNpInitial;
579 /// \brief The number of entering neutrons
580 G4int theNnInitial;
581 /// \brief The number of entering hyperons
582 G4int theNlInitial;
583 G4int theNSpInitial;
584 G4int theNSzInitial;
585 G4int theNSmInitial;
586 /// \brief The number of entering pions
587 G4int theNpionplusInitial;
588 G4int theNpionminusInitial;
589 /// \brief The number of entering kaons
590 G4int theNkaonplusInitial;
591 G4int theNkaonminusInitial;
592 /// \brief The number of entering antiprotons
593 G4int theNantiprotonInitial;
594 /// \brief The number of entering antineutrons
595 G4int theNantineutronInitial;
596
597 G4double initialInternalEnergy;
598 G4double srcInternalEnergy;
599 ThreeVector incomingAngularMomentum, incomingMomentum;
600 ThreeVector initialCenterOfMass;
601 G4bool remnant;
602
603 G4double initialEnergy;
604 Store *theStore;
605 G4bool tryCN;
606
607 /// \brief The radius of the universe
608 G4double theUniverseRadius;
609
610 /** \brief true if running a nucleus-nucleus collision
611 *
612 * Tells INCL whether to make a projectile-like pre-fragment or not.
613 */
614 G4bool isNucleusNucleus;
615
616 /** \brief Pointer to the quasi-projectile
617 *
618 * Owned by the Nucleus object.
619 */
620 ProjectileRemnant *theProjectileRemnant;
621
622 /// \brief Pointer to the NuclearDensity object
623 NuclearDensity const *theDensity;
624
625 /// \brief Pointer to the NuclearPotential object
626 NuclearPotential::INuclearPotential const *thePotential;
627
628 AnnihilationType theAType; //D same order as in the cc
629
631 };
632
633}
634
635#endif /* G4INCLNUCLEUS_HH_ */
G4double S(G4double temp)
#define INCL_DECLARE_ALLOCATION_POOL(T)
Simple container for output of event results.
Class for constructing a projectile-like remnant.
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
ParticleSampler * theParticleSampler
Cluster(const G4int Z, const G4int A, const G4int S, const G4bool createParticleSampler=true)
Standard Cluster constructor.
G4double theExcitationEnergy
G4int emitInsideAntilambda()
Force emission of all Antilambda.
G4int getInitialA() const
G4bool decayOutgoingNeutralKaon()
Force the transformation of outgoing Neutral Kaon into propation eigenstate.
G4bool containsSigma()
Returns true if the nucleus contains any Sigma.
const ThreeVector & getIncomingAngularMomentum() const
Get the incoming angular-momentum vector.
G4int getNumberOfEnteringPions() const
G4double computeSeparationEnergyBalance() const
Outgoing - incoming separation energies.
Store * getStore() const
ProjectileRemnant * getProjectileRemnant() const
Get the projectile remnant.
void fillEventInfo(EventInfo *eventInfo)
G4bool containsEtas()
Returns true if the nucleus contains any etas.
AnnihilationType getAnnihilationType() const
Getter for theAnnihilationType.
G4bool decayMe()
Force the phase-space decay of the Nucleus.
G4double computeTotalEnergy() const
Compute the current total energy.
G4bool decayInsideDeltas()
Force the decay of deltas inside the nucleus.
void setIncomingAngularMomentum(const ThreeVector &j)
Set the incoming angular-momentum vector.
void computeRecoilKinematics()
Compute the recoil momentum and spin of the nucleus.
void setInitialEnergy(const G4double e)
Set the initial energy.
void finalizeProjectileRemnant(const G4double emissionTime)
Finalise the projectile remnant.
G4double getSurfaceRadius(Particle const *const particle) const
Get the maximum allowed radius for a given particle.
G4bool containsDeltas()
Returns true if the nucleus contains any deltas.
G4bool getTryCompoundNucleus()
void setSrcInternalEnergy(double value)
G4bool emitInsideKaon()
Force emission of all Kaon inside the nucleus.
G4bool isEventTransparent() const
Is the event transparent?
G4int getNumberOfEnteringProtons() const
void applyFinalState(FinalState *)
void resetSrc()
Resets the src partners.
G4bool isNucleusNucleusCollision() const
Is it a nucleus-nucleus collision?
G4int getInitialS() const
void setAnnihilationType(const AnnihilationType at)
Setter for theAnnihilationType.
void setAType(AnnihilationType type)
void insertParticle(Particle *p)
Insert a new particle (e.g. a projectile) in the nucleus.
G4bool containsKaon()
Returns true if the nucleus contains any Kaons.
G4double getSrcInternalEnergy() const
Nucleus(G4int mass, G4int charge, G4int strangess, Config const *const conf, const G4double universeRadius=-1., AnnihilationType AType=Def)
Nucleus & operator=(const Nucleus &rhs)
Dummy assignment operator to silence Coverity warning.
void emitInsideStrangeParticles()
Force emission of all strange particles inside the nucleus.
void deleteProjectileRemnant()
Delete the projectile remnant.
std::string print()
G4bool containsOmegas()
Returns true if the nucleus contains any omegas.
G4double getTransmissionBarrier(Particle const *const p)
Get the transmission barrier.
G4bool decayOutgoingPionResonances(G4double timeThreshold)
Force the decay of outgoing PionResonances (eta/omega).
void setIncomingMomentum(const ThreeVector &p)
Set the incoming momentum vector.
G4int getNumberOfEnteringNeutrons() const
G4bool emitInsideAnnihilationProducts()
Force emission of all Antinucleon inside the nucleus.
void useFusionKinematics()
Adjust the kinematics for complete-fusion events.
NuclearDensity const * getDensity() const
Getter for theDensity.
G4bool containsAntilambda()
Returns true if the nucleus contains any Antilambda.
G4int getNumberOfEnteringKaons() const
AnnihilationType getAType() const
G4double getInitialInternalEnergy() const
G4bool containsLambda()
Returns true if the nucleus contains any Lambda.
const ThreeVector & getIncomingMomentum() const
Get the incoming momentum vector.
void updateInternalEnergy(double value)
void setParticleNucleusCollision()
Set a particle-nucleus collision.
void emitInsidePions()
Force emission of all pions inside the nucleus.
G4double getInitialEnergy() const
Get the initial energy.
void restoreSrcPartner(Particle *particle, ThreeVector m)
ThreeVector computeCenterOfMass() const
Compute the current center-of-mass position.
G4bool decayOutgoingClusters()
Force the decay of unstable outgoing clusters.
G4double getExcitationEnergy() const
Get the excitation energy of the nucleus.
void setNucleusNucleusCollision()
Set a nucleus-nucleus collision.
G4int emitInsideLambda()
Force emission of all Lambda (desexitation code with strangeness not implanted yet).
G4int getNumberOfEnteringantiNeutrons() const
void propagateParticles(G4double step)
G4bool decayInsideStrangeParticles()
Force the transformation of strange particles into a Lambda;.
ConservationBalance getConservationBalance(EventInfo const &theEventInfo, const G4bool afterRecoil) const
Compute charge, mass, energy and momentum balance.
void setStore(Store *str)
void setProjectileRemnant(ProjectileRemnant *const c)
Set the projectile remnant.
void setDensity(NuclearDensity const *const d)
Setter for theDensity.
G4bool containsAntinucleon()
Returns true if the nucleus contains any Antinucleons.
G4bool hasRemnant() const
Does the nucleus give a cascade remnant?
void setUniverseRadius(const G4double universeRadius)
Setter for theUniverseRadius.
void updatePotentialEnergy(Particle *p) const
Update the particle potential energy.
NuclearPotential::INuclearPotential const * getPotential() const
Getter for thePotential.
G4double getUniverseRadius() const
Getter for theUniverseRadius.
G4double computeExcitationEnergy() const
Compute the current excitation energy.
G4bool containsAntiKaon()
Returns true if the nucleus contains any anti Kaons.
G4bool decayOutgoingDeltas()
Force the decay of outgoing deltas.
G4int getNumberOfEnteringantiProtons() const
Nucleus(const Nucleus &rhs)
Dummy copy constructor to silence Coverity warning.
G4bool decayOutgoingSigmaZero(G4double timeThreshold)
Force the decay of outgoing Neutral Sigma.
G4int getInitialZ() const
void setPotentialEnergy(G4double v)
Set the particle potential energy.
G4bool isLambda() const
Is this a Lambda?
G4int getS() const
Returns the strangeness number.
G4int getZ() const
Returns the charge number.
G4double getReflectionMomentum() const
Return the reflection momentum.
G4bool isTargetSpectator() const
G4bool isAntiNucleon() const
Is this an antinucleon?
G4bool isPion() const
Is this a pion?
G4bool isAntiKaon() const
Is this an antiKaon?
G4INCL::ParticleType getType() const
G4bool isKaon() const
Is this a Kaon?
G4bool isResonance() const
Is it a resonance?
G4int getA() const
Returns the baryon number.
G4bool isNucleon() const
G4int heaviside(G4int n)
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
const G4double eSquared
Coulomb conversion factor [MeV*fm].
ParticleList::const_iterator ParticleIter
@ DNbarNPbarNType
@ NbarPTypeInFlight
@ DNbarNPbarPType
@ DNbarPPbarPType
@ NbarNTypeInFlight
@ DNbarPPbarNType
Struct for conservation laws.