Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Protected Member Functions
G4IntraNucleiCascader Class Reference

#include <G4IntraNucleiCascader.hh>

Inheritance diagram for G4IntraNucleiCascader:
G4CascadeColliderBase G4VCascadeCollider

Public Member Functions

 G4IntraNucleiCascader ()
 
virtual ~G4IntraNucleiCascader ()
 
void collide (G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &globalOutput)
 
void rescatter (G4InuclParticle *bullet, G4KineticTrackVector *theSecondaries, G4V3DNucleus *theNucleus, G4CollisionOutput &globalOutput)
 
void setVerboseLevel (G4int verbose=0)
 
- Public Member Functions inherited from G4CascadeColliderBase
 G4CascadeColliderBase (const char *name, G4int verbose=0)
 
virtual ~G4CascadeColliderBase ()
 
- Public Member Functions inherited from G4VCascadeCollider
 G4VCascadeCollider (const char *name, G4int verbose=0)
 
virtual ~G4VCascadeCollider ()
 

Protected Member Functions

G4bool initialize (G4InuclParticle *bullet, G4InuclParticle *target)
 
void newCascade (G4int itry)
 
void setupCascade ()
 
void generateCascade ()
 
G4bool finishCascade ()
 
void finalize (G4int itry, G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &globalOutput)
 
G4InuclParticlecreateTarget (G4V3DNucleus *theNucleus)
 
void preloadCascade (G4V3DNucleus *theNucleus, G4KineticTrackVector *theSecondaries)
 
void copyWoundedNucleus (G4V3DNucleus *theNucleus)
 
void copySecondaries (G4KineticTrackVector *theSecondaries)
 
void processSecondary (const G4KineticTrack *aSecondary)
 
void releaseSecondary (const G4KineticTrack *aSecondary)
 
void processTrappedParticle (const G4CascadParticle &trapped)
 
void decayTrappedParticle (const G4CascadParticle &trapped)
 
- Protected Member Functions inherited from G4CascadeColliderBase
virtual G4bool useEPCollider (G4InuclParticle *bullet, G4InuclParticle *target) const
 
virtual G4bool inelasticInteractionPossible (G4InuclParticle *bullet, G4InuclParticle *target, G4double ekin) const
 
virtual G4bool validateOutput (G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
 
virtual G4bool validateOutput (const G4Fragment &fragment, G4CollisionOutput &output)
 
virtual G4bool validateOutput (G4InuclParticle *bullet, G4InuclParticle *target, const std::vector< G4InuclElementaryParticle > &particles)
 
- Protected Member Functions inherited from G4VCascadeCollider
virtual void setName (const char *name)
 

Additional Inherited Members

- Protected Attributes inherited from G4CascadeColliderBase
G4InteractionCase interCase
 
G4CascadeCheckBalancebalance
 
- Protected Attributes inherited from G4VCascadeCollider
const char * theName
 
G4int verboseLevel
 

Detailed Description

Definition at line 88 of file G4IntraNucleiCascader.hh.

Constructor & Destructor Documentation

G4IntraNucleiCascader::G4IntraNucleiCascader ( )

Definition at line 160 of file G4IntraNucleiCascader.cc.

References G4CascadeParameters::doCoalescence(), and G4CascadeParameters::showHistory().

161  : G4CascadeColliderBase("G4IntraNucleiCascader"), model(new G4NucleiModel),
162  theElementaryParticleCollider(new G4ElementaryParticleCollider),
163  theRecoilMaker(new G4CascadeRecoilMaker), theClusterMaker(0),
164  theCascadeHistory(0), tnuclei(0), bnuclei(0), bparticle(0),
165  minimum_recoil_A(0.), coulombBarrier(0.),
166  nucleusTarget(new G4InuclNuclei),
167  protonTarget(new G4InuclElementaryParticle) {
169  theClusterMaker = new G4CascadeCoalescence;
170 
172  theCascadeHistory = new G4CascadeHistory;
173 }
static G4bool showHistory()
static G4bool doCoalescence()
const XML_Char XML_Content * model
G4CascadeColliderBase(const char *name, G4int verbose=0)
G4IntraNucleiCascader::~G4IntraNucleiCascader ( )
virtual

Definition at line 175 of file G4IntraNucleiCascader.cc.

175  {
176  delete model;
177  delete theElementaryParticleCollider;
178  delete theRecoilMaker;
179  delete theClusterMaker;
180  delete theCascadeHistory;
181  delete nucleusTarget;
182  delete protonTarget;
183 }
const XML_Char XML_Content * model

Member Function Documentation

void G4IntraNucleiCascader::collide ( G4InuclParticle bullet,
G4InuclParticle target,
G4CollisionOutput globalOutput 
)
virtual

Implements G4VCascadeCollider.

Definition at line 198 of file G4IntraNucleiCascader.cc.

References finalize(), finishCascade(), G4cout, G4endl, generateCascade(), initialize(), newCascade(), G4CascadeHistory::Print(), setupCascade(), and G4VCascadeCollider::verboseLevel.

Referenced by G4InuclCollider::collide().

200  {
201  if (verboseLevel) G4cout << " >>> G4IntraNucleiCascader::collide " << G4endl;
202 
203  if (!initialize(bullet, target)) return; // Load buffers and drivers
204 
205  G4int itry = 0;
206  do {
207  newCascade(++itry);
208  setupCascade();
209  generateCascade();
210  } while (!finishCascade() && itry<itry_max);
211 
212  // Report full structure of final cascade if requested
213  if (theCascadeHistory) theCascadeHistory->Print(G4cout);
214 
215  finalize(itry, bullet, target, globalOutput);
216 }
void Print(std::ostream &os) const
int G4int
Definition: G4Types.hh:78
G4bool initialize(G4InuclParticle *bullet, G4InuclParticle *target)
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
void finalize(G4int itry, G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &globalOutput)
void G4IntraNucleiCascader::copySecondaries ( G4KineticTrackVector theSecondaries)
protected

Definition at line 719 of file G4IntraNucleiCascader.cc.

References G4cout, G4endl, G4CollisionOutput::numberOfOutgoingNuclei(), G4CollisionOutput::numberOfOutgoingParticles(), processSecondary(), sort(), and G4VCascadeCollider::verboseLevel.

Referenced by preloadCascade().

719  {
720  if (verboseLevel > 1)
721  G4cout << " >>> G4IntraNucleiCascader::copySecondaries" << G4endl;
722 
723  for (size_t i=0; i<secondaries->size(); i++) {
724  if (verboseLevel > 3) G4cout << " processing secondary " << i << G4endl;
725 
726  processSecondary((*secondaries)[i]); // Copy to cascade or to output
727  }
728 
729  // Sort list of secondaries to put leading particle first
730  std::sort(cascad_particles.begin(), cascad_particles.end(),
732 
733  if (verboseLevel > 2) {
734  G4cout << " Original list of " << secondaries->size() << " secondaries"
735  << " produced " << cascad_particles.size() << " cascade, "
736  << output.numberOfOutgoingParticles() << " released particles, "
737  << output.numberOfOutgoingNuclei() << " fragments" << G4endl;
738  }
739 }
subroutine sort(A, N)
Definition: dpm25nuc7.f:4670
G4GLOB_DLL std::ostream G4cout
G4int numberOfOutgoingParticles() const
void processSecondary(const G4KineticTrack *aSecondary)
G4int numberOfOutgoingNuclei() const
#define G4endl
Definition: G4ios.hh:61
void G4IntraNucleiCascader::copyWoundedNucleus ( G4V3DNucleus theNucleus)
protected

Definition at line 689 of file G4IntraNucleiCascader.cc.

References G4Nucleon::AreYouHit(), G4ExitonConfiguration::clear(), G4cout, G4endl, G4V3DNucleus::GetNextNucleon(), G4Nucleon::GetParticleType(), G4Nucleon::GetPosition(), G4ExitonConfiguration::incrementHoles(), G4ExitonConfiguration::neutronHoles, G4ExitonConfiguration::protonHoles, G4V3DNucleus::StartLoop(), G4InuclElementaryParticle::type(), and G4VCascadeCollider::verboseLevel.

Referenced by preloadCascade().

689  {
690  if (verboseLevel > 1)
691  G4cout << " >>> G4IntraNucleiCascader::copyWoundedNucleus" << G4endl;
692 
693  // Loop over nucleons and count hits as exciton holes
694  theExitonConfiguration.clear();
695  hitNucleons.clear();
696  if (theNucleus->StartLoop()) {
697  G4Nucleon* nucl = 0;
698  G4int nuclType = 0;
699  while ((nucl = theNucleus->GetNextNucleon())) {
700  if (nucl->AreYouHit()) { // Found previously interacted nucleon
702  theExitonConfiguration.incrementHoles(nuclType);
703  hitNucleons.push_back(nucl->GetPosition());
704  }
705  }
706  }
707 
708  if (verboseLevel > 3)
709  G4cout << " nucleus has " << theExitonConfiguration.neutronHoles
710  << " neutrons hit, " << theExitonConfiguration.protonHoles
711  << " protons hit" << G4endl;
712 
713  // Preload nuclear model with confirmed hits, including locations
714  model->reset(theExitonConfiguration.neutronHoles,
715  theExitonConfiguration.protonHoles, &hitNucleons);
716 }
virtual G4bool StartLoop()=0
virtual const G4ThreeVector & GetPosition() const
Definition: G4Nucleon.hh:68
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
G4bool AreYouHit() const
Definition: G4Nucleon.hh:97
const XML_Char XML_Content * model
#define G4endl
Definition: G4ios.hh:61
G4ParticleDefinition * GetParticleType() const
Definition: G4Nucleon.hh:84
virtual G4Nucleon * GetNextNucleon()=0
G4InuclParticle * G4IntraNucleiCascader::createTarget ( G4V3DNucleus theNucleus)
protected

Definition at line 660 of file G4IntraNucleiCascader.cc.

References G4InuclElementaryParticle::fill(), G4InuclNuclei::fill(), G4V3DNucleus::GetCharge(), G4V3DNucleus::GetMassNumber(), neutron, and G4InuclParticleNames::proton.

Referenced by rescatter().

660  {
661  G4int theNucleusA = theNucleus->GetMassNumber();
662  G4int theNucleusZ = theNucleus->GetCharge();
663 
664  if (theNucleusA > 1) {
665  if (!nucleusTarget) nucleusTarget = new G4InuclNuclei; // Just in case
666  nucleusTarget->fill(0., theNucleusA, theNucleusZ, 0.);
667  return nucleusTarget;
668  } else {
669  if (!protonTarget) protonTarget = new G4InuclElementaryParticle;
670  protonTarget->fill(0., (theNucleusZ==1)?proton:neutron);
671  return protonTarget;
672  }
673 
674  return 0; // Can never actually get here
675 }
void fill(G4int a, G4int z, G4double exc=0., Model model=DefaultModel)
virtual G4int GetCharge()=0
virtual G4int GetMassNumber()=0
int G4int
Definition: G4Types.hh:78
void fill(G4int ityp, Model model=DefaultModel)
void G4IntraNucleiCascader::decayTrappedParticle ( const G4CascadParticle trapped)
protected

Definition at line 851 of file G4IntraNucleiCascader.cc.

References G4CollisionOutput::addOutgoingParticle(), G4DecayProducts::Boost(), G4VDecayChannel::DecayIt(), G4DecayProducts::entries(), G4cerr, G4cout, G4endl, G4CascadParticle::getCurrentZone(), G4ParticleDefinition::GetDecayTable(), G4InuclParticle::getDefinition(), G4InuclParticle::getEnergy(), G4CascadParticle::getGeneration(), G4InuclParticle::getMomentum(), G4CascadParticle::getParticle(), G4ParticleDefinition::GetPDGMass(), G4CascadParticle::getPosition(), G4CascadeChannelTables::GetTable(), G4InuclParticle::INCascader, G4DecayTable::SelectADecayChannel(), G4InuclElementaryParticle::type(), CLHEP::Hep3Vector::unit(), CLHEP::HepLorentzVector::vect(), and G4VCascadeCollider::verboseLevel.

Referenced by processTrappedParticle().

851  {
852  if (verboseLevel > 3)
853  G4cout << " unstable must be decayed in flight" << G4endl;
854 
855  const G4InuclElementaryParticle& trappedP = trapped.getParticle();
856 
857  G4DecayTable* unstable = trappedP.getDefinition()->GetDecayTable();
858  if (!unstable) { // No decay table; cannot decay!
859  if (verboseLevel > 3)
860  G4cerr << " no decay table! Releasing trapped particle" << G4endl;
861 
862  output.addOutgoingParticle(trappedP);
863  return;
864  }
865 
866  // Get secondaries from decay in particle's rest frame
867  G4DecayProducts* daughters = unstable->SelectADecayChannel()->DecayIt( trappedP.getDefinition()->GetPDGMass() );
868  if (!daughters) { // No final state; cannot decay!
869  if (verboseLevel > 3)
870  G4cerr << " no daughters! Releasing trapped particle" << G4endl;
871 
872  output.addOutgoingParticle(trappedP);
873  return;
874  }
875 
876  if (verboseLevel > 3)
877  G4cout << " " << daughters->entries() << " decay daughters" << G4endl;
878 
879  // Convert secondaries to lab frame
880  G4double decayEnergy = trappedP.getEnergy();
881  G4ThreeVector decayDir = trappedP.getMomentum().vect().unit();
882  daughters->Boost(decayEnergy, decayDir);
883 
884  // Put all the secondaries onto the list for propagation
885  const G4ThreeVector& decayPos = trapped.getPosition();
886  G4int zone = trapped.getCurrentZone();
887  G4int gen = trapped.getGeneration()+1;
888 
889  for (G4int i=0; i<daughters->entries(); i++) {
890  G4DynamicParticle* idaug = (*daughters)[i];
891 
893 
894  // Propagate hadronic secondaries with known interactions (tables)
895  if (G4CascadeChannelTables::GetTable(idaugEP.type())) {
896  if (verboseLevel > 3) G4cout << " propagating " << idaugEP << G4endl;
897  cascad_particles.push_back(G4CascadParticle(idaugEP,decayPos,zone,0.,gen));
898  } else {
899  if (verboseLevel > 3) G4cout << " releasing " << idaugEP << G4endl;
900  output.addOutgoingParticle(idaugEP);
901  }
902  }
903 }
static const G4CascadeChannel * GetTable(G4int initialState)
G4LorentzVector getMomentum() const
G4int getGeneration() const
void addOutgoingParticle(const G4InuclElementaryParticle &particle)
G4double getEnergy() const
void Boost(G4double totalEnergy, const G4ThreeVector &momentumDirection)
int G4int
Definition: G4Types.hh:78
const G4InuclElementaryParticle & getParticle() const
G4DecayTable * GetDecayTable() const
Hep3Vector vect() const
G4GLOB_DLL std::ostream G4cout
G4VDecayChannel * SelectADecayChannel()
Definition: G4DecayTable.cc:81
G4double GetPDGMass() const
Hep3Vector unit() const
G4int getCurrentZone() const
#define G4endl
Definition: G4ios.hh:61
G4int entries() const
const G4ThreeVector & getPosition() const
virtual G4DecayProducts * DecayIt(G4double parentMass=-1.0)=0
double G4double
Definition: G4Types.hh:76
G4ParticleDefinition * getDefinition() const
G4GLOB_DLL std::ostream G4cerr
void G4IntraNucleiCascader::finalize ( G4int  itry,
G4InuclParticle bullet,
G4InuclParticle target,
G4CollisionOutput globalOutput 
)
protected

Definition at line 638 of file G4IntraNucleiCascader.cc.

References G4CollisionOutput::add(), G4cout, G4endl, G4CollisionOutput::trivialise(), and G4VCascadeCollider::verboseLevel.

Referenced by collide(), and rescatter().

640  {
641  if (itry >= itry_max) {
642  if (verboseLevel) {
643  G4cout << " IntraNucleiCascader-> no inelastic interaction after "
644  << itry << " attempts " << G4endl;
645  }
646 
647  output.trivialise(bullet, target);
648  } else if (verboseLevel) {
649  G4cout << " IntraNucleiCascader output after trials " << itry << G4endl;
650  }
651 
652  // Copy final generated cascade to output buffer for return
653  globalOutput.add(output);
654 }
void trivialise(G4InuclParticle *bullet, G4InuclParticle *target)
void add(const G4CollisionOutput &right)
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
G4bool G4IntraNucleiCascader::finishCascade ( )
protected

Definition at line 489 of file G4IntraNucleiCascader.cc.

References G4CollisionOutput::acceptable(), G4CascadeRecoilMaker::addExcitonConfiguration(), G4CollisionOutput::addOutgoingParticle(), G4CollisionOutput::addOutgoingParticles(), G4CollisionOutput::addRecoilFragment(), G4CascadeRecoilMaker::collide(), G4CascadeCoalescence::FindClusters(), G4cerr, G4cout, G4endl, G4InteractionCase::getBullet(), G4CollisionOutput::getOutgoingParticles(), G4InuclElementaryParticle::getParticleMass(), G4CascadeRecoilMaker::getRecoilA(), G4CascadeRecoilMaker::getRecoilExcitation(), G4CascadeRecoilMaker::getRecoilMomentum(), G4CascadeRecoilMaker::getRecoilZ(), G4InteractionCase::getTarget(), G4CascadeRecoilMaker::goodFragment(), G4CascadeRecoilMaker::goodNucleus(), G4InuclParticle::INCascader, G4CascadeColliderBase::interCase, CLHEP::HepLorentzVector::m(), G4CascadeRecoilMaker::makeRecoilFragment(), G4CollisionOutput::numberOfOutgoingParticles(), G4CollisionOutput::printCollisionOutput(), G4CollisionOutput::setOnShell(), G4CascadeRecoilMaker::setRecoilExcitation(), G4CascadeCoalescence::setVerboseLevel(), G4CollisionOutput::setVerboseLevel(), sort(), G4VCascadeCollider::verboseLevel, and G4CascadeRecoilMaker::wholeEvent().

Referenced by collide(), and rescatter().

489  {
490  if (verboseLevel > 1)
491  G4cout << " >>> G4IntraNucleiCascader::finishCascade ?" << G4endl;
492 
493  // Add left-over cascade particles to output
494  output.addOutgoingParticles(cascad_particles);
495  cascad_particles.clear();
496 
497  // Cascade is finished. Check if it's OK.
498  if (verboseLevel>3) {
499  G4cout << " G4IntraNucleiCascader finished" << G4endl;
500  output.printCollisionOutput();
501  }
502 
503  // Apply cluster coalesence model to produce light ions
504  if (theClusterMaker) {
505  theClusterMaker->setVerboseLevel(verboseLevel);
506  theClusterMaker->FindClusters(output);
507 
508  // Update recoil fragment after generating light ions
509  if (verboseLevel>3) G4cout << " Recomputing recoil fragment" << G4endl;
510  theRecoilMaker->collide(interCase.getBullet(), interCase.getTarget(),
511  output);
512  if (verboseLevel>3) {
513  G4cout << " After cluster coalescence" << G4endl;
514  output.printCollisionOutput();
515  }
516  }
517 
518  // Use last created recoil fragment instead of re-constructing
519  G4int afin = theRecoilMaker->getRecoilA();
520  G4int zfin = theRecoilMaker->getRecoilZ();
521 
522  // FIXME: Should we deal with unbalanced (0,0) case before rejecting?
523 
524  // Sanity check before proceeding
525  if (!theRecoilMaker->goodFragment() && !theRecoilMaker->wholeEvent()) {
526  if (verboseLevel > 1)
527  G4cerr << " Recoil nucleus is not physical: A=" << afin << " Z="
528  << zfin << G4endl;
529  return false; // Discard event and try again
530  }
531 
532  const G4LorentzVector& presid = theRecoilMaker->getRecoilMomentum();
533 
534  if (verboseLevel > 1) {
535  G4cout << " afin " << afin << " zfin " << zfin << G4endl;
536  }
537 
538  if (afin == 0) return true; // Whole event fragmented, exit
539 
540  if (afin == 1) { // Add bare nucleon to particle list
541  G4int last_type = (zfin==1) ? 1 : 2; // proton=1, neutron=2
542 
544  G4double mres = presid.m();
545 
546  // Check for sensible kinematics
547  if (mres-mass < -small_ekin) { // Insufficient recoil energy
548  if (verboseLevel > 2) G4cerr << " unphysical recoil nucleon" << G4endl;
549  return false;
550  }
551 
552  if (mres-mass > small_ekin) { // Too much extra energy
553  if (verboseLevel > 2)
554  G4cerr << " extra energy with recoil nucleon" << G4endl;
555 
556  // FIXME: For now, we add the nucleon as unbalanced, and let
557  // "SetOnShell" fudge things. This should be abandoned.
558  }
559 
560  G4InuclElementaryParticle last_particle(presid, last_type,
562 
563  if (verboseLevel > 3) {
564  G4cout << " adding recoiling nucleon to output list\n"
565  << last_particle << G4endl;
566  }
567 
568  output.addOutgoingParticle(last_particle);
569 
570  // Update recoil to include residual nucleon
571  theRecoilMaker->collide(interCase.getBullet(), interCase.getTarget(),
572  output);
573  }
574 
575  // Process recoil fragment for consistency, exit or reject
576  if (output.numberOfOutgoingParticles() == 1) {
577  G4double Eex = theRecoilMaker->getRecoilExcitation();
578  if (std::abs(Eex) < quasielast_cut) {
579  if (verboseLevel > 3) {
580  G4cout << " quasi-elastic scatter with " << Eex << " MeV recoil"
581  << G4endl;
582  }
583 
584  theRecoilMaker->setRecoilExcitation(Eex=0.);
585  if (verboseLevel > 3) {
586  G4cout << " Eex reset to " << theRecoilMaker->getRecoilExcitation()
587  << G4endl;
588  }
589  }
590  }
591 
592  if (theRecoilMaker->goodNucleus()) {
593  theRecoilMaker->addExcitonConfiguration(theExitonConfiguration);
594 
595  G4Fragment* recoilFrag = theRecoilMaker->makeRecoilFragment();
596  if (!recoilFrag) {
597  G4cerr << "Got null pointer for recoil fragment!" << G4endl;
598  return false;
599  }
600 
601  if (verboseLevel > 2)
602  G4cout << " adding recoil fragment to output list" << G4endl;
603 
604  output.addRecoilFragment(*recoilFrag);
605  }
606 
607  // Put final-state particles in "leading order" for return
608  std::vector<G4InuclElementaryParticle>& opart = output.getOutgoingParticles();
609  std::sort(opart.begin(), opart.end(), G4ParticleLargerEkin());
610 
611  // Adjust final state to balance momentum and energy if necessary
612  if (theRecoilMaker->wholeEvent() || theRecoilMaker->goodNucleus()) {
615  output.setVerboseLevel(0);
616 
617  if (output.acceptable()) return true;
618  else if (verboseLevel>2) G4cerr << " Cascade setOnShell failed." << G4endl;
619  }
620 
621  // Cascade not physically reasonable
622  if (afin <= minimum_recoil_A && minimum_recoil_A < tnuclei->getA()) {
623  ++minimum_recoil_A;
624  if (verboseLevel > 3) {
625  G4cout << " minimum recoil fragment increased to A " << minimum_recoil_A
626  << G4endl;
627  }
628  }
629 
630  if (verboseLevel>2) G4cerr << " Cascade failed. Retrying..." << G4endl;
631  return false;
632 }
void setVerboseLevel(G4int verbose)
void setVerboseLevel(G4int verbose)
void printCollisionOutput(std::ostream &os=G4cout) const
void addOutgoingParticle(const G4InuclElementaryParticle &particle)
subroutine sort(A, N)
Definition: dpm25nuc7.f:4670
const G4LorentzVector & getRecoilMomentum() const
static G4double getParticleMass(G4int type)
int G4int
Definition: G4Types.hh:78
G4double getRecoilExcitation() const
G4bool acceptable() const
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
G4GLOB_DLL std::ostream G4cout
G4int numberOfOutgoingParticles() const
void addOutgoingParticles(const std::vector< G4InuclElementaryParticle > &particles)
const std::vector< G4InuclElementaryParticle > & getOutgoingParticles() const
G4InuclParticle * getBullet() const
#define G4endl
Definition: G4ios.hh:61
void addRecoilFragment(const G4Fragment *aFragment)
void FindClusters(G4CollisionOutput &finalState)
void setRecoilExcitation(G4double Eexc)
double G4double
Definition: G4Types.hh:76
G4InuclParticle * getTarget() const
void addExcitonConfiguration(const G4ExitonConfiguration exciton)
G4Fragment * makeRecoilFragment()
void setOnShell(G4InuclParticle *bullet, G4InuclParticle *target)
G4GLOB_DLL std::ostream G4cerr
void G4IntraNucleiCascader::generateCascade ( )
protected

Definition at line 355 of file G4IntraNucleiCascader.cc.

References G4CascadeHistory::AddEntry(), G4CollisionOutput::addOutgoingParticle(), G4CascadeHistory::AddVertex(), G4CascadeRecoilMaker::collide(), G4cout, G4endl, G4UniformRand, G4InteractionCase::getBullet(), G4InuclParticle::getCharge(), G4InuclParticle::getKineticEnergy(), G4InuclParticle::getMass(), G4CascadParticle::getNumberOfReflections(), G4CollisionOutput::getOutgoingParticles(), G4CascadParticle::getParticle(), G4CascadeRecoilMaker::getRecoilA(), G4InteractionCase::getTarget(), G4InuclNuclei::getZ(), G4ExitonConfiguration::incrementHoles(), G4CascadeColliderBase::interCase, processTrappedParticle(), and G4VCascadeCollider::verboseLevel.

Referenced by collide(), and rescatter().

355  {
356  if (verboseLevel>1) G4cout << " generateCascade " << G4endl;
357 
358  G4int iloop = 0;
359  while (!cascad_particles.empty() && !model->empty()) {
360  iloop++;
361 
362  if (verboseLevel > 2) {
363  G4cout << " Iteration " << iloop << ": Number of cparticles "
364  << cascad_particles.size() << " last one: \n"
365  << cascad_particles.back() << G4endl;
366  }
367 
368  // Record incident particle first, to get history ID
369  if (theCascadeHistory) {
370  theCascadeHistory->AddEntry(cascad_particles.back());
371  if (verboseLevel > 2) {
372  G4cout << " active cparticle got history ID "
373  << cascad_particles.back().getHistoryId() << G4endl;
374  }
375  }
376 
377  model->generateParticleFate(cascad_particles.back(),
378  theElementaryParticleCollider,
379  new_cascad_particles);
380 
381  // Record interaction for later reporting (if desired)
382  if (theCascadeHistory && new_cascad_particles.size()>1)
383  theCascadeHistory->AddVertex(cascad_particles.back(), new_cascad_particles);
384 
385  if (verboseLevel > 2) {
386  G4cout << " After generate fate: New particles "
387  << new_cascad_particles.size() << G4endl
388  << " Discarding last cparticle from list " << G4endl;
389  }
390 
391  cascad_particles.pop_back();
392 
393  // handle the result of a new step
394 
395  if (new_cascad_particles.size() == 1) { // last particle goes without interaction
396  const G4CascadParticle& currentCParticle = new_cascad_particles[0];
397 
398  if (model->stillInside(currentCParticle)) {
399  if (verboseLevel > 3)
400  G4cout << " particle still inside nucleus " << G4endl;
401 
402  if (currentCParticle.getNumberOfReflections() < reflection_cut &&
403  model->worthToPropagate(currentCParticle)) {
404  if (verboseLevel > 3) G4cout << " continue reflections " << G4endl;
405  cascad_particles.push_back(currentCParticle);
406  } else {
407  processTrappedParticle(currentCParticle);
408  } // reflection or exciton
409 
410  } else { // particle about to leave nucleus - check for Coulomb barrier
411  if (verboseLevel > 3) G4cout << " possible escape " << G4endl;
412 
413  const G4InuclElementaryParticle& currentParticle =
414  currentCParticle.getParticle();
415 
416  G4double KE = currentParticle.getKineticEnergy();
417  G4double mass = currentParticle.getMass();
418  G4double Q = currentParticle.getCharge();
419 
420  if (verboseLevel > 3)
421  G4cout << " KE " << KE << " barrier " << Q*coulombBarrier << G4endl;
422 
423  if (KE < Q*coulombBarrier) {
424  // Calculate barrier penetration
425  G4double CBP = 0.0;
426 
427  // if (KE > 0.0001) CBP = std::exp(-0.00126*tnuclei->getZ()*0.25*
428  // (1./KE - 1./coulombBarrier));
429  if (KE > 0.0001) CBP = std::exp(-0.0181*0.5*tnuclei->getZ()*
430  (1./KE - 1./coulombBarrier)*
431  std::sqrt(mass*(coulombBarrier-KE)) );
432 
433  if (G4UniformRand() < CBP) {
434  if (verboseLevel > 3)
435  G4cout << " tunneled\n" << currentParticle << G4endl;
436 
437  // Tunnelling through barrier leaves KE unchanged
438  output.addOutgoingParticle(currentParticle);
439  } else {
440  processTrappedParticle(currentCParticle);
441  }
442  } else {
443  output.addOutgoingParticle(currentParticle);
444 
445  if (verboseLevel > 3)
446  G4cout << " Goes out\n" << output.getOutgoingParticles().back()
447  << G4endl;
448  }
449  }
450  } else { // interaction
451  if (verboseLevel > 3)
452  G4cout << " interacted, adding new to list " << G4endl;
453 
454  cascad_particles.insert(cascad_particles.end(),
455  new_cascad_particles.begin(),
456  new_cascad_particles.end());
457 
458  std::pair<G4int, G4int> holes = model->getTypesOfNucleonsInvolved();
459  if (verboseLevel > 3)
460  G4cout << " adding new exciton holes " << holes.first << ","
461  << holes.second << G4endl;
462 
463  theExitonConfiguration.incrementHoles(holes.first);
464 
465  if (holes.second > 0)
466  theExitonConfiguration.incrementHoles(holes.second);
467  } // if (new_cascad_particles ...
468 
469  // Evaluate nuclear residue
470  theRecoilMaker->collide(interCase.getBullet(), interCase.getTarget(),
471  output, cascad_particles);
472 
473  G4double aresid = theRecoilMaker->getRecoilA();
474  if (verboseLevel > 2) {
475  G4cout << " cparticles remaining " << cascad_particles.size()
476  << " nucleus (model) has "
477  << model->getNumberOfNeutrons() << " n, "
478  << model->getNumberOfProtons() << " p "
479  << " residual fragment A " << aresid << G4endl;
480  }
481 
482  if (aresid <= minimum_recoil_A) return; // Must have minimum fragment
483  } // while cascade-list and model
484 }
void processTrappedParticle(const G4CascadParticle &trapped)
G4int getZ() const
void addOutgoingParticle(const G4InuclElementaryParticle &particle)
int G4int
Definition: G4Types.hh:78
const G4InuclElementaryParticle & getParticle() const
G4double getKineticEnergy() const
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
#define G4UniformRand()
Definition: Randomize.hh:87
G4GLOB_DLL std::ostream G4cout
const XML_Char XML_Content * model
G4int AddEntry(G4CascadParticle &cpart)
const std::vector< G4InuclElementaryParticle > & getOutgoingParticles() const
G4double getCharge() const
G4InuclParticle * getBullet() const
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
G4InuclParticle * getTarget() const
G4int getNumberOfReflections() const
G4int AddVertex(G4CascadParticle &cpart, std::vector< G4CascadParticle > &daug)
G4double getMass() const
G4bool G4IntraNucleiCascader::initialize ( G4InuclParticle bullet,
G4InuclParticle target 
)
protected

Definition at line 245 of file G4IntraNucleiCascader.cc.

References CLHEP::HepLorentzVector::e(), G4InuclSpecialFunctions::G4cbrt(), G4cerr, G4cout, G4endl, G4InuclNuclei::getA(), G4InteractionCase::getBullet(), G4InuclParticle::getMomentum(), G4InteractionCase::getTarget(), G4InuclNuclei::getZ(), G4CascadeColliderBase::interCase, G4InteractionCase::set(), G4CascadeRecoilMaker::setTolerance(), G4VCascadeCollider::verboseLevel, CLHEP::HepLorentzVector::x(), CLHEP::HepLorentzVector::y(), and CLHEP::HepLorentzVector::z().

Referenced by collide(), and rescatter().

246  {
247  if (verboseLevel>1)
248  G4cout << " >>> G4IntraNucleiCascader::initialize " << G4endl;
249 
250  // Configure processing modules
251  theRecoilMaker->setTolerance(small_ekin);
252 
253  interCase.set(bullet,target); // Classify collision type
254 
255  if (verboseLevel > 3) {
256  G4cout << *interCase.getBullet() << G4endl
257  << *interCase.getTarget() << G4endl;
258  }
259 
260  // Bullet may be nucleus or simple particle
261  bnuclei = dynamic_cast<G4InuclNuclei*>(interCase.getBullet());
262  bparticle = dynamic_cast<G4InuclElementaryParticle*>(interCase.getBullet());
263 
264  if (!bnuclei && !bparticle) {
265  G4cerr << " G4IntraNucleiCascader: projectile is not a valid particle."
266  << G4endl;
267  return false;
268  }
269 
270  // Target _must_ be nucleus
271  tnuclei = dynamic_cast<G4InuclNuclei*>(interCase.getTarget());
272  if (!tnuclei) {
273  if (verboseLevel)
274  G4cerr << " Target is not a nucleus. Abandoning." << G4endl;
275  return false;
276  }
277 
278  model->generateModel(tnuclei);
279  coulombBarrier = 0.00126*tnuclei->getZ() / (1.+G4cbrt(tnuclei->getA()));
280 
281  // Energy/momentum conservation usually requires a recoiling nuclear fragment
282  // This cut will be increased on each "itry" if momentum could not balance.
283  minimum_recoil_A = 0.;
284 
285  if (verboseLevel > 3) {
286  G4LorentzVector momentum_in = bullet->getMomentum() + target->getMomentum();
287  G4cout << " intitial momentum E " << momentum_in.e() << " Px "
288  << momentum_in.x() << " Py " << momentum_in.y() << " Pz "
289  << momentum_in.z() << G4endl;
290  }
291 
292  return true;
293 }
G4int getZ() const
G4LorentzVector getMomentum() const
G4GLOB_DLL std::ostream G4cout
G4int getA() const
const XML_Char XML_Content * model
void set(G4InuclParticle *part1, G4InuclParticle *part2)
void setTolerance(G4double tolerance)
G4InuclParticle * getBullet() const
#define G4endl
Definition: G4ios.hh:61
G4InuclParticle * getTarget() const
G4GLOB_DLL std::ostream G4cerr
void G4IntraNucleiCascader::newCascade ( G4int  itry)
protected

Definition at line 297 of file G4IntraNucleiCascader.cc.

References G4CascadeHistory::Clear(), G4ExitonConfiguration::clear(), G4InteractionCase::code(), G4cout, G4endl, G4CascadeColliderBase::interCase, G4CollisionOutput::reset(), and G4VCascadeCollider::verboseLevel.

Referenced by collide(), and rescatter().

297  {
298  if (verboseLevel > 1) {
299  G4cout << " IntraNucleiCascader itry " << itry << " inter_case "
300  << interCase.code() << G4endl;
301  }
302 
303  model->reset(); // Start new cascade process
304  output.reset();
305  new_cascad_particles.clear();
306  theExitonConfiguration.clear();
307  cascad_particles.clear(); // List of initial secondaries
308 
309  if (theCascadeHistory) theCascadeHistory->Clear();
310 }
G4int code() const
G4GLOB_DLL std::ostream G4cout
const XML_Char XML_Content * model
#define G4endl
Definition: G4ios.hh:61
void G4IntraNucleiCascader::preloadCascade ( G4V3DNucleus theNucleus,
G4KineticTrackVector theSecondaries 
)
protected

Definition at line 680 of file G4IntraNucleiCascader.cc.

References copySecondaries(), copyWoundedNucleus(), G4cout, G4endl, and G4VCascadeCollider::verboseLevel.

Referenced by rescatter().

681  {
682  if (verboseLevel > 1)
683  G4cout << " >>> G4IntraNucleiCascader::preloadCascade" << G4endl;
684 
685  copyWoundedNucleus(theNucleus); // Update interacted nucleon counts
686  copySecondaries(theSecondaries); // Copy original to internal list
687 }
G4GLOB_DLL std::ostream G4cout
void copyWoundedNucleus(G4V3DNucleus *theNucleus)
void copySecondaries(G4KineticTrackVector *theSecondaries)
#define G4endl
Definition: G4ios.hh:61
void G4IntraNucleiCascader::processSecondary ( const G4KineticTrack aSecondary)
protected

Definition at line 744 of file G4IntraNucleiCascader.cc.

References G4InuclElementaryParticle::fill(), G4cout, G4endl, G4KineticTrack::Get4Momentum(), G4KineticTrack::GetDefinition(), G4CascadParticle::getParticle(), G4ParticleDefinition::GetParticleName(), G4KineticTrack::GetPosition(), python.hepunit::GeV, G4CascadParticle::initializePath(), CLHEP::Hep3Vector::mag(), releaseSecondary(), G4CascadParticle::setGeneration(), G4CascadParticle::setMovingInsideNuclei(), G4InuclElementaryParticle::type(), G4CascadParticle::updatePosition(), G4CascadParticle::updateZone(), and G4VCascadeCollider::verboseLevel.

Referenced by copySecondaries().

744  {
745  if (!ktrack) return; // Sanity check
746 
747  // Get particle type to determine whether to keep or release
748  G4ParticleDefinition* kpd = ktrack->GetDefinition();
749  if (!kpd) return;
750 
752  if (!ktype) {
753  releaseSecondary(ktrack);
754  return;
755  }
756 
757  if (verboseLevel > 1) {
758  G4cout << " >>> G4IntraNucleiCascader::processSecondary "
759  << kpd->GetParticleName() << G4endl;
760  }
761 
762  // Allocate next local particle in buffer and fill
763  cascad_particles.resize(cascad_particles.size()+1); // Like push_back();
764  G4CascadParticle& cpart = cascad_particles.back();
765 
766  // Convert momentum to Bertini internal units
767  cpart.getParticle().fill(ktrack->Get4Momentum()/GeV, ktype);
768  cpart.setGeneration(1);
769  cpart.setMovingInsideNuclei();
770  cpart.initializePath(0);
771 
772  // Convert position units to Bertini's internal scale
773  G4ThreeVector cpos = ktrack->GetPosition()/model->getRadiusUnits();
774 
775  cpart.updatePosition(cpos);
776  cpart.updateZone(model->getZone(cpos.mag()));
777 
778  if (verboseLevel > 2)
779  G4cout << " Created cascade particle \n" << cpart << G4endl;
780 }
void initializePath(G4double npath)
void updatePosition(const G4ThreeVector &pos)
void setGeneration(G4int gen)
int G4int
Definition: G4Types.hh:78
const G4InuclElementaryParticle & getParticle() const
const G4String & GetParticleName() const
void updateZone(G4int izone)
G4GLOB_DLL std::ostream G4cout
const XML_Char XML_Content * model
void setMovingInsideNuclei(G4bool isMovingIn=true)
void fill(G4int ityp, Model model=DefaultModel)
#define G4endl
Definition: G4ios.hh:61
double mag() const
void releaseSecondary(const G4KineticTrack *aSecondary)
void G4IntraNucleiCascader::processTrappedParticle ( const G4CascadParticle trapped)
protected

Definition at line 819 of file G4IntraNucleiCascader.cc.

References G4CollisionOutput::addOutgoingParticle(), decayTrappedParticle(), G4CascadeHistory::DropEntry(), G4cout, G4endl, G4CascadParticle::getParticle(), G4InuclElementaryParticle::hyperon(), G4ExitonConfiguration::incrementQP(), G4InuclElementaryParticle::nucleon(), G4InuclElementaryParticle::type(), and G4VCascadeCollider::verboseLevel.

Referenced by generateCascade().

819  {
820  const G4InuclElementaryParticle& trappedP = trapped.getParticle();
821 
822  G4int xtype = trappedP.type();
823  if (verboseLevel > 3) G4cout << " exciton of type " << xtype << G4endl;
824 
825  if (trappedP.nucleon()) { // normal exciton (proton or neutron)
826  theExitonConfiguration.incrementQP(xtype);
827  if (theCascadeHistory) theCascadeHistory->DropEntry(trapped);
828  return;
829  }
830 
831  if (trappedP.hyperon()) { // Not nucleon, so must be hyperon
832  decayTrappedParticle(trapped);
833  if (theCascadeHistory) theCascadeHistory->DropEntry(trapped);
834  return;
835  }
836 
837  // non-standard exciton; release it
838  // FIXME: this is a meson, so need to absorb it
839  if (verboseLevel > 3) {
840  G4cout << " non-standard should be absorbed, now released\n"
841  << trapped << G4endl;
842  }
843 
844  output.addOutgoingParticle(trappedP);
845 }
void addOutgoingParticle(const G4InuclElementaryParticle &particle)
int G4int
Definition: G4Types.hh:78
const G4InuclElementaryParticle & getParticle() const
G4GLOB_DLL std::ostream G4cout
void decayTrappedParticle(const G4CascadParticle &trapped)
void DropEntry(const G4CascadParticle &cpart)
#define G4endl
Definition: G4ios.hh:61
void G4IntraNucleiCascader::releaseSecondary ( const G4KineticTrack aSecondary)
protected

Definition at line 785 of file G4IntraNucleiCascader.cc.

References G4InuclElementaryParticle::fill(), G4InuclNuclei::fill(), G4cout, G4endl, G4KineticTrack::Get4Momentum(), G4ParticleDefinition::GetAtomicMass(), G4ParticleDefinition::GetAtomicNumber(), G4KineticTrack::GetDefinition(), G4CollisionOutput::getOutgoingNuclei(), G4CollisionOutput::getOutgoingParticles(), G4ParticleDefinition::GetParticleName(), python.hepunit::GeV, G4CollisionOutput::numberOfOutgoingNuclei(), G4CollisionOutput::numberOfOutgoingParticles(), and G4VCascadeCollider::verboseLevel.

Referenced by processSecondary().

785  {
786  G4ParticleDefinition* kpd = ktrack->GetDefinition();
787 
788  if (verboseLevel > 1) {
789  G4cout << " >>> G4IntraNucleiCascader::releaseSecondary "
790  << kpd->GetParticleName() << G4endl;
791  }
792 
793  // Convert light ion into nucleus on fragment list
794  if (dynamic_cast<G4Ions*>(kpd)) {
795  // Use resize() and fill() to avoid memory churn
796  output.getOutgoingNuclei().resize(output.numberOfOutgoingNuclei()+1);
797  G4InuclNuclei& inucl = output.getOutgoingNuclei().back();
798 
799  inucl.fill(ktrack->Get4Momentum()/GeV,
800  kpd->GetAtomicMass(), kpd->GetAtomicNumber());
801  if (verboseLevel > 2)
802  G4cout << " Created pre-cascade fragment\n" << inucl << G4endl;
803  } else {
804  // Use resize() and fill() to avoid memory churn
805  output.getOutgoingParticles().resize(output.numberOfOutgoingParticles()+1);
806  G4InuclElementaryParticle& ipart = output.getOutgoingParticles().back();
807 
808  // SPECIAL: Use G4PartDef directly, allowing unknown type code
809  ipart.fill(ktrack->Get4Momentum()/GeV, ktrack->GetDefinition());
810  if (verboseLevel > 2)
811  G4cout << " Created invalid pre-cascade particle\n" << ipart << G4endl;
812  }
813 }
void fill(G4int a, G4int z, G4double exc=0., Model model=DefaultModel)
const G4String & GetParticleName() const
G4int GetAtomicNumber() const
G4GLOB_DLL std::ostream G4cout
G4int numberOfOutgoingParticles() const
G4int GetAtomicMass() const
G4int numberOfOutgoingNuclei() const
const std::vector< G4InuclNuclei > & getOutgoingNuclei() const
const std::vector< G4InuclElementaryParticle > & getOutgoingParticles() const
void fill(G4int ityp, Model model=DefaultModel)
#define G4endl
Definition: G4ios.hh:61
void G4IntraNucleiCascader::rescatter ( G4InuclParticle bullet,
G4KineticTrackVector theSecondaries,
G4V3DNucleus theNucleus,
G4CollisionOutput globalOutput 
)
virtual

Reimplemented from G4CascadeColliderBase.

Definition at line 221 of file G4IntraNucleiCascader.cc.

References createTarget(), finalize(), finishCascade(), G4cout, G4endl, generateCascade(), initialize(), newCascade(), preloadCascade(), G4CascadeHistory::Print(), and G4VCascadeCollider::verboseLevel.

Referenced by G4InuclCollider::rescatter().

224  {
225  if (verboseLevel)
226  G4cout << " >>> G4IntraNucleiCascader::rescatter " << G4endl;
227 
228  G4InuclParticle* target = createTarget(theNucleus);
229  if (!initialize(bullet, target)) return; // Load buffers and drivers
230 
231  G4int itry = 0;
232  do {
233  newCascade(++itry);
234  preloadCascade(theNucleus, theSecondaries);
235  generateCascade();
236  } while (!finishCascade() && itry<itry_max);
237 
238  // Report full structure of final cascade if requested
239  if (theCascadeHistory) theCascadeHistory->Print(G4cout);
240 
241  finalize(itry, bullet, target, globalOutput);
242 }
void Print(std::ostream &os) const
const XML_Char * target
int G4int
Definition: G4Types.hh:78
G4InuclParticle * createTarget(G4V3DNucleus *theNucleus)
G4bool initialize(G4InuclParticle *bullet, G4InuclParticle *target)
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
void finalize(G4int itry, G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &globalOutput)
void preloadCascade(G4V3DNucleus *theNucleus, G4KineticTrackVector *theSecondaries)
void G4IntraNucleiCascader::setupCascade ( )
protected

Definition at line 315 of file G4IntraNucleiCascader.cc.

References G4CollisionOutput::addOutgoingParticles(), G4InuclElementaryParticle::baryon(), G4cout, G4endl, G4InuclNuclei::getA(), G4InuclParticle::getCharge(), G4InuclNuclei::getZ(), G4InteractionCase::hadNucleus(), G4ExitonConfiguration::incrementHoles(), G4ExitonConfiguration::incrementQP(), G4CascadeColliderBase::interCase, G4InuclSpecialFunctions::inuclRndm(), and G4VCascadeCollider::verboseLevel.

Referenced by collide().

315  {
316  if (verboseLevel > 1)
317  G4cout << " >>> G4IntraNucleiCascader::setupCascade" << G4endl;
318 
319  if (interCase.hadNucleus()) { // particle with nuclei
320  if (verboseLevel > 3)
321  G4cout << " bparticle charge " << bparticle->getCharge()
322  << " baryon number " << bparticle->baryon() << G4endl;
323 
324  cascad_particles.push_back(model->initializeCascad(bparticle));
325  } else { // nuclei with nuclei
326  G4int ab = bnuclei->getA();
327  G4int zb = bnuclei->getZ();
328 
329  G4NucleiModel::modelLists all_particles; // Buffer to receive lists
330  model->initializeCascad(bnuclei, tnuclei, all_particles);
331 
332  cascad_particles = all_particles.first;
333  output.addOutgoingParticles(all_particles.second);
334 
335  if (cascad_particles.size() == 0) { // compound nuclei
336  G4int i;
337 
338  for (i = 0; i < ab; i++) {
339  G4int knd = i < zb ? 1 : 2;
340  theExitonConfiguration.incrementQP(knd);
341  };
342 
343  G4int ihn = G4int(2 * (ab-zb) * inuclRndm() + 0.5);
344  G4int ihz = G4int(2 * zb * inuclRndm() + 0.5);
345 
346  for (i = 0; i < ihn; i++) theExitonConfiguration.incrementHoles(2);
347  for (i = 0; i < ihz; i++) theExitonConfiguration.incrementHoles(1);
348  }
349  } // if (interCase ...
350 }
G4bool hadNucleus() const
std::pair< std::vector< G4CascadParticle >, std::vector< G4InuclElementaryParticle > > modelLists
G4int getZ() const
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
G4int getA() const
const XML_Char XML_Content * model
void addOutgoingParticles(const std::vector< G4InuclElementaryParticle > &particles)
G4double getCharge() const
#define G4endl
Definition: G4ios.hh:61
void G4IntraNucleiCascader::setVerboseLevel ( G4int  verbose = 0)
virtual

Reimplemented from G4CascadeColliderBase.

Definition at line 185 of file G4IntraNucleiCascader.cc.

References G4CascadeHistory::setVerboseLevel(), G4VCascadeCollider::setVerboseLevel(), G4CascadeCoalescence::setVerboseLevel(), and G4CascadeColliderBase::setVerboseLevel().

Referenced by G4InuclCollider::setVerboseLevel().

185  {
187  model->setVerboseLevel(verbose);
188  theElementaryParticleCollider->setVerboseLevel(verbose);
189  theRecoilMaker->setVerboseLevel(verbose);
190 
191  // Optional functionality
192  if (theClusterMaker) theClusterMaker->setVerboseLevel(verbose);
193  if (theCascadeHistory) theCascadeHistory->setVerboseLevel(verbose);
194 }
void setVerboseLevel(G4int verbose)
virtual void setVerboseLevel(G4int verbose=0)
const XML_Char XML_Content * model
virtual void setVerboseLevel(G4int verbose=0)
void setVerboseLevel(G4int verbose=0)

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