88     theIonEffChargeModel(0),
 
   89     theNuclearStoppingModel(0),
 
   90     theIonChuFluctuationModel(0),
 
   91     theIonYangFluctuationModel(0),
 
   92     protonTable(
"ICRU_R49p"),
 
   93     antiprotonTable(
"ICRU_R49p"),
 
   94     theNuclearTable(
"ICRU_R49"),
 
   97     theMeanFreePathTable(0),
 
   98     paramStepLimit (0.005),
 
   99     pixeCrossSectionHandler(0)
 
  106 void G4hImpactIonisation::InitializeMe()
 
  112   protonLowEnergy      = 1.*
keV ;
 
  113   protonHighEnergy     = 100.*
MeV ;
 
  114   antiprotonLowEnergy  = 25.*
keV ;
 
  115   antiprotonHighEnergy = 2.*
MeV ;
 
  116   minGammaEnergy       = 100 * 
eV;
 
  117   minElectronEnergy    = 250.* 
eV;
 
  123   eMaxPixe = 200. * 
MeV;
 
  125   G4String defaultPixeModel(
"ecpssr"); 
 
  126   modelK = defaultPixeModel;
 
  127   modelL = defaultPixeModel;
 
  128   modelM = defaultPixeModel;
 
  134   if (theMeanFreePathTable) 
 
  137       delete theMeanFreePathTable;
 
  140   if (betheBlochModel) 
delete betheBlochModel;
 
  141   if (protonModel) 
delete protonModel;
 
  142   if (antiprotonModel) 
delete antiprotonModel;
 
  143   if (theNuclearStoppingModel) 
delete theNuclearStoppingModel;
 
  144   if (theIonEffChargeModel) 
delete theIonEffChargeModel;
 
  145   if (theIonChuFluctuationModel) 
delete theIonChuFluctuationModel;
 
  146   if (theIonYangFluctuationModel) 
delete theIonYangFluctuationModel;
 
  148   delete pixeCrossSectionHandler;
 
  164       SetProtonElectronicStoppingPowerModel(dedxTable) ;
 
  169       SetAntiProtonElectronicStoppingPowerModel(dedxTable) ;
 
  175 void G4hImpactIonisation::InitializeParametrisation() 
 
  199       G4cout << 
"G4hImpactIonisation::BuildPhysicsTable for " 
  210       G4cout << 
" 0: " << (*pv)[0]->GetProcessName() << 
" " << (*pv)[0]
 
  211          << 
" 1: " << (*pv)[1]->GetProcessName() << 
" " << (*pv)[1]
 
  214       G4cout << 
"ionModel= " << theIonEffChargeModel
 
  215          << 
" MFPtable= " << theMeanFreePathTable
 
  216          << 
" iniMass= " << initialMass
 
  242   InitializeParametrisation() ;
 
  247   chargeSquare = charge*charge ;
 
  256   for (
size_t j=0; j<numOfCouples; j++) {
 
  269     cutForDelta.push_back(tCut);
 
  274     tCut = 
std::max(tCut,minGammaEnergy);
 
  275     cutForGamma.push_back(tCut);
 
  285         BuildLossTable(*proton) ;
 
  296       BuildLossTable(*antiproton) ;
 
  308     G4cout << 
"G4hImpactIonisation::BuildPhysicsTable: " 
  309            << 
"Loss table is built " 
  314   BuildLambdaTable(particleDef) ;
 
  322     G4cout << 
"G4hImpactIonisation::BuildPhysicsTable: " 
  323            << 
"DEDX table will be built " 
  338     G4cout << 
"G4hImpactIonisation::BuildPhysicsTable: end for " 
  351   G4double lowEdgeEnergy , ionloss, ionlossBB, paramB ;
 
  356   if (particleDef == *proton) 
 
  359       highEnergy = protonHighEnergy ;
 
  365       highEnergy = antiprotonHighEnergy ;
 
  383   for (
size_t j=0; j<numOfCouples; j++) {
 
  394     if ( charge > 0.0 ) {
 
  395       ionloss = ProtonParametrisedDEDX(couple,highEnergy) ;
 
  397       ionloss = AntiProtonParametrisedDEDX(couple,highEnergy) ;
 
  400     ionlossBB = betheBlochModel->
TheValue(&particleDef,material,highEnergy) ;
 
  404     paramB =  ionloss/ionlossBB - 1.0 ;
 
  411       if ( lowEdgeEnergy < highEnergy ) {
 
  413         if ( charge > 0.0 ) {
 
  414           ionloss = ProtonParametrisedDEDX(couple,lowEdgeEnergy) ;
 
  416           ionloss = AntiProtonParametrisedDEDX(couple,lowEdgeEnergy) ;
 
  422         ionloss = betheBlochModel->
TheValue(proton,material,
 
  427     ionloss *= (1.0 + paramB*highEnergy/lowEdgeEnergy) ;
 
  432         G4cout << 
"E(MeV)= " << lowEdgeEnergy/
MeV 
  433                << 
"  dE/dx(MeV/mm)= " << ionloss*
mm/
MeV 
  453     G4cout << 
"G4hImpactIonisation::BuildLambdaTable for " 
  460   chargeSquare = charge*charge ;
 
  468   if (theMeanFreePathTable) {
 
  470     delete theMeanFreePathTable;
 
  477   for (
size_t j=0 ; j < numOfCouples; j++) {
 
  504       for (
G4int iel=0; iel<numberOfElements; iel++ ) 
 
  506       Z = (
G4int) (*theElementVector)[iel]->GetZ();
 
  509       G4double microCross = MicroscopicCrossSection( particleDef,
 
  514       sigma += theAtomicNumDensityVector[iel] * microCross ; 
 
  519       value = sigma<=0 ? 
DBL_MAX : 1./sigma ;
 
  524     theMeanFreePathTable->
insert(aVector);
 
  547   G4double particleMass = initialMass;
 
  551   G4double gamma = energy / particleMass;
 
  552   G4double beta2 = 1. - 1. / (gamma * gamma);
 
  558   if ( tMax > deltaCutInEnergy ) 
 
  560       var = deltaCutInEnergy / tMax;
 
  561       totalCrossSection = (1. - var * (1. - beta2 * std::log(var))) / deltaCutInEnergy ;
 
  568       totalCrossSection +=  0.5 * (tMax - deltaCutInEnergy) / (
energy*
energy);
 
  571       else if (spin > 0.9 )
 
  573       totalCrossSection += -std::log(var) / 
 
  574         (3. * deltaCutInEnergy) + (tMax - deltaCutInEnergy) * ( (5. + 1. /var)*0.25 / (
energy*
energy) -
 
  575                                     beta2 / (tMax * deltaCutInEnergy) ) / 3. ;
 
  583   return totalCrossSection ;
 
  599   G4bool isOutRange = 
false;
 
  605   chargeSquare = theIonEffChargeModel->
TheValue(dynamicParticle, material);
 
  614       meanFreePath = (((*theMeanFreePathTable)(couple->
GetIndex()))->
 
  615               GetValue(kineticEnergy,isOutRange))/chargeSquare;
 
  618   return meanFreePath ;
 
  642   G4double tScaled = kineticEnergy*massRatio ;
 
  647       highEnergy = protonHighEnergy ;
 
  654       if (theBarkas && tScaled > highEnergy) 
 
  656       fBarkas = BarkasTerm(material,tScaled)*std::sqrt(chargeSquare)*chargeSquare
 
  657         + BlochTerm(material,tScaled,chargeSquare);
 
  663       highEnergy = antiprotonHighEnergy ;
 
  668       if (theBarkas && tScaled > highEnergy) 
 
  670       fBarkas = -BarkasTerm(material,tScaled)*std::sqrt(chargeSquare)*chargeSquare
 
  671         + BlochTerm(material,tScaled,chargeSquare);
 
  686   fRangeNow /= (chargeSquare*massRatio) ;
 
  687   dx        /= (chargeSquare*massRatio) ;
 
  689   stepLimit  = fRangeNow ;
 
  696       if (stepLimit > fRangeNow) stepLimit = fRangeNow;
 
  699   if(tScaled > highEnergy ) 
 
  704       if(stepLimit > fRangeNow - dx*0.9) stepLimit = fRangeNow - dx*0.9 ;
 
  711       if (stepLimit > x) stepLimit = 
x;
 
  738   G4double tScaled = kineticEnergy * massRatio ;
 
  746       eLoss = kineticEnergy ;
 
  752       eLoss = stepLength * fdEdx ;
 
  755   else if (stepLength >= fRangeNow ) 
 
  757       eLoss = kineticEnergy ;
 
  766       G4double rScaled = fRangeNow * massRatio * chargeSquare ;
 
  767       G4double sScaled = stepLength * massRatio * chargeSquare ;
 
  784       eLoss += fBarkas * stepLength;
 
  790       eLoss = stepLength *fdEdx  ;
 
  792       if (nStopping && tScaled < protonHighEnergy) 
 
  794       nLoss = (theNuclearStoppingModel->
TheValue(particle, material)) * stepLength;
 
  798   if (eLoss < 0.0) eLoss = 0.0;
 
  800   finalT = kineticEnergy - eLoss - nLoss;
 
  806       eLoss = ElectronicLossFluctuation(particle, couple, eLoss, stepLength) ;
 
  807       if (eLoss < 0.0) eLoss = 0.0;
 
  808       finalT = kineticEnergy - eLoss - nLoss;
 
  823   eLoss = kineticEnergy-finalT;
 
  840   if(kineticEnergy < protonLowEnergy) {
 
  841     eLoss = (protonModel->
TheValue(proton, material, protonLowEnergy))
 
  842       * std::sqrt(kineticEnergy/protonLowEnergy) ;
 
  846     eLoss = protonModel->
TheValue(proton, material, kineticEnergy) ;
 
  853     G4cout << 
"p E(MeV)= " << kineticEnergy/
MeV 
  854            << 
" dE/dx(MeV/mm)= " << eLoss*
mm/
MeV 
  855            << 
" for " << material->
GetName()
 
  856            << 
" model: " << protonModel << 
G4endl;
 
  859   if(eLoss < 0.0) eLoss = 0.0 ;
 
  875   if(antiprotonModel->
IsInCharge(antiproton,material)) {
 
  876     if(kineticEnergy < antiprotonLowEnergy) {
 
  877       eLoss = antiprotonModel->
TheValue(antiproton,material,antiprotonLowEnergy)
 
  878     * std::sqrt(kineticEnergy/antiprotonLowEnergy) ;
 
  882       eLoss = antiprotonModel->
TheValue(antiproton,material,
 
  888     if(kineticEnergy < protonLowEnergy) {
 
  890     * std::sqrt(kineticEnergy/protonLowEnergy) ;
 
  904     G4cout << 
"pbar E(MeV)= " << kineticEnergy/
MeV 
  905            << 
" dE/dx(MeV/mm)= " << eLoss*
mm/
MeV 
  906            << 
" for " << material->
GetName()
 
  907            << 
" model: " << protonModel << 
G4endl;
 
  910   if(eLoss < 0.0) eLoss = 0.0 ;
 
  926   G4double excitationEnergy = material->GetIonisation()->GetMeanExcitationEnergy();
 
  928   G4double tau = kineticEnergy / particleMass ;
 
  935   G4double beta2 = bg2/(gamma*gamma) ;
 
  941   if ( deltaCut < tMax) 
 
  944       dLoss = ( beta2 * (x-1.) - std::log(
x) ) * 
twopi_mc2_rcl2 * electronDensity / beta2 ;
 
  968   G4double totalEnergy = kineticEnergy + mass ;
 
  969   G4double pSquare = kineticEnergy *( totalEnergy + mass) ;
 
  970   G4double eSquare = totalEnergy * totalEnergy;
 
  971   G4double betaSquare = pSquare / eSquare;
 
  974   G4double gamma = kineticEnergy / mass + 1.;
 
  982   if (deltaCut >= tMax)
 
  999     gRej = 1.0 - betaSquare * 
x ;
 
 1001     else if (0.5 == spin) 
 
 1003     gRej = (1. - betaSquare * x + 0.5 * x*x * rate) / (1. + 0.5 * rate) ;
 
 1007     gRej = (1. - betaSquare * 
x ) * (1. + x/(3.*xc)) +
 
 1008       x*x * rate * (1. + 0.5*x/xc) / 3.0 /
 
 1009       (1. + 1./(3.*xc) + rate *(1.+ 0.5/xc) / 3.);
 
 1014   G4double deltaKineticEnergy = x * tMax;
 
 1015   G4double deltaTotalMomentum = std::sqrt(deltaKineticEnergy * 
 
 1017   G4double totalMomentum = std::sqrt(pSquare) ;
 
 1021   if ( cosTheta < -1. ) cosTheta = -1.;
 
 1022   if ( cosTheta > 1. ) cosTheta = 1.;
 
 1026   G4double sinTheta = std::sqrt(1. - cosTheta*cosTheta);
 
 1027   G4double dirX = sinTheta * std::cos(phi);
 
 1028   G4double dirY = sinTheta * std::sin(phi);
 
 1032   deltaDirection.
rotateUz(particleDirection);
 
 1039                  deltaDirection.
z());
 
 1043   G4double finalKineticEnergy = kineticEnergy - deltaKineticEnergy;
 
 1044   size_t totalNumber = 1;
 
 1050   size_t nSecondaries = 0;
 
 1051   std::vector<G4DynamicParticle*>* secondaryVector = 0;
 
 1058       if (pixeCrossSectionHandler == 0)
 
 1063       pixeCrossSectionHandler = 
 
 1112       if (finalKineticEnergy >= bindingEnergy)
 
 1128       if (secondaryVector != 0) 
 
 1130           nSecondaries = secondaryVector->size();
 
 1131           for (
size_t i = 0; i<nSecondaries; i++) 
 
 1149               if (e < finalKineticEnergy &&
 
 1154               finalKineticEnergy -= e;
 
 1181               (*secondaryVector)[i] = 0;
 
 1196       G4double finalPx = totalMomentum*particleDirection.
x() - deltaTotalMomentum*deltaDirection.
x();
 
 1197       G4double finalPy = totalMomentum*particleDirection.
y() - deltaTotalMomentum*deltaDirection.
y();
 
 1198       G4double finalPz = totalMomentum*particleDirection.
z() - deltaTotalMomentum*deltaDirection.
z();
 
 1199       G4double finalMomentum = std::sqrt(finalPx*finalPx + finalPy*finalPy + finalPz*finalPz) ;
 
 1200       finalPx /= finalMomentum;
 
 1201       finalPy /= finalMomentum;
 
 1202       finalPz /= finalMomentum;
 
 1208       eDeposit = finalKineticEnergy;
 
 1209       finalKineticEnergy = 0.;
 
 1211                            particleDirection.
y(),
 
 1212                            particleDirection.
z());
 
 1214      GetAtRestProcessVector()->size())
 
 1237   if (secondaryVector != 0) 
 
 1239       for (
size_t l = 0; l < nSecondaries; l++) 
 
 1258       delete secondaryVector;
 
 1280       if (tScaled > protonHighEnergy) 
 
 1286       dedx = ProtonParametrisedDEDX(couple,tScaled) ;
 
 1291       if (tScaled > antiprotonHighEnergy) 
 
 1297       dedx = AntiProtonParametrisedDEDX(couple,tScaled) ;
 
 1300   dedx *= theIonEffChargeModel->
TheValue(aParticle, material, kineticEnergy) ;
 
 1366   if(0.5*
MeV > kinE) kinE = 0.5*
MeV ;
 
 1368   G4double beta2 = 1.0 - 1.0/(gamma*gamma) ;
 
 1369   if(0.0 >= beta2) 
return 0.0;
 
 1374   const G4ElementVector* theElementVector = material->GetElementVector();
 
 1375   G4int numberOfElements = material->GetNumberOfElements();
 
 1377   for (
G4int i = 0; i<numberOfElements; i++) {
 
 1380     ZMaterial = (*theElementVector)[i]->GetZ();
 
 1382     G4double X = 137.0 * 137.0 * beta2 / ZMaterial;
 
 1386     G4double EtaChi = Eta0Chi * ( 1.0 + 6.02*std::pow( ZMaterial,-1.19 ) );
 
 1387     G4double W = ( EtaChi * std::pow( ZMaterial,1.0/6.0 ) ) / std::sqrt(X);
 
 1388     G4double FunctionOfW = FTable[46][1]*FTable[46][0]/W ;
 
 1390     for(
G4int j=0; j<47; j++) {
 
 1392       if( W < FTable[j][0] ) {
 
 1395           FunctionOfW = FTable[0][1] ;
 
 1398           FunctionOfW = (FTable[j][1] - FTable[j-1][1]) * (W - FTable[j-1][0])
 
 1399         / (FTable[j][0] - FTable[j-1][0])
 
 1408     BTerm += FunctionOfW /( std::sqrt(ZMaterial * X) * X);
 
 1411   BTerm *= 
twopi_mc2_rcl2 * (material->GetElectronDensity()) / beta2 ;
 
 1430   G4double beta2 = 1.0 - 1.0/(gamma*gamma) ;
 
 1431   G4double y = cSquare / (137.0*137.0*beta2) ;
 
 1437     eLoss = 1.0 / (1.0 + y) ;
 
 1440     for(
G4int i=2; de>eLoss*0.01; i++) {
 
 1441       de = 1.0/( i * (i*i + y)) ;
 
 1446     (material->GetElectronDensity()) / beta2 ;
 
 1453 G4double G4hImpactIonisation::ElectronicLossFluctuation(
 
 1468   static const G4double kappa = 10. ;
 
 1480   G4double deltaCutInKineticEnergyNow = cutForDelta[imaterial];
 
 1483   if(meanLoss < minLoss) 
return meanLoss ;
 
 1496   if(tMax > threshold) tMax = threshold;
 
 1500   if(meanLoss > kappa*tMax || tMax < kappa*ipotFluct )
 
 1503     * electronDensity / beta2 ;
 
 1506       if( beta2 > 3.0*theBohrBeta2*zeff || charge < 0.0) {
 
 1507     siga = std::sqrt( siga * chargeSquare ) ;
 
 1512     G4double chu = theIonChuFluctuationModel->TheValue(particle, material);
 
 1513     G4double yang = theIonYangFluctuationModel->TheValue(particle, material);
 
 1514     siga = std::sqrt( siga * (chargeSquare * chu + yang)) ;
 
 1519       } 
while (loss < 0. || loss > 2.0*meanLoss);
 
 1524   static const G4double probLim = 0.01 ;
 
 1525   static const G4double sumaLim = -std::log(probLim) ;
 
 1532   G4double corrfac, na,alfa,rfac,namean,sa,alfa1,ea,sea;
 
 1544   w1 = tMax/ipotFluct;
 
 1547   C = meanLoss*(1.-rateFluct)/(w2-ipotLogFluct-beta2);
 
 1549   a1 = C*f1Fluct*(w2-e1LogFluct-beta2)/e1Fluct;
 
 1550   a2 = C*f2Fluct*(w2-e2LogFluct-beta2)/e2Fluct;
 
 1551   a3 = rateFluct*meanLoss*(tMax-ipotFluct)/(ipotFluct*tMax*std::log(w1));
 
 1552   if(a1 < 0.0) a1 = 0.0;
 
 1553   if(a2 < 0.0) a2 = 0.0;
 
 1554   if(a3 < 0.0) a3 = 0.0;
 
 1565       if(tMax == ipotFluct)
 
 1571           siga=std::sqrt(a3) ;
 
 1585       tMax = tMax-ipotFluct+e0 ;
 
 1586       a3 = meanLoss*(tMax-e0)/(tMax*e0*std::log(tMax/e0));
 
 1590           siga=std::sqrt(a3) ;
 
 1598           w = (tMax-e0)/tMax ;
 
 1602           corrfac = dp3/
G4float(nmaxCont2) ;
 
 1609           loss *= e0*corrfac ;
 
 1619       siga=std::sqrt(a1) ;
 
 1628       siga=std::sqrt(a2) ;
 
 1634       loss = p1*e1Fluct+p2*e2Fluct;
 
 1647           siga=std::sqrt(a3) ;
 
 1661           rfac       = dp3/(
G4float(nmaxCont2)+dp3);
 
 1667               alfa   = w1*
G4float(nmaxCont2+p3)/
 
 1669               alfa1  = alfa*std::log(alfa)/(alfa-1.);
 
 1670               ea     = na*ipotFluct*alfa1;
 
 1671               sea    = ipotFluct*std::sqrt(na*(alfa-alfa1*alfa1));
 
 1679           w2 = alfa*ipotFluct;
 
 1695   minGammaEnergy = cut;
 
 1702   minElectronEnergy = cut;
 
 1716   G4String comments = 
"  Knock-on electron cross sections . ";
 
 1717   comments += 
"\n        Good description above the mean excitation energy.\n";
 
 1718   comments += 
"        Delta ray energy sampled from  differential Xsection.";
 
 1723          << 
" in " << TotBin << 
" bins." 
 1724      << 
"\n        Electronic stopping power model is  " 
 1726          << 
"\n        from " << protonLowEnergy / 
keV << 
" keV " 
 1727          << 
" to " << protonHighEnergy / 
MeV << 
" MeV " << 
"." << 
G4endl ;
 
 1728   G4cout << 
"\n        Parametrisation model for antiprotons is  " 
 1730          << 
"\n        from " << antiprotonLowEnergy / 
keV << 
" keV " 
 1731          << 
" to " << antiprotonHighEnergy / 
MeV << 
" MeV " << 
"." << 
G4endl ;
 
 1733     G4cout << 
"        Parametrization of the Barkas effect is switched on." 
 1737     G4cout << 
"        Nuclear stopping power model is " << theNuclearTable
 
 1749   for (
size_t j=0 ; j < numOfCouples; j++) {
 
 1756     if(excitationEnergy > deltaCutNow) {
 
 1760         G4cout << 
"           material       min.delta energy(keV) " << 
G4endl;
 
 1765          << std::setw(15) << excitationEnergy/
keV << 
G4endl;
 
G4double condition(const G4ErrorSymMatrix &m)
 
G4ParticleDefinition * GetDefinition() const 
 
void BuildPhysicsTable(const G4ParticleDefinition &aParticleType)
 
ThreeVector shoot(const G4int Ap, const G4int Af)
 
G4IonisParamMat * GetIonisation() const 
 
static G4ThreadLocal G4PhysicsTable * theProperTimepTable
 
static G4ThreadLocal G4double LowestKineticEnergy
 
G4long G4Poisson(G4double mean)
 
static G4ThreadLocal G4PhysicsTable * theLabTimepTable
 
const std::vector< G4double > * GetEnergyCutsVector(size_t pcIdx) const 
 
static constexpr double mm
 
std::vector< G4Element * > G4ElementVector
 
void insert(G4PhysicsVector *)
 
G4double GetKineticEnergy() const 
 
void ActivateAugerElectronProduction(G4bool val)
 
G4double GetStepLength() const 
 
const G4DynamicParticle * GetDynamicParticle() const 
 
G4double GetEnergy2fluct() const 
 
G4double GetProductionCut(G4int index) const 
 
const G4String & GetName() const 
 
static G4Proton * ProtonDefinition()
 
const G4MaterialCutsCouple * GetMaterialCutsCouple() const 
 
G4double GetLogEnergy2fluct() const 
 
void SetMomentumDirection(const G4ThreeVector &aDirection)
 
G4ParticleDefinition * GetDefinition() const 
 
static G4ThreadLocal G4PhysicsTable ** RecorderOfpbarProcess
 
G4double BindingEnergy() const 
 
G4double GetLogMeanExcEnergy() const 
 
G4hImpactIonisation(const G4String &processName="hImpactIoni")
 
const G4String & GetParticleSubType() const 
 
static G4ThreadLocal G4double finalRange
 
G4double GetLowEdgeEnergy(size_t binNumber) const 
 
const G4ElementVector * GetElementVector() const 
 
const G4String & GetParticleName() const 
 
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
 
static constexpr double twopi
 
virtual G4bool IsInCharge(const G4DynamicParticle *particle, const G4Material *material) const =0
 
static constexpr double TeV
 
static G4ThreadLocal G4int TotBin
 
G4double GetEnergy0fluct() const 
 
G4double MinKineticEnergy
 
static G4ThreadLocal G4PhysicsTable ** RecorderOfpProcess
 
G4ProcessVector * GetAtRestProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const 
 
void SetCutForSecondaryPhotons(G4double cut)
 
G4GLOB_DLL std::ostream G4cout
 
const XML_Char int const XML_Char * value
 
size_t GetTableSize() const 
 
static G4ThreadLocal G4PhysicsTable * theRangepTable
 
G4double GetElectronDensity() const 
 
static G4AntiProton * AntiProton()
 
void SetCutForAugerElectrons(G4double cut)
 
const G4ThreeVector & GetMomentumDirection() const 
 
virtual G4double HighEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const =0
 
Hep3Vector & rotateUz(const Hep3Vector &)
 
G4double GetCharge() const 
 
static constexpr double eplus
 
void PutValue(size_t index, G4double theValue)
 
void SetElectronicStoppingPowerModel(const G4ParticleDefinition *aParticle, const G4String &dedxTable)
 
static G4Proton * Proton()
 
static constexpr double eV
 
G4int SelectRandomAtom(const G4Material *material, G4double e) const 
 
const G4String & GetParticleType() const 
 
static G4ThreadLocal G4double dRoverRange
 
void ActivateAugerElectronProduction(G4bool val)
 
void LoadShellData(const G4String &dataFile)
 
static G4ThreadLocal G4int CounterOfpProcess
 
const G4String & GetProcessName() const 
 
const G4double * GetAtomicNumDensityVector() const 
 
void SetKineticEnergy(G4double aEnergy)
 
static void BuildDEDXTable(const G4ParticleDefinition &aParticleType)
 
static G4ThreadLocal G4double HighestKineticEnergy
 
G4double GetTotNbOfAtomsPerVolume() const 
 
virtual void Initialize(const G4Track &)
 
static G4ProductionCutsTable * GetProductionCutsTable()
 
static G4ThreadLocal G4int CounterOfpbarProcess
 
G4int SelectRandomShell(G4int Z, G4double e) const 
 
G4double GetLogEnergy1fluct() const 
 
G4double GetRateionexcfluct() const 
 
G4double GetPDGMass() const 
 
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const 
 
T max(const T t1, const T t2)
brief Return the largest of the two arguments 
 
G4ProcessManager * GetProcessManager() const 
 
G4double energy(const ThreeVector &p, const G4double m)
 
void SetNumberOfSecondaries(G4int totSecondaries)
 
G4bool CutsWhereModified()
 
static G4ThreadLocal G4bool EnlossFlucFlag
 
void ProposeEnergy(G4double finalEnergy)
 
G4ParticleChange aParticleChange
 
T min(const T t1, const T t2)
brief Return the smallest of the two arguments 
 
static constexpr double GeV
 
void AddSecondary(G4Track *aSecondary)
 
virtual G4double TheValue(const G4DynamicParticle *particle, const G4Material *material)=0
 
G4double GetPDGSpin() const 
 
G4double GetMeanExcitationEnergy() const 
 
G4PhysicsTable * theLossTable
 
static G4Electron * Electron()
 
static constexpr double MeV
 
G4double GetF2fluct() const 
 
size_t GetNumberOfElements() const 
 
std::vector< G4DynamicParticle * > * GenerateParticles(G4int Z, G4int shellId)
 
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
 
static G4double GetDEDX(const G4ParticleDefinition *aParticle, G4double KineticEnergy, const G4Material *aMaterial)
 
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
 
void ProposeTrackStatus(G4TrackStatus status)
 
static void Register(const G4ParticleDefinition *p, const G4PhysicsTable *tDEDX, const G4PhysicsTable *tRange, const G4PhysicsTable *tInverseRange, const G4PhysicsTable *tLabTime, const G4PhysicsTable *tProperTime, G4double lowestKineticEnergy, G4double highestKineticEnergy, G4double massRatio, G4int NumberOfBins)
 
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
 
G4double GetMeanFreePath(const G4Track &track, G4double previousStepSize, enum G4ForceCondition *condition)
 
G4double GetPDGCharge() const 
 
static G4double GetPreciseEnergyFromRange(const G4ParticleDefinition *aParticle, G4double range, const G4Material *aMaterial)
 
G4double bindingEnergy(G4int A, G4int Z)
 
static G4ThreadLocal G4PhysicsTable * theInverseRangepTable
 
static G4AtomicTransitionManager * Instance()
 
G4ProductionCuts * GetProductionCuts() const 
 
G4double ComputeDEDX(const G4ParticleDefinition *aParticle, const G4MaterialCutsCouple *couple, G4double kineticEnergy)
 
static constexpr double keV
 
G4VParticleChange * PostStepDoIt(const G4Track &track, const G4Step &Step)
 
G4AtomicShell * Shell(G4int Z, size_t shellIndex) const 
 
static G4double GetRange(const G4ParticleDefinition *aParticle, G4double KineticEnergy, const G4Material *aMaterial)
 
G4VParticleChange * AlongStepDoIt(const G4Track &trackData, const G4Step &stepData)
 
G4double GetF1fluct() const 
 
static G4ThreadLocal G4PhysicsTable * theDEDXpTable
 
G4ProcessVector * GetProcessList() const 
 
const G4Material * GetMaterial() const 
 
G4double GetEnergy1fluct() const 
 
void PrintInfoDefinition() const