154 using namespace G4InuclParticleNames;
155 using namespace G4InuclSpecialFunctions;
171 theCascadeHistory(0), tnuclei(0), bnuclei(0), bparticle(0),
172 minimum_recoil_A(0.), coulombBarrier(0.),
194 model->setVerboseLevel(verbose);
222 finalize(itry, bullet, target, globalOutput);
233 G4cout <<
" >>> G4IntraNucleiCascader::rescatter " <<
G4endl;
248 finalize(itry, bullet, target, globalOutput);
255 G4cout <<
" >>> G4IntraNucleiCascader::initialize " <<
G4endl;
272 G4cerr <<
" G4IntraNucleiCascader: projectile is not a valid particle."
281 G4cerr <<
" Target is not a nucleus. Abandoning." <<
G4endl;
294 G4cout <<
" intitial momentum E " << momentum_in.
e() <<
" Px "
295 << momentum_in.
x() <<
" Py " << momentum_in.
y() <<
" Pz "
306 G4cout <<
" IntraNucleiCascader itry " << itry <<
" inter_case "
324 G4cout <<
" >>> G4IntraNucleiCascader::setupCascade" <<
G4endl;
345 for (i = 0; i <
ab; i++) {
346 G4int knd = i < zb ? 1 : 2;
371 G4cout <<
" Iteration " << iloop <<
": Number of cparticles "
380 G4cout <<
" active cparticle got history ID "
388 G4cout <<
" particle is non-interacting; moving to output" <<
G4endl;
405 G4cout <<
" After generate fate: New particles "
407 <<
" Discarding last cparticle from list " <<
G4endl;
417 if (
model->stillInside(currentCParticle)) {
422 model->worthToPropagate(currentCParticle)) {
450 std::sqrt(mass*(coulombBarrier-KE)) );
477 std::pair<G4int, G4int> holes =
model->getTypesOfNucleonsInvolved();
479 G4cout <<
" adding new exciton holes " << holes.first <<
","
480 << holes.second <<
G4endl;
484 if (holes.second > 0)
495 <<
" nucleus (model) has "
496 <<
model->getNumberOfNeutrons() <<
" n, "
497 <<
model->getNumberOfProtons() <<
" p "
498 <<
" residual fragment A " << aresid <<
G4endl;
510 G4cout <<
" >>> G4IntraNucleiCascader::finishCascade ?" <<
G4endl;
546 G4cerr <<
" Recoil nucleus is not physical: A=" << afin <<
" Z="
554 G4cout <<
" afin " << afin <<
" zfin " << zfin <<
G4endl;
557 if (afin == 0)
return true;
560 G4int last_type = (zfin==1) ? 1 : 2;
573 G4cerr <<
" extra energy with recoil nucleon" <<
G4endl;
583 G4cout <<
" adding recoiling nucleon to output list\n"
584 << last_particle <<
G4endl;
599 G4cout <<
" quasi-elastic scatter with " << Eex <<
" MeV recoil"
616 G4cerr <<
"Got null pointer for recoil fragment!" <<
G4endl;
621 G4cout <<
" adding recoil fragment to output list" <<
G4endl;
662 G4cout <<
" IntraNucleiCascader-> no inelastic interaction after "
663 << itry <<
" attempts " <<
G4endl;
668 G4cout <<
" IntraNucleiCascader output after trials " << itry <<
G4endl;
683 if (theNucleusA > 1) {
702 G4cout <<
" >>> G4IntraNucleiCascader::preloadCascade" <<
G4endl;
710 G4cout <<
" >>> G4IntraNucleiCascader::copyWoundedNucleus" <<
G4endl;
731 <<
" protons hit" <<
G4endl;
741 G4cout <<
" >>> G4IntraNucleiCascader::copySecondaries" <<
G4endl;
743 for (
size_t i=0; i<secondaries->size(); i++) {
754 G4cout <<
" Original list of " << secondaries->size() <<
" secondaries"
778 G4cout <<
" >>> G4IntraNucleiCascader::processSecondary "
799 G4cout <<
" Created cascade particle \n" << cpart <<
G4endl;
809 G4cout <<
" >>> G4IntraNucleiCascader::releaseSecondary "
814 if (dynamic_cast<const G4Ions*>(kpd)) {
822 G4cout <<
" Created pre-cascade fragment\n" << inucl <<
G4endl;
831 G4cout <<
" Created invalid pre-cascade particle\n" << ipart <<
G4endl;
860 G4cout <<
" non-standard should be absorbed, now released\n"
873 G4cout <<
" unstable must be decayed in flight" <<
G4endl;
880 G4cerr <<
" no decay table! Releasing trapped particle" <<
G4endl;
890 G4cerr <<
" no daughters! Releasing trapped particle" <<
G4endl;
902 daughters->
Boost(decayEnergy, decayDir);
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
void processTrappedParticle(const G4CascadParticle &trapped)
G4int getNumberOfReflections() const
const G4InuclElementaryParticle & getParticle() const
G4int GetAtomicNumber() const
void processSecondary(const G4KineticTrack *aSecondary)
G4DecayTable * GetDecayTable() const
const G4LorentzVector & Get4Momentum() const
static G4double getParticleMass(G4int type)
G4bool goodFragment() const
static constexpr double MeV
void addExcitonConfiguration(const G4ExitonConfiguration exciton)
const std::vector< G4InuclElementaryParticle > & getOutgoingParticles() const
void fill(G4int ityp, Model model=DefaultModel)
G4CascadeHistory * theCascadeHistory
G4InuclElementaryParticle * protonTarget
void finalize(G4int itry, G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &globalOutput)
void setVerboseLevel(G4int verbose=0)
G4ExitonConfiguration theExitonConfiguration
void incrementQP(G4int ip)
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &globalOutput)
void DropEntry(const G4CascadParticle &cpart)
G4bool wholeEvent() const
void updateZone(G4int izone)
void setMovingInsideNuclei(G4bool isMovingIn=true)
void fill(G4int a, G4int z, G4double exc=0., Model model=DefaultModel)
const G4String & GetParticleName() const
G4CascadeCoalescence * theClusterMaker
void setGeneration(G4int gen)
const G4LorentzVector & getRecoilMomentum() const
const G4ParticleDefinition * GetDefinition() const
static const G4double small_ekin
void setOnShell(G4InuclParticle *bullet, G4InuclParticle *target)
void add(const G4CollisionOutput &right)
G4bool particleCanInteract(const G4CascadParticle &cpart) const
G4bool initialize(G4InuclParticle *bullet, G4InuclParticle *target)
void updatePosition(const G4ThreeVector &pos)
G4InteractionCase interCase
void incrementHoles(G4int ip)
G4double GetPDGMass() const
const G4ParticleDefinition * getDefinition() const
void set(G4InuclParticle *part1, G4InuclParticle *part2)
const G4ThreeVector & getPosition() const
void Boost(G4double totalEnergy, const G4ThreeVector &momentumDirection)
G4int AddEntry(G4CascadParticle &cpart)
virtual void setVerboseLevel(G4int verbose=0)
G4InuclParticle * getTarget() const
void setRecoilExcitation(G4double Eexc)
G4InuclParticle * getBullet() const
std::pair< std::vector< G4CascadParticle >, std::vector< G4InuclElementaryParticle > > modelLists
const G4ThreeVector & GetPosition() const
void initializePath(G4double npath)
G4ElementaryParticleCollider * theElementaryParticleCollider
static const G4CascadeChannel * GetTable(G4int initialState)
void decayTrappedParticle(const G4CascadParticle &trapped)
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
G4double getKineticEnergy() const
virtual ~G4IntraNucleiCascader()
void Print(std::ostream &os) const
void addRecoilFragment(const G4Fragment *aFragment)
static G4bool doCoalescence()
G4CascadeRecoilMaker * theRecoilMaker
void setVerboseLevel(G4int verbose=0)
G4double G4cbrt(G4double x)
G4int AddVertex(G4CascadParticle &cpart, std::vector< G4CascadParticle > &daug)
void addOutgoingParticles(const std::vector< G4InuclElementaryParticle > &particles)
G4int numberOfOutgoingNuclei() const
void setVerboseLevel(G4int verbose)
void rescatter(G4InuclParticle *bullet, G4KineticTrackVector *theSecondaries, G4V3DNucleus *theNucleus, G4CollisionOutput &globalOutput)
virtual G4int GetCharge()=0
void copyWoundedNucleus(G4V3DNucleus *theNucleus)
static const G4double quasielast_cut
G4GLOB_DLL std::ostream G4cerr
G4int numberOfOutgoingParticles() const
virtual G4int GetMassNumber()=0
G4double getRecoilExcitation() const
virtual G4Nucleon * GetNextNucleon()=0
void addOutgoingParticle(const G4InuclElementaryParticle &particle)
G4InuclElementaryParticle * bparticle
G4int getCurrentZone() const
G4bool acceptable() const
std::vector< G4CascadParticle > cascad_particles
void preloadCascade(G4V3DNucleus *theNucleus, G4KineticTrackVector *theSecondaries)
void releaseSecondary(const G4KineticTrack *aSecondary)
G4bool hadNucleus() const
const G4ParticleDefinition * GetParticleType() const
G4int GetAtomicMass() const
G4double getCharge() const
G4LorentzVector getMomentum() const
G4InuclParticle * createTarget(G4V3DNucleus *theNucleus)
std::vector< G4InuclElementaryParticle >::iterator particleIterator
std::vector< G4ThreeVector > hitNucleons
G4GLOB_DLL std::ostream G4cout
virtual void setVerboseLevel(G4int verbose=0)
static const G4int itry_max
virtual G4DecayProducts * DecayIt(G4double parentMass=-1.0)=0
void newCascade(G4int itry)
void setTolerance(G4double tolerance)
G4Fragment * makeRecoilFragment()
void copySecondaries(G4KineticTrackVector *theSecondaries)
G4VDecayChannel * SelectADecayChannel(G4double parentMass=-1.)
G4double minimum_recoil_A
const G4ThreeVector & GetPosition() const
void printCollisionOutput(std::ostream &os=G4cout) const
void FindClusters(G4CollisionOutput &finalState)
static const G4int reflection_cut
const std::vector< G4InuclNuclei > & getOutgoingNuclei() const
const XML_Char XML_Content * model
G4double getEnergy() const
virtual G4bool StartLoop()=0
static G4bool showHistory()
static constexpr double GeV
G4bool goodNucleus() const
void setVerboseLevel(G4int verbose)
std::vector< G4CascadParticle > new_cascad_particles
G4int getGeneration() const
void trivialise(G4InuclParticle *bullet, G4InuclParticle *target)
G4InuclNuclei * nucleusTarget