74 : CaptureThreshold(10*
MeV)
 
  108 #define exactExcitationEnergy 
  123    G4int numberOfEx = 0;
 
  124    G4int numberOfCh = 0;
 
  125    G4int numberOfHoles = 0;
 
  133 #ifdef exactExcitationEnergy 
  136    G4KineticTrackVector::iterator iter;
 
  137    for(iter=theSecondaries->begin(); iter !=theSecondaries->end(); ++iter)
 
  140       G4double e = (*iter)->Get4Momentum().e();
 
  141       G4double mass = (*iter)->Get4Momentum().mag();
 
  145             ((*iter)->GetPosition().mag() > R)) {
 
  149          theTotalResult->push_back(theNew);
 
  150 #ifdef exactExcitationEnergy 
  151          secondary4Momemtum += (*iter)->Get4Momentum();
 
  161          captured3Momentum += mom;
 
  162          exEnergy += (e - mass);
 
  166    delete theSecondaries;
 
  171    while(theCurrentNucleon) {
 
  177          wounded3Momentum += theCurrentNucleon->
Get4Momentum().vect();
 
  183    exciton3Momentum = captured3Momentum - wounded3Momentum;
 
  185    if(anA == 0) 
return theTotalResult;
 
  191 #ifdef exactExcitationEnergy 
  198       G4double Efinal = std::sqrt(exciton3Momentum.mag2() + fMass*fMass)
 
  199       + secondary4Momemtum.e();
 
  200       if ( (Einitial - Efinal) > 0 ) {
 
  208          exEnergy=(PrimMom - secondary4Momemtum).mag() - fMass;
 
  219       if(exEnergy < 0.) exEnergy=0.;   
 
  224             secondary4Momemtum.vect() - exciton3Momentum;
 
  226 #ifdef G4GPI_debug_excitation 
  227       G4cout << 
"momentum balance" << balance
 
  228             << 
" value " << balance.mag()                   <<
G4endl 
  230             << 
"secondary       "<< secondary4Momemtum      <<
G4endl 
  231             << 
"captured        "<< captured3Momentum       <<
G4endl 
  232             << 
"wounded         "<< wounded3Momentum        <<
G4endl 
  233             << 
"exciton         "<< exciton3Momentum        <<
G4endl 
  234             << 
"second + exciton" 
  235             << secondary4Momemtum.vect() + exciton3Momentum << 
G4endl;
 
  243             std::sqrt(exciton3Momentum.mag2() + fMass*fMass));
 
  247       G4Fragment anInitialState(anA, aZ, exciton4Momentum);
 
  255       theTotalResult->insert(theTotalResult->end(),aPrecoResult->begin(),
 
  256             aPrecoResult->end() );
 
  260    return theTotalResult;
 
  266    G4cout << 
"G4GeneratorPrecompoundInterface: ApplyYourself interface called stand-allone." 
  268    G4cout << 
"This class is only a mediator between generator and precompound"<<
G4endl;
 
  269    G4cout << 
"Please remove from your physics list."<<
G4endl;
 
  270    throw G4HadronicException(__FILE__, __LINE__, 
"SEVERE: G4GeneratorPrecompoundInterface model interface called stand-allone.");
 
  275    outFile << 
"G4GeneratorPrecompoundInterface interfaces a high\n" 
  276          << 
"energy model through the wounded nucleus to precompound de-excition.\n" 
  277          << 
"Low energy protons and neutron present among secondaries produced by \n" 
  278          << 
"the high energy generator and within the nucleus are captured. The wounded\n" 
  279          << 
"nucleus and the captured particles form an excited nuclear fragment. This\n" 
  280          << 
"fragment is passed to the Geant4 pre-compound model for de-excitation.\n" 
  281          << 
"Nuclear de-excitation:\n";
 
  292    G4cout<<
"G4GeneratorPrecompoundInterface::PropagateNuclNucl "<<
G4endl;
 
  300    G4int numberOfEx = 0;
 
  301    G4int numberOfCh = 0;
 
  302    G4int numberOfHoles = 0;
 
  314    while(theCurrentNucleon) {
 
  328    G4cout<<
"Residual Target A Z E* 4mom "<<anA<<
" "<<aZ<<
" "<<exEnergy<<
" " 
  329          <<Target4Momentum<<
G4endl;
 
  334    G4cout<<
"Primary BaryonNumber " 
  338    G4bool ProjectileIsAntiNucleus=
 
  345    G4int numberOfExB = 0;
 
  346    G4int numberOfChB = 0;
 
  347    G4int numberOfHolesB = 0;
 
  359    while(theCurrentNucleon) {
 
  364          if(!ProjectileIsAntiNucleus) {
 
  372          Projectile4Momentum -=theCurrentNucleon->
Get4Momentum();
 
  378          0.3* 
G4double (numberOfHoles + anA);
 
  380          0.3*
G4double (numberOfHolesB + anAb);
 
  383    G4cout<<
"Projectile residual A Z E* 4mom "<<anAb<<
" "<<aZb<<
" "<<exEnergyB<<
" " 
  384          <<Projectile4Momentum<<
G4endl;
 
  385    G4cout<<
" ExistTargetRemnant ExistProjectileRemnant " 
  386          <<ExistTargetRemnant<<
" "<< ExistProjectileRemnant<<
G4endl;
 
  398    G4KineticTrackVector::iterator iter;
 
  399    for(iter=theSecondaries->begin(); iter !=theSecondaries->end(); ++iter)
 
  405             (part != 
ANTIproton  && ProjectileIsAntiNucleus) &&
 
  411          theTotalResult->push_back(theNew);
 
  414          secondary4Momemtum += (*iter)->Get4Momentum();
 
  415          G4cout<<
"Secondary  "<<SecondrNum<<
" " 
  417                <<secondary4Momemtum<<
G4endl;
 
  423       G4bool CanBeCapturedByTarget = 
false;
 
  426          CanBeCapturedByTarget = ExistTargetRemnant    &&
 
  428    (aTrack4Momentum       + Target4Momentum).mag() -
 
  429    aTrack4Momentum.mag() - Target4Momentum.mag())   &&
 
  430    ((*iter)->GetPosition().mag() < R);
 
  434             (*iter)->GetFormationTime());
 
  437       G4bool CanBeCapturedByProjectile = 
false;
 
  439       if( !ProjectileIsAntiNucleus &&
 
  442          CanBeCapturedByProjectile = ExistProjectileRemnant &&
 
  444          (aTrack4Momentum       + Projectile4Momentum).mag() -
 
  445          aTrack4Momentum.mag() - Projectile4Momentum.mag())    &&
 
  446          (Position.vect().mag() < Rb);
 
  449       if( ProjectileIsAntiNucleus &&
 
  452          CanBeCapturedByProjectile = ExistProjectileRemnant &&
 
  454          (aTrack4Momentum       + Projectile4Momentum).mag() -
 
  455          aTrack4Momentum.mag() - Projectile4Momentum.mag())    &&
 
  456          (Position.vect().mag() < Rb);
 
  459       if(CanBeCapturedByTarget && CanBeCapturedByProjectile)
 
  462          { CanBeCapturedByTarget = 
true; CanBeCapturedByProjectile = 
false;}
 
  464          { CanBeCapturedByTarget = 
false; CanBeCapturedByProjectile = 
true;}
 
  467       if(CanBeCapturedByTarget)
 
  473          G4cout<<
"Track is CapturedByTarget "<<
" " 
  474                <<aTrack4Momentum<<
" "<<aTrack4Momentum.mag()<<
G4endl;
 
  481          Target4Momentum +=aTrack4Momentum;
 
  483       } 
else if(CanBeCapturedByProjectile)
 
  489          G4cout<<
"Track is CapturedByProjectile"<<
" " 
  490                <<aTrack4Momentum<<
" "<<aTrack4Momentum.mag()<<
G4endl;
 
  495          if( ProjectileIsAntiNucleus ) Z=-Z;
 
  498          Projectile4Momentum +=aTrack4Momentum;
 
  505          theTotalResult->push_back(theNew);
 
  509          secondary4Momemtum += (*iter)->Get4Momentum();
 
  510          G4cout<<
"Secondary  "<<SecondrNum<<
" " 
  512                <<secondary4Momemtum<<
G4endl;
 
  518    delete theSecondaries;
 
  522    G4cout<<
"Final target residual A Z E* 4mom "<<anA<<
" "<<aZ<<
" " 
  523          <<exEnergy<<
" "<<Target4Momentum<<
G4endl;
 
  531       {Target4Momentum.setE(fMass);}
 
  533       G4double RemnMass=Target4Momentum.mag();
 
  536          RemnMass=fMass + exEnergy;
 
  537          Target4Momentum.setE(std::sqrt(Target4Momentum.vect().mag2() +
 
  540       { exEnergy=RemnMass-fMass;}
 
  542       if( exEnergy < 0.) exEnergy=0.;
 
  545       G4Fragment anInitialState(anA, aZ, Target4Momentum);
 
  554       for(
unsigned int ll=0; ll<aPrecoResult->size(); ++ll)
 
  556          theTotalResult->push_back(aPrecoResult->operator[](ll));
 
  558          G4cout<<
"Tr frag "<<aPrecoResult->operator[](ll)->GetDefinition()->GetParticleName()
 
  559                                                                                                <<
" "<<aPrecoResult->operator[](ll)->GetMomentum()<<
G4endl;
 
  566    if((anAb == theProjectileNucleus->
GetMassNumber())&& (exEnergyB <= 0.))
 
  570    G4cout<<
"Final projectile residual A Z E* Pmom "<<anAb<<
" "<<aZb<<
" " 
  571          <<exEnergyB<<
" "<<Projectile4Momentum<<
G4endl;
 
  577       G4double RemnMass=Projectile4Momentum.mag();
 
  581          RemnMass=fMass + exEnergyB;
 
  582          Projectile4Momentum.setE(std::sqrt(Projectile4Momentum.vect().mag2() +
 
  585       { exEnergyB=RemnMass-fMass;}
 
  587       if( exEnergyB < 0.) exEnergyB=0.;
 
  590       G4Fragment anInitialState(anAb, aZb, Projectile4Momentum);
 
  599       for(
unsigned int ll=0; ll<aPrecoResult->size(); ++ll)
 
  601          if(ProjectileIsAntiNucleus)
 
  605             G4cout<<
"aPrecoRes  "<<aPrecoResult->operator[](ll)->GetDefinition()->GetParticleName()
 
  606                                                                                                     <<
" "<<aPrecoResult->operator[](ll)->GetMomentum()
 
  607                                                                                                     <<
" "<<aPrecoResult->operator[](ll)->GetTotalEnergy()
 
  608                                                                                                     <<
" "<<aPrecoResult->operator[](ll)->GetMass()<<
G4endl;
 
  621             aPrecoResult->operator[](ll)->SetDefinitionAndUpdateE(LastFragment);
 
  625          G4cout<<
"aPrecoResA "<<aPrecoResult->operator[](ll)->GetDefinition()->GetParticleName()
 
  626                                                                                                     <<
" "<<aPrecoResult->operator[](ll)->GetMomentum()
 
  627                                                                                                     <<
" "<<aPrecoResult->operator[](ll)->GetTotalEnergy()
 
  628                                                                                                     <<
" "<<aPrecoResult->operator[](ll)->GetMass()<<
G4endl;
 
  630          theTotalResult->push_back(aPrecoResult->operator[](ll));
 
  636    return theTotalResult;
 
static G4AntiTriton * AntiTritonDefinition()
 
const G4ParticleDefinition * proton
 
static G4AntiHe3 * AntiHe3()
 
static G4double GetNuclearMass(const G4double A, const G4double Z)
 
G4GeneratorPrecompoundInterface(G4VPreCompoundModel *p=0)
 
virtual G4int GetCharge()=0
 
CLHEP::Hep3Vector G4ThreeVector
 
const G4ParticleDefinition * He3
 
const G4HadProjectile * GetPrimaryProjectile() const 
 
const G4ParticleDefinition * deuteron
 
virtual G4ReactionProductVector * DeExcite(G4Fragment &aFragment)=0
 
virtual G4double GetNuclearRadius()=0
 
virtual G4ReactionProductVector * Propagate(G4KineticTrackVector *theSecondaries, G4V3DNucleus *theNucleus)
 
virtual G4bool StartLoop()=0
 
const G4ParticleDefinition * He4
 
static G4AntiDeuteron * AntiDeuteron()
 
void SetMomentum(const G4double x, const G4double y, const G4double z)
 
virtual G4int GetMassNumber()=0
 
virtual void PropagateModelDescription(std::ostream &) const 
 
const G4ParticleDefinition * ANTItriton
 
void SetNumberOfHoles(G4int valueTot, G4int valueP=0)
 
const G4ParticleDefinition * neutron
 
static G4AntiDeuteron * AntiDeuteronDefinition()
 
virtual const G4LorentzVector & Get4Momentum() const 
 
const G4ParticleDefinition * triton
 
virtual G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
 
static G4AntiAlpha * AntiAlpha()
 
static G4AntiProton * AntiProtonDefinition()
 
static G4AntiNeutron * AntiNeutronDefinition()
 
const G4String & GetParticleName() const 
 
virtual const G4ParticleDefinition * GetDefinition() const 
 
std::vector< G4ReactionProduct * > G4ReactionProductVector
 
const G4ParticleDefinition * GetDefinition() const 
 
const G4ParticleDefinition * ANTIdeuteron
 
G4GLOB_DLL std::ostream G4cout
 
ParticleList decay(Cluster *const c)
Carries out a cluster decay. 
 
const G4ParticleDefinition * GetDefinition() const 
 
static G4AntiProton * AntiProton()
 
const G4ParticleDefinition * ANTIHe3
 
void SetTotalEnergy(const G4double en)
 
static G4Triton * Triton()
 
static G4Proton * Proton()
 
static G4Neutron * Neutron()
 
void SetNumberOfParticles(G4int value)
 
virtual G4ReactionProductVector * PropagateNuclNucl(G4KineticTrackVector *theSecondaries, G4V3DNucleus *theNucleus, G4V3DNucleus *theProjectileNucleus)
 
const G4LorentzVector & Get4Momentum() const 
 
static G4Deuteron * Deuteron()
 
static G4AntiHe3 * AntiHe3Definition()
 
G4HadronicInteraction * FindModel(const G4String &name)
 
static G4HadronicInteractionRegistry * Instance()
 
G4VPreCompoundModel * theDeExcitation
 
void SetDeExcitation(G4VPreCompoundModel *ptr)
 
static G4AntiAlpha * AntiAlphaDefinition()
 
const G4ParticleDefinition * ANTIHe4
 
virtual G4Nucleon * GetNextNucleon()=0
 
virtual ~G4GeneratorPrecompoundInterface()
 
void SetNumberOfCharged(G4int value)
 
const G4ParticleDefinition * ANTIneutron
 
static G4AntiTriton * AntiTriton()
 
static const double eplus
 
G4double GetPDGCharge() const 
 
const G4ParticleDefinition * ANTIproton
 
G4double GetBindingEnergy() const 
 
G4double CaptureThreshold
 
static G4AntiNeutron * AntiNeutron()
 
G4int GetBaryonNumber() const 
 
CLHEP::HepLorentzVector G4LorentzVector