83 G4cout <<
"Rudd ionisation model is constructed " <<
G4endl;
105 std::map< G4String,G4DNACrossSectionDataSet*,std::less<G4String> >::iterator
pos;
124 G4cout <<
"Calling G4DNARuddIonisationExtendedModel::Initialise()" <<
G4endl;
128 G4String fileProton(
"dna/sigma_ionisation_p_rudd");
129 G4String fileHydrogen(
"dna/sigma_ionisation_h_rudd");
130 G4String fileAlphaPlusPlus(
"dna/sigma_ionisation_alphaplusplus_rudd");
131 G4String fileAlphaPlus(
"dna/sigma_ionisation_alphaplus_rudd");
132 G4String fileHelium(
"dna/sigma_ionisation_he_rudd");
133 G4String fileLithium(
"dna/sigma_ionisation_li_rudd");
134 G4String fileBeryllium(
"dna/sigma_ionisation_be_rudd");
135 G4String fileBoron(
"dna/sigma_ionisation_b_rudd");
136 G4String fileCarbon(
"dna/sigma_ionisation_c_rudd");
137 G4String fileNitrogen(
"dna/sigma_ionisation_n_rudd");
138 G4String fileOxygen(
"dna/sigma_ionisation_o_rudd");
139 G4String fileSilicon(
"dna/sigma_ionisation_si_rudd");
140 G4String fileIron(
"dna/sigma_ionisation_fe_rudd");
211 tableHydrogen->
LoadData(fileHydrogen);
218 tableFile[alphaPlusPlus] = fileAlphaPlusPlus;
228 tableAlphaPlusPlus->
LoadData(fileAlphaPlusPlus);
230 tableData[alphaPlusPlus] = tableAlphaPlusPlus;
245 tableAlphaPlus->
LoadData(fileAlphaPlus);
281 tableLithium->
LoadData(fileLithium);
301 tableBeryllium->
LoadData(fileBeryllium);
381 tableNitrogen->
LoadData(fileNitrogen);
400 tableSilicon->
LoadData(fileSilicon);
431 if (particle==protonDef)
437 if (particle==hydrogenDef)
443 if (particle==heliumDef)
449 if (particle==alphaPlusDef)
455 if (particle==alphaPlusPlusDef)
461 if (particle==lithiumDef)
467 if (particle==berylliumDef)
473 if (particle==boronDef)
479 if (particle==carbonDef)
485 if (particle==nitrogenDef)
491 if (particle==oxygenDef)
497 if (particle==siliconDef)
503 if (particle==ironDef)
513 G4cout <<
"Rudd ionisation model is initialized " << G4endl
546 G4cout <<
"Calling CrossSectionPerVolume() of G4DNARuddIonisationExtendedModel" <<
G4endl;
556 particleDefinition != instance->
GetIon(
"hydrogen")
558 particleDefinition != instance->
GetIon(
"alpha++")
560 particleDefinition != instance->
GetIon(
"alpha+")
562 particleDefinition != instance->
GetIon(
"helium")
595 || particleDefinition == instance->
GetIon(
"hydrogen")
600 else if ( particleDefinition == instance->
GetIon(
"alpha++")
601 || particleDefinition == instance->
GetIon(
"alpha+")
602 || particleDefinition == instance->
GetIon(
"helium")
617 std::map< G4String,G4double,std::less<G4String> >::iterator pos2;
622 highLim = pos2->second;
630 if (k < lowLim) k = lowLim;
634 std::map< G4String,G4DNACrossSectionDataSet*,std::less<G4String> >::iterator
pos;
647 G4Exception(
"G4DNARuddIonisationExtendedModel::CrossSectionPerVolume",
"em0002",
655 G4cout <<
"__________________________________" <<
G4endl;
656 G4cout <<
"G4DNARuddIonisationExtendedModel - XS INFO START" <<
G4endl;
658 G4cout <<
"Cross section per water molecule (cm^2)=" << sigma/
cm/
cm <<
G4endl;
659 G4cout <<
"Cross section per water molecule (cm^-1)=" << sigma*waterDensity/(1./
cm) << G4endl;
662 G4cout <<
"G4DNARuddIonisationExtendedModel - XS INFO END" <<
G4endl;
666 return sigma*waterDensity;
684 G4cout <<
"Calling SampleSecondaries() of G4DNARuddIonisationExtendedModel" <<
G4endl;
730 std::map< G4String,G4double,std::less<G4String> >::iterator pos2;
735 if (k >= lowLim && k <= highLim)
758 if (k<bindingEnergy)
return;
771 fvect->push_back(dp);
807 size_t secNumberInit = 0;
808 size_t secNumberFinal = 0;
810 G4double scatteredEnergy = k-bindingEnergy-secondaryKinetic;
817 secNumberInit = fvect->size();
819 secNumberFinal = fvect->size();
821 if(secNumberFinal > secNumberInit)
823 for (
size_t i=secNumberInit; i<secNumberFinal; ++i)
826 if (bindingEnergy >= ((*fvect)[i])->GetKineticEnergy())
829 bindingEnergy -= ((*fvect)[i])->GetKineticEnergy();
844 if(bindingEnergy < 0.0)
845 G4Exception(
"G4DNAEmfietzoglouIonisatioModel1::SampleSecondaries()",
908 value_sampling =
RejectionFunction(particleDefinition, k, proposed_energy, shell);
910 }
while(random1 > value_sampling);
912 return(proposed_energy);
963 G4int ionizationLevelIndex)
965 const G4int j=ionizationLevelIndex;
968 const G4double Gj[5] = {0.99, 1.11, 1.11, 0.52, 1.};
985 Bj_energy = Bj[ionizationLevelIndex];
988 G4double energyTransfer = proposed_ws + Bj_energy;
989 proposed_ws/=Bj_energy;
1000 if((tau/
MeV)<5.447761194
e-2)
1002 v2 = tau / Bj_energy;
1013 G4double wc = 4.*v2 - 2.*v - (Ry/(4.*Bj_energy));
1014 G4double rejection_term = 1.+
G4Exp(alphaConst*(proposed_ws - wc) / v);
1015 rejection_term = (1./rejection_term)*
CorrectionFactor(particleDefinition,k,ionizationLevelIndex) * Gj[j];
1021 || particleDefinition == instance->
GetIon(
"hydrogen")
1024 return(rejection_term);
1031 G4double x = 100.*std::sqrt(beta2)/std::pow(Z,(2./3.));
1032 G4double Zeffion = Z*(1.-
G4Exp(-1.316*x+0.112*x*x-0.0650*x*x*x));
1033 rejection_term*=Zeffion*Zeffion;
1036 else if (particleDefinition == instance->
GetIon(
"alpha++") )
1047 else if (particleDefinition == instance->
GetIon(
"alpha+") )
1060 else if (particleDefinition == instance->
GetIon(
"helium") )
1085 rejection_term*= zEff * zEff;
1088 return (rejection_term);
1097 G4int ionizationLevelIndex)
1100 const G4int j=ionizationLevelIndex;
1145 Bj_energy = Bj[ionizationLevelIndex];
1156 if((tau/
MeV)<5.447761194
e-2)
1158 v2 = tau / Bj_energy;
1170 G4double L1 = (C1* std::pow(v,(D1))) / (1.+ E1*std::pow(v, (D1+4.)));
1172 G4double H1 = (A1*std::log(1.+v2)) / (v2+(B1/v2));
1188 G4double gamma = 1./sqrt(1.-beta2);
1197 G4double wmax = maximumEnergy/Bj_energy;
1198 G4double c = wmax*(F2*wmax+F1*(2.+wmax))/(2.*(1.+wmax)*(1.+wmax));
1201 G4double proposed_ws = F1*F1*c*c + 2.*F2*c*randVal - 2.*F1*c*randVal;
1202 proposed_ws = -F1*c+2.*randVal+std::sqrt(proposed_ws);
1204 proposed_ws/= ( F1*c + F2*c - 2.*randVal );
1205 proposed_ws*=Bj_energy;
1207 return(proposed_ws);
1221 G4double r =
R(t, energyTransferred, slaterEffectiveChg, shellNumber);
1237 G4double r =
R(t, energyTransferred, slaterEffectiveChg, shellNumber);
1254 G4double r =
R(t, energyTransferred, slaterEffectiveChg, shellNumber);
1255 G4double value = 1. -
G4Exp(-2 * r) * (((( 2./3. * r + 4./3.) * r + 2.) * r + 2.) * r + 1.);
1273 G4double value = std::sqrt ( 2. * tElectron / H ) / ( energyTransferred / H ) * (slaterEffectiveChg/shellNumber);
1286 if (particleDefinition == instance->
GetIon(
"hydrogen") && shell < 4)
1290 return((0.6/(1+
G4Exp(value))) + 0.9);
1307 std::map< G4String,G4DNACrossSectionDataSet*,std::less<G4String> >::iterator
pos;
1327 value += valuesBuffer[i];
1338 if (valuesBuffer[i] > value)
1340 delete[] valuesBuffer;
1343 value -= valuesBuffer[i];
1346 if (valuesBuffer)
delete[] valuesBuffer;
1352 G4Exception(
"G4DNARuddIonisationExtendedModel::RandomSelect",
"em0002",
1373 std::map< G4String,G4double,std::less<G4String> >::iterator pos1;
1378 lowLim = pos1->second;
1381 std::map< G4String,G4double,std::less<G4String> >::iterator pos2;
1386 highLim = pos2->second;
1389 if (k >= lowLim && k <= highLim)
1391 std::map< G4String,G4DNACrossSectionDataSet*,std::less<G4String> >::iterator
pos;
1404 G4Exception(
"G4DNARuddIonisationExtendedModel::PartialCrossSection",
"em0002",