149   for(
G4int i=0; i<200; ++i) { 
fSig[i] = 0.0; }
 
  182   fragmentVector->clear();
 
  190   if (verboseLevel >= 2)
 
  192     G4cout <<
"oooooooooooooooooooooooooooooooooooooooo" 
  193            <<
"oooooooooooooooooooooooooooooooooooooooo" 
  197     G4cout <<
"Initial prefragment A=" <<A
 
  199            <<
", excitation energy = " <<ex/
MeV <<
" MeV" 
  210     if (verboseLevel >= 2)
 
  213       G4cout <<
"oooooooooooooooooooooooooooooooooooooooo" 
  214              <<
"oooooooooooooooooooooooooooooooooooooooo" 
  217     return fragmentVector;
 
  222     lorentzVector.setE(lorentzVector.e()-ex+10.0*
eV);
 
  226       fragmentVector->push_back(fragment);
 
  231       fragmentVector->push_back(fragment);
 
  233     if (verboseLevel >= 2)
 
  235       G4cout <<
"Final fragment is in fact only a nucleon) :" <<
G4endl;
 
  237       G4cout <<
"oooooooooooooooooooooooooooooooooooooooo" 
  238              <<
"oooooooooooooooooooooooooooooooooooooooo" 
  241     return fragmentVector;
 
  249   if (DAabl > A) DAabl = 
A;
 
  259   G4int AF = A - DAabl;
 
  275     for (ZF=minZ; ZF<=zmax; ++ZF)
 
  277       sum += 
G4Exp(-R*g4pow->
powA(std::abs(ZF - 0.486*AFd + 3.8E-04*AFd*AFd),1.5));
 
  285     for (ZF=minZ; ZF<=zmax; ++ZF) {
 
  286       if(sum <= fSig[ZF]) { 
break; }
 
  289   G4int DZabl = Z - ZF;
 
  300   for (
G4int ift=0; ift<nFragTypes; ift++)
 
  305     if (fragType[ift]->GetPDGCharge() > 0.0)
 
  314         evapType.push_back(type);
 
  337     evapType.erase(evapType.end()-1);
 
  339   totalEpost   += massFinalFrag;
 
  344   if (verboseLevel >= 2)
 
  346     G4cout <<
"Final fragment      A=" <<AF
 
  349     for (
G4int ift=0; ift<nFragTypes; ift++)
 
  352       G4int n                    = std::count(evapType.begin(),evapType.end(),type);
 
  355                <<
", number of particles emitted = " <<n <<
G4endl;
 
  364   G4double totalEpre        = massPreFrag + ex;
 
  365   G4double excess           = totalEpre - totalEpost;
 
  370   if (produceSecondaries && evapType.size()>0)
 
  374       SelectSecondariesByEvaporation (resultNucleus);
 
  375       nEvap = fragmentVector->size();
 
  376       boost = resultNucleus->
GetMomentum().findBoostToCM();
 
  377       if (evapType.size() > 0)
 
  378         SelectSecondariesByDefault (boost);
 
  389     G4double p    = std::sqrt(e*e-mass*mass);
 
  392     lorentzVector.boost(-boost);
 
  394     fragmentVector->push_back(frag);
 
  396   delete resultNucleus;
 
  401   if (verboseLevel >= 2)
 
  410     G4FragmentVector::iterator iter;
 
  411     for (iter = fragmentVector->begin(); iter != fragmentVector->end(); iter++)
 
  422     G4cout <<
"oooooooooooooooooooooooooooooooooooooooo" 
  423            <<
"oooooooooooooooooooooooooooooooooooooooo" 
  427   return fragmentVector;    
 
  434   G4Fragment theResidualNucleus = *intermediateNucleus;
 
  437   while (evaporate && evapType.size() != 0)
 
  445     std::vector <G4VEvaporationChannel*>  theChannels1;
 
  446     theChannels1.clear();
 
  447     std::vector <G4VEvaporationChannel*>::iterator i;
 
  448     VectorOfFragmentTypes::iterator iter;
 
  449     std::vector <VectorOfFragmentTypes::iterator> iters;
 
  451     iter = std::find(evapType.begin(), evapType.end(), 
G4Alpha::Alpha());
 
  452     if (iter != evapType.end())
 
  455       i = theChannels1.end() - 1;
 
  456       (*i)->SetOPTxs(OPTxs);
 
  457       (*i)->UseSICB(useSICB);
 
  459       iters.push_back(iter);
 
  461     iter = std::find(evapType.begin(), evapType.end(), 
G4He3::He3());
 
  462     if (iter != evapType.end())
 
  465       i = theChannels1.end() - 1;
 
  466       (*i)->SetOPTxs(OPTxs);
 
  467       (*i)->UseSICB(useSICB);
 
  469       iters.push_back(iter);
 
  472     if (iter != evapType.end())
 
  475       i = theChannels1.end() - 1;
 
  476       (*i)->SetOPTxs(OPTxs);
 
  477       (*i)->UseSICB(useSICB);
 
  479       iters.push_back(iter);
 
  482     if (iter != evapType.end())
 
  485       i = theChannels1.end() - 1;
 
  486       (*i)->SetOPTxs(OPTxs);
 
  487       (*i)->UseSICB(useSICB);
 
  489       iters.push_back(iter);
 
  492     if (iter != evapType.end())
 
  495       i = theChannels1.end() - 1;
 
  496       (*i)->SetOPTxs(OPTxs);
 
  497       (*i)->UseSICB(useSICB);
 
  499       iters.push_back(iter);
 
  502     if (iter != evapType.end())
 
  505       i = theChannels1.end() - 1;
 
  506       (*i)->SetOPTxs(OPTxs);
 
  507       (*i)->UseSICB(useSICB);
 
  509       iters.push_back(iter);
 
  511     G4int nChannels = theChannels1.size();
 
  516     std::vector<G4VEvaporationChannel*>::iterator iterEv;
 
  517     for (iterEv=theChannels1.begin(); iterEv!=theChannels1.end(); iterEv++) {
 
  518       totalProb += (*iterEv)->GetEmissionProbability(intermediateNucleus);
 
  519       probEvapType[ich] = totalProb;
 
  522     if (totalProb > 0.0) {
 
  531       for (ii=0; ii<nChannels; ii++) {
 
  532         if (xi < probEvapType[ii]) { 
break; }
 
  534       if (ii >= nChannels) { ii = nChannels - 1; }
 
  536         BreakUp(*intermediateNucleus);
 
  537       fragmentVector->push_back((*evaporationResult)[0]);
 
  538       *intermediateNucleus = *(*evaporationResult)[1];
 
  540       delete evaporationResult;
 
  560   for (
unsigned i=0; i<
evapType.size(); i++)
 
  565     G4double p                 = std::sqrt(e*e-mass*mass);
 
  567     G4double sintheta          = std::sqrt((1.0 - costheta)*(1.0 + costheta));
 
  569     G4ThreeVector direction(sintheta*std::cos(phi),sintheta*std::sin(phi),costheta);
 
  571     lorentzVector.boost(-boost);
 
  589   G4cout <<
" *****************************************************************" 
  591   G4cout <<
" Nuclear ablation model for nuclear-nuclear interactions activated" 
  593   G4cout <<
" (Written by QinetiQ Ltd for the European Space Agency)" 
  595   G4cout <<
" !!! WARNING: This model is not well validation and should not be used for accurate simulation !!!" 
  597   G4cout <<
" *****************************************************************" 
static G4Pow * GetInstance()
 
G4double powA(G4double A, G4double y) const 
 
virtual std::vector< G4VEvaporationChannel * > * GetChannel()=0
 
void SelectSecondariesByDefault(G4ThreeVector)
 
VectorOfFragmentTypes evapType
 
CLHEP::Hep3Vector G4ThreeVector
 
virtual ~G4WilsonAblationModel()
 
G4ParticleDefinition * fragType[6]
 
double B(double temperature)
 
void SelectSecondariesByEvaporation(G4Fragment *)
 
const G4String & GetParticleName() const 
 
std::vector< G4VEvaporationChannel * > * theChannels
 
void PrintWelcomeMessage()
 
G4bool produceSecondaries
 
G4IonTable * GetIonTable() const 
 
G4GLOB_DLL std::ostream G4cout
 
double A(double temperature)
 
const G4LorentzVector & GetMomentum() const 
 
static const double twopi
 
std::vector< G4Fragment * > G4FragmentVector
 
static G4Triton * Triton()
 
static G4Proton * Proton()
 
G4double GetGroundStateMass() const 
 
static G4Neutron * Neutron()
 
static G4Deuteron * Deuteron()
 
G4double G4Exp(G4double initial_x)
Exponential Function double precision. 
 
G4double GetPDGMass() const 
 
static G4ParticleTable * GetParticleTable()
 
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 
 
G4double powZ(G4int Z, G4double y) const 
 
G4double GetPDGCharge() const 
 
G4VEvaporationFactory * theChannelFactory
 
G4FragmentVector * fragmentVector
 
G4double GetExcitationEnergy() const 
 
G4int GetBaryonNumber() const 
 
CLHEP::HepLorentzVector G4LorentzVector
 
G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)