34#define INCLXX_IN_GEANT4_MODE 1
80 :propagationModel(0), theA(208), theZ(82), theS(0),
81 targetInitSuccess(false),
82 maxImpactParameter(0.),
83 maxUniverseRadius(0.),
84 maxInteractionDistance(0.),
85 fixedImpactParameter(0.),
88 forceTransparent(false),
92#ifdef INCLXX_IN_GEANT4_MODE
95 Logger::initialize(theConfig);
139 cascadeAction->beforeRunAction(theConfig);
144 theGlobalInfo.rootSelection = theConfig->getROOTSelectionString();
147#ifndef INCLXX_IN_GEANT4_MODE
152 theGlobalInfo.
Ap = theSpecies.
theA;
153 theGlobalInfo.
Zp = theSpecies.
theZ;
162#ifndef INCLXX_IN_GEANT4_MODE
163 NuclearMassTable::deleteTable();
171#ifndef INCLXX_IN_GEANT4_MODE
172 Logger::deleteLoggerSlave();
176 cascadeAction->afterRunAction();
177 delete cascadeAction;
178 delete propagationModel;
183 if(A < 0 || A > 300 || Z < 1 || Z > 200) {
184 INCL_ERROR(
"Unsupported target: A = " <<
A <<
" Z = " << Z <<
" S = " <<
S <<
'\n'
185 <<
"Target configuration rejected." <<
'\n');
189 (projectileSpecies.
theZ==projectileSpecies.
theA || projectileSpecies.
theZ==0)) {
190 INCL_ERROR(
"Unsupported projectile: A = " << projectileSpecies.
theA <<
" Z = " << projectileSpecies.
theZ <<
" S = " << projectileSpecies.
theS <<
'\n'
191 <<
"Projectile configuration rejected." <<
'\n');
196 forceTransparent =
false;
199 initUniverseRadius(projectileSpecies, kineticEnergy,
A, Z);
212 INCL_DEBUG(
"Maximum impact parameter initialised: " << maxImpactParameter <<
'\n');
215 initMaxInteractionDistance(projectileSpecies, kineticEnergy);
222 if(projectileSpecies.
theA > 0)
223 minRemnantSize = std::min(theA, 4);
225 minRemnantSize = std::min(theA-1, 4);
233 nucleus =
new Nucleus(
A, Z,
S, theConfig, maxUniverseRadius);
254 targetInitSuccess =
prepareReaction(projectileSpecies, kineticEnergy, targetA, targetZ, targetS);
256 if(!targetInitSuccess) {
257 INCL_WARN(
"Target initialisation failed for A=" << targetA <<
", Z=" << targetZ <<
", S=" << targetS <<
'\n');
262 cascadeAction->beforeCascadeAction(propagationModel);
264 const G4bool canRunCascade = preCascade(projectileSpecies, kineticEnergy);
268 cascadeAction->afterCascadeAction(nucleus);
276 theEventInfo.
reset();
282 theEventInfo.
Ap = projectileSpecies.
theA;
283 theEventInfo.
Zp = projectileSpecies.
theZ;
284 theEventInfo.
Sp = projectileSpecies.
theS;
285 theEventInfo.
Ep = kineticEnergy;
286 theEventInfo.
At = nucleus->
getA();
287 theEventInfo.
Zt = nucleus->
getZ();
288 theEventInfo.
St = nucleus->
getS();
291 if(maxImpactParameter<=0.) {
301 if(fixedImpactParameter<0.) {
302 impactParameter = maxImpactParameter * std::sqrt(
Random::shoot0());
305 impactParameter = fixedImpactParameter;
308 INCL_DEBUG(
"Selected impact parameter: " << impactParameter <<
'\n');
313 const G4double effectiveImpactParameter = propagationModel->
shoot(projectileSpecies, kineticEnergy, impactParameter, phi);
314 if(effectiveImpactParameter < 0.) {
328 void INCL::cascade() {
329 FinalState *finalState =
new FinalState;
331 unsigned long loopCounter = 0;
332 const unsigned long maxLoopCounter = 10000000;
335 cascadeAction->beforePropagationAction(propagationModel);
339 IAvatar *avatar = propagationModel->
propagate(finalState);
344 cascadeAction->afterPropagationAction(propagationModel, avatar);
346 if(avatar == 0)
break;
349 cascadeAction->beforeAvatarAction(avatar, nucleus);
358 avatar->fillFinalState(finalState);
360 cascadeAction->afterAvatarAction(avatar, nucleus, finalState);
369 }
while(continueCascade() && loopCounter<maxLoopCounter);
374 void INCL::postCascade() {
383 INCL_DEBUG(
"Trying compound nucleus" <<
'\n');
384 makeCompoundNucleus();
387#ifndef INCLXX_IN_GEANT4_MODE
388 if(!theEventInfo.
transparent) globalConservationChecks(
true);
397 if(projectileRemnant) {
419#ifdef INCLXX_IN_GEANT4_MODE
449 INCL_DEBUG(
"Cascade resulted in complete fusion, using realistic fusion kinematics" <<
'\n');
455 INCL_WARN(
"Complete-fusion kinematics yields negative excitation energy, returning a transparent!" <<
'\n');
470 if(nucleus->
getA()==1 && minRemnantSize>1) {
471 INCL_ERROR(
"Computing one-nucleon recoil kinematics. We should never be here nowadays, cascade should stop earlier than this." <<
'\n');
475#ifndef INCLXX_IN_GEANT4_MODE
477 globalConservationChecks(
false);
482 if(nucleus->
hasRemnant()) rescaleOutgoingForRecoil();
489#ifndef INCLXX_IN_GEANT4_MODE
491 globalConservationChecks(
true);
500 void INCL::makeCompoundNucleus() {
507 forceTransparent =
true;
515 nucleus->
setA(theEventInfo.
At);
516 nucleus->
setZ(theEventInfo.
Zt);
524 G4int theCNA=theEventInfo.
At, theCNZ=theEventInfo.
Zt, theCNS=theEventInfo.
St;
529 ParticleList
const &initialProjectileComponents = theProjectileRemnant->getParticles();
530 std::vector<Particle *> shuffledComponents(initialProjectileComponents.begin(), initialProjectileComponents.end());
532 std::shuffle(shuffledComponents.begin(), shuffledComponents.end(),
Random::getAdapter());
535 G4bool atLeastOneNucleonEntering =
false;
536 for(std::vector<Particle*>::const_iterator p=shuffledComponents.begin(), e=shuffledComponents.end(); p!=e; ++p) {
540 (*p)->getPropagationVelocity(),
541 maxInteractionDistance));
542 if(!intersectionInteractionDistance.exists)
546 atLeastOneNucleonEntering =
true;
547 ParticleEntryAvatar *theAvatar =
new ParticleEntryAvatar(0.0, nucleus, *p);
549 FinalState *fs = theAvatar->getFinalState();
559 theCNZ += (*p)->getZ();
560 theCNS += (*p)->getS();
570 if(!success || !atLeastOneNucleonEntering) {
571 INCL_DEBUG(
"No nucleon entering in forced CN, forcing a transparent" <<
'\n');
572 forceTransparent =
true;
582 theCNEnergy -= theProjectileRemnant->getEnergy();
583 theCNMomentum -= theProjectileRemnant->getMomentum();
590 theCNSpin -= theProjectileRemnant->getAngularMomentum();
594 const G4double theCNInvariantMassSquared = theCNEnergy*theCNEnergy-theCNMomentum.mag2();
595 if(theCNInvariantMassSquared<0.) {
597 forceTransparent =
true;
600 const G4double theCNExcitationEnergy = std::sqrt(theCNInvariantMassSquared) - theCNMass;
601 if(theCNExcitationEnergy<0.) {
603 INCL_DEBUG(
"CN excitation energy is negative, forcing a transparent" <<
'\n'
604 <<
" theCNA = " << theCNA <<
'\n'
605 <<
" theCNZ = " << theCNZ <<
'\n'
606 <<
" theCNS = " << theCNS <<
'\n'
607 <<
" theCNEnergy = " << theCNEnergy <<
'\n'
608 <<
" theCNMomentum = (" << theCNMomentum.getX() <<
", "<< theCNMomentum.getY() <<
", " << theCNMomentum.getZ() <<
")" <<
'\n'
609 <<
" theCNExcitationEnergy = " << theCNExcitationEnergy <<
'\n'
610 <<
" theCNSpin = (" << theCNSpin.getX() <<
", "<< theCNSpin.getY() <<
", " << theCNSpin.getZ() <<
")" <<
'\n'
612 forceTransparent =
true;
616 INCL_DEBUG(
"CN excitation energy is positive, forcing a CN" <<
'\n'
617 <<
" theCNA = " << theCNA <<
'\n'
618 <<
" theCNZ = " << theCNZ <<
'\n'
619 <<
" theCNS = " << theCNS <<
'\n'
620 <<
" theCNEnergy = " << theCNEnergy <<
'\n'
621 <<
" theCNMomentum = (" << theCNMomentum.getX() <<
", "<< theCNMomentum.getY() <<
", " << theCNMomentum.getZ() <<
")" <<
'\n'
622 <<
" theCNExcitationEnergy = " << theCNExcitationEnergy <<
'\n'
623 <<
" theCNSpin = (" << theCNSpin.getX() <<
", "<< theCNSpin.getY() <<
", " << theCNSpin.getZ() <<
")" <<
'\n'
625 nucleus->
setA(theCNA);
626 nucleus->
setZ(theCNZ);
627 nucleus->
setS(theCNS);
631 nucleus->
setMass(theCNMass+theCNExcitationEnergy);
652 void INCL::rescaleOutgoingForRecoil() {
653 RecoilCMFunctor theRecoilFunctor(nucleus, theEventInfo);
656 const RootFinder::Solution theSolution =
RootFinder::solve(&theRecoilFunctor, 1.0);
657 if(theSolution.success) {
658 theRecoilFunctor(theSolution.x);
660 INCL_WARN(
"Couldn't accommodate remnant recoil while satisfying energy conservation, root-finding algorithm failed." <<
'\n');
665#ifndef INCLXX_IN_GEANT4_MODE
666 void INCL::globalConservationChecks(
G4bool afterRecoil) {
671 const G4double pTransBalance = theBalance.momentum.perp();
672 if(theBalance.Z != 0) {
673 INCL_ERROR(
"Violation of charge conservation! ZBalance = " << theBalance.Z <<
" eventNumber=" << theEventInfo.
eventNumber <<
'\n');
675 if(theBalance.A != 0) {
676 INCL_ERROR(
"Violation of baryon-number conservation! ABalance = " << theBalance.A <<
" Emit Lambda=" << theEventInfo.
emitLambda <<
" eventNumber=" << theEventInfo.
eventNumber <<
'\n');
678 if(theBalance.S != 0) {
679 INCL_ERROR(
"Violation of strange-number conservation! SBalance = " << theBalance.S <<
" eventNumber=" << theEventInfo.
eventNumber <<
'\n');
681 G4double EThreshold, pLongThreshold, pTransThreshold;
686 pTransThreshold = 1.;
690 pLongThreshold = 0.1;
691 pTransThreshold = 0.1;
693 if(std::abs(theBalance.energy)>EThreshold) {
694 INCL_WARN(
"Violation of energy conservation > " << EThreshold <<
" MeV. EBalance = " << theBalance.energy <<
" Emit Lambda=" << theEventInfo.
emitLambda <<
" afterRecoil = " << afterRecoil <<
" eventNumber=" << theEventInfo.
eventNumber <<
'\n');
696 if(std::abs(pLongBalance)>pLongThreshold) {
697 INCL_WARN(
"Violation of longitudinal momentum conservation > " << pLongThreshold <<
" MeV/c. pLongBalance = " << pLongBalance <<
" afterRecoil = " << afterRecoil <<
" eventNumber=" << theEventInfo.
eventNumber <<
'\n');
699 if(std::abs(pTransBalance)>pTransThreshold) {
700 INCL_WARN(
"Violation of transverse momentum conservation > " << pTransThreshold <<
" MeV/c. pTransBalance = " << pTransBalance <<
" afterRecoil = " << afterRecoil <<
" eventNumber=" << theEventInfo.
eventNumber <<
'\n');
704 theEventInfo.
EBalance = theBalance.energy;
710 G4bool INCL::continueCascade() {
715 <<
"), stopping cascade" <<
'\n');
721 INCL_DEBUG(
"No participants in the nucleus and no incoming particles left, stopping cascade" <<
'\n');
725 if(nucleus->
getA() <= minRemnantSize) {
727 <<
") smaller than or equal to minimum (" << minRemnantSize
728 <<
"), stopping cascade" <<
'\n');
734 INCL_DEBUG(
"Trying to make a compound nucleus, stopping cascade" <<
'\n');
769 G4int INCL::makeProjectileRemnant() {
778 G4int nUnmergedSpectators = 0;
781 if(dynSpectators.empty() && geomSpectators.empty()) {
783 }
else if(dynSpectators.size()==1 && geomSpectators.empty()) {
794 nUnmergedSpectators = rejected.size();
802 return nUnmergedSpectators;
805 void INCL::initMaxInteractionDistance(ParticleSpecies
const &projectileSpecies,
const G4double kineticEnergy) {
806 if(projectileSpecies.theType !=
Composite) {
807 maxInteractionDistance = 0.;
815 maxInteractionDistance = r0 + theNNDistance;
816 INCL_DEBUG(
"Initialised interaction distance: r0 = " << r0 <<
'\n'
817 <<
" theNNDistance = " << theNNDistance <<
'\n'
818 <<
" maxInteractionDistance = " << maxInteractionDistance <<
'\n');
821 void INCL::initUniverseRadius(ParticleSpecies
const &p,
const G4double kineticEnergy,
const G4int A,
const G4int Z) {
824 IsotopicDistribution
const &anIsotopicDistribution =
826 IsotopeVector theIsotopes = anIsotopicDistribution.getIsotopes();
827 for(
IsotopeIter i=theIsotopes.begin(), e=theIsotopes.end(); i!=e; ++i) {
830 const G4double maximumRadius = std::max(pMaximumRadius, nMaximumRadius);
831 rMax = std::max(maximumRadius, rMax);
836 const G4double maximumRadius = std::max(pMaximumRadius, nMaximumRadius);
837 rMax = std::max(maximumRadius, rMax);
842 }
else if(p.theType==
PiPlus
847 }
else if(p.theType==
KPlus
848 || p.theType==
KZero) {
855 }
else if(p.theType==
Lambda
862 INCL_DEBUG(
"Initialised universe radius: " << maxUniverseRadius <<
'\n');
865 void INCL::updateGlobalInfo() {
double A(double temperature)
Alternative CascadeAction for dumping avatars.
Class containing default actions to be performed at intermediate cascade steps.
Static class for cluster formation.
Static class for selecting Coulomb distortion.
Simple container for output of calculation-wide results.
Abstract interface to the nuclear potential.
Simple class for computing intersections between a straight line and a sphere.
Functions that encapsulate a mass table.
static void setBias(const G4double b)
Set the bias.
static void setCutNN(const G4double c)
G4int getCascading() const
ParticleList const & getParticles() const
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.
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.
G4double getDecayTimeThreshold() const
Get the decay time threshold time.
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.
G4bool isNaturalTarget() const
Natural targets.
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.
std::string getDeExcitationString() const
Get the de-excitation string.
void finalizeGlobalInfo(Random::SeedVector const &initialSeeds)
G4bool prepareReaction(const ParticleSpecies &projectileSpecies, const G4double kineticEnergy, const G4int A, const G4int Z, const G4int S)
G4bool initializeTarget(const G4int A, const G4int Z, const G4int S)
INCL(Config const *const config)
const EventInfo & processEvent()
virtual G4double shoot(ParticleSpecies const &projectileSpecies, const G4double kineticEnergy, const G4double impactParameter, const G4double phi)=0
virtual G4INCL::IAvatar * propagate(FinalState const *const fs)=0
virtual G4double getCurrentTime()=0
virtual G4double getStoppingTime()=0
virtual void setNucleus(G4INCL::Nucleus *nucleus)=0
static void deleteBackupParticles()
Release the memory allocated for the backup particles.
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.
ProjectileRemnant * getProjectileRemnant() const
Get the projectile remnant.
void fillEventInfo(EventInfo *eventInfo)
G4bool decayMe()
Force the phase-space decay of the Nucleus.
G4bool decayInsideDeltas()
Force the decay of deltas inside the nucleus.
void computeRecoilKinematics()
Compute the recoil momentum and spin of the nucleus.
void finalizeProjectileRemnant(const G4double emissionTime)
Finalise the projectile remnant.
G4bool containsDeltas()
Returns true if the nucleus contains any deltas.
G4bool getTryCompoundNucleus()
G4bool emitInsideKaon()
Force emission of all Kaon inside the nucleus.
G4bool isEventTransparent() const
Is the event transparent?
void applyFinalState(FinalState *)
G4bool isNucleusNucleusCollision() const
Is it a nucleus-nucleus collision?
G4bool containsKaon()
Returns true if the nucleus contains any Kaons.
void emitInsideStrangeParticles()
Force emission of all strange particles inside the nucleus.
G4bool decayOutgoingPionResonances(G4double timeThreshold)
Force the decay of outgoing PionResonances (eta/omega).
void useFusionKinematics()
Adjust the kinematics for complete-fusion events.
G4bool containsLambda()
Returns true if the nucleus contains any Lambda.
const ThreeVector & getIncomingMomentum() const
Get the incoming momentum vector.
G4bool decayOutgoingClusters()
Force the decay of unstable outgoing clusters.
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;.
ConservationBalance getConservationBalance(EventInfo const &theEventInfo, const G4bool afterRecoil) const
Compute charge, mass, energy and momentum balance.
void initializeParticles()
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 decayOutgoingDeltas()
Force the decay of outgoing deltas.
G4bool decayOutgoingSigmaZero(G4double timeThreshold)
Force the decay of outgoing Neutral Sigma.
G4int getS() const
Returns the strangeness number.
G4double getEnergy() const
static std::vector< G4double > INCLBiasVector
Time ordered vector of all bias applied.
void setMass(G4double mass)
G4int getZ() const
Returns the charge number.
static G4double getTotalBias()
General bias vector function.
virtual void setMomentum(const G4INCL::ThreeVector &momentum)
void setEnergy(G4double energy)
static G4ThreadLocal G4int nextBiasedCollisionID
G4int getA() const
Returns the baryon number.
ParticleList addAllDynamicalSpectators(ParticleList const &pL)
Add back all dynamical spectators to the projectile remnant.
void reset()
Reset the projectile remnant to the state at the beginning of the cascade.
ParticleList const & getIncomingParticles() const
void deleteIncoming()
Clear the incoming list and delete the particles.
ParticleList const & getOutgoingParticles() const
void addToOutgoing(Particle *p)
add the particle to the outgoing particle list.
void clearIncoming()
Clear the incoming list.
void addParticleEntryAvatar(IAvatar *a)
Add one ParticleEntry avatar.
ParticleList extractDynamicalSpectators()
Returns a list of dynamical spectators.
void initialize(Config const *const theConfig)
Initialize the clustering model based on the Config object.
void deleteClusteringModel()
Delete the clustering model.
void initialize(Config const *const theConfig)
Initialize the Coulomb-distortion algorithm.
void deleteCoulomb()
Delete the Coulomb-distortion object.
void distortOut(ParticleList const &pL, Nucleus const *const n)
Modify the momentum of an outgoing particle.
G4double maxImpactParameter(ParticleSpecies const &p, const G4double kinE, Nucleus const *const n)
Return the maximum impact parameter for Coulomb-distorted trajectories.
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".
void deleteCrossSections()
void initialize(Config const *const theConfig)
G4double interactionDistanceNN(const ParticleSpecies &aSpecies, const G4double kineticEnergy)
Compute the "interaction distance".
Intersection getEarlierTrajectoryIntersection(const ThreeVector &x0, const ThreeVector &p, const G4double r)
Compute the first intersection of a straight particle trajectory with a sphere.
void initVerbosityLevelFromEnvvar()
void clearCache()
Clear the INuclearPotential cache.
G4ThreadLocal NuclearMassFn getTableMass
Static pointer to the mass function for nuclei.
void initialize(Config const *const theConfig=0)
Initialize the particle table.
G4int drawRandomNaturalIsotope(const G4int Z)
G4double getMaximumNuclearRadius(const ParticleType t, const G4int A, const G4int Z)
IsotopicDistribution const & getNaturalIsotopicDistribution(const G4int Z)
G4double getNuclearRadius(const ParticleType t, const G4int A, const G4int Z)
void initialize(Config const *const aConfig)
Initialise blockers according to a Config object.
void deleteBlockers()
Delete blockers.
void initialize(Config const *const theConfig)
void deletePhaseSpaceGenerator()
Adapter const & getAdapter()
void initialize(Config const *const)
Initialize generator according to a Config object.
Solution solve(RootFunctor const *const f, const G4double x0)
Numerically solve a one-dimensional equation.
IsotopeVector::iterator IsotopeIter
std::vector< Isotope > IsotopeVector
Bool_t pionAbsorption
True if the event is a pion absorption.
void reset()
Reset the EventInfo members.
Bool_t lambdasInside
Event involved lambdas in the nucleus at the end of the cascade.
Bool_t forcedDeltasOutside
Event involved forced delta decays outside the nucleus.
Short_t At
Mass number of the target nucleus.
Short_t Zp
Charge number of the projectile nucleus.
Int_t projectileType
Projectile particle type.
Float_t pTransBalance
Transverse momentum-conservation balance [MeV/c].
Float_t Ep
Projectile kinetic energy given as input.
Short_t nCascadeParticles
Number of cascade particles.
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.
Float_t EBalance
Energy-conservation balance [MeV].
Bool_t forcedPionResonancesOutside
Event involved forced eta/omega decays outside the nucleus.
Bool_t nucleonAbsorption
True if the event is a nucleon absorption.
Int_t emitLambda
Number of forced Lambda emit out of the nucleus.
Short_t St
Strangeness number of the target nucleus.
Float_t effectiveImpactParameter
Effective (Coulomb-distorted) impact parameter [fm].
Bool_t kaonsInside
Event involved kaons in the nucleus at the end of the cascade.
Float_t stoppingTime
Cascade stopping time [fm/c].
Int_t nEnergyViolationInteraction
Number of attempted collisions/decays for which the energy-conservation algorithm failed to find a so...
Short_t Ap
Mass number of the projectile nucleus.
Short_t Sp
Strangeness number of the projectile nucleus.
Bool_t emitKaon
Event involved forced Kaon emission.
Bool_t antikaonsInside
Event involved antikaons in the nucleus at the end of the cascade.
Bool_t clusterDecay
Event involved cluster decay.
Bool_t forcedDeltasInside
Event involved forced delta decays inside the nucleus.
Short_t Zt
Charge number of the target nucleus.
static G4ThreadLocal Int_t eventNumber
Number of the event.
Float_t impactParameter
Impact parameter [fm].
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.
Float_t pLongBalance
Longitudinal momentum-conservation balance [MeV/c].
Int_t nNucleonAbsorptions
Number of nucleon absorptions (no outcoming particles)
std::string deexcitationModel
Name of the de-excitation model.
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)
Float_t Ep
Projectile kinetic energy given as input.
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.
Short_t At
Target mass number given as input.
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.
Short_t Zt
Target charge number given as input.
std::vector< Int_t > finalRandomSeeds
Final seeds for the pseudo-random-number generator.
Int_t nPionAbsorptions
Number of nucleon absorptions (no outcoming pions)
Short_t Ap
Projectile mass number given as input.
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.
Short_t Zp
Projectile charge number given as input.
Int_t nForcedTransparents
Number of forced transparents.
std::string cascadeModel
Name of the cascade model.
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.