70 #include "G4EnergyLossMessenger.hh" 
  114 G4double         G4eLowEnergyLoss::LowerBoundEloss = 10.*
eV ;
 
  115 G4double         G4eLowEnergyLoss::UpperBoundEloss = 100.*
GeV ;
 
  116 G4int            G4eLowEnergyLoss::NbinEloss = 360 ;
 
  118 G4double         G4eLowEnergyLoss::LOGRTable ;
 
  121 G4EnergyLossMessenger* G4eLowEnergyLoss::eLossMessenger         = 0;
 
  130      MinKineticEnergy(1.*
eV),
 
  135      RecorderOfProcess(0),
 
  143  if(!eLossMessenger) eLossMessenger = 
new G4EnergyLossMessenger();
 
  194     return LowerBoundEloss;
 
  199     return UpperBoundEloss;
 
  216   G4double lrate = std::log(UpperBoundEloss/LowerBoundEloss);
 
  217   LOGRTable=lrate/NbinEloss;
 
  218   RTable   =std::exp(LOGRTable);
 
  268      for (
size_t J=0; J<numOfCouples; J++)
 
  273                     LowerBoundEloss, UpperBoundEloss, NbinEloss);
 
  276          for (
G4int i=0; i<NbinEloss; i++)
 
  284                    pointer= RecorderOfProcess[process];
 
  285                    Value += (*pointer)[J]->GetValue(LowEdgeEnergy,isOutRange);
 
  291          theDEDXTable->
insert(aVector) ;
 
  307                               LowerBoundEloss,UpperBoundEloss,NbinEloss);
 
  312                          LowerBoundEloss,UpperBoundEloss,NbinEloss);
 
  315                             LowerBoundEloss,UpperBoundEloss,NbinEloss);
 
  319                              theeRangeCoeffATable,
 
  320                              LowerBoundEloss,UpperBoundEloss,NbinEloss);
 
  323                              theeRangeCoeffBTable,
 
  324                              LowerBoundEloss,UpperBoundEloss,NbinEloss);
 
  327                              theeRangeCoeffCTable,
 
  328                              LowerBoundEloss,UpperBoundEloss,NbinEloss);
 
  332                               theeRangeCoeffATable,
 
  333                               theeRangeCoeffBTable,
 
  334                               theeRangeCoeffCTable,
 
  336                               LowerBoundEloss,UpperBoundEloss,NbinEloss);
 
  343                               LowerBoundEloss,UpperBoundEloss,NbinEloss);
 
  349                          LowerBoundEloss,UpperBoundEloss,NbinEloss);
 
  352                             LowerBoundEloss,UpperBoundEloss,NbinEloss);
 
  356                              thepRangeCoeffATable,
 
  357                              LowerBoundEloss,UpperBoundEloss,NbinEloss);
 
  360                              thepRangeCoeffBTable,
 
  361                              LowerBoundEloss,UpperBoundEloss,NbinEloss);
 
  364                              thepRangeCoeffCTable,
 
  365                              LowerBoundEloss,UpperBoundEloss,NbinEloss);
 
  369                               thepRangeCoeffATable,
 
  370                               thepRangeCoeffBTable,
 
  371                               thepRangeCoeffCTable,
 
  373                               LowerBoundEloss,UpperBoundEloss,NbinEloss);
 
  393        LowerBoundEloss, UpperBoundEloss, 1.,NbinEloss);
 
  404   static const G4double faclow = 1.5 ;
 
  421   else if ( E< faclow*LowerBoundEloss)
 
  423     if (Step >= fRangeNow)  finalT = 0.;
 
  425     else finalT = E*(1.-std::sqrt(Step/fRangeNow)) ;
 
  428   else if (E>=UpperBoundEloss) finalT = E - Step*fdEdx;
 
  430   else if (Step >= fRangeNow)  finalT = 0.;
 
  434     if(Step/fRangeNow < linLossLimit) finalT = E-Step*fdEdx ;
 
  446   MeanLoss = E-finalT ;
 
  449   if ((
EnlossFlucFlag) && (finalT > 0.) && (finalT < E)&&(E > LowerBoundEloss))
 
  452     if (finalT < 0.) finalT = 0.;
 
  468   std::vector<G4DynamicParticle*>* deexcitationProducts = 0;
 
  469   if (theFluo) deexcitationProducts = 
DeexciteAtom(couple,E,edep);
 
  471   size_t nSecondaries = 0;
 
  472   if (deexcitationProducts != 0) nSecondaries = deexcitationProducts->size();
 
  475   if (nSecondaries > 0) {
 
  488     for (
size_t i=0; i<nSecondaries; i++) {
 
  512   delete deexcitationProducts;
 
static void SetLowerBoundEloss(G4double val)
 
void insert(G4PhysicsVector *)
 
static G4PhysicsTable * theInverseRangePositronTable
 
G4double GetKineticEnergy() const 
 
static G4PhysicsTable * theProperTimePositronTable
 
G4double GetStepLength() const 
 
const G4DynamicParticle * GetDynamicParticle() const 
 
static G4int CounterOfElectronProcess
 
static G4int NbOfProcesses
 
static G4int GetNbOfProcesses()
 
const G4MaterialCutsCouple * GetMaterialCutsCouple() const 
 
static G4PhysicsTable * theRangeElectronTable
 
static G4double GetLowerBoundEloss()
 
static G4double ParticleMass
 
G4double GetLowEdgeEnergy(size_t binNumber) const 
 
static void SetUpperBoundEloss(G4double val)
 
G4VParticleChange * AlongStepDoIt(const G4Track &track, const G4Step &Step)
 
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)
 
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
 
static G4PhysicsTable * BuildLabTimeTable(G4PhysicsTable *theDEDXTable, G4PhysicsTable *theLabTimeTable, G4double Tmin, G4double Tmax, G4int nbin)
 
G4StepPoint * GetPreStepPoint() const 
 
static G4PhysicsTable * theLabTimePositronTable
 
G4GLOB_DLL std::ostream G4cout
 
size_t GetTableSize() const 
 
const G4ThreeVector & GetPosition() const 
 
static G4PhysicsTable * theDEDXElectronTable
 
static G4PhysicsTable * BuildRangeCoeffBTable(G4PhysicsTable *theRangeTable, G4PhysicsTable *theCoeffBTable, G4double Tmin, G4double Tmax, G4int nbin)
 
static constexpr double eplus
 
static G4bool EnlossFlucFlag
 
void PutValue(size_t index, G4double theValue)
 
void BuildDEDXTable(const G4ParticleDefinition &aParticleType)
 
static constexpr double eV
 
G4eLowEnergyLoss(const G4String &)
 
static G4PhysicsTable * theRangePositronTable
 
static void MinusNbOfProcesses()
 
static void SetNbinEloss(G4int nb)
 
static G4PhysicsTable ** RecorderOfPositronProcess
 
virtual void Initialize(const G4Track &)
 
static G4PhysicsTable * theInverseRangeElectronTable
 
G4double MinKineticEnergy
 
static G4ProductionCutsTable * GetProductionCutsTable()
 
static G4double GetUpperBoundEloss()
 
static G4Positron * Positron()
 
static G4PhysicsTable ** RecorderOfElectronProcess
 
G4double GetPDGMass() const 
 
static G4PhysicsTable * theLabTimeElectronTable
 
static G4PhysicsTable * BuildInverseRangeTable(G4PhysicsTable *theRangeTable, G4PhysicsTable *theRangeCoeffATable, G4PhysicsTable *theRangeCoeffBTable, G4PhysicsTable *theRangeCoeffCTable, G4PhysicsTable *theInverseRangeTable, G4double Tmin, G4double Tmax, G4int nbin)
 
void SetNumberOfSecondaries(G4int totSecondaries)
 
static G4int GetNbinEloss()
 
static G4PhysicsTable * theProperTimeElectronTable
 
G4StepPoint * GetPostStepPoint() const 
 
void ProposeEnergy(G4double finalEnergy)
 
G4ParticleChange aParticleChange
 
static constexpr double GeV
 
void AddSecondary(G4Track *aSecondary)
 
static G4Electron * Electron()
 
static void PlusNbOfProcesses()
 
G4double GetGlobalTime() const 
 
G4PhysicsTable * theLossTable
 
static G4int CounterOfPositronProcess
 
static void SetNbOfProcesses(G4int nb)
 
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)
 
static G4PhysicsTable * theDEDXPositronTable
 
virtual std::vector< G4DynamicParticle * > * DeexciteAtom(const G4MaterialCutsCouple *, G4double, G4double)
 
G4double GetLossWithFluct(const G4DynamicParticle *aParticle, const G4MaterialCutsCouple *couple, G4double MeanLoss, G4double step)
 
G4double GetPDGCharge() const 
 
static G4double GetPreciseEnergyFromRange(const G4ParticleDefinition *aParticle, G4double range, const G4Material *aMaterial)
 
static G4PhysicsTable * BuildRangeCoeffATable(G4PhysicsTable *theRangeTable, G4PhysicsTable *theCoeffATable, G4double Tmin, G4double Tmax, G4int nbin)
 
static G4PhysicsTable * BuildRangeCoeffCTable(G4PhysicsTable *theRangeTable, G4PhysicsTable *theCoeffCTable, G4double Tmin, G4double Tmax, G4int nbin)