Import Geant4 11.2.1 source tree
This commit is contained in:
@@ -335,6 +335,7 @@ void G4VEmProcess::StartTracking(G4Track* track)
|
||||
currentParticle = track->GetParticleDefinition();
|
||||
theNumberOfInteractionLengthLeft = -1.0;
|
||||
mfpKinEnergy = DBL_MAX;
|
||||
preStepLambda = 0.0;
|
||||
|
||||
if(isIon) { massRatio = proton_mass_c2/currentParticle->GetPDGMass(); }
|
||||
|
||||
@@ -359,8 +360,7 @@ G4double G4VEmProcess::PostStepGetPhysicalInteractionLength(
|
||||
G4double x = DBL_MAX;
|
||||
|
||||
DefineMaterial(track.GetMaterialCutsCouple());
|
||||
preStepKinEnergy = track.GetKineticEnergy();
|
||||
preStepLogKinEnergy = track.GetDynamicParticle()->GetLogKineticEnergy();
|
||||
preStepKinEnergy = track.GetKineticEnergy();
|
||||
const G4double scaledEnergy = preStepKinEnergy*massRatio;
|
||||
SelectModel(scaledEnergy, currentCoupleIndex);
|
||||
/*
|
||||
@@ -370,6 +370,8 @@ G4double G4VEmProcess::PostStepGetPhysicalInteractionLength(
|
||||
if(!currentModel->IsActive(scaledEnergy)) {
|
||||
theNumberOfInteractionLengthLeft = -1.0;
|
||||
currentInteractionLength = DBL_MAX;
|
||||
mfpKinEnergy = DBL_MAX;
|
||||
preStepLambda = 0.0;
|
||||
return x;
|
||||
}
|
||||
|
||||
@@ -384,7 +386,8 @@ G4double G4VEmProcess::PostStepGetPhysicalInteractionLength(
|
||||
}
|
||||
|
||||
// compute mean free path
|
||||
ComputeIntegralLambda(preStepKinEnergy, preStepLogKinEnergy);
|
||||
|
||||
ComputeIntegralLambda(preStepKinEnergy, track);
|
||||
|
||||
// zero cross section
|
||||
if(preStepLambda <= 0.0) {
|
||||
@@ -417,15 +420,15 @@ G4double G4VEmProcess::PostStepGetPhysicalInteractionLength(
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void G4VEmProcess::ComputeIntegralLambda(G4double e, G4double loge)
|
||||
void G4VEmProcess::ComputeIntegralLambda(G4double e, const G4Track& track)
|
||||
{
|
||||
if(fXSType == fEmNoIntegral) {
|
||||
preStepLambda = GetCurrentLambda(e, loge);
|
||||
if (fXSType == fEmNoIntegral) {
|
||||
preStepLambda = GetCurrentLambda(e, LogEkin(track));
|
||||
|
||||
} else if(fXSType == fEmIncreasing) {
|
||||
} else if (fXSType == fEmIncreasing) {
|
||||
if(e*invLambdaFactor < mfpKinEnergy) {
|
||||
mfpKinEnergy = e;
|
||||
preStepLambda = GetCurrentLambda(e, loge);
|
||||
preStepLambda = GetCurrentLambda(e, LogEkin(track));
|
||||
mfpKinEnergy = (preStepLambda > 0.0) ? e : 0.0;
|
||||
}
|
||||
|
||||
} else if(fXSType == fEmDecreasing) {
|
||||
@@ -439,17 +442,16 @@ void G4VEmProcess::ComputeIntegralLambda(G4double e, G4double loge)
|
||||
const G4double epeak = (*theEnergyOfCrossSectionMax)[currentCoupleIndex];
|
||||
if(e <= epeak) {
|
||||
if(e*invLambdaFactor < mfpKinEnergy) {
|
||||
mfpKinEnergy = e;
|
||||
preStepLambda = GetCurrentLambda(e, loge);
|
||||
preStepLambda = GetCurrentLambda(e, LogEkin(track));
|
||||
mfpKinEnergy = (preStepLambda > 0.0) ? e : 0.0;
|
||||
}
|
||||
} else if(e < mfpKinEnergy) {
|
||||
const G4double e1 = std::max(epeak, e*lambdaFactor);
|
||||
preStepLambda = GetCurrentLambda(e1);
|
||||
preStepLambda = GetCurrentLambda(e1);
|
||||
mfpKinEnergy = e1;
|
||||
}
|
||||
|
||||
} else {
|
||||
preStepLambda = GetCurrentLambda(e, loge);
|
||||
preStepLambda = GetCurrentLambda(e, LogEkin(track));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -546,6 +546,7 @@ void G4VEnergyLossProcess::StartTracking(G4Track* track)
|
||||
// reset parameters for the new track
|
||||
theNumberOfInteractionLengthLeft = -1.0;
|
||||
mfpKinEnergy = DBL_MAX;
|
||||
preStepLambda = 0.0;
|
||||
currentCouple = nullptr;
|
||||
|
||||
// reset ion
|
||||
@@ -567,13 +568,13 @@ void G4VEnergyLossProcess::StartTracking(G4Track* track)
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
G4double G4VEnergyLossProcess::AlongStepGetPhysicalInteractionLength(
|
||||
const G4Track&,G4double,G4double,G4double&,
|
||||
const G4Track& track, G4double, G4double, G4double&,
|
||||
G4GPILSelection* selection)
|
||||
{
|
||||
G4double x = DBL_MAX;
|
||||
*selection = aGPILSelection;
|
||||
if(isIonisation && currentModel->IsActive(preStepScaledEnergy)) {
|
||||
GetScaledRangeForScaledEnergy(preStepScaledEnergy, preStepLogScaledEnergy);
|
||||
GetScaledRangeForScaledEnergy(preStepScaledEnergy, LogScaledEkin(track));
|
||||
x = (useCutAsFinalRange) ? std::min(finalRange,
|
||||
currentCouple->GetProductionCuts()->GetProductionCut(1)) : finalRange;
|
||||
x = (fRange > x) ? fRange*dRoverRange + x*(1.0 - dRoverRange)*(2.0 - x/fRange)
|
||||
@@ -601,15 +602,15 @@ G4double G4VEnergyLossProcess::PostStepGetPhysicalInteractionLength(
|
||||
// at the beginning of the step
|
||||
DefineMaterial(track.GetMaterialCutsCouple());
|
||||
preStepKinEnergy = track.GetKineticEnergy();
|
||||
preStepLogKinEnergy = track.GetDynamicParticle()->GetLogKineticEnergy();
|
||||
preStepScaledEnergy = preStepKinEnergy*massRatio;
|
||||
preStepLogScaledEnergy = preStepLogKinEnergy + logMassRatio;
|
||||
SelectModel(preStepScaledEnergy);
|
||||
|
||||
if(!currentModel->IsActive(preStepScaledEnergy)) {
|
||||
theNumberOfInteractionLengthLeft = -1.0;
|
||||
mfpKinEnergy = DBL_MAX;
|
||||
preStepLambda = 0.0;
|
||||
currentInteractionLength = DBL_MAX;
|
||||
return x;
|
||||
return x;
|
||||
}
|
||||
|
||||
// change effective charge of a charged particle on fly
|
||||
@@ -632,9 +633,8 @@ G4double G4VEnergyLossProcess::PostStepGetPhysicalInteractionLength(
|
||||
}
|
||||
}
|
||||
|
||||
// compute mean free path
|
||||
ComputeLambdaForScaledEnergy(preStepScaledEnergy, preStepLogScaledEnergy);
|
||||
|
||||
ComputeLambdaForScaledEnergy(preStepScaledEnergy, track);
|
||||
|
||||
// zero cross section
|
||||
if(preStepLambda <= 0.0) {
|
||||
theNumberOfInteractionLengthLeft = -1.0;
|
||||
@@ -681,13 +681,13 @@ G4double G4VEnergyLossProcess::PostStepGetPhysicalInteractionLength(
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void
|
||||
G4VEnergyLossProcess::ComputeLambdaForScaledEnergy(G4double e, G4double loge)
|
||||
G4VEnergyLossProcess::ComputeLambdaForScaledEnergy(G4double e, const G4Track& track)
|
||||
{
|
||||
// cross section increased with energy
|
||||
if(fXSType == fEmIncreasing) {
|
||||
if(e*invLambdaFactor < mfpKinEnergy) {
|
||||
mfpKinEnergy = e;
|
||||
preStepLambda = GetLambdaForScaledEnergy(e, loge);
|
||||
preStepLambda = GetLambdaForScaledEnergy(e, LogScaledEkin(track));
|
||||
mfpKinEnergy = (preStepLambda > 0.0) ? e : 0.0;
|
||||
}
|
||||
|
||||
// cross section has one peak
|
||||
@@ -695,8 +695,8 @@ G4VEnergyLossProcess::ComputeLambdaForScaledEnergy(G4double e, G4double loge)
|
||||
const G4double epeak = (*theEnergyOfCrossSectionMax)[basedCoupleIndex];
|
||||
if(e <= epeak) {
|
||||
if(e*invLambdaFactor < mfpKinEnergy) {
|
||||
mfpKinEnergy = e;
|
||||
preStepLambda = GetLambdaForScaledEnergy(e, loge);
|
||||
preStepLambda = GetLambdaForScaledEnergy(e, LogScaledEkin(track));
|
||||
mfpKinEnergy = (preStepLambda > 0.0) ? e : 0.0;
|
||||
}
|
||||
} else if(e < mfpKinEnergy) {
|
||||
const G4double e1 = std::max(epeak, e*lambdaFactor);
|
||||
@@ -712,8 +712,8 @@ G4VEnergyLossProcess::ComputeLambdaForScaledEnergy(G4double e, G4double loge)
|
||||
// below the 1st peak
|
||||
if(e <= e1peak) {
|
||||
if(e*invLambdaFactor < mfpKinEnergy) {
|
||||
mfpKinEnergy = e;
|
||||
preStepLambda = GetLambdaForScaledEnergy(e, loge);
|
||||
preStepLambda = GetLambdaForScaledEnergy(e, LogScaledEkin(track));
|
||||
mfpKinEnergy = (preStepLambda > 0.0) ? e : 0.0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -732,7 +732,7 @@ G4VEnergyLossProcess::ComputeLambdaForScaledEnergy(G4double e, G4double loge)
|
||||
if(e <= e2peak) {
|
||||
if(e*invLambdaFactor < mfpKinEnergy) {
|
||||
mfpKinEnergy = e;
|
||||
preStepLambda = GetLambdaForScaledEnergy(e, loge);
|
||||
preStepLambda = GetLambdaForScaledEnergy(e, LogScaledEkin(track));
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -751,7 +751,7 @@ G4VEnergyLossProcess::ComputeLambdaForScaledEnergy(G4double e, G4double loge)
|
||||
if(e <= e3peak) {
|
||||
if(e*invLambdaFactor < mfpKinEnergy) {
|
||||
mfpKinEnergy = e;
|
||||
preStepLambda = GetLambdaForScaledEnergy(e, loge);
|
||||
preStepLambda = GetLambdaForScaledEnergy(e, LogScaledEkin(track));
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -763,7 +763,7 @@ G4VEnergyLossProcess::ComputeLambdaForScaledEnergy(G4double e, G4double loge)
|
||||
}
|
||||
// integral method is not used
|
||||
} else {
|
||||
preStepLambda = GetLambdaForScaledEnergy(e, loge);
|
||||
preStepLambda = GetLambdaForScaledEnergy(e, LogScaledEkin(track));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -820,7 +820,7 @@ G4VParticleChange* G4VEnergyLossProcess::AlongStepDoIt(const G4Track& track,
|
||||
|
||||
// Short step
|
||||
eloss = length*GetDEDXForScaledEnergy(preStepScaledEnergy,
|
||||
preStepLogScaledEnergy);
|
||||
LogScaledEkin(track));
|
||||
/*
|
||||
G4cout << "##### Short STEP: eloss= " << eloss
|
||||
<< " Escaled=" << preStepScaledEnergy
|
||||
|
||||
Reference in New Issue
Block a user