153 for(
G4int i=0; i<200; ++i) {
fSig[i] = 0.0; }
198 G4cout <<
"oooooooooooooooooooooooooooooooooooooooo"
199 <<
"oooooooooooooooooooooooooooooooooooooooo"
203 G4cout <<
"Initial prefragment A=" <<
A
205 <<
", excitation energy = " <<ex/
MeV <<
" MeV"
219 G4cout <<
"oooooooooooooooooooooooooooooooooooooooo"
220 <<
"oooooooooooooooooooooooooooooooooooooooo"
228 lorentzVector.
setE(lorentzVector.
e()-ex+10.0*
eV);
243 G4cout <<
"Final fragment is in fact only a nucleon) :" <<
G4endl;
245 G4cout <<
"oooooooooooooooooooooooooooooooooooooooo"
246 <<
"oooooooooooooooooooooooooooooooooooooooo"
257 if (DAabl >
A) DAabl =
A;
283 for (ZF=minZ; ZF<=zmax; ++ZF)
285 sum +=
G4Exp(-R*g4calc->
powA(std::abs(ZF - 0.486*AFd + 3.8E-04*AFd*AFd),1.5));
293 for (ZF=minZ; ZF<=zmax; ++ZF) {
294 if(sum <=
fSig[ZF]) {
break; }
313 if (
fragType[ift]->GetPDGCharge() > 0.0)
347 totalEpost += massFinalFrag;
354 G4cout <<
"Final fragment A=" <<AF
363 <<
", number of particles emitted = " <<
n <<
G4endl;
372 G4double totalEpre = massPreFrag + ex;
373 G4double excess = totalEpre - totalEpost;
397 G4double p = std::sqrt(e*e-mass*mass);
400 lorentzVector.
boost(-boost);
405 delete resultNucleus;
419 G4FragmentVector::iterator iter;
431 G4cout <<
"oooooooooooooooooooooooooooooooooooooooo"
432 <<
"oooooooooooooooooooooooooooooooooooooooo"
443 G4Fragment theResidualNucleus = *intermediateNucleus;
446 while (evaporate &&
evapType.size() != 0)
454 std::vector <G4VEvaporationChannel*> theChannels1;
455 theChannels1.clear();
456 std::vector <G4VEvaporationChannel*>::iterator i;
457 VectorOfFragmentTypes::iterator iter;
458 std::vector <VectorOfFragmentTypes::iterator> iters;
464 i = theChannels1.end() - 1;
465 (*i)->SetOPTxs(
OPTxs);
468 iters.push_back(iter);
474 i = theChannels1.end() - 1;
475 (*i)->SetOPTxs(
OPTxs);
478 iters.push_back(iter);
484 i = theChannels1.end() - 1;
485 (*i)->SetOPTxs(
OPTxs);
488 iters.push_back(iter);
494 i = theChannels1.end() - 1;
495 (*i)->SetOPTxs(
OPTxs);
498 iters.push_back(iter);
504 i = theChannels1.end() - 1;
505 (*i)->SetOPTxs(
OPTxs);
508 iters.push_back(iter);
514 i = theChannels1.end() - 1;
515 (*i)->SetOPTxs(
OPTxs);
518 iters.push_back(iter);
520 G4int nChannels = theChannels1.size();
525 std::vector<G4VEvaporationChannel*>::iterator iterEv;
526 for (iterEv=theChannels1.begin(); iterEv!=theChannels1.end(); iterEv++) {
527 totalProb += (*iterEv)->GetEmissionProbability(intermediateNucleus);
528 probEvapType[ich] = totalProb;
531 if (totalProb > 0.0) {
540 for (ii=0; ii<nChannels; ii++) {
541 if (xi < probEvapType[ii]) {
break; }
543 if (ii >= nChannels) { ii = nChannels - 1; }
545 BreakUpFragment(intermediateNucleus);
546 if ((*evaporationResult)[0] !=
nullptr) { (*evaporationResult)[0]->SetCreatorModelID(
secID); }
548 intermediateNucleus = (*evaporationResult)[1];
549 delete evaporationResult;
568 for (
unsigned i=0; i<
evapType.size(); i++)
573 G4double p = std::sqrt(e*e-mass*mass);
575 G4double sintheta = std::sqrt((1.0 - costheta)*(1.0 + costheta));
577 G4ThreeVector direction(sintheta*std::cos(phi),sintheta*std::sin(phi),costheta);
579 lorentzVector.
boost(-boost);
597 G4cout <<
" *****************************************************************"
599 G4cout <<
" Nuclear ablation model for nuclear-nuclear interactions activated"
601 G4cout <<
" (Written by QinetiQ Ltd for the European Space Agency)"
603 G4cout <<
" !!! WARNING: This model is not well validation and should not be used for accurate simulation !!!"
605 G4cout <<
" *****************************************************************"
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
std::vector< G4Fragment * > G4FragmentVector
CLHEP::HepLorentzVector G4LorentzVector
static constexpr double twopi
static constexpr double rad
static constexpr double eV
static constexpr double MeV
CLHEP::Hep3Vector G4ThreeVector
G4GLOB_DLL std::ostream G4cout
HepLorentzVector & boost(double, double, double)
Hep3Vector findBoostToCM() const
static G4Deuteron * Deuteron()
G4double GetGroundStateMass() const
G4double GetExcitationEnergy() const
const G4LorentzVector & GetMomentum() const
void SetCreatorModelID(G4int value)
static G4Neutron * Neutron()
G4double GetPDGMass() const
G4double GetPDGCharge() const
G4int GetBaryonNumber() const
const G4String & GetParticleName() const
G4IonTable * GetIonTable() const
static G4ParticleTable * GetParticleTable()
static G4int GetModelID(const G4int modelIndex)
static G4Pow * GetInstance()
G4double powZ(G4int Z, G4double y) const
G4double powA(G4double A, G4double y) const
static G4Proton * Proton()
static G4Triton * Triton()
virtual std::vector< G4VEvaporationChannel * > * GetChannel()=0
G4VEvaporationFactory * theChannelFactory
std::vector< G4VEvaporationChannel * > * theChannels
G4FragmentVector * fragmentVector
G4ParticleDefinition * fragType[6]
void SelectSecondariesByEvaporation(G4Fragment *)
G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)
void PrintWelcomeMessage()
virtual ~G4WilsonAblationModel()
G4bool produceSecondaries
VectorOfFragmentTypes evapType
void SelectSecondariesByDefault(G4ThreeVector)
T max(const T t1, const T t2)
brief Return the largest of the two arguments
T min(const T t1, const T t2)
brief Return the smallest of the two arguments