Import Geant4 6.2.0 source tree
This commit is contained in:
@@ -83,166 +83,6 @@ G4PAIonisation::GetContinuousStepLimit( const G4Track& track ,
|
||||
return Step ;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
//
|
||||
|
||||
inline G4double G4PAIonisation::
|
||||
GetMeanFreePath( const G4Track& trackData,
|
||||
G4double,
|
||||
G4ForceCondition* condition )
|
||||
{
|
||||
// G4cout<<"G4PAIonisation::GetMeanFreePath is called"<<G4endl ;
|
||||
|
||||
G4int iTkin, iPlace ;
|
||||
G4double charge, charge2, mass, massRatio, kinE, gamma, scaledE, meanFreePath ;
|
||||
G4double E1, E2, W, W1, W2, primaryIon ;
|
||||
|
||||
*condition = NotForced ;
|
||||
|
||||
G4Material* aMaterial = trackData.GetMaterial() ;
|
||||
|
||||
if( aMaterial->GetIndex() != fMatIndex ) meanFreePath = DBL_MAX ;
|
||||
else
|
||||
{
|
||||
const G4DynamicParticle* aParticle = trackData.GetDynamicParticle() ;
|
||||
kinE = aParticle->GetKineticEnergy() ;
|
||||
mass = aParticle->GetDefinition()->GetPDGMass() ;
|
||||
gamma = 1.0 + kinE/mass ;
|
||||
|
||||
if(gamma < 1.2) return meanFreePath = DBL_MAX ;
|
||||
|
||||
charge = aParticle->GetDefinition()->GetPDGCharge() ;
|
||||
charge2 = charge*charge ;
|
||||
massRatio = proton_mass_c2/mass ;
|
||||
scaledE = kinE*massRatio ;
|
||||
|
||||
for(iTkin=0;iTkin<G4PAIonisation::GetBinNumber();iTkin++)
|
||||
{
|
||||
// if(scaledE < GetProtonEnergyVector()->GetLowEdgeEnergy(iTkin)) // <= ?
|
||||
if(scaledE < fProtonEnergyVector->GetLowEdgeEnergy(iTkin)) // <= ?
|
||||
{
|
||||
break ;
|
||||
}
|
||||
}
|
||||
iPlace = iTkin - 1 ;
|
||||
|
||||
if(iTkin == G4PAIonisation::GetBinNumber()) // Fermi plato, try from left
|
||||
{
|
||||
meanFreePath = 1.0/(*(*fPAItransferBank)(iPlace))(0)/charge2 ;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(iTkin == 0) // Tkin is too small, trying from right only
|
||||
{
|
||||
meanFreePath = 1.0/(*(*fPAItransferBank)(iPlace+1))(0)/charge2 ;
|
||||
}
|
||||
else
|
||||
{
|
||||
E1 = fProtonEnergyVector->GetLowEdgeEnergy(iTkin - 1) ;
|
||||
E2 = fProtonEnergyVector->GetLowEdgeEnergy(iTkin) ;
|
||||
W = 1.0/(E2 - E1) ;
|
||||
W1 = (E2 - scaledE)*W ;
|
||||
W2 = (scaledE - E1)*W ;
|
||||
primaryIon = (*(*fPAItransferBank)(iPlace ))(0)*W1 +
|
||||
(*(*fPAItransferBank)(iPlace+1))(0)*W2 ;
|
||||
meanFreePath = 1.0/primaryIon/charge2 ;
|
||||
}
|
||||
}
|
||||
// meanFreePath = DBL_MAX ;
|
||||
}
|
||||
return meanFreePath ;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
//
|
||||
|
||||
inline G4double G4PAIonisation::
|
||||
GetFreePath( G4double scaledTkin, G4double charge2 )
|
||||
{
|
||||
// G4cout<<"G4PAIonisation::GetFreePath is called"<<G4endl ;
|
||||
|
||||
G4int iTkin, iPlace ;
|
||||
G4double meanFreePath ;
|
||||
G4double E1, E2, W, W1, W2, primaryIon ;
|
||||
|
||||
for( iTkin = 0 ; iTkin < G4PAIonisation::GetBinNumber() ; iTkin++ )
|
||||
{
|
||||
if(scaledTkin < fProtonEnergyVector->GetLowEdgeEnergy(iTkin)) break ;
|
||||
}
|
||||
iPlace = iTkin - 1 ;
|
||||
|
||||
if(iTkin == G4PAIonisation::GetBinNumber()) // Fermi plato, try from left
|
||||
{
|
||||
meanFreePath = 1.0/(*(*fPAItransferBank)(iPlace))(0)/charge2 ;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(iTkin == 0) // Tkin is too small, trying from right only
|
||||
{
|
||||
meanFreePath = 1.0/(*(*fPAItransferBank)(iPlace+1))(0)/charge2 ;
|
||||
}
|
||||
else
|
||||
{
|
||||
E1 = fProtonEnergyVector->GetLowEdgeEnergy(iTkin - 1) ;
|
||||
E2 = fProtonEnergyVector->GetLowEdgeEnergy(iTkin) ;
|
||||
W = 1.0/(E2 - E1) ;
|
||||
W1 = (E2 - scaledTkin)*W ;
|
||||
W2 = (scaledTkin - E1)*W ;
|
||||
primaryIon = (*(*fPAItransferBank)(iPlace ))(0)*W1 +
|
||||
(*(*fPAItransferBank)(iPlace+1))(0)*W2 ;
|
||||
meanFreePath = 1.0/primaryIon/charge2 ;
|
||||
}
|
||||
}
|
||||
// meanFreePath = DBL_MAX ;
|
||||
|
||||
return meanFreePath ;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
//
|
||||
|
||||
inline G4double G4PAIonisation::
|
||||
GetdEdx( G4double scaledTkin, G4double charge2 )
|
||||
{
|
||||
// G4cout<<"G4PAIonisation::GetdEdx is called"<<G4endl ;
|
||||
|
||||
G4int iTkin, iPlace ;
|
||||
G4double dEdx ;
|
||||
G4double E1, E2, W, W1, W2 ;
|
||||
|
||||
for( iTkin = 0 ; iTkin < G4PAIonisation::GetBinNumber() ; iTkin++ )
|
||||
{
|
||||
if(scaledTkin < fProtonEnergyVector->GetLowEdgeEnergy(iTkin)) break ;
|
||||
}
|
||||
iPlace = iTkin - 1 ;
|
||||
|
||||
if(iTkin == G4PAIonisation::GetBinNumber()) // Fermi plato, try from left
|
||||
{
|
||||
dEdx = (*(*theLossTable)(iPlace))(0)*charge2 ;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(iTkin == 0) // Tkin is too small, trying from right only
|
||||
{
|
||||
dEdx = (*(*theLossTable)(iPlace+1))(0)*charge2 ;
|
||||
}
|
||||
else
|
||||
{
|
||||
E1 = fProtonEnergyVector->GetLowEdgeEnergy(iTkin - 1) ;
|
||||
E2 = fProtonEnergyVector->GetLowEdgeEnergy(iTkin) ;
|
||||
W = 1.0/(E2 - E1) ;
|
||||
W1 = (E2 - scaledTkin)*W ;
|
||||
W2 = (scaledTkin - E1)*W ;
|
||||
dEdx = (*(*theLossTable)(iPlace))(0)*W1 + (*(*theLossTable)(iPlace+1))(0)*W2;
|
||||
dEdx *= charge2 ;
|
||||
}
|
||||
}
|
||||
return dEdx ;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user