170   outFile << 
"The Bertini-style cascade implements the inelastic scattering\n" 
  171           << 
"of hadrons by nuclei.  Nucleons, pions, kaons and hyperons\n" 
  172           << 
"from 0 to 15 GeV may be used as projectiles in this model.\n" 
  173           << 
"Final state hadrons are produced by a classical cascade\n" 
  174           << 
"consisting of individual hadron-nucleon scatterings which use\n" 
  175           << 
"free-space partial cross sections, corrected for various\n" 
  176           << 
"nuclear medium effects.  The target nucleus is modeled as a\n" 
  177           << 
"set of 1, 3 or 6 spherical shells, in which scattered hadrons\n" 
  178           << 
"travel in straight lines until they are reflected from or\n" 
  179           << 
"transmitted through shell boundaries.\n";
 
  199   if (!ch || !pn || !nn || !pp) 
return;         
 
  247     G4cout << 
" >>> G4CascadeInterface::ApplyYourself" << 
G4endl;
 
  250     G4cerr << 
" >>> G4CascadeInterface got negative-energy track: " 
  255 #ifdef G4CASCADE_DEBUG_INTERFACE 
  256   static G4int counter(0);
 
  258   G4cerr << 
"Reaction number "<< counter << 
" " 
  266     CLHEP::HepRandom::saveEngineStatus(
randomFile);
 
  351 #ifdef G4CASCADE_DEBUG_INTERFACE 
  355            << 
"\n " << theSecondaries->size() << 
" secondaries:" << 
G4endl;
 
  356     for (
size_t i=0; i<theSecondaries->size(); i++) {
 
  368     CLHEP::HepRandom::saveEngineStatus(
randomFile);
 
  425     G4cout << 
" >>> G4CascadeInterface::NoInteraction" << 
G4endl;
 
  441   G4int bulletType = 0;                 
 
  442   G4int bulletA = 0, bulletZ = 0;       
 
  451   if (0 == bulletType && 0 == bulletA*bulletZ) {
 
  454              << 
" not usable as bullet." << 
G4endl;
 
  470                                  projectileMomentum.e());
 
  518     G4cerr << 
" ERROR: G4CascadeInterface incompatible particle type " 
  519            << outgoingType << 
G4endl;
 
  554     G4cout << 
" >>> G4CascadeInterface::copyOutputToHadronicResult" << 
G4endl;
 
  563   if (!particles.empty()) { 
 
  565     for (; ipart != particles.end(); ipart++) {
 
  571   if (!outgoingNuclei.empty()) { 
 
  573     for (; ifrag != outgoingNuclei.end(); ifrag++) {
 
  581     G4cout << 
" >>> G4CascadeInterface::copyOutputToReactionProducts" << 
G4endl;
 
  592   if (!particles.empty()) { 
 
  594     for (; ipart != particles.end(); ipart++) {
 
  598       propResult->push_back(rp);
 
  604   if (!fragments.empty()) { 
 
  606     for (; ifrag != fragments.end(); ifrag++) {
 
  610       propResult->push_back(rp);
 
  626       G4cerr << 
"ERROR: no baryon number conservation, sum of baryons = " 
  631       G4cerr << 
"ERROR: no charge conservation, sum of charges = " 
  636       G4cerr << 
"Kinetic energy conservation violated by " 
  643     G4cout << 
"Initial energy " << eInit << 
" final energy " << eFinal
 
  644            << 
"\nTotal energy conservation at level " 
  648       G4cerr << 
"FATAL ERROR: kinetic energy created  " 
  662   const std::vector<G4InuclElementaryParticle>& p =
 
  666     if (ipart->type() == 
proton) {
 
  667       violated |= (ipart->getKineticEnergy() < coulumbBarrier);
 
  677   const std::vector<G4InuclElementaryParticle>& out =
 
  680 #ifdef G4CASCADE_DEBUG_INTERFACE 
  682   G4cout << 
" retryInelasticProton: number of Tries " 
  684          << 
"\n retryInelasticProton: AND collision type ";
 
  687     G4cout << (out.size() == 2 ? 
"ELASTIC (t)" : 
"INELASTIC (f)")
 
  688            << 
"\n retryInelasticProton: AND Leading particles bullet " 
  689            << (out.size() >= 2 &&
 
  692                ? 
"YES (t)" : 
"NO (f)")
 
  716 #ifdef G4CASCADE_DEBUG_INTERFACE 
  718   G4cout << 
" retryInelasticNucleus: numberOfTries " 
  720          << 
"\n retryInelasticNucleus: AND outputParticles " 
  721          << ((npart != 0) ? 
"NON-ZERO (t)" : 
"EMPTY (f)")
 
  722 #ifdef G4CASCADE_COULOMB_DEV 
  723          << 
"\n retryInelasticNucleus: AND coulombBarrier (COULOMB_DEV) " 
  725          << 
"\n retryInelasticNucleus: AND collision type (COULOMB_DEV) " 
  726          << ((npart+nfrag > 2) ? 
"INELASTIC (t)" : 
"ELASTIC (f)")
 
  728          << 
"\n retryInelasticNucleus: AND collsion type " 
  729          << ((npart+nfrag < 3) ? 
"ELASTIC (t)" : 
"INELASTIC (f)")
 
  730          << 
"\n retryInelasticNucleus: AND Leading particle bullet " 
  733          << 
"\n retryInelasticNucleus: OR conservation " 
  734          << (!
balance->
okay() ? 
"FAILED (t)" : 
"PASSED (f)")
 
  740 #ifdef G4CASCADE_COULOMB_DEV
 
  743             (npart+nfrag < 3 && firstOut == bullet->getDefinition())
 
  746 #ifndef G4CASCADE_SKIP_ECONS 
  759   std::ostream& errInfo = 
G4cerr;
 
  761   errInfo << 
" >>> G4CascadeInterface has non-conserving" 
  764   G4String throwMsg = 
"G4CascadeInterface - ";
 
  766     throwMsg += 
"Energy";
 
  767     errInfo << 
" Energy conservation violated by " << 
balance->
deltaE()
 
  772     throwMsg += 
"Momentum";
 
  773     errInfo << 
" Momentum conservation violated by " << 
balance->
deltaP()
 
  778     throwMsg += 
"Baryon number";
 
  783     throwMsg += 
"Charge";
 
  784     errInfo << 
" Charge conservation violated by " << 
balance->
deltaQ()
 
  788   errInfo << 
" Final event output, for debugging:\n" 
  789          << 
" Bullet:  \n" << *
bullet << G4endl
 
  793   throwMsg += 
" non-conservation. More info in output.";
 
void useCascadeDeexcitation()
 
void fill(G4int a, G4int z, G4double exc=0., Model model=DefaultModel)
 
G4bool retryInelasticNucleus() const 
 
void rescatter(G4InuclParticle *bullet, G4KineticTrackVector *theSecondaries, G4V3DNucleus *theNucleus, G4CollisionOutput &globalOutput)
 
void setVerboseLevel(G4int verbose)
 
static const G4String randomFile
 
G4CascadeInterface(const G4String &name="BertiniCascade")
 
static const G4CascadeChannel * GetTable(G4int initialState)
 
G4bool coulombBarrierViolation() const 
 
G4InuclNuclei nucleusTarget
 
G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &theNucleus)
 
virtual G4int GetCharge()=0
 
CLHEP::Hep3Vector G4ThreeVector
 
const G4DynamicParticle & getDynamicParticle() const 
 
G4LorentzVector getMomentum() const 
 
const G4HadProjectile * GetPrimaryProjectile() const 
 
const G4ThreeVector & GetPosition() const 
 
G4bool baryonOkay() const 
 
G4CascadeCheckBalance * balance
 
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
 
void printCollisionOutput(std::ostream &os=G4cout) const 
 
virtual G4int GetMassNumber()=0
 
G4CollisionOutput * output
 
G4double getEnergy() const 
 
G4LorentzRotation bulletInLabFrame
 
const char * name(G4int ptype)
 
void setLimits(G4double relative, G4double absolute)
 
static G4Diproton * Definition()
 
const G4String & GetParticleName() const 
 
virtual void setVerboseLevel(G4int verbose=0)
 
G4int GetAtomicNumber() const 
 
static const G4int maximumTries
 
G4double getKineticEnergy() const 
 
void SetStatusChange(G4HadFinalStateStatus aS)
 
std::vector< G4ReactionProduct * > G4ReactionProductVector
 
static const G4String & randomFile()
 
void useCascadeDeexcitation()
 
G4ParticleDefinition * GetDefinition() const 
 
void copyOutputToHadronicResult()
 
virtual void DumpConfiguration(std::ostream &outFile) const 
 
G4GLOB_DLL std::ostream G4cout
 
ParticleList decay(Cluster *const c)
Carries out a cluster decay. 
 
const G4ParticleDefinition * GetDefinition() const 
 
std::vector< G4InuclElementaryParticle >::const_iterator particleIterator
 
G4double GetFormationTime() const 
 
G4ReactionProductVector * Propagate(G4KineticTrackVector *theSecondaries, G4V3DNucleus *theNucleus)
 
G4InuclNuclei nucleusBullet
 
void setVerboseLevel(G4int verbose=0)
 
G4bool energyOkay() const 
 
G4double GetKineticEnergy() const 
 
G4bool createTarget(G4Nucleus &theNucleus)
 
G4int numberOfOutgoingParticles() const 
 
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &globalOutput)
 
G4ReactionProductVector * copyOutputToReactionProducts()
 
G4double relativeE() const 
 
G4DynamicParticle * makeDynamicParticle(const G4InuclElementaryParticle &iep) const 
 
static const double perCent
 
void rotateEvent(const G4LorentzRotation &rotate)
 
static G4KaonZeroLong * Definition()
 
static const G4double A[nN]
 
const G4LorentzVector & Get4Momentum() const 
 
G4int GetAtomicMass() const 
 
static G4Dineutron * Definition()
 
G4int numberOfOutgoingNuclei() const 
 
void SetEnergyChange(G4double anEnergy)
 
void usePreCompoundDeexcitation()
 
G4bool chargeOkay() const 
 
const std::vector< G4InuclNuclei > & getOutgoingNuclei() const 
 
static G4KaonZeroShort * Definition()
 
const std::vector< G4InuclElementaryParticle > & getOutgoingParticles() const 
 
G4InuclElementaryParticle hadronBullet
 
virtual void SetVerboseLevel(G4int value)
 
void fill(G4int ityp, Model model=DefaultModel)
 
std::vector< G4InuclNuclei >::const_iterator nucleiIterator
 
G4HadFinalState theParticleChange
 
std::vector< G4InuclElementaryParticle >::iterator particleIterator
 
G4bool momentumOkay() const 
 
void throwNonConservationFailure()
 
virtual void ModelDescription(std::ostream &outFile) const 
 
G4bool quasi_deutron() const 
 
G4InuclElementaryParticle hadronTarget
 
G4InuclCollider * collider
 
G4double relativeP() const 
 
G4bool createBullet(const G4HadProjectile &aTrack)
 
void SetVerboseLevel(G4int verbose)
 
G4bool retryInelasticProton() const 
 
const G4LorentzVector & Get4Momentum() const 
 
void SetEnergyMomentumCheckLevels(G4double relativeLevel, G4double absoluteLevel)
 
G4ParticleDefinition * getDefinition() const 
 
void usePreCompoundDeexcitation()
 
void AddSecondary(G4DynamicParticle *aP)
 
static void DumpConfiguration(std::ostream &os)
 
static G4UnboundPN * Definition()
 
G4GLOB_DLL std::ostream G4cerr
 
G4bool IsApplicable(const G4HadProjectile &aTrack, G4Nucleus &theNucleus)
 
virtual ~G4CascadeInterface()
 
CLHEP::HepLorentzVector G4LorentzVector
 
G4HadFinalState * NoInteraction(const G4HadProjectile &aTrack, G4Nucleus &theNucleus)
 
static G4bool usePreCompound()