G4BinaryCascade Class Reference

#include <G4BinaryCascade.hh>

Inheritance diagram for G4BinaryCascade:

G4VIntraNuclearTransportModel G4HadronicInteraction

Public Member Functions

 G4BinaryCascade (G4VPreCompoundModel *ptr=0)
virtual ~G4BinaryCascade ()
G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &theNucleus)
virtual G4ReactionProductVectorPropagate (G4KineticTrackVector *, G4V3DNucleus *)
virtual void ModelDescription (std::ostream &) const
virtual void PropagateModelDescription (std::ostream &) const

Detailed Description

Definition at line 70 of file G4BinaryCascade.hh.


Constructor & Destructor Documentation

G4BinaryCascade::G4BinaryCascade ( G4VPreCompoundModel ptr = 0  ) 

Definition at line 102 of file G4BinaryCascade.cc.

References G4ShortLivedConstructor::ConstructParticle(), G4HadronicInteractionRegistry::FindModel(), G4VIntraNuclearTransportModel::GetDeExcitation(), G4VPreCompoundModel::GetExcitationHandler(), G4HadronicInteractionRegistry::Instance(), G4VIntraNuclearTransportModel::SetDeExcitation(), G4HadronicInteraction::SetEnergyMomentumCheckLevels(), G4HadronicInteraction::SetMaxEnergy(), and G4HadronicInteraction::SetMinEnergy().

00102                                                          :
00103 G4VIntraNuclearTransportModel("Binary Cascade", ptr)
00104 {
00105     // initialise the resonance sector
00106     G4ShortLivedConstructor ShortLived;
00107     ShortLived.ConstructParticle();
00108 
00109     theCollisionMgr = new G4CollisionManager;
00110     theDecay=new G4BCDecay;
00111     theImR.push_back(theDecay);
00112     theLateParticle= new G4BCLateParticle;
00113     G4MesonAbsorption * aAb=new G4MesonAbsorption;
00114     theImR.push_back(aAb);
00115     G4Scatterer * aSc=new G4Scatterer;
00116     theH1Scatterer = new G4Scatterer;
00117     theImR.push_back(aSc);
00118 
00119     thePropagator = new G4RKPropagation;
00120     theCurrentTime = 0.;
00121     theBCminP = 45*MeV;
00122     theCutOnP = 90*MeV;
00123     theCutOnPAbsorb= 0*MeV;   // No Absorption of slow Mesons, other than above G4MesonAbsorption
00124 
00125     // reuse existing pre-compound model
00126     if(!ptr) {
00127       G4HadronicInteraction* p =
00128         G4HadronicInteractionRegistry::Instance()->FindModel("PRECO");
00129       G4VPreCompoundModel* pre = static_cast<G4VPreCompoundModel*>(p);
00130       if(!pre) { pre = new G4PreCompoundModel(); }
00131       SetDeExcitation(pre);
00132     }
00133     theExcitationHandler = GetDeExcitation()->GetExcitationHandler();
00134     SetMinEnergy(0.0*GeV);
00135     SetMaxEnergy(10.1*GeV);
00136     //PrintWelcomeMessage();
00137     thePrimaryEscape = true;
00138     thePrimaryType = 0;
00139 
00140     SetEnergyMomentumCheckLevels(1*perCent, 1*MeV);
00141 
00142     // init data members
00143     currentA=currentZ=0;
00144     lateA=lateZ=0;
00145     initialA=initialZ=0;
00146     projectileA=projectileZ=0;
00147     currentInitialEnergy=initial_nuclear_mass=0.;
00148     massInNucleus=0.;
00149     theOuterRadius=0.;
00150 }

G4BinaryCascade::~G4BinaryCascade (  )  [virtual]

Definition at line 159 of file G4BinaryCascade.cc.

00160 {
00161     ClearAndDestroy(&theTargetList);
00162     ClearAndDestroy(&theSecondaryList);
00163     ClearAndDestroy(&theCapturedList);
00164     delete thePropagator;
00165     delete theCollisionMgr;
00166     std::for_each(theImR.begin(), theImR.end(), Delete<G4BCAction>());
00167     delete theLateParticle;
00168     //delete theExcitationHandler;
00169     delete theH1Scatterer;
00170 }


Member Function Documentation

G4HadFinalState * G4BinaryCascade::ApplyYourself ( const G4HadProjectile aTrack,
G4Nucleus theNucleus 
) [virtual]

Implements G4HadronicInteraction.

Definition at line 208 of file G4BinaryCascade.cc.

References G4HadFinalState::AddSecondary(), G4VPreCompoundModel::ApplyYourself(), G4HadFinalState::Clear(), G4CollisionManager::ClearAndDestroy(), G4cerr, G4endl, G4HadProjectile::Get4Momentum(), G4Nucleus::GetA_asInt(), G4HadProjectile::GetDefinition(), G4HadProjectile::GetKineticEnergy(), G4V3DNucleus::GetOuterRadius(), G4Nucleus::GetZ_asInt(), G4VFieldPropagation::Init(), G4V3DNucleus::Init(), isAlive, G4Neutron::NeutronDefinition(), G4KineticTrack::outside, G4PionMinus::PionMinusDefinition(), G4PionPlus::PionPlusDefinition(), Propagate(), G4Proton::ProtonDefinition(), G4HadFinalState::SetEnergyChange(), G4HadFinalState::SetMomentumChange(), G4KineticTrack::SetState(), G4HadFinalState::SetStatusChange(), stopAndKill, G4VIntraNuclearTransportModel::the3DNucleus, G4VIntraNuclearTransportModel::theDeExcitation, and G4HadronicInteraction::theParticleChange.

00211 {
00212     static G4int eventcounter=0;
00213 
00214     //   if ( eventcounter == 0 ) {
00215     //      SetEpReportLevel(3);   // report non conservation with model etc.
00216     //      G4double relativeLevel = 1*perCent;
00217     //      G4double absoluteLevel = 2*MeV;
00218     //      SetEnergyMomentumCheckLevels(relativeLevel,absoluteLevel);
00219     //   }
00220 
00221     //if(eventcounter == 100*(eventcounter/100) )
00222     eventcounter++;
00223     if(getenv("BCDEBUG") ) G4cerr << " ######### Binary Cascade Reaction number starts ######### "<<eventcounter<<G4endl;
00224 
00225     G4LorentzVector initial4Momentum = aTrack.Get4Momentum();
00226     G4ParticleDefinition * definition = const_cast<G4ParticleDefinition *>(aTrack.GetDefinition());
00227 
00228     if(initial4Momentum.e()-initial4Momentum.m()<theBCminP &&
00229             ( definition==G4Neutron::NeutronDefinition() || definition==G4Proton::ProtonDefinition() ) )
00230     {
00231         return theDeExcitation->ApplyYourself(aTrack, aNucleus);
00232     }
00233 
00234     theParticleChange.Clear();
00235     // initialize the G4V3DNucleus from G4Nucleus
00236     the3DNucleus = new G4Fancy3DNucleus;
00237 
00238     // Build a KineticTrackVector with the G4Track
00239     G4KineticTrackVector * secondaries;// = new G4KineticTrackVector;
00240     G4ThreeVector initialPosition(0., 0., 0.); // will be set later
00241 
00242     if(!getenv("I_Am_G4BinaryCascade_Developer") )
00243     {
00244         if(definition!=G4Neutron::NeutronDefinition() &&
00245                 definition!=G4Proton::ProtonDefinition() &&
00246                 definition!=G4PionPlus::PionPlusDefinition() &&
00247                 definition!=G4PionMinus::PionMinusDefinition() )
00248         {
00249             G4cerr << "You are using G4BinaryCascade for projectiles other than nucleons or pions."<<G4endl;
00250             G4cerr << "If you want to continue, please switch on the developer environment: "<<G4endl;
00251             G4cerr << "setenv I_Am_G4BinaryCascade_Developer 1 "<<G4endl<<G4endl;
00252             throw G4HadronicException(__FILE__, __LINE__, "G4BinaryCascade - used for unvalid particle type - Fatal");
00253         }
00254     }
00255 
00256     // keep primary
00257     thePrimaryType = definition;
00258     thePrimaryEscape = false;
00259 
00260     // try until an interaction will happen
00261     G4ReactionProductVector * products = 0;
00262     G4int interactionCounter = 0;
00263     do
00264     {
00265         // reset status that could be changed in previous loop event
00266         theCollisionMgr->ClearAndDestroy();
00267 
00268         if(products != 0)
00269         {  // free memory from previous loop event
00270             ClearAndDestroy(products);
00271             delete products;
00272             products=0;
00273         }
00274 
00275         G4int massNumber=aNucleus.GetA_asInt();
00276         the3DNucleus->Init(massNumber, aNucleus.GetZ_asInt());
00277         thePropagator->Init(the3DNucleus);
00278         //      GF Leak on kt??? but where to delete?
00279         G4KineticTrack * kt;// = new G4KineticTrack(definition, 0., initialPosition, initial4Momentum);
00280         do                  // sample impact parameter until collisions are found
00281         {
00282             theCurrentTime=0;
00283             G4double radius = the3DNucleus->GetOuterRadius()+3*fermi;
00284             initialPosition=GetSpherePoint(1.1*radius, initial4Momentum);  // get random position
00285             kt = new G4KineticTrack(definition, 0., initialPosition, initial4Momentum);
00286             kt->SetState(G4KineticTrack::outside);
00287             // secondaries has been cleared by Propagate() in the previous loop event
00288             secondaries= new G4KineticTrackVector;
00289             secondaries->push_back(kt);
00290             if(massNumber > 1) // 1H1 is special case
00291             {
00292                 products = Propagate(secondaries, the3DNucleus);
00293             } else {
00294                 products = Propagate1H1(secondaries,the3DNucleus);
00295             }
00296         } while(! products );  // until we FIND a collision...
00297 
00298         if(++interactionCounter>99) break;
00299     } while(products->size() == 0);  // ...until we find an ALLOWED collision
00300 
00301     if(products->size()>0)
00302     {
00303         //  G4cout << "BIC Applyyourself: number of products " << products->size() << G4endl;
00304 
00305         // Fill the G4ParticleChange * with products
00306         theParticleChange.SetStatusChange(stopAndKill);
00307         G4ReactionProductVector::iterator iter;
00308 
00309         for(iter = products->begin(); iter != products->end(); ++iter)
00310         {
00311             G4DynamicParticle * aNew =
00312                     new G4DynamicParticle((*iter)->GetDefinition(),
00313                             (*iter)->GetTotalEnergy(),
00314                             (*iter)->GetMomentum());
00315             theParticleChange.AddSecondary(aNew);
00316         }
00317 
00318         // DebugEpConservation(track, products);
00319 
00320 
00321     } else {  // no interaction, return primary
00322         if(getenv("BCDEBUG") ) G4cerr << " ######### Binary Cascade Reaction number void ######### "<<eventcounter<<G4endl;
00323         theParticleChange.SetStatusChange(isAlive);
00324         theParticleChange.SetEnergyChange(aTrack.GetKineticEnergy());
00325         theParticleChange.SetMomentumChange(aTrack.Get4Momentum().vect().unit());
00326     }
00327 
00328     ClearAndDestroy(products);
00329     delete products;
00330 
00331     delete the3DNucleus;
00332     the3DNucleus = NULL;
00333 
00334     if(getenv("BCDEBUG") ) G4cerr << " ######### Binary Cascade Reaction number ends ######### "<<eventcounter<<G4endl;
00335 
00336     return &theParticleChange;
00337 }

void G4BinaryCascade::ModelDescription ( std::ostream &   )  const [virtual]

Reimplemented from G4VIntraNuclearTransportModel.

Definition at line 172 of file G4BinaryCascade.cc.

00173 {
00174     outFile << "G4BinaryCascade is an intra-nuclear cascade model in which\n"
00175             << "an incident hadron collides with a nucleon, forming two\n"
00176             << "final-state particles, one or both of which may be resonances.\n"
00177             << "The resonances then decay hadronically and the decay products\n"
00178             << "are then propagated through the nuclear potential along curved\n"
00179             << "trajectories until they re-interact or leave the nucleus.\n"
00180             << "This model is valid for incident pions up to 1.5 GeV and\n"
00181             << "nucleons up to 10 GeV.\n";
00182 }

G4ReactionProductVector * G4BinaryCascade::Propagate ( G4KineticTrackVector ,
G4V3DNucleus  
) [virtual]

Implements G4VIntraNuclearTransportModel.

Definition at line 339 of file G4BinaryCascade.cc.

References _CheckChargeAndBaryonNumber_, G4CollisionManager::ClearAndDestroy(), G4CollisionManager::Entries(), G4cerr, G4cout, G4endl, G4V3DNucleus::GetMass(), G4CollisionManager::GetNextCollision(), G4V3DNucleus::GetOuterRadius(), G4VFieldPropagation::Init(), G4CollisionManager::RemoveCollision(), and G4VIntraNuclearTransportModel::the3DNucleus.

Referenced by ApplyYourself().

00342 {
00343     G4ping debug("debug_G4BinaryCascade");
00344 #ifdef debug_BIC_Propagate
00345     G4cout << "G4BinaryCascade Propagate starting -------------------------------------------------------" <<G4endl;
00346 #endif
00347 
00348     the3DNucleus=aNucleus;
00349     G4ReactionProductVector * products = new G4ReactionProductVector;
00350     theOuterRadius = the3DNucleus->GetOuterRadius();
00351     theCurrentTime=0;
00352     theProjectile4Momentum=G4LorentzVector(0,0,0,0);
00353     // build theSecondaryList, theProjectileList and theCapturedList
00354     ClearAndDestroy(&theCapturedList);
00355     ClearAndDestroy(&theSecondaryList);
00356     theSecondaryList.clear();
00357     ClearAndDestroy(&theFinalState);
00358     std::vector<G4KineticTrack *>::iterator iter;
00359     theCollisionMgr->ClearAndDestroy();
00360 
00361     theCutOnP=90*MeV;
00362     if(the3DNucleus->GetMass()>30) theCutOnP = 70*MeV;
00363     if(the3DNucleus->GetMass()>60) theCutOnP = 50*MeV;
00364     if(the3DNucleus->GetMass()>120) theCutOnP = 45*MeV;
00365 
00366 
00367     BuildTargetList();
00368 
00369 #ifdef debug_BIC_GetExcitationEnergy
00370     G4cout << "ExcitationEnergy0 " << GetExcitationEnergy() << G4endl;
00371 #endif
00372 
00373     thePropagator->Init(the3DNucleus);
00374 
00375     G4bool success = BuildLateParticleCollisions(secondaries);
00376     if (! success )   // fails if no excitation energy left....
00377     {
00378        products=HighEnergyModelFSProducts(products, secondaries);
00379        ClearAndDestroy(secondaries);
00380        delete secondaries;
00381 
00382 #ifdef debug_G4BinaryCascade
00383        G4cout << "G4BinaryCascade::Propagate: warning - high energy model failed energy conservation, returning unchanged high energy final state" << G4endl;
00384 #endif
00385 
00386        return products;
00387     }
00388     // check baryon and charge ...
00389 
00390     _CheckChargeAndBaryonNumber_("lateparticles");
00391 
00392     // if called stand alone find first collisions
00393     FindCollisions(&theSecondaryList);
00394 
00395 
00396     if(theCollisionMgr->Entries() == 0 )      //late particles ALWAYS create Entries
00397     {
00398         //G4cout << " no collsions -> return 0" << G4endl;
00399         delete products;
00400 #ifdef debug_BIC_return
00401         G4cout << "return @ begin2,  no collisions "<< G4endl;
00402 #endif
00403         return 0;
00404     }
00405 
00406     // end of initialization: do the job now
00407     // loop until there are no more collisions
00408 
00409 
00410     G4bool haveProducts = false;
00411     G4int collisionCount=0;
00412     theMomentumTransfer=G4ThreeVector(0,0,0);
00413     while(theCollisionMgr->Entries() > 0 && currentZ)
00414     {
00415         if(Absorb()) {  // absorb secondaries, pions only
00416             haveProducts = true;
00417         }
00418         _CheckChargeAndBaryonNumber_("absorbed");
00419         if(Capture()) { // capture secondaries, nucleons only
00420             haveProducts = true;
00421         }
00422         _CheckChargeAndBaryonNumber_("captured");
00423 
00424         // propagate to the next collision if any (collisions could have been deleted
00425         // by previous absorption or capture)
00426         if(theCollisionMgr->Entries() > 0)
00427         {
00428             G4CollisionInitialState *
00429             nextCollision = theCollisionMgr->GetNextCollision();
00430 #ifdef debug_BIC_Propagate_Collisions
00431             G4cout << " NextCollision  * , Time, curtime = " << nextCollision << " "
00432                     <<nextCollision->GetCollisionTime()<< " " <<
00433                     theCurrentTime<< G4endl;
00434 #endif
00435             if (!DoTimeStep(nextCollision->GetCollisionTime()-theCurrentTime) )
00436             {
00437                 // Check if nextCollision is still valid, ie. particle did not leave nucleus
00438                 if (theCollisionMgr->GetNextCollision() != nextCollision )
00439                 {
00440                     nextCollision = 0;
00441                 }
00442             }
00443 
00444             if( nextCollision )
00445             {
00446                 if (ApplyCollision(nextCollision))
00447                 {
00448                     //G4cerr << "ApplyCollision success " << G4endl;
00449                     haveProducts = true;
00450                     collisionCount++;
00451                     _CheckChargeAndBaryonNumber_("ApplyCollision");
00452 
00453                 } else {
00454                     //G4cerr << "ApplyCollision failure " << G4endl;
00455                     theCollisionMgr->RemoveCollision(nextCollision);
00456                 }
00457             }
00458         }
00459     }
00460 
00461     //--------- end of while on Collisions
00462     //G4cout << "currentZ @ end loop " << currentZ << G4endl;
00463     if ( ! currentZ ){
00464         // nucleus completely destroyed, fill in ReactionProductVector
00465         products = FillVoidNucleusProducts(products);
00466 #ifdef debug_BIC_return
00467         G4cout << "return @ Z=0 after collision loop "<< G4endl;
00468         PrintKTVector(&theSecondaryList,std::string(" theSecondaryList"));
00469         G4cout << "theTargetList size: " << theTargetList.size() << G4endl;
00470         PrintKTVector(&theTargetList,std::string(" theTargetList"));
00471         PrintKTVector(&theCapturedList,std::string(" theCapturedList"));
00472 
00473         G4cout << " ExcitE be4 Correct : " <<GetExcitationEnergy() << G4endl;
00474         G4cout << " Mom Transfered to nucleus : " << theMomentumTransfer << " " << theMomentumTransfer.mag() << G4endl;
00475         PrintKTVector(&theFinalState,std::string(" FinalState uncorrected"));
00476         G4cout << "returned products: " << products->size() << G4endl;
00477 #endif
00478         // @@GF FixMe cannot return here.
00479         return products;
00480     }
00481 
00482     // No more collisions: absorb, capture and propagate the secondaries out of the nucleus
00483     if(Absorb()) {
00484         haveProducts = true;
00485         // G4cout << "Absorb sucess " << G4endl;
00486     }
00487 
00488     if(Capture()) {
00489         haveProducts = true;
00490         // G4cout << "Capture sucess " << G4endl;
00491     }
00492 
00493     if(!haveProducts)  // no collisions happened. Return an empty vector.
00494     {
00495 #ifdef debug_BIC_return
00496         G4cout << "return 3, no products "<< G4endl;
00497 #endif
00498         return products;
00499     }
00500 
00501 
00502 #ifdef debug_BIC_Propagate
00503     G4cout << " Momentum transfer to Nucleus " << theMomentumTransfer << " " << theMomentumTransfer.mag() << G4endl;
00504     G4cout << "  Stepping particles out...... " << G4endl;
00505 #endif
00506 
00507     StepParticlesOut();
00508 
00509 
00510     if ( theSecondaryList.size() > 0 )
00511     {
00512 #ifdef debug_G4BinaryCascade
00513         G4cerr << "G4BinaryCascade: Warning, have active particles at end" << G4endl;
00514         PrintKTVector(&theSecondaryList, "active particles @ end  added to theFinalState");
00515 #endif
00516         //  add left secondaries to FinalSate
00517         for ( iter =theSecondaryList.begin(); iter != theSecondaryList.end(); ++iter)
00518         {
00519             theFinalState.push_back(*iter);
00520         }
00521         theSecondaryList.clear();
00522 
00523     }
00524     while ( theCollisionMgr->Entries() > 0 )
00525     {
00526 #ifdef debug_G4BinaryCascade
00527         G4cerr << " Warning: remove left over collision(s) " << G4endl;
00528 #endif
00529         theCollisionMgr->RemoveCollision(theCollisionMgr->GetNextCollision());
00530     }
00531 
00532 #ifdef debug_BIC_Propagate_Excitation
00533 
00534     PrintKTVector(&theSecondaryList,std::string(" theSecondaryList"));
00535     G4cout << "theTargetList size: " << theTargetList.size() << G4endl;
00536     //  PrintKTVector(&theTargetList,std::string(" theTargetList"));
00537     PrintKTVector(&theCapturedList,std::string(" theCapturedList"));
00538 
00539     G4cout << " ExcitE be4 Correct : " <<GetExcitationEnergy() << G4endl;
00540     G4cout << " Mom Transfered to nucleus : " << theMomentumTransfer << " " << theMomentumTransfer.mag() << G4endl;
00541     PrintKTVector(&theFinalState,std::string(" FinalState uncorrected"));
00542 #endif
00543 
00544     //
00545 
00546 
00547     G4double ExcitationEnergy=GetExcitationEnergy();
00548 
00549 #ifdef debug_BIC_Propagate_finals
00550     PrintKTVector(&theFinalState,std::string(" FinalState be4 corr"));
00551     G4cout << " Excitation Energy prefinal,  #collisions:, out, captured  "
00552             << ExcitationEnergy << " "
00553             << collisionCount << " "
00554             << theFinalState.size() << " "
00555             << theCapturedList.size()<<G4endl;
00556 #endif
00557 
00558     if (ExcitationEnergy < 0 )
00559     {
00560         G4int maxtry=5, ntry=0;
00561         do {
00562             CorrectFinalPandE();
00563             ExcitationEnergy=GetExcitationEnergy();
00564         } while ( ++ntry < maxtry && ExcitationEnergy < 0 );
00565     }
00566 
00567 #ifdef debug_BIC_Propagate_finals
00568     PrintKTVector(&theFinalState,std::string(" FinalState corrected"));
00569     G4cout << " Excitation Energy final,  #collisions:, out, captured  "
00570             << ExcitationEnergy << " "
00571             << collisionCount << " "
00572             << theFinalState.size() << " "
00573             << theCapturedList.size()<<G4endl;
00574 #endif
00575 
00576 
00577     if ( ExcitationEnergy < 0. )
00578     {
00579         //      if ( ExcitationEnergy < 0. )
00580         {
00581             //#ifdef debug_G4BinaryCascade
00582             //            G4cerr << "G4BinaryCascade-Warning: negative excitation energy ";
00583             //            G4cerr <<ExcitationEnergy<<G4endl;
00584             //     PrintKTVector(&theFinalState,std::string("FinalState"));
00585             //    PrintKTVector(&theCapturedList,std::string("captured"));
00586             //    G4cout << "negative ExE:Final 4Momentum .mag: " << GetFinal4Momentum()
00587             //            << " "<< GetFinal4Momentum().mag()<< G4endl
00588             //            << "negative ExE:FinalNucleusMom  .mag: " << GetFinalNucleusMomentum()
00589             //            << " "<< GetFinalNucleusMomentum().mag()<< G4endl;
00590             //#endif
00591         }
00592         ClearAndDestroy(products);
00593         //G4cout << "  negative Excitation E return empty products " << products << G4endl;
00594 #ifdef debug_BIC_return
00595         G4cout << "return 4, excit < 0 "<< G4endl;
00596 #endif
00597         return products;   // return empty products- FIXME
00598     }
00599 
00600     G4ReactionProductVector * precompoundProducts=DeExcite();
00601 
00602 
00603     G4DecayKineticTracks decay(&theFinalState);
00604 
00605     products= ProductsAddFinalState(products, theFinalState);
00606 
00607     products= ProductsAddPrecompound(products, precompoundProducts);
00608 
00609 //    products=ProductsAddFakeGamma(products);
00610 
00611 
00612     thePrimaryEscape = true;
00613 
00614     #ifdef debug_BIC_return
00615     G4cout << "return @end, all ok "<< G4endl;
00616     //G4cout << "  return products " << products << G4endl;
00617     #endif
00618 
00619     return products;
00620 }

void G4BinaryCascade::PropagateModelDescription ( std::ostream &   )  const [virtual]

Reimplemented from G4VIntraNuclearTransportModel.

Definition at line 183 of file G4BinaryCascade.cc.

00184 {
00185     outFile << "G4BinaryCascade propagtes secondaries produced by a high\n"
00186             << "energy model through the wounded nucleus.\n"
00187             << "Secondaries are followed after the formation time and if\n"
00188             << "within the nucleus are propagated through the nuclear\n"
00189             << "potential along curved trajectories until they interact\n"
00190             << "with a nucleon, decay, or leave the nucleus.\n"
00191             << "An interaction of a secondary with a nucleon produces two\n"
00192             << "final-state particles, one or both of which may be resonances.\n"
00193             << "Resonances decay hadronically and the decay products\n"
00194             << "are in turn propagated through the nuclear potential along curved\n"
00195             << "trajectories until they re-interact or leave the nucleus.\n"
00196             << "This model is valid for pions up to 1.5 GeV and\n"
00197             << "nucleons up to about 3.5 GeV.\n";
00198 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:51:32 2013 for Geant4 by  doxygen 1.4.7