80 : CaptureThreshold(70*
MeV)
118 G4cout<<
"Directly produced particles number "<<theSecondaries->size()<<
G4endl;
126 G4cout<<
"Final stable particles number "<<theSecondaries->size()<<
G4endl;
134 G4int numberOfEx = 0;
135 G4int numberOfCh = 0;
136 G4int numberOfHoles = 0;
145 G4KineticTrackVector::iterator iter;
146 for(iter=theSecondaries->begin(); iter !=theSecondaries->end(); ++iter)
149 G4double e = (*iter)->Get4Momentum().e();
150 G4double mass = (*iter)->Get4Momentum().mag();
154 ((*iter)->GetPosition().mag() > R)) {
158 theTotalResult->push_back(theNew);
159 Secondary4Momentum += (*iter)->Get4Momentum();
162 <<(*iter)->Get4Momentum().mag()<<
G4endl;
169 theTotalResult->push_back(theNew);
170 Secondary4Momentum += (*iter)->Get4Momentum();
173 <<(*iter)->Get4Momentum().mag()<<
G4endl;
183 captured4Momentum += (*iter)->Get4Momentum();
191 delete theSecondaries;
196 while(theCurrentNucleon)
213 G4cout<<
"Sec + Captured "<<Secondary4Momentum+captured4Momentum<<
G4endl;
216 <<Secondary4Momentum + captured4Momentum + Residual4Momentum <<
G4endl;
222 while(theCurrentNucleon)
238 {
G4cout<<
"Residual 4Mom = 0 means that there were not wounded and captured nucleons"<<
G4endl;}
242 if(anA == 0)
return theTotalResult;
252 exciton4Momentum = Residual4Momentum + captured4Momentum;
254 G4double ActualMass = exciton4Momentum.mag();
255 if(ActualMass <= fMass ) {
256 exciton4Momentum.setE(std::sqrt(exciton4Momentum.vect().mag2()+
sqr(fMass)));
261 if(ActualMass <= fMass ) {exEnergy = 0.;}
262 else {exEnergy = ActualMass - fMass;}
263 G4cout<<
"Ground state residual Mass "<<fMass<<
" E* "<<exEnergy<<
G4endl;
276 G4double ActualMass = exciton4Momentum.mag();
282 G4cout<<
"ResidualMass, GroundStateMass and E* "<<ActualMass<<
" "<<fMass<<
" "
283 <<ActualMass - fMass<<
G4endl;
286 if(ActualMass - fMass < 0.)
288 G4double ResE = std::sqrt(exciton4Momentum.vect().mag2() +
sqr(fMass+10*
MeV));
289 exciton4Momentum.setE(ResE);
291 G4cout<<
"ActualMass - fMass < 0. "<<ActualMass<<
" "<<fMass<<
" "<<ActualMass - fMass<<
G4endl;
297 G4Fragment anInitialState(anA, aZ, exciton4Momentum);
306 G4cout<<
"Target fragment number "<<aPrecoResult->size()<<
G4endl;
308 for(
unsigned int ll=0; ll<aPrecoResult->size(); ++ll)
310 theTotalResult->push_back(aPrecoResult->operator[](ll));
312 G4cout<<
"Fragment "<<ll<<
" "
313 <<aPrecoResult->operator[](ll)->GetDefinition()->GetParticleName()<<
" "
314 <<aPrecoResult->operator[](ll)->GetMomentum()<<
" "
315 <<aPrecoResult->operator[](ll)->GetTotalEnergy()<<
" "
316 <<aPrecoResult->operator[](ll)->GetDefinition()->GetPDGMass()<<
G4endl;
322 return theTotalResult;
328 G4cout <<
"G4GeneratorPrecompoundInterface: ApplyYourself interface called stand-allone."
330 G4cout <<
"This class is only a mediator between generator and precompound"<<
G4endl;
331 G4cout <<
"Please remove from your physics list."<<
G4endl;
332 throw G4HadronicException(__FILE__, __LINE__,
"SEVERE: G4GeneratorPrecompoundInterface model interface called stand-allone.");
337 outFile <<
"G4GeneratorPrecompoundInterface interfaces a high\n"
338 <<
"energy model through the wounded nucleus to precompound de-excition.\n"
339 <<
"Low energy protons and neutron present among secondaries produced by \n"
340 <<
"the high energy generator and within the nucleus are captured. The wounded\n"
341 <<
"nucleus and the captured particles form an excited nuclear fragment. This\n"
342 <<
"fragment is passed to the Geant4 pre-compound model for de-excitation.\n"
343 <<
"Nuclear de-excitation:\n";
359 G4cout<<
"Directly produced particles number "<<theSecondaries->size()<<
G4endl;
367 G4int numberOfEx = 0;
368 G4int numberOfCh = 0;
369 G4int numberOfHoles = 0;
377 while(theCurrentNucleon)
392 G4cout<<
"Residual Target A Z E* 4mom "<<anA<<
" "<<aZ<<
" "<<exEnergy<<
" "
393 <<Target4Momentum<<
G4endl;
398 G4bool ProjectileIsAntiNucleus=
405 G4int numberOfExB = 0;
406 G4int numberOfChB = 0;
407 G4int numberOfHolesB = 0;
415 while(theCurrentNucleon)
421 if(!ProjectileIsAntiNucleus) {
429 Projectile4Momentum -=theCurrentNucleon->
Get4Momentum();
435 0.3*
G4double (numberOfHoles + anA);
437 0.3*
G4double (numberOfHolesB + anAb);
440 G4cout<<
"Projectile residual A Z E* 4mom "<<anAb<<
" "<<aZb<<
" "<<exEnergyB<<
" "
441 <<Projectile4Momentum<<
G4endl;
442 G4cout<<
" ExistTargetRemnant ExistProjectileRemnant "
443 <<ExistTargetRemnant<<
" "<< ExistProjectileRemnant<<
G4endl;
450 G4cout<<
"Secondary stable particles number "<<theSecondaries->size()<<
G4endl;
459 G4KineticTrackVector::iterator iter;
460 for(iter=theSecondaries->begin(); iter !=theSecondaries->end(); ++iter)
466 (part !=
ANTIproton && ProjectileIsAntiNucleus) &&
472 theTotalResult->push_back(theNew);
475 secondary4Momemtum += (*iter)->Get4Momentum();
476 G4cout<<
"Secondary "<<SecondrNum<<
" "
485 G4bool CanBeCapturedByTarget =
false;
488 CanBeCapturedByTarget = ExistTargetRemnant &&
490 (aTrack4Momentum + Target4Momentum).mag() -
491 aTrack4Momentum.mag() - Target4Momentum.mag()) &&
492 ((*iter)->GetPosition().mag() < R);
495 G4LorentzVector Position((*iter)->GetPosition(), (*iter)->GetFormationTime());
498 G4bool CanBeCapturedByProjectile =
false;
500 if( !ProjectileIsAntiNucleus &&
503 CanBeCapturedByProjectile = ExistProjectileRemnant &&
505 (aTrack4Momentum + Projectile4Momentum).mag() -
506 aTrack4Momentum.mag() - Projectile4Momentum.mag()) &&
507 (Position.vect().mag() < Rb);
510 if( ProjectileIsAntiNucleus &&
513 CanBeCapturedByProjectile = ExistProjectileRemnant &&
515 (aTrack4Momentum + Projectile4Momentum).mag() -
516 aTrack4Momentum.mag() - Projectile4Momentum.mag()) &&
517 (Position.vect().mag() < Rb);
520 if(CanBeCapturedByTarget && CanBeCapturedByProjectile)
523 { CanBeCapturedByTarget =
true; CanBeCapturedByProjectile =
false;}
525 { CanBeCapturedByTarget =
false; CanBeCapturedByProjectile =
true;}
528 if(CanBeCapturedByTarget)
535 <<aTrack4Momentum<<
" "<<aTrack4Momentum.mag()<<
G4endl;
542 Target4Momentum +=aTrack4Momentum;
544 }
else if(CanBeCapturedByProjectile)
551 <<aTrack4Momentum<<
" "<<aTrack4Momentum.mag()<<
G4endl;
556 if( ProjectileIsAntiNucleus ) Z=-Z;
559 Projectile4Momentum +=aTrack4Momentum;
566 theTotalResult->push_back(theNew);
570 secondary4Momemtum += (*iter)->Get4Momentum();
581 delete theSecondaries;
585 G4cout<<
"Final target residual A Z E* 4mom "<<anA<<
" "<<aZ<<
" "
586 <<exEnergy<<
" "<<Target4Momentum<<
G4endl;
594 {Target4Momentum.setE(fMass);}
596 G4double RemnMass=Target4Momentum.mag();
600 RemnMass=fMass + exEnergy;
601 Target4Momentum.setE(std::sqrt(Target4Momentum.vect().mag2() +
604 { exEnergy=RemnMass-fMass;}
606 if( exEnergy < 0.) exEnergy=0.;
609 G4Fragment anInitialState(anA, aZ, Target4Momentum);
618 G4cout<<
"Target fragment number "<<aPrecoResult->size()<<
G4endl;
622 for(
unsigned int ll=0; ll<aPrecoResult->size(); ++ll)
624 theTotalResult->push_back(aPrecoResult->operator[](ll));
626 G4cout<<
"Target fragment "<<ll<<
" "
627 <<aPrecoResult->operator[](ll)->GetDefinition()->GetParticleName()<<
" "
628 <<aPrecoResult->operator[](ll)->GetMomentum()<<
" "
629 <<aPrecoResult->operator[](ll)->GetTotalEnergy()<<
" "
630 <<aPrecoResult->operator[](ll)->GetMass()<<
G4endl;
637 if((anAb == theProjectileNucleus->
GetMassNumber())&& (exEnergyB <= 0.))
641 G4cout<<
"Final projectile residual A Z E* Pmom Pmag2 "<<anAb<<
" "<<aZb<<
" "
642 <<exEnergyB<<
" "<<Projectile4Momentum<<
" "
643 <<Projectile4Momentum.mag2()<<
G4endl;
652 G4double RemnMass=Projectile4Momentum.mag();
656 RemnMass=fMass + exEnergyB;
657 Projectile4Momentum.setE(std::sqrt(Projectile4Momentum.vect().mag2() +
660 { exEnergyB=RemnMass-fMass;}
662 if( exEnergyB < 0.) exEnergyB=0.;
665 Projectile4Momentum.boost(bstToCM);
668 G4Fragment anInitialState(anAb, aZb, Projectile4Momentum);
677 G4cout<<
"Projectile fragment number "<<aPrecoResult->size()<<
G4endl;
681 for(
unsigned int ll=0; ll<aPrecoResult->size(); ++ll)
684 aPrecoResult->operator[](ll)->GetTotalEnergy());
686 aPrecoResult->operator[](ll)->SetMomentum(tmp.vect());
687 aPrecoResult->operator[](ll)->SetTotalEnergy(tmp.e());
689 if(ProjectileIsAntiNucleus)
701 aPrecoResult->operator[](ll)->SetDefinitionAndUpdateE(LastFragment);
705 G4cout<<
"Projectile fragment "<<ll<<
" "
706 <<aPrecoResult->operator[](ll)->GetDefinition()->GetParticleName()<<
" "
707 <<aPrecoResult->operator[](ll)->GetMomentum()<<
" "
708 <<aPrecoResult->operator[](ll)->GetTotalEnergy()<<
" "
709 <<aPrecoResult->operator[](ll)->GetMass()<<
G4endl;
712 theTotalResult->push_back(aPrecoResult->operator[](ll));
718 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()
G4double G4Log(G4double x)
G4HadronicInteraction * FindModel(const G4String &name)
G4double GetTotalEnergy() const
G4double GetPDGMass() const
static G4HadronicInteractionRegistry * Instance()
G4VPreCompoundModel * theDeExcitation
G4ThreeVector GetMomentum() const
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