Geant4-11
Data Structures | Public Member Functions | Private Member Functions | Private Attributes
G4INCL::INCL Class Reference

#include <G4INCLCascade.hh>

Data Structures

class  RecoilCMFunctor
 Class to adjust remnant recoil in the reaction CM system. More...
 
class  RecoilFunctor
 Class to adjust remnant recoil. More...
 

Public Member Functions

void finalizeGlobalInfo (Random::SeedVector const &initialSeeds)
 
const GlobalInfogetGlobalInfo () const
 
 INCL (Config const *const config)
 
 INCL (const INCL &rhs)
 Dummy copy constructor to silence Coverity warning. More...
 
G4bool initializeTarget (const G4int A, const G4int Z, const G4int S)
 
INCLoperator= (const INCL &rhs)
 Dummy assignment operator to silence Coverity warning. More...
 
G4bool prepareReaction (const ParticleSpecies &projectileSpecies, const G4double kineticEnergy, const G4int A, const G4int Z, const G4int S)
 
const EventInfoprocessEvent ()
 
const EventInfoprocessEvent (ParticleSpecies const &projectileSpecies, const G4double kineticEnergy, const G4int targetA, const G4int targetZ, const G4int targetS)
 
 ~INCL ()
 

Private Member Functions

void cascade ()
 The actual cascade loop. More...
 
G4bool continueCascade ()
 Stopping criterion for the cascade. More...
 
void initMaxInteractionDistance (ParticleSpecies const &p, const G4double kineticEnergy)
 Initialise the maximum interaction distance. More...
 
void initUniverseRadius (ParticleSpecies const &p, const G4double kineticEnergy, const G4int A, const G4int Z)
 Initialize the universe radius. More...
 
void makeCompoundNucleus ()
 Make a compound nucleus. More...
 
G4int makeProjectileRemnant ()
 Make a projectile pre-fragment out of geometrical spectators. More...
 
void postCascade ()
 Finalise the cascade and clean up. More...
 
G4bool preCascade (ParticleSpecies const &projectileSpecies, const G4double kineticEnergy)
 Initialise the cascade. More...
 
void rescaleOutgoingForRecoil ()
 Rescale the energies of the outgoing particles. More...
 
void updateGlobalInfo ()
 Update global counters and other members of theGlobalInfo object. More...
 

Private Attributes

CascadeActioncascadeAction
 
G4double fixedImpactParameter
 
G4bool forceTransparent
 
G4double maxImpactParameter
 
G4double maxInteractionDistance
 
G4double maxUniverseRadius
 
G4int minRemnantSize
 Remnant size below which cascade stops. More...
 
Nucleusnucleus
 
IPropagationModelpropagationModel
 
G4bool targetInitSuccess
 
G4int theA
 
Config const *const theConfig
 
EventInfo theEventInfo
 
GlobalInfo theGlobalInfo
 
G4int theS
 
G4int theZ
 

Detailed Description

Definition at line 52 of file G4INCLCascade.hh.

Constructor & Destructor Documentation

◆ INCL() [1/2]

G4INCL::INCL::INCL ( Config const *const  config)

Definition at line 79 of file G4INCLCascade.cc.

80 :propagationModel(0), theA(208), theZ(82), theS(0),
81 targetInitSuccess(false),
87 nucleus(NULL),
88 forceTransparent(false),
90 {
91 // Set the logger object.
92#ifdef INCLXX_IN_GEANT4_MODE
94#else // INCLXX_IN_GEANT4_MODE
96#endif // INCLXX_IN_GEANT4_MODE
97
98 // Set the random number generator algorithm. The system can support
99 // multiple different generator algorithms in a completely
100 // transparent way.
102
103 // Select the Pauli and CDPP blocking algorithms
105
106 // Set the cross-section set
108
109 // Set the phase-space generator
111
112 // Select the Coulomb-distortion algorithm:
114
115 // Select the clustering algorithm:
117
118 // Initialize the INCL particle table:
120
121 // Initialize the value of cutNN in BinaryCollisionAvatar
123
124 // Initialize the value of strange cross section bias
126
127 // Propagation model is responsible for finding avatars and
128 // transporting the particles. In principle this step is "hidden"
129 // behind an abstract interface and the rest of the system does not
130 // care how the transportation and avatar finding is done. This
131 // should allow us to "easily" experiment with different avatar
132 // finding schemes and even to support things like curved
133 // trajectories in the future.
136 cascadeAction = new AvatarDumpAction();
137 else
138 cascadeAction = new CascadeAction();
140
143#ifdef INCL_ROOT_USE
144 theGlobalInfo.rootSelection = theConfig->getROOTSelectionString();
145#endif
146
147#ifndef INCLXX_IN_GEANT4_MODE
148 // Fill in the global information
152 const ParticleSpecies theSpecies = theConfig->getProjectileSpecies();
153 theGlobalInfo.Ap = theSpecies.theA;
154 theGlobalInfo.Zp = theSpecies.theZ;
155 theGlobalInfo.Sp = theSpecies.theS;
158#endif
159
161 }
static void setBias(const G4double b)
Set the global bias factor.
static void setCutNN(const G4double c)
void beforeRunAction(Config const *config)
static std::string const getVersionString()
Get the INCL version string.
G4double getImpactParameter() const
CascadeActionType getCascadeActionType() const
Get the cascade-action type.
G4int getTargetA() const
Get the target mass number.
Definition: G4INCLConfig.hh:94
G4double getProjectileKineticEnergy() const
Get the projectile kinetic energy.
G4double getHadronizationTime() const
Get the hadronization time.
ParticleSpecies getProjectileSpecies() const
Get the projectile species.
LocalEnergyType getLocalEnergyPiType() const
Get the type of local energy for pi-N and decay avatars.
G4int getTargetS() const
Get the target strangess number.
G4double getCutNN() const
LocalEnergyType getLocalEnergyBBType() const
Get the type of local energy for N-N avatars.
G4double getBias() const
Get the bias.
G4int getTargetZ() const
Get the target charge number.
Definition: G4INCLConfig.hh:97
std::string getDeExcitationString() const
Get the de-excitation string.
G4double maxImpactParameter
Config const *const theConfig
GlobalInfo theGlobalInfo
CascadeAction * cascadeAction
G4int minRemnantSize
Remnant size below which cascade stops.
G4double maxUniverseRadius
G4bool targetInitSuccess
Nucleus * nucleus
G4double maxInteractionDistance
G4double fixedImpactParameter
IPropagationModel * propagationModel
G4bool forceTransparent
void initialize(Config const *const theConfig)
Initialize the clustering model based on the Config object.
void initialize(Config const *const theConfig)
Initialize the Coulomb-distortion algorithm.
void initialize(Config const *const theConfig)
void initVerbosityLevelFromEnvvar()
void initialize(Config const *const theConfig=0)
Initialize the particle table.
void initialize(Config const *const aConfig)
Initialise blockers according to a Config object.
void initialize(Config const *const theConfig)
void initialize(Config const *const)
Initialize generator according to a Config object.
std::string deexcitationModel
Name of the de-excitation model.
Short_t St
Target strangeness number given as input.
Float_t Ep
Projectile kinetic energy given as input.
Float_t biasFactor
Bias factor.
Short_t At
Target mass number given as input.
Short_t Zt
Target charge number given as input.
Short_t Ap
Projectile mass number given as input.
Short_t Sp
Projectile strangeness number given as input.
Short_t Zp
Projectile charge number given as input.
std::string cascadeModel
Name of the cascade model.

References G4INCL::GlobalInfo::Ap, G4INCL::GlobalInfo::At, G4INCL::AvatarDumpActionType, G4INCL::CascadeAction::beforeRunAction(), G4INCL::GlobalInfo::biasFactor, cascadeAction, G4INCL::GlobalInfo::cascadeModel, G4INCL::GlobalInfo::deexcitationModel, G4INCL::GlobalInfo::Ep, fixedImpactParameter, G4INCL::Config::getBias(), G4INCL::Config::getCascadeActionType(), G4INCL::Config::getCutNN(), G4INCL::Config::getDeExcitationString(), G4INCL::Config::getHadronizationTime(), G4INCL::Config::getImpactParameter(), G4INCL::Config::getLocalEnergyBBType(), G4INCL::Config::getLocalEnergyPiType(), G4INCL::Config::getProjectileKineticEnergy(), G4INCL::Config::getProjectileSpecies(), G4INCL::Config::getTargetA(), G4INCL::Config::getTargetS(), G4INCL::Config::getTargetZ(), G4INCL::Config::getVersionString(), G4INCL::Pauli::initialize(), G4INCL::Clustering::initialize(), G4INCL::CoulombDistortion::initialize(), G4INCL::CrossSections::initialize(), G4INCL::PhaseSpaceGenerator::initialize(), G4INCL::ParticleTable::initialize(), G4INCL::Random::initialize(), G4INCL::Logger::initVerbosityLevelFromEnvvar(), propagationModel, G4INCL::BinaryCollisionAvatar::setBias(), G4INCL::BinaryCollisionAvatar::setCutNN(), G4INCL::GlobalInfo::Sp, G4INCL::GlobalInfo::St, G4INCL::ParticleSpecies::theA, theConfig, theGlobalInfo, G4INCL::ParticleSpecies::theS, G4INCL::ParticleSpecies::theZ, G4INCL::GlobalInfo::Zp, and G4INCL::GlobalInfo::Zt.

◆ ~INCL()

G4INCL::INCL::~INCL ( )

Definition at line 163 of file G4INCLCascade.cc.

163 {
165#ifndef INCLXX_IN_GEANT4_MODE
166 NuclearMassTable::deleteTable();
167#endif
174#ifndef INCLXX_IN_GEANT4_MODE
175 Logger::deleteLoggerSlave();
176#endif
180 delete cascadeAction;
181 delete propagationModel;
182 delete theConfig;
183 }
static void deleteBackupParticles()
Release the memory allocated for the backup particles.
void deleteClusteringModel()
Delete the clustering model.
void deleteCoulomb()
Delete the Coulomb-distortion object.
void clearCache()
Clear the INuclearPotential cache.
void deleteBlockers()
Delete blockers.
void deleteGenerator()

References G4INCL::CascadeAction::afterRunAction(), cascadeAction, G4INCL::NuclearPotential::clearCache(), G4INCL::NuclearDensityFactory::clearCache(), G4INCL::InteractionAvatar::deleteBackupParticles(), G4INCL::Pauli::deleteBlockers(), G4INCL::Clustering::deleteClusteringModel(), G4INCL::CoulombDistortion::deleteCoulomb(), G4INCL::CrossSections::deleteCrossSections(), G4INCL::Random::deleteGenerator(), G4INCL::PhaseSpaceGenerator::deletePhaseSpaceGenerator(), propagationModel, and theConfig.

◆ INCL() [2/2]

G4INCL::INCL::INCL ( const INCL rhs)

Dummy copy constructor to silence Coverity warning.

Member Function Documentation

◆ cascade()

void G4INCL::INCL::cascade ( )
private

The actual cascade loop.

Definition at line 331 of file G4INCLCascade.cc.

331 {
332 FinalState *finalState = new FinalState;
333
334 unsigned long loopCounter = 0;
335 const unsigned long maxLoopCounter = 10000000;
336 do {
337 // Run book keeping actions that should take place before propagation:
339
340 // Get the avatar with the smallest time and propagate particles
341 // to that point in time.
342 IAvatar *avatar = propagationModel->propagate(finalState);
343
344 finalState->reset();
345
346 // Run book keeping actions that should take place after propagation:
348
349 if(avatar == 0) break; // No more avatars in the avatar list.
350
351 // Run book keeping actions that should take place before avatar:
353
354 // Channel is responsible for calculating the outcome of the
355 // selected avatar. There are different kinds of channels. The
356 // class IChannel is, again, an abstract interface that defines
357 // the externally observable behavior of all interaction
358 // channels.
359 // The handling of the channel is transparent to the API.
360 // Final state tells what changed...
361 avatar->fillFinalState(finalState);
362 // Run book keeping actions that should take place after avatar:
363 cascadeAction->afterAvatarAction(avatar, nucleus, finalState);
364
365 // So now we must give this information to the nucleus
366 nucleus->applyFinalState(finalState);
367 // and now we are ready to process the next avatar!
368
369 delete avatar;
370
371 ++loopCounter;
372 } while(continueCascade() && loopCounter<maxLoopCounter); /* Loop checking, 10.07.2015, D.Mancusi */
373
374 delete finalState;
375 }
void afterAvatarAction(IAvatar *a, Nucleus *n, FinalState *fs)
void afterPropagationAction(IPropagationModel *pm, IAvatar *avatar)
void beforeAvatarAction(IAvatar *a, Nucleus *n)
void beforePropagationAction(IPropagationModel *pm)
G4bool continueCascade()
Stopping criterion for the cascade.
virtual G4INCL::IAvatar * propagate(FinalState const *const fs)=0
void applyFinalState(FinalState *)

References G4INCL::CascadeAction::afterAvatarAction(), G4INCL::CascadeAction::afterPropagationAction(), G4INCL::Nucleus::applyFinalState(), G4INCL::CascadeAction::beforeAvatarAction(), G4INCL::CascadeAction::beforePropagationAction(), cascadeAction, continueCascade(), G4INCL::IAvatar::fillFinalState(), nucleus, G4INCL::IPropagationModel::propagate(), propagationModel, and G4INCL::FinalState::reset().

Referenced by processEvent().

◆ continueCascade()

G4bool G4INCL::INCL::continueCascade ( )
private

Stopping criterion for the cascade.

Returns true if the cascade should continue, and false if any of the stopping criteria is satisfied.

Definition at line 713 of file G4INCLCascade.cc.

713 {
714 // Stop if we have passed the stopping time
716 INCL_DEBUG("Cascade time (" << propagationModel->getCurrentTime()
717 << ") exceeded stopping time (" << propagationModel->getStoppingTime()
718 << "), stopping cascade" << '\n');
719 return false;
720 }
721 // Stop if there are no participants and no pions inside the nucleus
722 if(nucleus->getStore()->getBook().getCascading()==0 &&
723 nucleus->getStore()->getIncomingParticles().empty()) {
724 INCL_DEBUG("No participants in the nucleus and no incoming particles left, stopping cascade" << '\n');
725 return false;
726 }
727 // Stop if the remnant is smaller than minRemnantSize
728 if(nucleus->getA() <= minRemnantSize) {
729 INCL_DEBUG("Remnant size (" << nucleus->getA()
730 << ") smaller than or equal to minimum (" << minRemnantSize
731 << "), stopping cascade" << '\n');
732 return false;
733 }
734 // Stop if we have to try and make a compound nucleus or if we have to
735 // force a transparent
737 INCL_DEBUG("Trying to make a compound nucleus, stopping cascade" << '\n');
738 return false;
739 }
740
741 return true;
742 }
#define INCL_DEBUG(x)
G4int getCascading() const
Definition: G4INCLBook.hh:105
virtual G4double getCurrentTime()=0
virtual G4double getStoppingTime()=0
Store * getStore() const
G4bool getTryCompoundNucleus()
G4int getA() const
Returns the baryon number.
ParticleList const & getIncomingParticles() const
Definition: G4INCLStore.hh:217
Book & getBook()
Definition: G4INCLStore.hh:259

References G4INCL::Particle::getA(), G4INCL::Store::getBook(), G4INCL::Book::getCascading(), G4INCL::IPropagationModel::getCurrentTime(), G4INCL::Store::getIncomingParticles(), G4INCL::IPropagationModel::getStoppingTime(), G4INCL::Nucleus::getStore(), G4INCL::Nucleus::getTryCompoundNucleus(), INCL_DEBUG, minRemnantSize, nucleus, and propagationModel.

Referenced by cascade().

◆ finalizeGlobalInfo()

void G4INCL::INCL::finalizeGlobalInfo ( Random::SeedVector const &  initialSeeds)

Definition at line 744 of file G4INCLCascade.cc.

744 {
745 const G4double normalisationFactor = theGlobalInfo.geometricCrossSection /
747 theGlobalInfo.nucleonAbsorptionCrossSection = normalisationFactor *
749 theGlobalInfo.pionAbsorptionCrossSection = normalisationFactor *
751 theGlobalInfo.reactionCrossSection = normalisationFactor *
753 theGlobalInfo.errorReactionCrossSection = normalisationFactor *
755 theGlobalInfo.forcedCNCrossSection = normalisationFactor *
757 theGlobalInfo.errorForcedCNCrossSection = normalisationFactor *
759 theGlobalInfo.completeFusionCrossSection = normalisationFactor *
761 theGlobalInfo.errorCompleteFusionCrossSection = normalisationFactor *
765
766 theGlobalInfo.initialRandomSeeds.assign(initialSeeds.begin(), initialSeeds.end());
767
768 Random::SeedVector theSeeds = Random::getSeeds();
769 theGlobalInfo.finalRandomSeeds.assign(theSeeds.begin(), theSeeds.end());
770 }
double G4double
Definition: G4Types.hh:83
SeedVector getSeeds()
Definition: G4INCLRandom.cc:89
Int_t nNucleonAbsorptions
Number of nucleon absorptions (no outcoming particles)
Float_t forcedCNCrossSection
Calculated forced-compound-nucleus cross section.
Float_t pionAbsorptionCrossSection
Pion absorption cross section.
Float_t errorCompleteFusionCrossSection
Error on the calculated complete-fusion cross section (nParticles==0)
Int_t nEnergyViolationInteraction
Number of attempted collisions/decays for which the energy-conservation algorithm failed to find a so...
std::vector< Int_t > initialRandomSeeds
Initial seeds for the pseudo-random-number generator.
Int_t nShots
Number of shots.
Float_t completeFusionCrossSection
Calculated complete-fusion cross section (nParticles==0)
Float_t nucleonAbsorptionCrossSection
Nucleon absorption cross section.
Float_t errorReactionCrossSection
Error on the calculated reaction cross section.
std::vector< Int_t > finalRandomSeeds
Final seeds for the pseudo-random-number generator.
Int_t nPionAbsorptions
Number of nucleon absorptions (no outcoming pions)
Float_t energyViolationInteractionCrossSection
Cross section for attempted collisions/decays for which the energy-conservation algorithm failed to f...
Int_t nCompleteFusion
Number of complete-fusion events (nParticles==0)
Int_t nTransparents
Number of transparent shots.
Int_t nForcedCompoundNucleus
Number of forced compound-nucleus events.
Float_t reactionCrossSection
Calculated reaction cross section.
Float_t errorForcedCNCrossSection
Error on the calculated forced-compound-nucleus cross section.
Float_t geometricCrossSection
Geometric cross section.

References G4INCL::GlobalInfo::completeFusionCrossSection, G4INCL::GlobalInfo::energyViolationInteractionCrossSection, G4INCL::GlobalInfo::errorCompleteFusionCrossSection, G4INCL::GlobalInfo::errorForcedCNCrossSection, G4INCL::GlobalInfo::errorReactionCrossSection, G4INCL::GlobalInfo::finalRandomSeeds, G4INCL::GlobalInfo::forcedCNCrossSection, G4INCL::GlobalInfo::geometricCrossSection, G4INCL::Random::getSeeds(), G4INCL::GlobalInfo::initialRandomSeeds, G4INCL::GlobalInfo::nCompleteFusion, G4INCL::GlobalInfo::nEnergyViolationInteraction, G4INCL::GlobalInfo::nForcedCompoundNucleus, G4INCL::GlobalInfo::nNucleonAbsorptions, G4INCL::GlobalInfo::nPionAbsorptions, G4INCL::GlobalInfo::nShots, G4INCL::GlobalInfo::nTransparents, G4INCL::GlobalInfo::nucleonAbsorptionCrossSection, G4INCL::GlobalInfo::pionAbsorptionCrossSection, G4INCL::GlobalInfo::reactionCrossSection, and theGlobalInfo.

◆ getGlobalInfo()

const GlobalInfo & G4INCL::INCL::getGlobalInfo ( ) const
inline

Definition at line 84 of file G4INCLCascade.hh.

84{ return theGlobalInfo; }

References theGlobalInfo.

◆ initializeTarget()

G4bool G4INCL::INCL::initializeTarget ( const G4int  A,
const G4int  Z,
const G4int  S 
)

Definition at line 233 of file G4INCLCascade.cc.

233 {
234 delete nucleus;
235
236 nucleus = new Nucleus(A, Z, S, theConfig, maxUniverseRadius);
239
241 return true;
242 }
G4double S(G4double temp)
const G4int Z[17]
const G4double A[17]
void reset()
Definition: G4INCLBook.hh:52
virtual void setNucleus(G4INCL::Nucleus *nucleus)=0
void initializeParticles()

References A, G4INCL::Store::getBook(), G4INCL::Nucleus::getStore(), G4INCL::Nucleus::initializeParticles(), maxUniverseRadius, nucleus, propagationModel, G4INCL::Book::reset(), S(), G4INCL::IPropagationModel::setNucleus(), theConfig, and Z.

Referenced by prepareReaction().

◆ initMaxInteractionDistance()

void G4INCL::INCL::initMaxInteractionDistance ( ParticleSpecies const &  p,
const G4double  kineticEnergy 
)
private

Initialise the maximum interaction distance.

Used in forced CN events.

Definition at line 808 of file G4INCLCascade.cc.

808 {
809 if(projectileSpecies.theType != Composite) {
811 return;
812 }
813
816
817 const G4double theNNDistance = CrossSections::interactionDistanceNN(projectileSpecies, kineticEnergy);
818 maxInteractionDistance = r0 + theNNDistance;
819 INCL_DEBUG("Initialised interaction distance: r0 = " << r0 << '\n'
820 << " theNNDistance = " << theNNDistance << '\n'
821 << " maxInteractionDistance = " << maxInteractionDistance << '\n');
822 }
G4double interactionDistanceNN(const ParticleSpecies &aSpecies, const G4double kineticEnergy)
Compute the "interaction distance".
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4double getNuclearRadius(const ParticleType t, const G4int A, const G4int Z)

References G4INCL::Composite, G4INCL::ParticleTable::getNuclearRadius(), INCL_DEBUG, G4INCL::CrossSections::interactionDistanceNN(), G4INCL::Math::max(), maxInteractionDistance, G4INCL::Neutron, G4INCL::Proton, theA, G4INCL::ParticleSpecies::theType, and theZ.

Referenced by prepareReaction().

◆ initUniverseRadius()

void G4INCL::INCL::initUniverseRadius ( ParticleSpecies const &  p,
const G4double  kineticEnergy,
const G4int  A,
const G4int  Z 
)
private

Initialize the universe radius.

Used for determining the energy-dependent size of the volume particles live in.

Definition at line 824 of file G4INCLCascade.cc.

824 {
825 G4double rMax = 0.0;
826 if(A==0) {
827 IsotopicDistribution const &anIsotopicDistribution =
829 IsotopeVector theIsotopes = anIsotopicDistribution.getIsotopes();
830 for(IsotopeIter i=theIsotopes.begin(), e=theIsotopes.end(); i!=e; ++i) {
831 const G4double pMaximumRadius = ParticleTable::getMaximumNuclearRadius(Proton, i->theA, Z);
832 const G4double nMaximumRadius = ParticleTable::getMaximumNuclearRadius(Neutron, i->theA, Z);
833 const G4double maximumRadius = std::max(pMaximumRadius, nMaximumRadius);
834 rMax = std::max(maximumRadius, rMax);
835 }
836 } else {
837 const G4double pMaximumRadius = ParticleTable::getMaximumNuclearRadius(Proton, A, Z);
839 const G4double maximumRadius = std::max(pMaximumRadius, nMaximumRadius);
840 rMax = std::max(maximumRadius, rMax);
841 }
842 if(p.theType==Composite || p.theType==Proton || p.theType==Neutron) {
845 } else if(p.theType==PiPlus
846 || p.theType==PiZero
847 || p.theType==PiMinus) {
850 } else if(p.theType==KPlus
851 || p.theType==KZero) {
854 } else if(p.theType==KZeroBar
855 || p.theType==KMinus) {
858 } else if(p.theType==Lambda
859 ||p.theType==SigmaPlus
860 || p.theType==SigmaZero
861 || p.theType==SigmaMinus) {
864 }
865 INCL_DEBUG("Initialised universe radius: " << maxUniverseRadius << '\n');
866 }
G4double interactionDistanceKbarN(const G4double projectileKineticEnergy)
Compute the "interaction distance".
G4double interactionDistancePiN(const G4double projectileKineticEnergy)
Compute the "interaction distance".
G4double interactionDistanceKN(const G4double projectileKineticEnergy)
Compute the "interaction distance".
G4double interactionDistanceYN(const G4double projectileKineticEnergy)
Compute the "interaction distance".
G4double getMaximumNuclearRadius(const ParticleType t, const G4int A, const G4int Z)
IsotopicDistribution const & getNaturalIsotopicDistribution(const G4int Z)
IsotopeVector::iterator IsotopeIter
std::vector< Isotope > IsotopeVector

References A, G4INCL::Composite, G4INCL::IsotopicDistribution::getIsotopes(), G4INCL::ParticleTable::getMaximumNuclearRadius(), G4INCL::ParticleTable::getNaturalIsotopicDistribution(), INCL_DEBUG, G4INCL::CrossSections::interactionDistanceKbarN(), G4INCL::CrossSections::interactionDistanceKN(), G4INCL::CrossSections::interactionDistanceNN(), G4INCL::CrossSections::interactionDistancePiN(), G4INCL::CrossSections::interactionDistanceYN(), G4INCL::KMinus, G4INCL::KPlus, G4INCL::KZero, G4INCL::KZeroBar, G4INCL::Lambda, G4INCL::Math::max(), maxUniverseRadius, G4INCL::Neutron, G4INCL::PiMinus, G4INCL::PiPlus, G4INCL::PiZero, G4INCL::Proton, G4INCL::SigmaMinus, G4INCL::SigmaPlus, G4INCL::SigmaZero, G4INCL::ParticleSpecies::theType, and Z.

Referenced by prepareReaction().

◆ makeCompoundNucleus()

void G4INCL::INCL::makeCompoundNucleus ( )
private

Make a compound nucleus.

Selects the projectile components that can actually enter their potential and puts them into the target nucleus. If the CN excitation energy turns out to be negative, the event is considered a transparent. This method modifies theEventInfo and theGlobalInfo.

Definition at line 503 of file G4INCLCascade.cc.

503 {
504 // If this is not a nucleus-nucleus collision, don't attempt to make a
505 // compound nucleus.
506 //
507 // Yes, even nucleon-nucleus collisions can lead to particles entering
508 // below the Fermi level. Take e.g. 1-MeV p + He4.
510 forceTransparent = true;
511 return;
512 }
513
514 // Reset the internal Nucleus variables
520
521 // CN kinematical variables
522 // Note: the CN orbital angular momentum is neglected in what follows. We
523 // should actually take it into account!
524 ThreeVector theCNMomentum = nucleus->getIncomingMomentum();
525 ThreeVector theCNSpin = nucleus->getIncomingAngularMomentum();
527 G4int theCNA=theEventInfo.At, theCNZ=theEventInfo.Zt, theCNS=theEventInfo.St;
528 Cluster * const theProjectileRemnant = nucleus->getProjectileRemnant();
529 G4double theCNEnergy = theTargetMass + theProjectileRemnant->getEnergy();
530
531 // Loop over the potential participants
532 ParticleList const &initialProjectileComponents = theProjectileRemnant->getParticles();
533 std::vector<Particle *> shuffledComponents(initialProjectileComponents.begin(), initialProjectileComponents.end());
534 // Shuffle the list of potential participants
535 std::shuffle(shuffledComponents.begin(), shuffledComponents.end(), Random::getAdapter());
536
537 G4bool success = true;
538 G4bool atLeastOneNucleonEntering = false;
539 for(std::vector<Particle*>::const_iterator p=shuffledComponents.begin(), e=shuffledComponents.end(); p!=e; ++p) {
540 // Skip particles that miss the interaction distance
542 (*p)->getPosition(),
543 (*p)->getPropagationVelocity(),
545 if(!intersectionInteractionDistance.exists)
546 continue;
547
548 // Build an entry avatar for this nucleon
549 atLeastOneNucleonEntering = true;
550 ParticleEntryAvatar *theAvatar = new ParticleEntryAvatar(0.0, nucleus, *p);
552 FinalState *fs = theAvatar->getFinalState();
554 FinalStateValidity validity = fs->getValidity();
555 delete fs;
556 switch(validity) {
557 case ValidFS:
560 // Add the particle to the CN
561 theCNA++;
562 theCNZ += (*p)->getZ();
563 theCNS += (*p)->getS();
564 break;
565 case PauliBlockedFS:
567 default:
568 success = false;
569 break;
570 }
571 }
572
573 if(!success || !atLeastOneNucleonEntering) {
574 INCL_DEBUG("No nucleon entering in forced CN, forcing a transparent" << '\n');
575 forceTransparent = true;
576 return;
577 }
578
579// assert(theCNA==nucleus->getA());
580// assert(theCNA<=theEventInfo.At+theEventInfo.Ap);
581// assert(theCNZ<=theEventInfo.Zt+theEventInfo.Zp);
582// assert(theCNS>=theEventInfo.St+theEventInfo.Sp);
583
584 // Update the kinematics of the CN
585 theCNEnergy -= theProjectileRemnant->getEnergy();
586 theCNMomentum -= theProjectileRemnant->getMomentum();
587
588 // Deal with the projectile remnant
590
591 // Subtract the angular momentum of the projectile remnant
592// assert(nucleus->getStore()->getOutgoingParticles().empty());
593 theCNSpin -= theProjectileRemnant->getAngularMomentum();
594
595 // Compute the excitation energy of the CN
596 const G4double theCNMass = ParticleTable::getTableMass(theCNA,theCNZ,theCNS);
597 const G4double theCNInvariantMassSquared = theCNEnergy*theCNEnergy-theCNMomentum.mag2();
598 if(theCNInvariantMassSquared<0.) {
599 // Negative invariant mass squared, return a transparent
600 forceTransparent = true;
601 return;
602 }
603 const G4double theCNExcitationEnergy = std::sqrt(theCNInvariantMassSquared) - theCNMass;
604 if(theCNExcitationEnergy<0.) {
605 // Negative excitation energy, return a transparent
606 INCL_DEBUG("CN excitation energy is negative, forcing a transparent" << '\n'
607 << " theCNA = " << theCNA << '\n'
608 << " theCNZ = " << theCNZ << '\n'
609 << " theCNS = " << theCNS << '\n'
610 << " theCNEnergy = " << theCNEnergy << '\n'
611 << " theCNMomentum = (" << theCNMomentum.getX() << ", "<< theCNMomentum.getY() << ", " << theCNMomentum.getZ() << ")" << '\n'
612 << " theCNExcitationEnergy = " << theCNExcitationEnergy << '\n'
613 << " theCNSpin = (" << theCNSpin.getX() << ", "<< theCNSpin.getY() << ", " << theCNSpin.getZ() << ")" << '\n'
614 );
615 forceTransparent = true;
616 return;
617 } else {
618 // Positive excitation energy, can make a CN
619 INCL_DEBUG("CN excitation energy is positive, forcing a CN" << '\n'
620 << " theCNA = " << theCNA << '\n'
621 << " theCNZ = " << theCNZ << '\n'
622 << " theCNS = " << theCNS << '\n'
623 << " theCNEnergy = " << theCNEnergy << '\n'
624 << " theCNMomentum = (" << theCNMomentum.getX() << ", "<< theCNMomentum.getY() << ", " << theCNMomentum.getZ() << ")" << '\n'
625 << " theCNExcitationEnergy = " << theCNExcitationEnergy << '\n'
626 << " theCNSpin = (" << theCNSpin.getX() << ", "<< theCNSpin.getY() << ", " << theCNSpin.getZ() << ")" << '\n'
627 );
628 nucleus->setA(theCNA);
629 nucleus->setZ(theCNZ);
630 nucleus->setS(theCNS);
631 nucleus->setMomentum(theCNMomentum);
632 nucleus->setEnergy(theCNEnergy);
633 nucleus->setExcitationEnergy(theCNExcitationEnergy);
634 nucleus->setMass(theCNMass+theCNExcitationEnergy);
635 nucleus->setSpin(theCNSpin); // neglects any orbital angular momentum of the CN
636
637 // Take care of any remaining deltas
639
640 // Take care of any remaining etas and/or omegas
643
644 // Take care of any remaining Kaons
646
647 // Cluster decay
649
650 // Fill the EventInfo structure
652 }
653 }
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
void setExcitationEnergy(const G4double e)
Set the excitation energy of the cluster.
void setS(const G4int S)
Set the strangess number of the cluster.
void setSpin(const ThreeVector &j)
Set the spin of the nucleus.
void setA(const G4int A)
Set the mass number of the cluster.
void setZ(const G4int Z)
Set the charge number of the cluster.
G4double getDecayTimeThreshold() const
Get the decay time threshold time.
EventInfo theEventInfo
const ThreeVector & getIncomingAngularMomentum() const
Get the incoming angular-momentum vector.
ProjectileRemnant * getProjectileRemnant() const
Get the projectile remnant.
void fillEventInfo(EventInfo *eventInfo)
G4bool decayMe()
Force the phase-space decay of the Nucleus.
void finalizeProjectileRemnant(const G4double emissionTime)
Finalise the projectile remnant.
G4bool emitInsideKaon()
Force emission of all Kaon inside the nucleus.
G4bool isNucleusNucleusCollision() const
Is it a nucleus-nucleus collision?
G4bool decayOutgoingPionResonances(G4double timeThreshold)
Force the decay of outgoing PionResonances (eta/omega).
const ThreeVector & getIncomingMomentum() const
Get the incoming momentum vector.
G4bool decayOutgoingClusters()
Force the decay of unstable outgoing clusters.
G4bool decayOutgoingDeltas()
Force the decay of outgoing deltas.
G4double getEnergy() const
void setMass(G4double mass)
virtual void setMomentum(const G4INCL::ThreeVector &momentum)
void setEnergy(G4double energy)
void reset()
Reset the projectile remnant to the state at the beginning of the cascade.
void clearOutgoing()
Definition: G4INCLStore.cc:223
void clearIncoming()
Clear the incoming list.
Definition: G4INCLStore.hh:145
void addParticleEntryAvatar(IAvatar *a)
Add one ParticleEntry avatar.
Definition: G4INCLStore.cc:66
Intersection getEarlierTrajectoryIntersection(const ThreeVector &x0, const ThreeVector &p, const G4double r)
Compute the first intersection of a straight particle trajectory with a sphere.
G4ThreadLocal NuclearMassFn getTableMass
Static pointer to the mass function for nuclei.
Adapter const & getAdapter()
@ ParticleBelowZeroFS
@ NoEnergyConservationFS
@ ParticleBelowFermiFS
Bool_t forcedDeltasOutside
Event involved forced delta decays outside the nucleus.
Short_t At
Mass number of the target nucleus.
Bool_t forcedPionResonancesOutside
Event involved forced eta/omega decays outside the nucleus.
Short_t St
Strangeness number of the target nucleus.
Bool_t emitKaon
Event involved forced Kaon emission.
Bool_t clusterDecay
Event involved cluster decay.
Short_t Zt
Charge number of the target nucleus.

References G4INCL::Store::addParticleEntryAvatar(), G4INCL::Nucleus::applyFinalState(), G4INCL::EventInfo::At, G4INCL::Store::clearIncoming(), G4INCL::Store::clearOutgoing(), G4INCL::EventInfo::clusterDecay, G4INCL::Nucleus::decayMe(), G4INCL::Nucleus::decayOutgoingClusters(), G4INCL::Nucleus::decayOutgoingDeltas(), G4INCL::Nucleus::decayOutgoingPionResonances(), G4INCL::Nucleus::emitInsideKaon(), G4INCL::EventInfo::emitKaon, G4INCL::Intersection::exists, G4INCL::Nucleus::fillEventInfo(), G4INCL::Nucleus::finalizeProjectileRemnant(), G4INCL::EventInfo::forcedDeltasOutside, G4INCL::EventInfo::forcedPionResonancesOutside, forceTransparent, G4INCL::Random::getAdapter(), G4INCL::Cluster::getAngularMomentum(), G4INCL::IPropagationModel::getCurrentTime(), G4INCL::Config::getDecayTimeThreshold(), G4INCL::IntersectionFactory::getEarlierTrajectoryIntersection(), G4INCL::Particle::getEnergy(), G4INCL::IAvatar::getFinalState(), G4INCL::Nucleus::getIncomingAngularMomentum(), G4INCL::Nucleus::getIncomingMomentum(), G4INCL::Particle::getMomentum(), G4INCL::Cluster::getParticles(), G4INCL::Nucleus::getProjectileRemnant(), G4INCL::Nucleus::getStore(), G4INCL::ParticleTable::getTableMass, G4INCL::FinalState::getValidity(), G4INCL::ThreeVector::getX(), G4INCL::ThreeVector::getY(), G4INCL::ThreeVector::getZ(), INCL_DEBUG, G4INCL::Nucleus::isNucleusNucleusCollision(), G4INCL::ThreeVector::mag2(), maxInteractionDistance, G4INCL::NoEnergyConservationFS, nucleus, G4INCL::ParticleBelowFermiFS, G4INCL::ParticleBelowZeroFS, G4INCL::PauliBlockedFS, propagationModel, G4INCL::ProjectileRemnant::reset(), G4INCL::Cluster::setA(), G4INCL::Particle::setEnergy(), G4INCL::Cluster::setExcitationEnergy(), G4INCL::Particle::setMass(), G4INCL::Particle::setMomentum(), G4INCL::Cluster::setS(), G4INCL::Cluster::setSpin(), G4INCL::Cluster::setZ(), G4INCL::EventInfo::St, theConfig, theEventInfo, G4INCL::ValidFS, and G4INCL::EventInfo::Zt.

Referenced by postCascade().

◆ makeProjectileRemnant()

G4int G4INCL::INCL::makeProjectileRemnant ( )
private

Make a projectile pre-fragment out of geometrical spectators.

The projectile pre-fragment is assigned an excitation energy given by $E_\mathrm{sp}-E_\mathrm{i,A}$, where $E_\mathrm{sp}$ is the sum of the energies of the spectator particles, and $E_\mathrm{i,A}$ is the sum of the smallest $A$ particle energies initially present in the projectile, $A$ being the mass of the projectile pre-fragment. This is equivalent to assuming that the excitation energy is given by the sum of the transitions of all excited projectile components to the "holes" left by the participants.

This method can modify the outgoing list and adds a projectile pre-fragment.

Returns
the number of dynamical spectators that were merged back in the projectile

Definition at line 772 of file G4INCLCascade.cc.

772 {
773 // Do nothing if this is not a nucleus-nucleus reaction
775 return 0;
776
777 // Get the spectators (geometrical+dynamical) from the Store
778 ParticleList geomSpectators(nucleus->getProjectileRemnant()->getParticles());
779 ParticleList dynSpectators(nucleus->getStore()->extractDynamicalSpectators());
780
781 G4int nUnmergedSpectators = 0;
782
783 // If there are no spectators, do nothing
784 if(dynSpectators.empty() && geomSpectators.empty()) {
785 return 0;
786 } else if(dynSpectators.size()==1 && geomSpectators.empty()) {
787 // No geometrical spectators, one dynamical spectator
788 // Just put it back in the outgoing list
789 nucleus->getStore()->addToOutgoing(dynSpectators.front());
790 } else {
791 // Make a cluster out of the geometrical spectators
792 ProjectileRemnant *theProjectileRemnant = nucleus->getProjectileRemnant();
793
794 // Add the dynamical spectators to the bunch
795 ParticleList rejected = theProjectileRemnant->addAllDynamicalSpectators(dynSpectators);
796 // Put back the rejected spectators into the outgoing list
797 nUnmergedSpectators = rejected.size();
798 nucleus->getStore()->addToOutgoing(rejected);
799
800 // Deal with the projectile remnant
802
803 }
804
805 return nUnmergedSpectators;
806 }
ParticleList const & getParticles() const
ParticleList addAllDynamicalSpectators(ParticleList const &pL)
Add back all dynamical spectators to the projectile remnant.
void addToOutgoing(Particle *p)
add the particle to the outgoing particle list.
Definition: G4INCLStore.hh:190
ParticleList extractDynamicalSpectators()
Returns a list of dynamical spectators.
Definition: G4INCLStore.hh:232

References G4INCL::ProjectileRemnant::addAllDynamicalSpectators(), G4INCL::Store::addToOutgoing(), G4INCL::Store::extractDynamicalSpectators(), G4INCL::Nucleus::finalizeProjectileRemnant(), G4INCL::IPropagationModel::getCurrentTime(), G4INCL::Cluster::getParticles(), G4INCL::Nucleus::getProjectileRemnant(), G4INCL::Nucleus::getStore(), nucleus, and propagationModel.

Referenced by postCascade().

◆ operator=()

INCL & G4INCL::INCL::operator= ( const INCL rhs)

Dummy assignment operator to silence Coverity warning.

◆ postCascade()

void G4INCL::INCL::postCascade ( )
private

Finalise the cascade and clean up.

Definition at line 377 of file G4INCLCascade.cc.

377 {
378 // Fill in the event information
380
381 // The event bias
383
384 // Forced CN?
386 INCL_DEBUG("Trying compound nucleus" << '\n');
389 // Global checks of conservation laws
390#ifndef INCLXX_IN_GEANT4_MODE
391 if(!theEventInfo.transparent) globalConservationChecks(true);
392#endif
393 return;
394 }
395
397
399 ProjectileRemnant * const projectileRemnant = nucleus->getProjectileRemnant();
400 if(projectileRemnant) {
401 // Clear the incoming list (particles will be deleted by the ProjectileRemnant)
403 } else {
404 // Delete particles in the incoming list
406 }
407 } else {
408
409 // Check if the nucleus contains strange particles
414
415 // Capture antiKaons and Sigmas and produce Lambda instead
417
418 // Emit strange particles still inside the nucleus
421
422#ifdef INCLXX_IN_GEANT4_MODE
424#endif // INCLXX_IN_GEANT4_MODE
425
426 // Check if the nucleus contains deltas
428
429 // Take care of any remaining deltas
432
433 // Take care of any remaining etas, omegas, neutral Sigmas and/or neutral kaons
436 nucleus->decayOutgoingSigmaZero(timeThreshold);
438
439 // Apply Coulomb distortion, if appropriate
440 // Note that this will apply Coulomb distortion also on pions emitted by
441 // unphysical remnants (see decayInsideDeltas). This is at variance with
442 // what INCL4.6 does, but these events are (should be!) so rare that
443 // whatever we do doesn't (shouldn't!) make any noticeable difference.
445
446 // If the normal cascade predicted complete fusion, use the tabulated
447 // masses to compute the excitation energy, the recoil, etc.
448 if(nucleus->getStore()->getOutgoingParticles().size()==0
450 || nucleus->getProjectileRemnant()->getParticles().size()==0)) {
451
452 INCL_DEBUG("Cascade resulted in complete fusion, using realistic fusion kinematics" << '\n');
453
455
456 if(nucleus->getExcitationEnergy()<0.) {
457 // Complete fusion is energetically impossible, return a transparent
458 INCL_WARN("Complete-fusion kinematics yields negative excitation energy, returning a transparent!" << '\n');
460 return;
461 }
462
463 } else { // Normal cascade here
464
465 // Set the excitation energy
467
468 // Make a projectile pre-fragment out of the geometrical and dynamical
469 // spectators
471
472 // Compute recoil momentum, energy and spin of the nucleus
473 if(nucleus->getA()==1 && minRemnantSize>1) {
474 INCL_ERROR("Computing one-nucleon recoil kinematics. We should never be here nowadays, cascade should stop earlier than this." << '\n');
475 }
477
478#ifndef INCLXX_IN_GEANT4_MODE
479 // Global checks of conservation laws
480 globalConservationChecks(false);
481#endif
482
483 // Make room for the remnant recoil by rescaling the energies of the
484 // outgoing particles.
486
487 }
488
489 // Cluster decay
491
492#ifndef INCLXX_IN_GEANT4_MODE
493 // Global checks of conservation laws
494 globalConservationChecks(true);
495#endif
496
497 // Fill the EventInfo structure
499
500 }
501 }
#define INCL_ERROR(x)
#define INCL_WARN(x)
void makeCompoundNucleus()
Make a compound nucleus.
G4int makeProjectileRemnant()
Make a projectile pre-fragment out of geometrical spectators.
void rescaleOutgoingForRecoil()
Rescale the energies of the outgoing particles.
G4bool decayOutgoingNeutralKaon()
Force the transformation of outgoing Neutral Kaon into propation eigenstate.
G4bool containsSigma()
Returns true if the nucleus contains any Sigma.
G4bool decayInsideDeltas()
Force the decay of deltas inside the nucleus.
void computeRecoilKinematics()
Compute the recoil momentum and spin of the nucleus.
G4bool containsDeltas()
Returns true if the nucleus contains any deltas.
G4bool isEventTransparent() const
Is the event transparent?
G4bool containsKaon()
Returns true if the nucleus contains any Kaons.
void emitInsideStrangeParticles()
Force emission of all strange particles inside the nucleus.
void useFusionKinematics()
Adjust the kinematics for complete-fusion events.
G4bool containsLambda()
Returns true if the nucleus contains any Lambda.
G4double getExcitationEnergy() const
Get the excitation energy of the nucleus.
G4int emitInsideLambda()
Force emission of all Lambda (desexitation code with strangeness not implanted yet)
G4bool decayInsideStrangeParticles()
Force the transformation of strange particles into a Lambda;.
G4bool hasRemnant() const
Does the nucleus give a cascade remnant?
G4double computeExcitationEnergy() const
Compute the current excitation energy.
G4bool containsAntiKaon()
Returns true if the nucleus contains any anti Kaons.
G4bool decayOutgoingSigmaZero(G4double timeThreshold)
Force the decay of outgoing Neutral Sigma.
static G4double getTotalBias()
General bias vector function.
void deleteIncoming()
Clear the incoming list and delete the particles.
Definition: G4INCLStore.hh:150
ParticleList const & getOutgoingParticles() const
Definition: G4INCLStore.hh:223
void distortOut(ParticleList const &pL, Nucleus const *const n)
Modify the momentum of an outgoing particle.
G4double Double_t
Bool_t lambdasInside
Event involved lambdas in the nucleus at the end of the cascade.
Float_t eventBias
Event bias.
Bool_t transparent
True if the event is transparent.
Bool_t sigmasInside
Event involved sigmas in the nucleus at the end of the cascade.
Bool_t deltasInside
Event involved deltas in the nucleus at the end of the cascade.
Int_t emitLambda
Number of forced Lambda emit out of the nucleus.
Bool_t kaonsInside
Event involved kaons in the nucleus at the end of the cascade.
Float_t stoppingTime
Cascade stopping time [fm/c].
Bool_t antikaonsInside
Event involved antikaons in the nucleus at the end of the cascade.
Bool_t forcedDeltasInside
Event involved forced delta decays inside the nucleus.
Bool_t absorbedStrangeParticle
Event involved forced strange absorption inside the nucleus.
Int_t nUnmergedSpectators
Number of dynamical spectators that were merged back into the projectile remnant.

References G4INCL::EventInfo::absorbedStrangeParticle, G4INCL::EventInfo::antikaonsInside, G4INCL::Store::clearIncoming(), G4INCL::EventInfo::clusterDecay, G4INCL::Nucleus::computeExcitationEnergy(), G4INCL::Nucleus::computeRecoilKinematics(), G4INCL::Nucleus::containsAntiKaon(), G4INCL::Nucleus::containsDeltas(), G4INCL::Nucleus::containsKaon(), G4INCL::Nucleus::containsLambda(), G4INCL::Nucleus::containsSigma(), G4INCL::Nucleus::decayInsideDeltas(), G4INCL::Nucleus::decayInsideStrangeParticles(), G4INCL::Nucleus::decayMe(), G4INCL::Nucleus::decayOutgoingClusters(), G4INCL::Nucleus::decayOutgoingDeltas(), G4INCL::Nucleus::decayOutgoingNeutralKaon(), G4INCL::Nucleus::decayOutgoingPionResonances(), G4INCL::Nucleus::decayOutgoingSigmaZero(), G4INCL::Store::deleteIncoming(), G4INCL::EventInfo::deltasInside, G4INCL::CoulombDistortion::distortOut(), G4INCL::Nucleus::emitInsideKaon(), G4INCL::Nucleus::emitInsideLambda(), G4INCL::Nucleus::emitInsideStrangeParticles(), G4INCL::EventInfo::emitKaon, G4INCL::EventInfo::emitLambda, G4INCL::EventInfo::eventBias, G4INCL::Nucleus::fillEventInfo(), G4INCL::EventInfo::forcedDeltasInside, G4INCL::EventInfo::forcedDeltasOutside, G4INCL::EventInfo::forcedPionResonancesOutside, forceTransparent, G4INCL::Particle::getA(), G4INCL::IPropagationModel::getCurrentTime(), G4INCL::Config::getDecayTimeThreshold(), G4INCL::Nucleus::getExcitationEnergy(), G4INCL::Store::getOutgoingParticles(), G4INCL::Cluster::getParticles(), G4INCL::Nucleus::getProjectileRemnant(), G4INCL::Nucleus::getStore(), G4INCL::Particle::getTotalBias(), G4INCL::Nucleus::getTryCompoundNucleus(), G4INCL::Nucleus::hasRemnant(), INCL_DEBUG, INCL_ERROR, INCL_WARN, G4INCL::Nucleus::isEventTransparent(), G4INCL::EventInfo::kaonsInside, G4INCL::EventInfo::lambdasInside, makeCompoundNucleus(), makeProjectileRemnant(), minRemnantSize, nucleus, G4INCL::EventInfo::nUnmergedSpectators, propagationModel, rescaleOutgoingForRecoil(), G4INCL::Cluster::setExcitationEnergy(), G4INCL::EventInfo::sigmasInside, G4INCL::EventInfo::stoppingTime, theConfig, theEventInfo, G4INCL::EventInfo::transparent, and G4INCL::Nucleus::useFusionKinematics().

Referenced by processEvent().

◆ preCascade()

G4bool G4INCL::INCL::preCascade ( ParticleSpecies const &  projectileSpecies,
const G4double  kineticEnergy 
)
private

Initialise the cascade.

Definition at line 277 of file G4INCLCascade.cc.

277 {
278 // Reset theEventInfo
280
282
283 // Fill in the event information
284 theEventInfo.projectileType = projectileSpecies.theType;
285 theEventInfo.Ap = projectileSpecies.theA;
286 theEventInfo.Zp = projectileSpecies.theZ;
287 theEventInfo.Sp = projectileSpecies.theS;
288 theEventInfo.Ep = kineticEnergy;
292
293 // Do nothing below the Coulomb barrier
294 if(maxImpactParameter<=0.) {
295 // Fill in the event information
297
298 return false;
299 }
300
301 // Randomly draw an impact parameter or use a fixed value, depending on the
302 // Config option
303 G4double impactParameter, phi;
304 if(fixedImpactParameter<0.) {
305 impactParameter = maxImpactParameter * std::sqrt(Random::shoot0());
306 phi = Random::shoot() * Math::twoPi;
307 } else {
308 impactParameter = fixedImpactParameter;
309 phi = 0.;
310 }
311 INCL_DEBUG("Selected impact parameter: " << impactParameter << '\n');
312
313 // Fill in the event information
314 theEventInfo.impactParameter = impactParameter;
315
316 const G4double effectiveImpactParameter = propagationModel->shoot(projectileSpecies, kineticEnergy, impactParameter, phi);
317 if(effectiveImpactParameter < 0.) {
318 // Fill in the event information
320
321 return false;
322 }
323
324 // Fill in the event information
326 theEventInfo.effectiveImpactParameter = effectiveImpactParameter;
327
328 return true;
329 }
virtual G4double shoot(ParticleSpecies const &projectileSpecies, const G4double kineticEnergy, const G4double impactParameter, const G4double phi)=0
G4int getS() const
Returns the strangeness number.
G4int getZ() const
Returns the charge number.
const G4double twoPi
G4double shoot0()
G4double shoot()
Definition: G4INCLRandom.cc:93
void reset()
Reset the EventInfo members.
Short_t Zp
Charge number of the projectile nucleus.
Int_t projectileType
Projectile particle type.
Float_t Ep
Projectile kinetic energy given as input.
Float_t effectiveImpactParameter
Effective (Coulomb-distorted) impact parameter [fm].
Short_t Ap
Mass number of the projectile nucleus.
Short_t Sp
Strangeness number of the projectile nucleus.
static G4ThreadLocal Int_t eventNumber
Number of the event.
Float_t impactParameter
Impact parameter [fm].

References G4INCL::EventInfo::Ap, G4INCL::EventInfo::At, G4INCL::EventInfo::effectiveImpactParameter, G4INCL::EventInfo::Ep, G4INCL::EventInfo::eventNumber, fixedImpactParameter, G4INCL::Particle::getA(), G4INCL::Particle::getS(), G4INCL::Particle::getZ(), G4INCL::EventInfo::impactParameter, INCL_DEBUG, maxImpactParameter, nucleus, G4INCL::EventInfo::projectileType, propagationModel, G4INCL::EventInfo::reset(), G4INCL::Random::shoot(), G4INCL::IPropagationModel::shoot(), G4INCL::Random::shoot0(), G4INCL::EventInfo::Sp, G4INCL::EventInfo::St, G4INCL::ParticleSpecies::theA, theEventInfo, G4INCL::ParticleSpecies::theS, G4INCL::ParticleSpecies::theType, G4INCL::ParticleSpecies::theZ, G4INCL::EventInfo::transparent, G4INCL::Math::twoPi, G4INCL::EventInfo::Zp, and G4INCL::EventInfo::Zt.

Referenced by processEvent().

◆ prepareReaction()

G4bool G4INCL::INCL::prepareReaction ( const ParticleSpecies projectileSpecies,
const G4double  kineticEnergy,
const G4int  A,
const G4int  Z,
const G4int  S 
)

Definition at line 185 of file G4INCLCascade.cc.

185 {
186 if(A < 0 || A > 300 || Z < 1 || Z > 200) {
187 INCL_ERROR("Unsupported target: A = " << A << " Z = " << Z << " S = " << S << '\n'
188 << "Target configuration rejected." << '\n');
189 return false;
190 }
191 if(projectileSpecies.theType==Composite &&
192 (projectileSpecies.theZ==projectileSpecies.theA || projectileSpecies.theZ==0)) {
193 INCL_ERROR("Unsupported projectile: A = " << projectileSpecies.theA << " Z = " << projectileSpecies.theZ << " S = " << projectileSpecies.theS << '\n'
194 << "Projectile configuration rejected." << '\n');
195 return false;
196 }
197
198 // Reset the forced-transparent flag
199 forceTransparent = false;
200
201 // Initialise the maximum universe radius
202 initUniverseRadius(projectileSpecies, kineticEnergy, A, Z);
203
204 // Initialise the nucleus
205 theZ = Z;
206 theS = S;
209 else
210 theA = A;
212
213 // Set the maximum impact parameter
214 maxImpactParameter = CoulombDistortion::maxImpactParameter(projectileSpecies, kineticEnergy, nucleus);
215 INCL_DEBUG("Maximum impact parameter initialised: " << maxImpactParameter << '\n');
216
217 // For forced CN events
218 initMaxInteractionDistance(projectileSpecies, kineticEnergy);
219
220 // Set the geometric cross section
223
224 // Set the minimum remnant size
225 if(projectileSpecies.theA > 0)
227 else
229
230 return true;
231 }
G4bool isNaturalTarget() const
Natural targets.
Definition: G4INCLConfig.hh:87
void initUniverseRadius(ParticleSpecies const &p, const G4double kineticEnergy, const G4int A, const G4int Z)
Initialize the universe radius.
void initMaxInteractionDistance(ParticleSpecies const &p, const G4double kineticEnergy)
Initialise the maximum interaction distance.
G4bool initializeTarget(const G4int A, const G4int Z, const G4int S)
G4double maxImpactParameter(ParticleSpecies const &p, const G4double kinE, Nucleus const *const n)
Return the maximum impact parameter for Coulomb-distorted trajectories.
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
const G4double tenPi
G4int drawRandomNaturalIsotope(const G4int Z)

References A, G4INCL::Composite, G4INCL::ParticleTable::drawRandomNaturalIsotope(), forceTransparent, G4INCL::GlobalInfo::geometricCrossSection, INCL_DEBUG, INCL_ERROR, initializeTarget(), initMaxInteractionDistance(), initUniverseRadius(), G4INCL::Config::isNaturalTarget(), maxImpactParameter, G4INCL::CoulombDistortion::maxImpactParameter(), G4INCL::Math::min(), minRemnantSize, nucleus, S(), G4INCL::Math::tenPi, theA, G4INCL::ParticleSpecies::theA, theConfig, theGlobalInfo, theS, G4INCL::ParticleSpecies::theS, G4INCL::ParticleSpecies::theType, theZ, G4INCL::ParticleSpecies::theZ, and Z.

Referenced by processEvent().

◆ processEvent() [1/2]

const EventInfo & G4INCL::INCL::processEvent ( )
inline

◆ processEvent() [2/2]

const EventInfo & G4INCL::INCL::processEvent ( ParticleSpecies const &  projectileSpecies,
const G4double  kineticEnergy,
const G4int  targetA,
const G4int  targetZ,
const G4int  targetS 
)

Definition at line 244 of file G4INCLCascade.cc.

250 {
251 // ReInitialize the bias vector
253 //Particle::INCLBiasVector.Clear();
255
256 // Set the target and the projectile
257 targetInitSuccess = prepareReaction(projectileSpecies, kineticEnergy, targetA, targetZ, targetS);
258
259 if(!targetInitSuccess) {
260 INCL_WARN("Target initialisation failed for A=" << targetA << ", Z=" << targetZ << ", S=" << targetS << '\n');
262 return theEventInfo;
263 }
264
266
267 const G4bool canRunCascade = preCascade(projectileSpecies, kineticEnergy);
268 if(canRunCascade) {
269 cascade();
270 postCascade();
272 }
274 return theEventInfo;
275 }
void beforeCascadeAction(IPropagationModel *)
void afterCascadeAction(Nucleus *)
G4bool prepareReaction(const ParticleSpecies &projectileSpecies, const G4double kineticEnergy, const G4int A, const G4int Z, const G4int S)
void cascade()
The actual cascade loop.
void updateGlobalInfo()
Update global counters and other members of theGlobalInfo object.
void postCascade()
Finalise the cascade and clean up.
G4bool preCascade(ParticleSpecies const &projectileSpecies, const G4double kineticEnergy)
Initialise the cascade.
static std::vector< G4double > INCLBiasVector
Time ordered vector of all bias applied.
static G4ThreadLocal G4int nextBiasedCollisionID

References G4INCL::CascadeAction::afterCascadeAction(), G4INCL::CascadeAction::beforeCascadeAction(), cascade(), cascadeAction, INCL_WARN, G4INCL::Particle::INCLBiasVector, G4INCL::Particle::nextBiasedCollisionID, nucleus, postCascade(), preCascade(), prepareReaction(), propagationModel, targetInitSuccess, theEventInfo, G4INCL::EventInfo::transparent, and updateGlobalInfo().

◆ rescaleOutgoingForRecoil()

void G4INCL::INCL::rescaleOutgoingForRecoil ( )
private

Rescale the energies of the outgoing particles.

Allow for the remnant recoil energy by rescaling the energy (and momenta) of the outgoing particles.

Definition at line 655 of file G4INCLCascade.cc.

655 {
656 RecoilCMFunctor theRecoilFunctor(nucleus, theEventInfo);
657
658 // Apply the root-finding algorithm
659 const RootFinder::Solution theSolution = RootFinder::solve(&theRecoilFunctor, 1.0);
660 if(theSolution.success) {
661 theRecoilFunctor(theSolution.x); // Apply the solution
662 } else {
663 INCL_WARN("Couldn't accommodate remnant recoil while satisfying energy conservation, root-finding algorithm failed." << '\n');
664 }
665
666 }
Solution solve(RootFunctor const *const f, const G4double x0)
Numerically solve a one-dimensional equation.

References INCL_WARN, nucleus, G4INCL::RootFinder::solve(), G4INCL::RootFinder::Solution::success, theEventInfo, and G4INCL::RootFinder::Solution::x.

Referenced by postCascade().

◆ updateGlobalInfo()

void G4INCL::INCL::updateGlobalInfo ( )
private

Update global counters and other members of theGlobalInfo object.

Definition at line 868 of file G4INCLCascade.cc.

868 {
869 // Increment the global counter for the number of shots
871
873 // Increment the global counter for the number of transparents
875 // Increment the global counter for the number of forced transparents
878 return;
879 }
880
881 // Check if we have an absorption:
884
885 // Count complete-fusion events
887
890
891 // Counters for the number of violations of energy conservation in
892 // collisions
894 }
Bool_t pionAbsorption
True if the event is a pion absorption.
Short_t nCascadeParticles
Number of cascade particles.
Bool_t nucleonAbsorption
True if the event is a nucleon absorption.
Int_t nEnergyViolationInteraction
Number of attempted collisions/decays for which the energy-conservation algorithm failed to find a so...
Int_t nForcedTransparents
Number of forced transparents.

References forceTransparent, G4INCL::Nucleus::getTryCompoundNucleus(), G4INCL::EventInfo::nCascadeParticles, G4INCL::GlobalInfo::nCompleteFusion, G4INCL::EventInfo::nEnergyViolationInteraction, G4INCL::GlobalInfo::nEnergyViolationInteraction, G4INCL::GlobalInfo::nForcedCompoundNucleus, G4INCL::GlobalInfo::nForcedTransparents, G4INCL::GlobalInfo::nNucleonAbsorptions, G4INCL::GlobalInfo::nPionAbsorptions, G4INCL::GlobalInfo::nShots, G4INCL::GlobalInfo::nTransparents, G4INCL::EventInfo::nucleonAbsorption, nucleus, G4INCL::EventInfo::pionAbsorption, theEventInfo, theGlobalInfo, and G4INCL::EventInfo::transparent.

Referenced by processEvent().

Field Documentation

◆ cascadeAction

CascadeAction* G4INCL::INCL::cascadeAction
private

Definition at line 95 of file G4INCLCascade.hh.

Referenced by cascade(), INCL(), processEvent(), and ~INCL().

◆ fixedImpactParameter

G4double G4INCL::INCL::fixedImpactParameter
private

Definition at line 94 of file G4INCLCascade.hh.

Referenced by INCL(), and preCascade().

◆ forceTransparent

G4bool G4INCL::INCL::forceTransparent
private

◆ maxImpactParameter

G4double G4INCL::INCL::maxImpactParameter
private

Definition at line 91 of file G4INCLCascade.hh.

Referenced by preCascade(), and prepareReaction().

◆ maxInteractionDistance

G4double G4INCL::INCL::maxInteractionDistance
private

Definition at line 93 of file G4INCLCascade.hh.

Referenced by initMaxInteractionDistance(), and makeCompoundNucleus().

◆ maxUniverseRadius

G4double G4INCL::INCL::maxUniverseRadius
private

Definition at line 92 of file G4INCLCascade.hh.

Referenced by initializeTarget(), and initUniverseRadius().

◆ minRemnantSize

G4int G4INCL::INCL::minRemnantSize
private

Remnant size below which cascade stops.

Definition at line 104 of file G4INCLCascade.hh.

Referenced by continueCascade(), postCascade(), and prepareReaction().

◆ nucleus

Nucleus* G4INCL::INCL::nucleus
private

◆ propagationModel

IPropagationModel* G4INCL::INCL::propagationModel
private

◆ targetInitSuccess

G4bool G4INCL::INCL::targetInitSuccess
private

Definition at line 90 of file G4INCLCascade.hh.

Referenced by processEvent().

◆ theA

G4int G4INCL::INCL::theA
private

Definition at line 89 of file G4INCLCascade.hh.

Referenced by initMaxInteractionDistance(), and prepareReaction().

◆ theConfig

Config const* const G4INCL::INCL::theConfig
private

◆ theEventInfo

EventInfo G4INCL::INCL::theEventInfo
private

◆ theGlobalInfo

GlobalInfo G4INCL::INCL::theGlobalInfo
private

◆ theS

G4int G4INCL::INCL::theS
private

Definition at line 89 of file G4INCLCascade.hh.

Referenced by prepareReaction().

◆ theZ

G4int G4INCL::INCL::theZ
private

Definition at line 89 of file G4INCLCascade.hh.

Referenced by initMaxInteractionDistance(), and prepareReaction().


The documentation for this class was generated from the following files: