79   G4Exception(
"G4RDVeLowEnergyLoss::G4RDVeLowEnergyLoss()", 
"InvalidCall",
 
  140      delete theRangeTable; }
 
  145    for (
G4int J=0;  J<numOfCouples; J++)
 
  149                               highestKineticEnergy,TotBin);
 
  150      BuildRangeVector(theDEDXTable,lowestKineticEnergy,highestKineticEnergy,
 
  152      theRangeTable->
insert(aVector);
 
  154    return theRangeTable ;
 
  159 void G4RDVeLowEnergyLoss::BuildRangeVector(
G4PhysicsTable* theDEDXTable,
 
  170   G4double energy1 = lowestKineticEnergy;
 
  177   for (
G4int j=1; j<TotBin; j++) {
 
  180     G4double de = (energy2 - energy1) * del ;
 
  183     for (
G4int i=1; i<
n; i++) {
 
  186       range  += 0.5*de*(1.0/dedx1 + 1.0/dedx2);
 
  201   G4double dtau,Value,taui,ti,lossi,ci;
 
  206   for (
G4int i=0; i<=nbin; i++)
 
  210     lossi = physicsVector->
GetValue(ti,isOut);
 
  232   G4double ltt,dltau,Value,ui,taui,ti,lossi,ci;
 
  238   for (
G4int i=0; i<=nbin; i++)
 
  240     ui = ltaulow+dltau*i;
 
  243     lossi = physicsVector->
GetValue(ti,isOut);
 
  253     Value += ci*taui/lossi;
 
  273     delete theLabTimeTable; }
 
  277   for (
G4int J=0;  J<numOfCouples; J++)
 
  282                             highestKineticEnergy,TotBin);
 
  284     BuildLabTimeVector(theDEDXTable,
 
  285               lowestKineticEnergy,highestKineticEnergy,TotBin,J,aVector);
 
  286     theLabTimeTable->
insert(aVector);
 
  290   return theLabTimeTable ;
 
  304   if(theProperTimeTable)
 
  306     delete theProperTimeTable; }
 
  310   for (
G4int J=0;  J<numOfCouples; J++)
 
  315                             highestKineticEnergy,TotBin);
 
  317     BuildProperTimeVector(theDEDXTable,
 
  318               lowestKineticEnergy,highestKineticEnergy,TotBin,J,aVector);
 
  319     theProperTimeTable->
insert(aVector);
 
  323   return theProperTimeTable ;
 
  328 void G4RDVeLowEnergyLoss::BuildLabTimeVector(
G4PhysicsTable* theDEDXTable,
 
  338   G4double tlim=5.*
keV,parlowen=0.4,ppar=0.5-parlowen ;
 
  339   G4double losslim,clim,taulim,timelim,
 
  340            LowEdgeEnergy,tau,Value ;
 
  345   losslim = physicsVector->
GetValue(tlim,isOut);
 
  359       Value = clim*std::exp(ppar*std::log(tau/taulim)) ;
 
  364       ltaulow = std::log(taulim);
 
  366       Value = timelim+LabTimeIntLog(physicsVector,nbin);
 
  371   } 
while (tau<=taulim) ;
 
  373   for (
G4int j=i; j<TotBin; j++)
 
  377     ltaulow = std::log(tauold);
 
  379     Value = oldValue+LabTimeIntLog(physicsVector,nbin);
 
  388 void G4RDVeLowEnergyLoss::BuildProperTimeVector(
G4PhysicsTable* theDEDXTable,
 
  397   G4double tlim=5.*
keV,parlowen=0.4,ppar=0.5-parlowen ;
 
  398   G4double losslim,clim,taulim,timelim,
 
  399            LowEdgeEnergy,tau,Value ;
 
  405   losslim = physicsVector->
GetValue(tlim,isOut);
 
  419       Value = clim*std::exp(ppar*std::log(tau/taulim)) ;
 
  424       ltaulow = std::log(taulim);
 
  426       Value = timelim+ProperTimeIntLog(physicsVector,nbin);
 
  431   } 
while (tau<=taulim) ;
 
  433   for (
G4int j=i; j<TotBin; j++)
 
  437     ltaulow = std::log(tauold);
 
  439     Value = oldValue+ProperTimeIntLog(physicsVector,nbin);
 
  452   G4double ltt,dltau,Value,ui,taui,ti,lossi,ci;
 
  458   for (
G4int i=0; i<=nbin; i++)
 
  460     ui = ltaulow+dltau*i;
 
  463     lossi = physicsVector->
GetValue(ti,isOut);
 
  485   G4double ltt,dltau,Value,ui,taui,ti,lossi,ci;
 
  491   for (
G4int i=0; i<=nbin; i++)
 
  493     ui = ltaulow+dltau*i;
 
  496     lossi = physicsVector->
GetValue(ti,isOut);
 
  528     if(theInverseRangeTable)
 
  530       delete theInverseRangeTable; }
 
  534   for (
G4int i=0;  i<numOfCouples; i++)
 
  544     rhigh *= std::exp(std::log(rhigh/rlow)/((
G4double)(nbins-1)));
 
  556     for (
size_t j=1; j<nbins; j++) {
 
  560       for (ihigh=ilow+1; ihigh<nbins; ihigh++) {
 
  563         if(range2 >= range || ihigh == nbins-1) {
 
  571       G4double e = std::log(energy1) + std::log(energy2/energy1)*std::log(range/range1)/std::log(range2/range1);
 
  575     theInverseRangeTable->
insert(v);
 
  578   return theInverseRangeTable ;
 
  583 void G4RDVeLowEnergyLoss::InvertRangeVector(
G4PhysicsTable* theRangeTable,
 
  593   G4double RTable = std::exp(std::log(highestKineticEnergy/lowestKineticEnergy)/TotBin) ;
 
  594   G4double Tbin = lowestKineticEnergy/RTable ;
 
  596   G4int binnumber = -1 ;
 
  600   for( 
G4int i=0; i<TotBin; i++)
 
  603     if( rangebin < LowEdgeRange )
 
  609         rangebin = (*theRangeTable)(materialIndex)->GetValue(Tbin,isOut) ;
 
  611       while ((rangebin < LowEdgeRange) && (binnumber < TotBin )) ;
 
  615       KineticEnergy = lowestKineticEnergy ;
 
  616     else if(binnumber == TotBin-1)
 
  617       KineticEnergy = highestKineticEnergy ;
 
  620       A = (*(*theRangeCoeffATable)(materialIndex))(binnumber-1) ;
 
  621       B = (*(*theRangeCoeffBTable)(materialIndex))(binnumber-1) ;
 
  622       C = (*(*theRangeCoeffCTable)(materialIndex))(binnumber-1) ;
 
  624          KineticEnergy = (LowEdgeRange -
C )/B ;
 
  627          discr = B*B - 4.*A*(C-LowEdgeRange);
 
  628          discr = discr>0. ? std::sqrt(discr) : 0.;
 
  629          KineticEnergy = 0.5*(discr-
B)/A ;
 
  633     aVector->
PutValue(i,KineticEnergy) ;
 
  649   if(theRangeCoeffATable)
 
  651     delete theRangeCoeffATable; }
 
  654   G4double RTable = std::exp(std::log(highestKineticEnergy/lowestKineticEnergy)/TotBin) ;
 
  657   G4double w = R1*(RTable-1.)*(RTable-1.);
 
  658   G4double w1 = RTable/w , w2 = -RTable*R1/w , w3 = R2/w ;
 
  659   G4double Ti , Tim , Tip , Ri , Rim , Rip , Value ;
 
  663   for (
G4int J=0; J<numOfCouples; J++)
 
  665     G4int binmax=TotBin ;
 
  668     Ti = lowestKineticEnergy ;
 
  671     for ( 
G4int i=0; i<TotBin; i++)
 
  673       Ri = rangeVector->
GetValue(Ti,isOut) ;
 
  679         Rim = rangeVector->
GetValue(Tim,isOut);
 
  686         Rip = rangeVector->
GetValue(Tip,isOut);
 
  688       Value = (w1*Rip + w2*Ri + w3*Rim)/(Ti*Ti) ;
 
  694     theRangeCoeffATable->
insert(aVector);
 
  696   return theRangeCoeffATable ;
 
  711   if(theRangeCoeffBTable)
 
  713     delete theRangeCoeffBTable; }
 
  716   G4double RTable = std::exp(std::log(highestKineticEnergy/lowestKineticEnergy)/TotBin) ;
 
  719   G4double w = R1*(RTable-1.)*(RTable-1.);
 
  720   G4double w1 = -R1/w , w2 = R1*(R2+1.)/w , w3 = -R2*R1/w ;
 
  721   G4double Ti , Tim , Tip , Ri , Rim , Rip , Value ;
 
  725   for (
G4int J=0; J<numOfCouples; J++)
 
  727     G4int binmax=TotBin ;
 
  730     Ti = lowestKineticEnergy ;
 
  733     for ( 
G4int i=0; i<TotBin; i++)
 
  735       Ri = rangeVector->
GetValue(Ti,isOut) ;
 
  741         Rim = rangeVector->
GetValue(Tim,isOut);
 
  748         Rip = rangeVector->
GetValue(Tip,isOut);
 
  750       Value = (w1*Rip + w2*Ri + w3*Rim)/Ti;
 
  755     theRangeCoeffBTable->
insert(aVector);
 
  757   return theRangeCoeffBTable ;
 
  772   if(theRangeCoeffCTable)
 
  774     delete theRangeCoeffCTable; }
 
  777   G4double RTable = std::exp(std::log(highestKineticEnergy/lowestKineticEnergy)/TotBin) ;
 
  780   G4double w = R1*(RTable-1.)*(RTable-1.);
 
  781   G4double w1 = 1./w , w2 = -RTable*R1/w , w3 = RTable*R2/w ;
 
  782   G4double Ti , Tim , Tip , Ri , Rim , Rip , Value ;
 
  786   for (
G4int J=0; J<numOfCouples; J++)
 
  788     G4int binmax=TotBin ;
 
  791     Ti = lowestKineticEnergy ;
 
  794     for ( 
G4int i=0; i<TotBin; i++)
 
  796       Ri = rangeVector->
GetValue(Ti,isOut) ;
 
  802         Rim = rangeVector->
GetValue(Tim,isOut);
 
  809         Rip = rangeVector->
GetValue(Tip,isOut);
 
  811       Value = w1*Rip + w2*Ri + w3*Rim ;
 
  816     theRangeCoeffCTable->
insert(aVector);
 
  818   return theRangeCoeffCTable ;
 
  831    static const G4double probLim = 0.01 ;
 
  832    static const G4double sumaLim = -std::log(probLim) ;
 
  855            beta2,suma,e0,loss,lossc,w;
 
  859   G4double Corrfac, na,alfa,rfac,namean,sa,alfa1,ea,sea;
 
  865   if(MeanLoss < minLoss) 
return MeanLoss ;
 
  873                 ->GetEnergyCutsVector(1)))[
imat];
 
  880   if(Tm > threshold) Tm = threshold;
 
  881   beta2 = tau2/(tau1*tau1);
 
  884   if(MeanLoss >= kappa*Tm || MeanLoss <= kappa*
ipotFluct)
 
  887     siga = std::sqrt(Tm*(1.0-0.5*beta2)*step*
 
  888                 factor*electronDensity/beta2) ;
 
  891     } 
while (loss < 0. || loss > 2.0*MeanLoss);
 
  932       Tm = Tm-ipotFluct+e0 ;
 
  943           a3 = MeanLoss*(Tm-e0)/(Tm*e0*std::log(Tm/e0));
 
 1011           siga=std::sqrt(a3) ;
 
 1032               alfa1  = alfa*std::log(alfa)/(alfa-1.);
 
 1033               ea     = na*ipotFluct*alfa1;
 
 1034               sea    = ipotFluct*std::sqrt(na*(alfa-alfa1*alfa1));
 
ThreeVector shoot(const G4int Ap, const G4int Af)
 
G4IonisParamMat * GetIonisation() const 
 
static c2_factory< G4double > c2
 
G4long G4Poisson(G4double mean)
 
static G4double finalRange
 
G4double GetValue(G4double theEnergy, G4bool &isOutRange) const 
 
void insert(G4PhysicsVector *)
 
G4double GetKineticEnergy() const 
 
G4double GetEnergy2fluct() const 
 
static constexpr double perCent
 
G4double GetLogEnergy2fluct() const 
 
static G4double dRoverRange
 
double B(double temperature)
 
static G4double ParticleMass
 
G4double GetLogMeanExcEnergy() const 
 
size_t GetVectorLength() const 
 
G4RDVeLowEnergyLoss(const G4String &, G4ProcessType aType=fNotDefined)
 
G4double GetLowEdgeEnergy(size_t binNumber) const 
 
virtual ~G4RDVeLowEnergyLoss()
 
static G4PhysicsTable * BuildRangeTable(G4PhysicsTable *theDEDXTable, G4PhysicsTable *theRangeTable, G4double Tmin, G4double Tmax, G4int nbin)
 
static G4PhysicsTable * BuildProperTimeTable(G4PhysicsTable *theDEDXTable, G4PhysicsTable *ProperTimeTable, G4double Tmin, G4double Tmax, G4int nbin)
 
static G4PhysicsTable * BuildLabTimeTable(G4PhysicsTable *theDEDXTable, G4PhysicsTable *theLabTimeTable, G4double Tmin, G4double Tmax, G4int nbin)
 
G4double GetEnergy0fluct() const 
 
double A(double temperature)
 
const XML_Char int const XML_Char * value
 
size_t GetTableSize() const 
 
const G4ParticleDefinition const G4Material *G4double range
 
G4double GetElectronDensity() const 
 
static G4PhysicsTable * BuildRangeCoeffBTable(G4PhysicsTable *theRangeTable, G4PhysicsTable *theCoeffBTable, G4double Tmin, G4double Tmax, G4int nbin)
 
static G4bool EnlossFlucFlag
 
void PutValue(size_t index, G4double theValue)
 
static constexpr double eV
 
static void SetRndmStep(G4bool value)
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
static G4ProductionCutsTable * GetProductionCutsTable()
 
static void SetStepFunction(G4double c1, G4double c2)
 
G4double GetLogEnergy1fluct() const 
 
G4double GetRateionexcfluct() const 
 
T max(const T t1, const T t2)
brief Return the largest of the two arguments 
 
static G4PhysicsTable * BuildInverseRangeTable(G4PhysicsTable *theRangeTable, G4PhysicsTable *theRangeCoeffATable, G4PhysicsTable *theRangeCoeffBTable, G4PhysicsTable *theRangeCoeffCTable, G4PhysicsTable *theInverseRangeTable, G4double Tmin, G4double Tmax, G4int nbin)
 
G4double energy(const ThreeVector &p, const G4double m)
 
G4double GetMeanExcitationEnergy() const 
 
G4double GetF2fluct() const 
 
static G4bool rndmStepFlag
 
G4double GetLossWithFluct(const G4DynamicParticle *aParticle, const G4MaterialCutsCouple *couple, G4double MeanLoss, G4double step)
 
static G4PhysicsTable * BuildRangeCoeffATable(G4PhysicsTable *theRangeTable, G4PhysicsTable *theCoeffATable, G4double Tmin, G4double Tmax, G4int nbin)
 
const G4Material * lastMaterial
 
static constexpr double keV
 
static constexpr double micrometer
 
G4double GetF1fluct() const 
 
const G4Material * GetMaterial() const 
 
G4double GetEnergy1fluct() const 
 
static void SetEnlossFluc(G4bool value)
 
static G4PhysicsTable * BuildRangeCoeffCTable(G4PhysicsTable *theRangeTable, G4PhysicsTable *theCoeffCTable, G4double Tmin, G4double Tmax, G4int nbin)