85 PrintWelcomeMessage();
97 handlerDefinedInternally =
true;
139 PrintWelcomeMessage();
141 theExcitationHandler = aExcitationHandler;
142 handlerDefinedInternally =
false;
158 if (handlerDefinedInternally)
delete theExcitationHandler;
162 delete thePhotonSpectrum;
172 theParticleChange.
Clear();
192 if (verboseLevel >= 2) {
194 G4cout <<
"########################################"
195 <<
"########################################"
198 G4cout <<
"Initial projectile A=" <<AP
201 G4cout <<
"Initial target A=" <<AT
204 G4cout <<
"Projectile momentum and Energy/nuc = " <<pP <<
" ," <<E <<
G4endl;
221 G4double bmin = thePhotonSpectrum->GetClosestApproach(AP, ZP, AT, ZT, b);
223 GetCrossSectionForProjectile(AP, ZP, AT, ZT, b, bmin);
225 GetCrossSectionForTarget(AP, ZP, AT, ZT, b, bmin);
227 G4double totCrossSectionP = (*crossSectionP)[0]+(*crossSectionP)[1];
228 G4double totCrossSectionT = (*crossSectionT)[0]+(*crossSectionT)[1];
234 totCrossSectionP / (totCrossSectionP + totCrossSectionT)) {
244 GetWilsonProbabilityForProtonDissociation (AP, ZP))
246 if (verboseLevel >= 2)
247 G4cout <<
"Projectile underwent EM dissociation producing a proton"
255 if (verboseLevel >= 2)
256 G4cout <<
"Projectile underwent EM dissociation producing a neutron"
264 Eg = crossSectionP->GetLowEdgeEnergy(0);
265 if (verboseLevel >= 2)
270 Eg = crossSectionP->GetLowEdgeEnergy(1);
271 if (verboseLevel >= 2)
291 GetWilsonProbabilityForProtonDissociation (AT, ZT))
293 if (verboseLevel >= 2)
294 G4cout <<
"Target underwent EM dissociation producing a proton"
302 if (verboseLevel >= 2)
303 G4cout <<
"Target underwent EM dissociation producing a neutron"
311 Eg = crossSectionT->GetLowEdgeEnergy(0);
312 if (verboseLevel >= 2)
317 Eg = crossSectionT->GetLowEdgeEnergy(1);
318 if (verboseLevel >= 2)
329 theParticleChange.AddSecondary (changedP);
330 if (verboseLevel >= 2)
346 G4double pp = (e+mass1+mass2)*(e+mass1-mass2)*
347 (e-mass1+mass2)*(e-mass1-mass2)/(4.0*e*e);
363 G4double sintheta = std::sqrt((1.0 - costheta)*(1.0 + costheta));
365 G4ThreeVector direction(sintheta*std::cos(phi),sintheta*std::sin(phi),costheta);
376 theParticleChange.AddSecondary (dynamicNucleon);
377 if (verboseLevel >= 2) {
386 if (verboseLevel >= 2) {
387 G4cout <<
"Dynamic properties of the prefragment:" <<
G4endl;
390 G4cout <<
"Nuclear properties of the prefragment:" <<
G4endl;
395 theExcitationHandler->BreakItUp(*theFragment);
400 G4ReactionProductVector::iterator iter;
401 for (iter = products->begin(); iter != products->end(); ++iter) {
403 (*iter)->GetTotalEnergy(), (*iter)->GetMomentum());
404 theParticleChange.AddSecondary (secondary);
408 delete crossSectionP;
409 delete crossSectionT;
411 if (verboseLevel >= 2)
412 G4cout <<
"########################################"
413 <<
"########################################"
416 return &theParticleChange;
420 void G4EMDissociation::PrintWelcomeMessage ()
423 G4cout <<
" ****************************************************************"
425 G4cout <<
" EM dissociation model for nuclear-nuclear interactions activated"
427 G4cout <<
" (Written by QinetiQ Ltd for the European Space Agency)"
429 G4cout <<
" ****************************************************************"
static G4double GetNuclearMass(const G4double A, const G4double Z)
CLHEP::Hep3Vector G4ThreeVector
static G4Proton * ProtonDefinition()
void DumpInfo(G4int mode=0) const
void SetMinEForMultiFrag(G4double anE)
static constexpr double rad
std::vector< G4ReactionProduct * > G4ReactionProductVector
void SetMinEnergy(G4double anEnergy)
G4GLOB_DLL std::ostream G4cout
const G4ParticleDefinition * GetDefinition() const
HepLorentzVector & boost(double, double, double)
G4double GetKineticEnergy() const
void SetFermiModel(G4VFermiBreakUp *ptr)
virtual G4HadFinalState * ApplyYourself(const G4HadProjectile &, G4Nucleus &)
static constexpr double eV
void SetMultiFragmentation(G4VMultiFragmentation *ptr)
const G4LorentzVector & Get4Momentum() const
void SetEvaporation(G4VEvaporation *ptr, G4bool isLocal=false)
G4LorentzVector Get4Momentum() const
static G4IonTable * GetIonTable()
void Set4Momentum(const G4LorentzVector &momentum)
Hep3Vector findBoostToCM() const
G4double GetPDGMass() const
void SetMaxAandZForFermiBreakUp(G4int anA, G4int aZ)
static constexpr double GeV
void SetMaxEnergy(const G4double anEnergy)
static constexpr double MeV
static constexpr double pi
G4double GetPDGCharge() const
static G4Neutron * NeutronDefinition()
G4int GetBaryonNumber() const
G4double GetTotalEnergy() const