184 static const G4int theBin;
185 static const G4double theEsum[1007], theELFsum[1007], theRuthSum[1007];
188 G4DataVector fELFsum, fRuthSum;
189 G4DataVector fPrWmaxVector;
191 G4Material* fMat{
nullptr};
193 G4PhysicsLogVector* fBetaVector{
nullptr};
194 G4PhysicsTable* fPrEnergyTable{
nullptr};
195 G4PhysicsTable* fElEnergyTable{
nullptr};
196 G4PhysicsLogVector* fTransferVector{
nullptr};
198 G4ParticleDefinition* theElectron{
nullptr};
199 G4ParticleDefinition* theProton{
nullptr};
200 G4ParticleChangeForLoss* fParticleChange{
nullptr};
213 G4double elf(0.), y1(0.), y2(0.), x1(0.), x2(0.), aa(0.);
215 std::size_t nlow = std::lower_bound( fEsum.begin(), fEsum.end(), ee ) - fEsum.begin();
219 y1 = fELFsum[nlow-1];
221 aa = (y2-y1)/(x2-x1);
222 elf = y1 + aa*(ee-x1);
231 G4double ruth(0.), y1(0.), y2(0.), x1(0.), x2(0.), aa(0.);
233 std::size_t nlow = std::lower_bound( fEsum.begin(), fEsum.end(), ee ) - fEsum.begin();
237 y1 = fRuthSum[nlow-1];
239 aa = (y2-y1)/(x2-x1);
240 ruth = y1 + aa*(ee-x1);
255 if ( pd == theProton ) dndx =
GetPrdNdx(Tkin);
256 else if( pd == theElectron ) dndx =
GetEldNdx(Tkin);
259 if( dndx > 0.) mfp = 1./dndx;
G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy, G4double maxEnergy) override
G4double GetPrMFP(G4double Tkin)
void BuildPrEnergyTable()
void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
G4double GetElectronTmax(G4double Tkin)
G4double GetSumELF(G4double energy)
G4double ComputeMeanFreePath(const G4ParticleDefinition *, G4double kineticEnergy, const G4Material *, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel) override
void BuildPhysicsTable(const G4ParticleDefinition *pd)
G4double PrPAId2Ndxdw(G4double omega)
G4double CrossSectionPerAtom(const G4ParticleDefinition *, G4double kineticEnergy, G4double Z, G4double A, G4double cutEnergy, G4double maxEnergy)
G4double GetProtonTmax(G4double Tkin)
G4double CorrectElTransfer(G4double Tkin)
G4double SampleFluctuations(const G4MaterialCutsCouple *, const G4DynamicParticle *, const G4double tcut, const G4double tmax, const G4double length, const G4double meanLoss) override
G4double GetElMFP(G4double Tkin)
void SetBias(G4double bb)
G4double GetPrdNdx(G4double Tkin)
void SetBe2(G4double be2)
G4double GetElTransfer(G4double Tkin)
void SetOmega(G4double ww)
void BuildElEnergyTable()
G4double ElPAId2Ndxdw(G4double omega)
G4LowPAIH2O(const G4ParticleDefinition *p=nullptr, const G4String &nam="lowpaih2o")
G4double GetSumRuth(G4double energy)
G4double CorrectPrTransfer(G4double Tkin)
G4double GetPrTransfer(G4double Tkin)
void CorrectionsAlongStep(const G4Material *, const G4ParticleDefinition *, const G4double kinEnergy, const G4double cutEnergy, const G4double &length, G4double &eloss) override
G4double Dispersion(const G4Material *, const G4DynamicParticle *, const G4double, const G4double, const G4double) override
G4LowPAIH2O(const G4LowPAIH2O &)=delete
G4double GetEldNdx(G4double Tkin)
virtual G4double ComputeCrossSectionPerElectron(const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy, G4double maxEnergy)
G4LowPAIH2O & operator=(const G4LowPAIH2O &right)=delete
G4VEmFluctuationModel(const G4String &nam)
G4VEmModel(const G4String &nam)