Import Geant4 5.1.0 source tree
This commit is contained in:
@@ -29,13 +29,18 @@
|
||||
// File name: G4MuBetheBlochModel
|
||||
//
|
||||
// Author: Vladimir Ivanchenko on base of Laszlo Urban code
|
||||
//
|
||||
//
|
||||
// Creation date: 09.08.2002
|
||||
//
|
||||
// Modifications:
|
||||
// Modifications:
|
||||
//
|
||||
// 23-12-02 Change interface in order to move to cut per region (V.Ivanchenko)
|
||||
// 24-01-03 Make models region aware (V.Ivanchenko)
|
||||
// 13-02-03 Add Nama (V.Ivanchenko)
|
||||
//
|
||||
|
||||
//
|
||||
// Class Description:
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of Bethe-Bloch model of energy loss and
|
||||
// delta-electron production by heavy charged particles
|
||||
@@ -53,25 +58,24 @@ class G4MuBetheBlochModel : public G4VEmModel
|
||||
|
||||
public:
|
||||
|
||||
G4MuBetheBlochModel(const G4ParticleDefinition* p = 0);
|
||||
G4MuBetheBlochModel(const G4ParticleDefinition* p = 0, const G4String& nam = "MuBetheBloch");
|
||||
|
||||
~G4MuBetheBlochModel();
|
||||
|
||||
G4double HighEnergyLimit(const G4ParticleDefinition* p,
|
||||
const G4Material*);
|
||||
|
||||
G4double LowEnergyLimit(const G4ParticleDefinition* p,
|
||||
const G4Material*);
|
||||
void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
void SetHighEnergyLimit(const G4Material*, G4double e) {highKinEnergy = e;};
|
||||
|
||||
void SetLowEnergyLimit(const G4Material*, G4double e) {lowKinEnergy = e;};
|
||||
G4double HighEnergyLimit(const G4ParticleDefinition* p);
|
||||
|
||||
G4double LowEnergyLimit(const G4ParticleDefinition* p);
|
||||
|
||||
void SetHighEnergyLimit(G4double e) {highKinEnergy = e;};
|
||||
|
||||
void SetLowEnergyLimit(G4double e) {lowKinEnergy = e;};
|
||||
|
||||
G4double MinEnergyCut(const G4ParticleDefinition*,
|
||||
const G4Material*);
|
||||
const G4MaterialCutsCouple*);
|
||||
|
||||
G4bool IsInCharge(const G4ParticleDefinition*,
|
||||
const G4Material*);
|
||||
G4bool IsInCharge(const G4ParticleDefinition*);
|
||||
|
||||
virtual G4double ComputeDEDX(const G4Material*,
|
||||
const G4ParticleDefinition*,
|
||||
@@ -84,8 +88,14 @@ public:
|
||||
G4double cutEnergy,
|
||||
G4double maxEnergy);
|
||||
|
||||
virtual G4std::vector<G4DynamicParticle*>* SampleSecondary(
|
||||
const G4Material*,
|
||||
virtual G4DynamicParticle* SampleSecondary(
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double tmin,
|
||||
G4double maxEnergy);
|
||||
|
||||
virtual G4std::vector<G4DynamicParticle*>* SampleSecondaries(
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double tmin,
|
||||
G4double maxEnergy);
|
||||
@@ -122,7 +132,7 @@ private:
|
||||
G4double highKinEnergy;
|
||||
G4double lowKinEnergy;
|
||||
G4double twoln10;
|
||||
G4double bg2lim;
|
||||
G4double bg2lim;
|
||||
G4double taulim;
|
||||
G4double qc;
|
||||
};
|
||||
|
||||
@@ -21,15 +21,16 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4MuBremsstrahlung.hh,v 1.12 2001/10/29 13:53:18 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-05-00 $
|
||||
// $Id: G4MuBremsstrahlung.hh,v 1.14 2003/01/20 18:16:25 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-05-01 $
|
||||
//
|
||||
//--------------- G4MuBremsstrahlung physics process ------------------
|
||||
// by Laszlo Urban, September 1997
|
||||
//------------------------------------------------------------------------------
|
||||
// 10/02/00 modifications , new e.m. structure, L.Urban
|
||||
// 10-08-01: new methods Store/Retrieve PhysicsTable (mma)
|
||||
// 29-10-01 all static functions no more inlined (mma)
|
||||
// 29-10-01 all static functions no more inlined (mma)
|
||||
// 16-01-03 Migrade to cut per region (V.Ivanchenko)
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef G4MuBremsstrahlung_h
|
||||
@@ -37,25 +38,26 @@
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#include "G4ios.hh"
|
||||
#include "G4ios.hh"
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4VMuEnergyLoss.hh"
|
||||
#include "G4Track.hh"
|
||||
#include "G4Step.hh"
|
||||
#include "G4OrderedTable.hh"
|
||||
#include "G4OrderedTable.hh"
|
||||
#include "G4PhysicsTable.hh"
|
||||
#include "G4PhysicsLogVector.hh"
|
||||
#include "G4MaterialCutsCouple.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
class G4MuBremsstrahlung : public G4VMuEnergyLoss
|
||||
|
||||
{
|
||||
|
||||
{
|
||||
public:
|
||||
|
||||
|
||||
G4MuBremsstrahlung(const G4String& processName = "MuBrems");
|
||||
|
||||
|
||||
~G4MuBremsstrahlung();
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition&);
|
||||
@@ -65,55 +67,55 @@ class G4MuBremsstrahlung : public G4VMuEnergyLoss
|
||||
void BuildLossTable(const G4ParticleDefinition& ParticleType);
|
||||
|
||||
void BuildLambdaTable(const G4ParticleDefinition& ParticleType);
|
||||
|
||||
|
||||
void PrintInfoDefinition();
|
||||
|
||||
G4double GetMeanFreePath(const G4Track& track,
|
||||
G4double previousStepSize,
|
||||
G4ForceCondition* condition );
|
||||
|
||||
|
||||
G4VParticleChange *PostStepDoIt(const G4Track& track,
|
||||
const G4Step& Step );
|
||||
const G4Step& Step );
|
||||
|
||||
G4double GetDMicroscopicCrossSection(
|
||||
const G4ParticleDefinition* ParticleType,
|
||||
G4double KineticEnergy,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
G4double AtomicMass,
|
||||
G4double AtomicMass,
|
||||
G4double GammaEnergy);
|
||||
|
||||
|
||||
G4bool StorePhysicsTable(G4ParticleDefinition* ,
|
||||
const G4String& directory, G4bool);
|
||||
// store eLoss and MeanFreePath tables into an external file
|
||||
// specified by 'directory' (must exist before invokation)
|
||||
|
||||
G4bool RetrievePhysicsTable(G4ParticleDefinition* ,
|
||||
|
||||
G4bool RetrievePhysicsTable(G4ParticleDefinition* ,
|
||||
const G4String& directory, G4bool);
|
||||
// retrieve eLoss and MeanFreePath tables from an external file
|
||||
// specified by 'directory'
|
||||
// specified by 'directory'
|
||||
|
||||
protected:
|
||||
|
||||
G4double ComputeMeanFreePath( const G4ParticleDefinition* ParticleType,
|
||||
G4double KineticEnergy,
|
||||
const G4Material* aMaterial);
|
||||
G4double KineticEnergy,
|
||||
const G4MaterialCutsCouple* couple);
|
||||
|
||||
void ComputePartialSumSigma( const G4ParticleDefinition* ParticleType,
|
||||
G4double KineticEnergy,
|
||||
const G4Material* aMaterial);
|
||||
G4double KineticEnergy,
|
||||
const G4MaterialCutsCouple* couple);
|
||||
|
||||
virtual G4double ComputeMicroscopicCrossSection(
|
||||
const G4ParticleDefinition* ParticleType,
|
||||
G4double KineticEnergy,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
G4double AtomicMass,
|
||||
G4double AtomicMass,
|
||||
G4double GammaEnergyCut);
|
||||
|
||||
virtual G4double ComputeDMicroscopicCrossSection(
|
||||
const G4ParticleDefinition* ParticleType,
|
||||
G4double KineticEnergy,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
G4double AtomicMass,
|
||||
G4double AtomicMass,
|
||||
G4double GammaEnergy);
|
||||
|
||||
private:
|
||||
@@ -125,27 +127,30 @@ class G4MuBremsstrahlung : public G4VMuEnergyLoss
|
||||
G4double Z,G4double A,
|
||||
G4double T, G4double Cut);
|
||||
|
||||
G4Element* SelectRandomAtom(G4Material* aMaterial) const;
|
||||
const G4Element* SelectRandomAtom(const G4MaterialCutsCouple* couple) const;
|
||||
|
||||
void MakeSamplingTables( const G4ParticleDefinition* ParticleType );
|
||||
|
||||
protected:
|
||||
|
||||
virtual G4double SecondaryEnergyThreshold(size_t index);
|
||||
|
||||
private:
|
||||
|
||||
G4PhysicsTable* theMeanFreePathTable;
|
||||
G4PhysicsTable* theMeanFreePathTable;
|
||||
|
||||
G4OrderedTable PartialSumSigma;
|
||||
G4OrderedTable PartialSumSigma;
|
||||
|
||||
static G4double LowerBoundLambda; // bining for lambda table
|
||||
static G4double UpperBoundLambda;
|
||||
static G4double UpperBoundLambda;
|
||||
static G4int NbinLambda;
|
||||
G4double LowestKineticEnergy,HighestKineticEnergy;
|
||||
G4int TotBin;
|
||||
|
||||
const G4double* GammaCutInKineticEnergy;
|
||||
|
||||
G4double GammaCutInKineticEnergyNow;
|
||||
const G4std::vector<G4double>* secondaryEnergyCuts;
|
||||
|
||||
// tables for sampling
|
||||
// tables for sampling
|
||||
static G4int nzdat,ntdat,NBIN;
|
||||
static G4double zdat[5],adat[5],tdat[8];
|
||||
static G4double ya[1001],proba[5][8][1001];
|
||||
@@ -165,5 +170,5 @@ class G4MuBremsstrahlung : public G4VMuEnergyLoss
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#include "G4MuBremsstrahlung.icc"
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4MuBremsstrahlung.icc,v 1.8 2001/10/24 16:36:40 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-05-00 $
|
||||
// $Id: G4MuBremsstrahlung.icc,v 1.9 2003/01/17 18:54:39 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-05-01 $
|
||||
//
|
||||
//--------------- G4MuBremsstrahlung physics process ------------------
|
||||
// by Laszlo Urban, September 1997
|
||||
@@ -33,6 +33,7 @@
|
||||
// 17-09-01 migration of Materials to pure STL (mma)
|
||||
// 29.05.01 V.Ivanchenko minor changes to provide ANSI -wall compilation
|
||||
// 28-09-01 suppression of theMuonPlus ..etc..data members (mma)
|
||||
// 16-01-03 Migrade to cut per region (V.Ivanchenko)
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
@@ -43,54 +44,54 @@ inline G4double G4MuBremsstrahlung::GetMeanFreePath(const G4Track& trackData,
|
||||
G4ForceCondition* condition)
|
||||
{
|
||||
const G4DynamicParticle* aDynamicParticle;
|
||||
G4Material* aMaterial;
|
||||
G4double MeanFreePath;
|
||||
G4bool isOutRange ;
|
||||
|
||||
|
||||
*condition = NotForced ;
|
||||
|
||||
aDynamicParticle = trackData.GetDynamicParticle();
|
||||
aMaterial = trackData.GetMaterial();
|
||||
const G4MaterialCutsCouple* couple = trackData.GetMaterialCutsCouple();
|
||||
G4double KineticEnergy = aDynamicParticle->GetKineticEnergy();
|
||||
|
||||
if (KineticEnergy < LowestKineticEnergy)
|
||||
MeanFreePath = DBL_MAX ;
|
||||
else {
|
||||
if (KineticEnergy > HighestKineticEnergy)
|
||||
if (KineticEnergy > HighestKineticEnergy)
|
||||
KineticEnergy = 0.99*HighestKineticEnergy ;
|
||||
MeanFreePath = (*theMeanFreePathTable)(aMaterial->GetIndex())->
|
||||
MeanFreePath = (*theMeanFreePathTable)(couple->GetIndex())->
|
||||
GetValue( KineticEnergy, isOutRange );
|
||||
}
|
||||
return MeanFreePath;
|
||||
}
|
||||
return MeanFreePath;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
inline G4double G4MuBremsstrahlung::ComputeMeanFreePath(
|
||||
const G4ParticleDefinition* ParticleType,
|
||||
G4double KineticEnergy,
|
||||
const G4Material* aMaterial)
|
||||
const G4MaterialCutsCouple* couple)
|
||||
{
|
||||
const G4Material* aMaterial = couple->GetMaterial();
|
||||
const G4ElementVector* theElementVector = aMaterial->GetElementVector() ;
|
||||
const G4double* theAtomNumDensityVector =
|
||||
const G4double* theAtomNumDensityVector =
|
||||
aMaterial->GetAtomicNumDensityVector();
|
||||
G4double GammaEnergyCut = (G4Gamma::Gamma())->GetEnergyThreshold(aMaterial);
|
||||
G4double GammaEnergyCut = SecondaryEnergyThreshold(couple->GetIndex());
|
||||
G4double SIGMA = 0 ;
|
||||
for ( size_t i=0 ; i < aMaterial->GetNumberOfElements() ; i++ )
|
||||
{
|
||||
SIGMA += theAtomNumDensityVector[i] *
|
||||
{
|
||||
SIGMA += theAtomNumDensityVector[i] *
|
||||
ComputeMicroscopicCrossSection(
|
||||
ParticleType, KineticEnergy,
|
||||
(*theElementVector)[i]->GetZ(),
|
||||
(*theElementVector)[i]->GetA(),
|
||||
(*theElementVector)[i]->GetZ(),
|
||||
(*theElementVector)[i]->GetA(),
|
||||
GammaEnergyCut );
|
||||
}
|
||||
}
|
||||
|
||||
return SIGMA > 0. ? 1./SIGMA : DBL_MAX;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
inline G4bool G4MuBremsstrahlung::IsApplicable(
|
||||
const G4ParticleDefinition& particle)
|
||||
{
|
||||
@@ -99,4 +100,11 @@ inline G4bool G4MuBremsstrahlung::IsApplicable(
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
inline G4double G4MuBremsstrahlung::SecondaryEnergyThreshold(size_t index)
|
||||
{
|
||||
return (*secondaryEnergyCuts)[index];
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
@@ -32,10 +32,15 @@
|
||||
//
|
||||
// Creation date: 18.05.2002
|
||||
//
|
||||
// Modifications:
|
||||
// Modifications:
|
||||
//
|
||||
// 23-12-02 Change interface in order to move to cut per region (V.Ivanchenko)
|
||||
// 27-01-03 Make models region aware (V.Ivanchenko)
|
||||
// 13-02-03 Add name (V.Ivanchenko)
|
||||
//
|
||||
|
||||
//
|
||||
// Class Description:
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of energy loss for gamma emission by muons
|
||||
|
||||
@@ -52,25 +57,24 @@ class G4MuBremsstrahlungModel : public G4VEmModel
|
||||
|
||||
public:
|
||||
|
||||
G4MuBremsstrahlungModel(const G4ParticleDefinition* p = 0);
|
||||
G4MuBremsstrahlungModel(const G4ParticleDefinition* p = 0, const G4String& nam = "MuBrem");
|
||||
|
||||
~G4MuBremsstrahlungModel();
|
||||
|
||||
G4double HighEnergyLimit(const G4ParticleDefinition* p,
|
||||
const G4Material*);
|
||||
|
||||
G4double LowEnergyLimit(const G4ParticleDefinition* p,
|
||||
const G4Material*);
|
||||
void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
void SetHighEnergyLimit(const G4Material*, G4double e) {highKinEnergy = e;};
|
||||
|
||||
void SetLowEnergyLimit(const G4Material*, G4double e) {lowKinEnergy = e;};
|
||||
G4double HighEnergyLimit(const G4ParticleDefinition* p);
|
||||
|
||||
G4double LowEnergyLimit(const G4ParticleDefinition* p);
|
||||
|
||||
void SetHighEnergyLimit(G4double e) {highKinEnergy = e;};
|
||||
|
||||
void SetLowEnergyLimit(G4double e) {lowKinEnergy = e;};
|
||||
|
||||
G4double MinEnergyCut(const G4ParticleDefinition*,
|
||||
const G4Material*);
|
||||
|
||||
G4bool IsInCharge(const G4ParticleDefinition*,
|
||||
const G4Material*);
|
||||
const G4MaterialCutsCouple*);
|
||||
|
||||
G4bool IsInCharge(const G4ParticleDefinition*);
|
||||
|
||||
G4double ComputeDEDX(const G4Material*,
|
||||
const G4ParticleDefinition*,
|
||||
@@ -83,42 +87,48 @@ public:
|
||||
G4double cutEnergy,
|
||||
G4double maxEnergy);
|
||||
|
||||
G4std::vector<G4DynamicParticle*>* SampleSecondary(
|
||||
const G4Material*,
|
||||
G4DynamicParticle* SampleSecondary(
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double tmin,
|
||||
G4double maxEnergy);
|
||||
|
||||
|
||||
G4std::vector<G4DynamicParticle*>* SampleSecondaries(
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double tmin,
|
||||
G4double maxEnergy);
|
||||
|
||||
virtual G4double MaxSecondaryEnergy(
|
||||
const G4DynamicParticle* dynParticle);
|
||||
const G4DynamicParticle* dynParticle);
|
||||
protected:
|
||||
|
||||
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kineticEnergy);
|
||||
G4double kineticEnergy);
|
||||
|
||||
private:
|
||||
|
||||
G4double ComputMuBremLoss(G4double Z, G4double A, G4double tkin, G4double cut);
|
||||
G4double ComputMuBremLoss(G4double Z, G4double A, G4double tkin, G4double cut);
|
||||
|
||||
G4double ComputeMicroscopicCrossSection(G4double tkin,
|
||||
G4double Z,
|
||||
G4double A,
|
||||
G4double A,
|
||||
G4double cut);
|
||||
|
||||
G4double ComputeDMicroscopicCrossSection(G4double tkin,
|
||||
G4double Z,
|
||||
G4double A,
|
||||
G4double A,
|
||||
G4double gammaEnergy);
|
||||
|
||||
void ComputePartialSumSigma(const G4Material* material, G4double tkin,
|
||||
G4double cut);
|
||||
G4DataVector* ComputePartialSumSigma(const G4Material* material,
|
||||
G4double tkin, G4double cut);
|
||||
|
||||
const G4Element* SelectRandomAtom(const G4Material* material) const;
|
||||
const G4Element* SelectRandomAtom(const G4MaterialCutsCouple* couple) const;
|
||||
|
||||
void MakeSamplingTables();
|
||||
|
||||
|
||||
// hide assignment operator
|
||||
// hide assignment operator
|
||||
G4MuBremsstrahlungModel & operator=(const G4MuBremsstrahlungModel &right);
|
||||
G4MuBremsstrahlungModel(const G4MuBremsstrahlungModel&);
|
||||
|
||||
@@ -126,13 +136,12 @@ private:
|
||||
G4double lowKinEnergy;
|
||||
G4double minThreshold;
|
||||
|
||||
// tables for sampling
|
||||
// tables for sampling
|
||||
G4int nzdat,ntdat,NBIN;
|
||||
static G4double zdat[5],adat[5],tdat[8];
|
||||
G4double ya[1001], proba[5][8][1001];
|
||||
G4double cutFixed;
|
||||
|
||||
const G4Material* oldMaterial;
|
||||
G4std::vector<G4DataVector*> partialSumSigma;
|
||||
G4bool samplingTablesAreFilled;
|
||||
|
||||
@@ -140,7 +149,7 @@ private:
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline
|
||||
inline
|
||||
G4double G4MuBremsstrahlungModel::MaxSecondaryEnergy(
|
||||
const G4DynamicParticle* dynParticle)
|
||||
{
|
||||
|
||||
@@ -32,18 +32,21 @@
|
||||
//
|
||||
// Creation date: 30.09.1997
|
||||
//
|
||||
// Modifications:
|
||||
// Modifications:
|
||||
//
|
||||
// 10/02/00 modifications , new e.m. structure, L.Urban
|
||||
// 10-08-01: new methods Store/Retrieve PhysicsTable (mma)
|
||||
// 29-10-01 all static functions no more inlined (mma)
|
||||
// 10/02/00 modifications , new e.m. structure, L.Urban
|
||||
// 10-08-01 new methods Store/Retrieve PhysicsTable (mma)
|
||||
// 29-10-01 all static functions no more inlined (mma)
|
||||
// 10-05-02 V.Ivanchenko update to new design
|
||||
// 26-12-02 secondary production moved to derived classes (VI)
|
||||
// 24-01-03 Make models region aware (V.Ivanchenko)
|
||||
// 05-02-03 Fix compilation warnings (V.Ivanchenko)
|
||||
//
|
||||
// Class Description:
|
||||
// Class Description:
|
||||
//
|
||||
// This class manages the Bremsstrahlung process for muons.
|
||||
// it inherites from G4VContinuousDiscreteProcess via G4VEnergyLossSTD.
|
||||
//
|
||||
//
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -57,14 +60,14 @@
|
||||
#include "G4VEnergyLossSTD.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
class G4MuBremsstrahlungSTD : public G4VEnergyLossSTD
|
||||
|
||||
{
|
||||
|
||||
{
|
||||
public:
|
||||
|
||||
|
||||
G4MuBremsstrahlungSTD(const G4String& processName = "MuBrems");
|
||||
|
||||
|
||||
~G4MuBremsstrahlungSTD();
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition& p)
|
||||
@@ -73,6 +76,19 @@ public:
|
||||
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition* p,
|
||||
const G4Material*, G4double cut);
|
||||
|
||||
virtual G4std::vector<G4Track*>* SecondariesAlongStep(
|
||||
const G4Step&,
|
||||
G4double&,
|
||||
G4double&,
|
||||
G4double&) {return 0;};
|
||||
|
||||
virtual void SecondariesPostStep(
|
||||
G4VEmModel*,
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double&,
|
||||
G4double&);
|
||||
|
||||
void PrintInfoDefinition() const;
|
||||
// Print out of the class parameters
|
||||
|
||||
@@ -102,7 +118,7 @@ inline G4double G4MuBremsstrahlungSTD::MinPrimaryEnergy(const G4ParticleDefiniti
|
||||
const G4Material*,
|
||||
G4double cut)
|
||||
{
|
||||
return cut;
|
||||
return cut;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
@@ -112,6 +128,25 @@ inline G4double G4MuBremsstrahlungSTD::MaxSecondaryEnergy(const G4DynamicParticl
|
||||
return dynParticle->GetKineticEnergy();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#include "G4VEmModel.hh"
|
||||
|
||||
inline void G4MuBremsstrahlungSTD::SecondariesPostStep(
|
||||
G4VEmModel* model,
|
||||
const G4MaterialCutsCouple* couple,
|
||||
const G4DynamicParticle* dp,
|
||||
G4double& tcut,
|
||||
G4double& kinEnergy)
|
||||
{
|
||||
G4DynamicParticle* gamma = model->SampleSecondary(couple, dp, tcut, kinEnergy);
|
||||
if(gamma) {
|
||||
aParticleChange.SetNumberOfSecondaries(1);
|
||||
aParticleChange.AddSecondary(gamma);
|
||||
kinEnergy -= gamma->GetKineticEnergy();
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4MuIonisation.hh,v 1.13 2001/10/29 13:53:18 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-05-00 $
|
||||
// $Id: G4MuIonisation.hh,v 1.14 2003/01/17 18:54:39 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-05-01 $
|
||||
//
|
||||
// --------------- G4MuIonisation physics process ------------------------------
|
||||
// by Laszlo Urban, September 1997
|
||||
@@ -33,6 +33,7 @@
|
||||
// 29-08-01 new function ComputeRestrictedMeandEdx() + 'cleanup' (mma)
|
||||
// 19-09-01 come back to the old process name 'MuIoni'
|
||||
// 29-10-01 all static functions no more inlined (mma)
|
||||
// 16-01-03 Migrade to cut per region (V.Ivanchenko)
|
||||
//
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
@@ -45,54 +46,55 @@
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
#ifndef G4MuIonisation_h
|
||||
#define G4MuIonisation_h 1
|
||||
|
||||
|
||||
#include "G4VMuEnergyLoss.hh"
|
||||
|
||||
#include "G4MaterialCutsCouple.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4MuIonisation : public G4VMuEnergyLoss
|
||||
|
||||
|
||||
class G4MuIonisation : public G4VMuEnergyLoss
|
||||
|
||||
{
|
||||
public: // with description
|
||||
|
||||
G4MuIonisation(const G4String& processName = "MuIoni");
|
||||
|
||||
G4MuIonisation(const G4String& processName = "MuIoni");
|
||||
|
||||
~G4MuIonisation();
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition&);
|
||||
// return true for charged particles, false otherwise
|
||||
|
||||
// return true for charged particles, false otherwise
|
||||
|
||||
void BuildPhysicsTable(const G4ParticleDefinition& aParticleType);
|
||||
// this function overloads a virtual function of the base class.
|
||||
// It is invoked by the G4ParticleWithCuts::SetCut() method.
|
||||
// It invokes BuildLambdaTable(), BuildLossTable(), BuildDEDXTable()
|
||||
|
||||
|
||||
void BuildLossTable(const G4ParticleDefinition& aParticleType);
|
||||
// build the dE/dx tables due to the ionisation, for every materials.
|
||||
// (restricted stopping power, Bethe-Bloch formula)
|
||||
|
||||
|
||||
void BuildLambdaTable(const G4ParticleDefinition& aParticleType);
|
||||
// build mean free path tables for the delta rays production.
|
||||
// the tables are built for every materials.
|
||||
|
||||
|
||||
G4bool StorePhysicsTable(G4ParticleDefinition* ,
|
||||
const G4String& directory, G4bool);
|
||||
// store eLoss and MeanFreePath tables into an external file
|
||||
// specified by 'directory' (must exist before invokation)
|
||||
|
||||
G4bool RetrievePhysicsTable(G4ParticleDefinition* ,
|
||||
|
||||
G4bool RetrievePhysicsTable(G4ParticleDefinition* ,
|
||||
const G4String& directory, G4bool);
|
||||
// retrieve eLoss and MeanFreePath tables from an external file
|
||||
// specified by 'directory'
|
||||
|
||||
|
||||
virtual void PrintInfoDefinition();
|
||||
// Print few lines of informations about the process: validity range,
|
||||
// origine ..etc..
|
||||
// Invoked by BuildPhysicsTable().
|
||||
|
||||
|
||||
G4double GetMeanFreePath(const G4Track& track,
|
||||
G4double previousStepSize,
|
||||
G4ForceCondition* condition );
|
||||
@@ -101,77 +103,81 @@ class G4MuIonisation : public G4VMuEnergyLoss
|
||||
// The previousStepSize and G4ForceCondition* are not used.
|
||||
// This function overloads a virtual function of the base class.
|
||||
// It is invoked by the ProcessManager of the Particle.
|
||||
|
||||
|
||||
G4VParticleChange* PostStepDoIt(const G4Track& track,
|
||||
const G4Step& Step );
|
||||
const G4Step& Step );
|
||||
// It computes the final state of the process (at end of step),
|
||||
// returned as a ParticleChange object.
|
||||
// returned as a ParticleChange object.
|
||||
// This function overloads a virtual function of the base class.
|
||||
// It is invoked by the ProcessManager of the Particle.
|
||||
|
||||
|
||||
|
||||
protected: // with description
|
||||
|
||||
|
||||
virtual G4double ComputeRestrictedMeandEdx(
|
||||
const G4ParticleDefinition& aParticleType,
|
||||
G4double KineticEnergy,
|
||||
const G4Material* material,
|
||||
G4double DeltaThreshold);
|
||||
// computes restricted mean dE/dx in Geant4 internal units.
|
||||
|
||||
|
||||
virtual G4double ComputeCrossSectionPerAtom(
|
||||
const G4ParticleDefinition& aParticleType,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
G4double DeltaThreshold);
|
||||
// computes total cross section per atom in Geant4 internal units.
|
||||
|
||||
|
||||
virtual G4double ComputeDifCrossSectionPerAtom(
|
||||
const G4ParticleDefinition& aParticleType,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
G4double KnockonEnergy);
|
||||
// computes differential cross section per atom.
|
||||
|
||||
// computes differential cross section per atom.
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
virtual G4double SecondaryEnergyThreshold(size_t index);
|
||||
|
||||
G4PhysicsTable* theMeanFreePathTable;
|
||||
|
||||
private:
|
||||
|
||||
// hide assignment operator
|
||||
// hide assignment operator
|
||||
G4MuIonisation & operator=(const G4MuIonisation &right);
|
||||
G4MuIonisation(const G4MuIonisation&);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
static G4double LowerBoundLambda; // bining for lambda table
|
||||
static G4double UpperBoundLambda;
|
||||
static G4double UpperBoundLambda;
|
||||
static G4int NbinLambda;
|
||||
|
||||
|
||||
G4double LowestKineticEnergy; // binning for dE/dx table
|
||||
G4double HighestKineticEnergy;
|
||||
G4int TotBin;
|
||||
|
||||
const G4std::vector<G4double>* secondaryEnergyCuts;
|
||||
|
||||
public: // with description
|
||||
|
||||
static void SetLowerBoundLambda(G4double val);
|
||||
static void SetUpperBoundLambda(G4double val);
|
||||
static void SetNbinLambda(G4int n);
|
||||
// set the parameters of the mean free path table.
|
||||
|
||||
|
||||
static G4double GetLowerBoundLambda();
|
||||
static G4double GetUpperBoundLambda();
|
||||
static G4int GetNbinLambda();
|
||||
// get the parameters of the mean free path table.
|
||||
};
|
||||
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
#include "G4MuIonisation.icc"
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4MuIonisation.icc,v 1.4 2001/08/29 16:38:05 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-05-00 $
|
||||
// $Id: G4MuIonisation.icc,v 1.5 2003/01/17 18:54:39 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-05-01 $
|
||||
//
|
||||
//
|
||||
// GEANT 4 class inlined methods file
|
||||
@@ -31,9 +31,10 @@
|
||||
// by Laszlo Urban, September 1997
|
||||
// ---------------------------------------------------------------
|
||||
//
|
||||
// 20/11/97: correction on MeanFreePath for KineticEnergy > HighestLimit
|
||||
// 14-08-01: 'cleanup' of GetMeanFreePath (mma)
|
||||
//
|
||||
// 20/11/97 correction on MeanFreePath for KineticEnergy > HighestLimit
|
||||
// 14-08-01 'cleanup' of GetMeanFreePath (mma)
|
||||
// 16-01-03 Migrade to cut per region (V.Ivanchenko)
|
||||
//
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
@@ -41,7 +42,7 @@
|
||||
|
||||
inline G4bool G4MuIonisation::IsApplicable(
|
||||
const G4ParticleDefinition& particle)
|
||||
{
|
||||
{
|
||||
return ((&particle == G4MuonPlus::MuonPlus() ) ||
|
||||
(&particle == G4MuonMinus::MuonMinus()) );
|
||||
}
|
||||
@@ -49,21 +50,29 @@ inline G4bool G4MuIonisation::IsApplicable(
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4MuIonisation::GetMeanFreePath(const G4Track& track, G4double,
|
||||
G4ForceCondition*)
|
||||
G4ForceCondition*)
|
||||
{
|
||||
G4double KineticEnergy = track.GetDynamicParticle()->GetKineticEnergy();
|
||||
G4Material* aMaterial = track.GetMaterial();
|
||||
|
||||
const G4MaterialCutsCouple* couple = track.GetMaterialCutsCouple();
|
||||
|
||||
G4double MeanFreePath;
|
||||
G4bool isOut;
|
||||
|
||||
|
||||
if (KineticEnergy > HighestKineticEnergy) KineticEnergy = HighestKineticEnergy;
|
||||
if (KineticEnergy > LowestKineticEnergy)
|
||||
MeanFreePath = ((*theMeanFreePathTable)(aMaterial->GetIndex()))->
|
||||
GetValue(KineticEnergy, isOut);
|
||||
MeanFreePath = ((*theMeanFreePathTable)(couple->GetIndex()))->
|
||||
GetValue(KineticEnergy, isOut);
|
||||
else MeanFreePath = DBL_MAX;
|
||||
|
||||
return MeanFreePath;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double G4MuIonisation::SecondaryEnergyThreshold(size_t index)
|
||||
{
|
||||
return (*secondaryEnergyCuts)[index];
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
|
||||
@@ -29,10 +29,10 @@
|
||||
// File name: G4MuIonisationSTD
|
||||
//
|
||||
// Author: Laszlo Urban
|
||||
//
|
||||
//
|
||||
// Creation date: 30.05.1997
|
||||
//
|
||||
// Modifications:
|
||||
// Modifications:
|
||||
//
|
||||
// corrected by L.Urban on 24/09/97
|
||||
// corrected by L.Urban on 13/01/98
|
||||
@@ -41,15 +41,19 @@
|
||||
// 10-08-01 new methods Store/Retrieve PhysicsTable (mma)
|
||||
// 14-08-01 new function ComputeRestrictedMeandEdx() + 'cleanup' (mma)
|
||||
// 19-09-01 come back to previous process name "hIoni"
|
||||
// 29-10-01 all static functions no more inlined
|
||||
// 29-10-01 all static functions no more inlined
|
||||
// 10-05-02 V.Ivanchenko update to new design
|
||||
// 09-12-02 V.Ivanchenko remove warning
|
||||
// 26-12-02 Secondary production moved to derived classes (VI)
|
||||
// 24-01-03 Make models region aware (V.Ivanchenko)
|
||||
// 05-02-03 Fix compilation warnings (V.Ivanchenko)
|
||||
// 13-02-03 SubCutoff regime is assigned to a region (V.Ivanchenko)
|
||||
//
|
||||
// Class Description:
|
||||
// Class Description:
|
||||
//
|
||||
// This class manages the ionisation process for muons.
|
||||
// it inherites from G4VContinuousDiscreteProcess via G4VEnergyLossSTD.
|
||||
//
|
||||
//
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -72,13 +76,28 @@ public:
|
||||
G4MuIonisationSTD(const G4String& name = "muIoni");
|
||||
|
||||
~G4MuIonisationSTD();
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition& p)
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition& p)
|
||||
{return (p.GetPDGCharge() != 0.0 && p.GetPDGMass() > 10.0*MeV);};
|
||||
|
||||
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition* p,
|
||||
const G4Material*, G4double cut);
|
||||
|
||||
virtual G4std::vector<G4Track*>* SecondariesAlongStep(
|
||||
const G4Step&,
|
||||
G4double&,
|
||||
G4double&,
|
||||
G4double&);
|
||||
|
||||
virtual void SecondariesPostStep(
|
||||
G4VEmModel*,
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double&,
|
||||
G4double&);
|
||||
|
||||
void SetSubCutoff(G4bool val);
|
||||
|
||||
void PrintInfoDefinition() const;
|
||||
// Print out of the class parameters
|
||||
|
||||
@@ -92,21 +111,24 @@ private:
|
||||
|
||||
void InitialiseProcess();
|
||||
|
||||
// hide assignment operator
|
||||
// hide assignment operator
|
||||
G4MuIonisationSTD & operator=(const G4MuIonisationSTD &right);
|
||||
G4MuIonisationSTD(const G4MuIonisationSTD&);
|
||||
|
||||
const G4ParticleDefinition* theParticle;
|
||||
const G4ParticleDefinition* theBaseParticle;
|
||||
G4double mass;
|
||||
G4double ratio;
|
||||
|
||||
const G4ParticleDefinition* theParticle;
|
||||
const G4ParticleDefinition* theBaseParticle;
|
||||
|
||||
G4bool subCutoff;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4MuIonisationSTD::MinPrimaryEnergy(const G4ParticleDefinition* p,
|
||||
const G4Material*,
|
||||
const G4Material*,
|
||||
G4double cut)
|
||||
{
|
||||
G4double x = 0.5*cut/electron_mass_c2;
|
||||
@@ -125,6 +147,49 @@ inline G4double G4MuIonisationSTD::MaxSecondaryEnergy(const G4DynamicParticle* d
|
||||
|
||||
return tmax;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#include "G4VSubCutoffProcessor.hh"
|
||||
|
||||
inline G4std::vector<G4Track*>* G4MuIonisationSTD::SecondariesAlongStep(
|
||||
const G4Step& step,
|
||||
G4double& tmax,
|
||||
G4double& eloss,
|
||||
G4double& kinEnergy)
|
||||
{
|
||||
G4std::vector<G4Track*>* newp = 0;
|
||||
if(subCutoff) {
|
||||
G4VSubCutoffProcessor* sp = SubCutoffProcessor(CurrentMaterialCutsCoupleIndex());
|
||||
if (sp) {
|
||||
G4VEmModel* model = SelectModel(kinEnergy);
|
||||
newp = sp->SampleSecondaries(step,tmax,eloss,model);
|
||||
}
|
||||
}
|
||||
return newp;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#include "G4VEmModel.hh"
|
||||
|
||||
inline void G4MuIonisationSTD::SecondariesPostStep(
|
||||
G4VEmModel* model,
|
||||
const G4MaterialCutsCouple* couple,
|
||||
const G4DynamicParticle* dp,
|
||||
G4double& tcut,
|
||||
G4double& kinEnergy)
|
||||
{
|
||||
G4DynamicParticle* delta = model->SampleSecondary(couple, dp, tcut, kinEnergy);
|
||||
aParticleChange.SetNumberOfSecondaries(1);
|
||||
aParticleChange.AddSecondary(delta);
|
||||
G4ThreeVector finalP = dp->GetMomentum();
|
||||
kinEnergy -= delta->GetKineticEnergy();
|
||||
finalP -= delta->GetMomentum();
|
||||
finalP = finalP.unit();
|
||||
aParticleChange.SetMomentumDirectionChange(finalP);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4MuPairProduction.hh,v 1.12 2001/10/29 13:53:18 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-05-00 $
|
||||
// $Id: G4MuPairProduction.hh,v 1.13 2003/01/17 18:54:40 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-05-01 $
|
||||
//
|
||||
//--------------- G4MuPairProduction physics process ------------------
|
||||
// by Laszlo Urban, May 1998
|
||||
@@ -30,32 +30,34 @@
|
||||
// 10-02-00 modifications , new e.m. structure, L.Urban
|
||||
// 10-08-01 new methods Store/Retrieve PhysicsTable (mma)
|
||||
// 29-10-01 all static functions no more inlined (mma)
|
||||
// 16-01-03 Migrade to cut per region (V.Ivanchenko)
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef G4MuPairproduction_h
|
||||
#define G4MuPairproduction_h 1
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#include "G4ios.hh"
|
||||
|
||||
#include "G4ios.hh"
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4VMuEnergyLoss.hh"
|
||||
#include "G4Track.hh"
|
||||
#include "G4Step.hh"
|
||||
#include "G4OrderedTable.hh"
|
||||
#include "G4OrderedTable.hh"
|
||||
#include "G4PhysicsTable.hh"
|
||||
#include "G4PhysicsLogVector.hh"
|
||||
#include "G4MaterialCutsCouple.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
class G4MuPairProduction : public G4VMuEnergyLoss
|
||||
|
||||
{
|
||||
|
||||
{
|
||||
public:
|
||||
|
||||
|
||||
G4MuPairProduction(const G4String& processName = "MuPairProd");
|
||||
|
||||
|
||||
~G4MuPairProduction();
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition&);
|
||||
@@ -71,53 +73,53 @@ class G4MuPairProduction : public G4VMuEnergyLoss
|
||||
G4double GetMeanFreePath( const G4Track& track,
|
||||
G4double previousStepSize,
|
||||
G4ForceCondition* condition );
|
||||
|
||||
|
||||
G4VParticleChange *PostStepDoIt(const G4Track& track,
|
||||
const G4Step& Step );
|
||||
const G4Step& Step );
|
||||
|
||||
G4double GetDMicroscopicCrossSection(
|
||||
const G4ParticleDefinition* ParticleType,
|
||||
G4double KineticEnergy,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
G4double PairEnergy);
|
||||
|
||||
|
||||
G4bool StorePhysicsTable(G4ParticleDefinition* ,
|
||||
const G4String& directory, G4bool);
|
||||
// store eLoss and MeanFreePath tables into an external file
|
||||
// specified by 'directory' (must exist before invokation)
|
||||
|
||||
G4bool RetrievePhysicsTable(G4ParticleDefinition* ,
|
||||
|
||||
G4bool RetrievePhysicsTable(G4ParticleDefinition* ,
|
||||
const G4String& directory, G4bool);
|
||||
// retrieve eLoss and MeanFreePath tables from an external file
|
||||
// specified by 'directory'
|
||||
// specified by 'directory'
|
||||
|
||||
protected:
|
||||
|
||||
G4double ComputeMeanFreePath(const G4ParticleDefinition* ParticleType,
|
||||
G4double KineticEnergy,
|
||||
const G4Material* aMaterial);
|
||||
G4double KineticEnergy,
|
||||
const G4MaterialCutsCouple* couple);
|
||||
|
||||
void ComputePartialSumSigma(const G4ParticleDefinition* ParticleType,
|
||||
G4double KineticEnergy,
|
||||
const G4Material* aMaterial);
|
||||
G4double KineticEnergy,
|
||||
const G4MaterialCutsCouple* couple);
|
||||
|
||||
virtual G4double ComputeMicroscopicCrossSection(
|
||||
const G4ParticleDefinition* ParticleType,
|
||||
G4double KineticEnergy,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
G4double ElectronEnergyCut,
|
||||
G4double PositronEnergyCut);
|
||||
|
||||
G4double ComputeDDMicroscopicCrossSection(
|
||||
const G4ParticleDefinition* ParticleType,
|
||||
G4double KineticEnergy,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
G4double PairEnergy,
|
||||
G4double asymmetry);
|
||||
|
||||
G4double ComputeDMicroscopicCrossSection(
|
||||
const G4ParticleDefinition* ParticleType,
|
||||
G4double KineticEnergy,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
G4double PairEnergy);
|
||||
|
||||
@@ -130,15 +132,19 @@ class G4MuPairProduction : public G4VMuEnergyLoss
|
||||
G4double Z,G4double T,G4double ElectronCut,
|
||||
G4double PositronCut);
|
||||
|
||||
G4Element* SelectRandomAtom(G4Material* aMaterial) const;
|
||||
G4Element* SelectRandomAtom(const G4MaterialCutsCouple* couple) const;
|
||||
|
||||
void MakeSamplingTables( const G4ParticleDefinition* ParticleType );
|
||||
|
||||
protected:
|
||||
|
||||
virtual G4double SecondaryEnergyThreshold(size_t index);
|
||||
|
||||
private:
|
||||
|
||||
G4PhysicsTable* theMeanFreePathTable;
|
||||
G4PhysicsTable* theMeanFreePathTable;
|
||||
|
||||
G4OrderedTable PartialSumSigma;
|
||||
G4OrderedTable PartialSumSigma;
|
||||
|
||||
static G4double LowerBoundLambda; // bining for lambda table
|
||||
static G4double UpperBoundLambda;
|
||||
@@ -146,13 +152,10 @@ class G4MuPairProduction : public G4VMuEnergyLoss
|
||||
G4double LowestKineticEnergy,HighestKineticEnergy;
|
||||
G4int TotBin;
|
||||
|
||||
const G4double* ElectronCutInKineticEnergy;
|
||||
const G4double* PositronCutInKineticEnergy;
|
||||
const G4std::vector<G4double>* electronEnergyCuts;
|
||||
const G4std::vector<G4double>* positronEnergyCuts;
|
||||
|
||||
G4double ElectronCutInKineticEnergyNow;
|
||||
G4double PositronCutInKineticEnergyNow;
|
||||
|
||||
// tables for sampling
|
||||
// tables for sampling
|
||||
static G4int nzdat,ntdat,NBIN;
|
||||
static G4double zdat[5],tdat[8];
|
||||
static G4double ya[1001],proba[5][8][1001];
|
||||
@@ -170,7 +173,7 @@ class G4MuPairProduction : public G4VMuEnergyLoss
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
#include "G4MuPairProduction.icc"
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4MuPairProduction.icc,v 1.8 2001/10/24 16:36:40 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-05-00 $
|
||||
// $Id: G4MuPairProduction.icc,v 1.9 2003/01/17 18:54:40 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-05-01 $
|
||||
//
|
||||
//--------------- G4MuPairProduction physics process ------------------
|
||||
// by Laszlo Urban, May 1998
|
||||
@@ -33,60 +33,60 @@
|
||||
// 17-09-01 migration of Materials to pure STL (mma)
|
||||
// 29.05.01 V.Ivanchenko minor changes to provide ANSI -wall compilation
|
||||
// 28-09-01 suppression of theMuonPlus ..etc..data members (mma)
|
||||
// 16-01-03 Migrade to cut per region (V.Ivanchenko)
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
inline G4double G4MuPairProduction::GetMeanFreePath(const G4Track& trackData,
|
||||
G4double previousStepSize,
|
||||
G4ForceCondition* condition)
|
||||
{
|
||||
const G4DynamicParticle* aDynamicParticle;
|
||||
G4Material* aMaterial;
|
||||
G4double MeanFreePath;
|
||||
G4bool isOutRange ;
|
||||
|
||||
|
||||
*condition = NotForced ;
|
||||
|
||||
aDynamicParticle = trackData.GetDynamicParticle();
|
||||
aMaterial = trackData.GetMaterial();
|
||||
const G4MaterialCutsCouple* couple = trackData.GetMaterialCutsCouple();
|
||||
G4double KineticEnergy = aDynamicParticle->GetKineticEnergy();
|
||||
|
||||
if (KineticEnergy < LowestKineticEnergy)
|
||||
MeanFreePath = DBL_MAX ;
|
||||
else {
|
||||
if (KineticEnergy > HighestKineticEnergy)
|
||||
if (KineticEnergy > HighestKineticEnergy)
|
||||
KineticEnergy = 0.99*HighestKineticEnergy ;
|
||||
MeanFreePath = (*theMeanFreePathTable)(aMaterial->GetIndex())->
|
||||
MeanFreePath = (*theMeanFreePathTable)(couple->GetIndex())->
|
||||
GetValue( KineticEnergy, isOutRange );
|
||||
}
|
||||
return MeanFreePath;
|
||||
}
|
||||
return MeanFreePath;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
inline G4double G4MuPairProduction::ComputeMeanFreePath(
|
||||
const G4ParticleDefinition* ParticleType,
|
||||
G4double KineticEnergy,
|
||||
const G4Material* aMaterial)
|
||||
G4double KineticEnergy,
|
||||
const G4MaterialCutsCouple* couple)
|
||||
{
|
||||
const G4Material* aMaterial = couple->GetMaterial();
|
||||
const G4ElementVector* theElementVector = aMaterial->GetElementVector();
|
||||
const G4double* theAtomNumDensityVector =
|
||||
const G4double* theAtomNumDensityVector =
|
||||
aMaterial->GetAtomicNumDensityVector();
|
||||
G4double ElectronEnergyCut =
|
||||
G4Electron::Electron()->GetEnergyThreshold(aMaterial);
|
||||
G4double PositronEnergyCut =
|
||||
G4Positron::Positron()->GetEnergyThreshold(aMaterial);
|
||||
size_t index = couple->GetIndex();
|
||||
G4double ElectronEnergyCut = (*electronEnergyCuts)[index];
|
||||
G4double PositronEnergyCut = (*positronEnergyCuts)[index];
|
||||
|
||||
G4double SIGMA = 0;
|
||||
for ( size_t i=0 ; i < aMaterial->GetNumberOfElements() ; i++ )
|
||||
{
|
||||
SIGMA += theAtomNumDensityVector[i] *
|
||||
{
|
||||
SIGMA += theAtomNumDensityVector[i] *
|
||||
ComputeMicroscopicCrossSection( ParticleType, KineticEnergy,
|
||||
(*theElementVector)[i]->GetZ(),
|
||||
(*theElementVector)[i]->GetZ(),
|
||||
ElectronEnergyCut,PositronEnergyCut );
|
||||
}
|
||||
}
|
||||
|
||||
return SIGMA > 0. ? 1./SIGMA : DBL_MAX;
|
||||
}
|
||||
@@ -101,3 +101,11 @@ inline G4bool G4MuPairProduction::IsApplicable(
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double G4MuPairProduction::SecondaryEnergyThreshold(size_t index)
|
||||
{
|
||||
return (*electronEnergyCuts)[index] + (*positronEnergyCuts)[index]
|
||||
+ 2.*electron_mass_c2;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
@@ -29,16 +29,21 @@
|
||||
// File name: G4MuPairProductionModel
|
||||
//
|
||||
// Author: Vladimir Ivanchenko on base of Laszlo Urban code
|
||||
//
|
||||
//
|
||||
// Creation date: 18.05.2002
|
||||
//
|
||||
// Modifications:
|
||||
// Modifications:
|
||||
//
|
||||
// 23-12-02 Change interface in order to move to cut per region (V.Ivanchenko)
|
||||
// 27-01-03 Make models region aware (V.Ivanchenko)
|
||||
// 13-02-03 Add name (V.Ivanchenko)
|
||||
//
|
||||
|
||||
//
|
||||
// Class Description:
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of e+e- pair production by muons
|
||||
//
|
||||
//
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -53,25 +58,24 @@ class G4MuPairProductionModel : public G4VEmModel
|
||||
|
||||
public:
|
||||
|
||||
G4MuPairProductionModel(const G4ParticleDefinition* p = 0);
|
||||
G4MuPairProductionModel(const G4ParticleDefinition* p = 0, const G4String& nam = "MuPairProd");
|
||||
|
||||
~G4MuPairProductionModel();
|
||||
|
||||
G4double HighEnergyLimit(const G4ParticleDefinition* p,
|
||||
const G4Material*);
|
||||
|
||||
G4double LowEnergyLimit(const G4ParticleDefinition* p,
|
||||
const G4Material*);
|
||||
void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
void SetHighEnergyLimit(const G4Material*, G4double e) {highKinEnergy = e;};
|
||||
|
||||
void SetLowEnergyLimit(const G4Material*, G4double e) {lowKinEnergy = e;};
|
||||
G4double HighEnergyLimit(const G4ParticleDefinition* p);
|
||||
|
||||
G4double LowEnergyLimit(const G4ParticleDefinition* p);
|
||||
|
||||
void SetHighEnergyLimit(G4double e) {highKinEnergy = e;};
|
||||
|
||||
void SetLowEnergyLimit(G4double e) {lowKinEnergy = e;};
|
||||
|
||||
G4double MinEnergyCut(const G4ParticleDefinition*,
|
||||
const G4Material*);
|
||||
|
||||
G4bool IsInCharge(const G4ParticleDefinition*,
|
||||
const G4Material*);
|
||||
const G4MaterialCutsCouple*);
|
||||
|
||||
G4bool IsInCharge(const G4ParticleDefinition*);
|
||||
|
||||
G4double ComputeDEDX(const G4Material*,
|
||||
const G4ParticleDefinition*,
|
||||
@@ -84,58 +88,63 @@ public:
|
||||
G4double cutEnergy,
|
||||
G4double maxEnergy);
|
||||
|
||||
G4std::vector<G4DynamicParticle*>* SampleSecondary(
|
||||
const G4Material*,
|
||||
G4DynamicParticle* SampleSecondary(
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double tmin,
|
||||
G4double maxEnergy);
|
||||
|
||||
G4std::vector<G4DynamicParticle*>* SampleSecondaries(
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double tmin,
|
||||
G4double maxEnergy);
|
||||
|
||||
virtual G4double MaxSecondaryEnergy(
|
||||
const G4DynamicParticle* dynParticle);
|
||||
const G4DynamicParticle* dynParticle);
|
||||
protected:
|
||||
|
||||
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kineticEnergy);
|
||||
G4double kineticEnergy);
|
||||
|
||||
private:
|
||||
|
||||
G4double ComputMuPairLoss(G4double Z, G4double tkin, G4double cut);
|
||||
G4double ComputMuPairLoss(G4double Z, G4double tkin, G4double cut);
|
||||
|
||||
G4double ComputeMicroscopicCrossSection(G4double tkin,
|
||||
G4double Z,
|
||||
G4double A,
|
||||
G4double A,
|
||||
G4double cut);
|
||||
|
||||
G4double ComputeDMicroscopicCrossSection(G4double tkin,
|
||||
G4double Z,
|
||||
G4double pairEnergy);
|
||||
G4double pairEnergy);
|
||||
|
||||
G4double ComputeDDMicroscopicCrossSection(G4double tkin,
|
||||
G4double Z,
|
||||
G4double pairEnergy,
|
||||
G4double asymmetry);
|
||||
G4double asymmetry);
|
||||
|
||||
void ComputePartialSumSigma(const G4Material* material, G4double tkin, G4double cut);
|
||||
G4DataVector* ComputePartialSumSigma(const G4Material* material,
|
||||
G4double tkin, G4double cut);
|
||||
|
||||
const G4Element* SelectRandomAtom(const G4Material* material) const;
|
||||
const G4Element* SelectRandomAtom(const G4MaterialCutsCouple* couple) const;
|
||||
|
||||
void MakeSamplingTables();
|
||||
|
||||
// hide assignment operator
|
||||
// hide assignment operator
|
||||
G4MuPairProductionModel & operator=(const G4MuPairProductionModel &right);
|
||||
G4MuPairProductionModel(const G4MuPairProductionModel&);
|
||||
|
||||
G4double minPairEnergy;
|
||||
G4double highKinEnergy;
|
||||
G4double lowKinEnergy;
|
||||
G4double minThreshold;
|
||||
|
||||
// tables for sampling
|
||||
// tables for sampling
|
||||
G4int nzdat,ntdat,NBIN;
|
||||
static G4double zdat[5],adat[5],tdat[8];
|
||||
G4double ya[1001],proba[5][8][1001];
|
||||
|
||||
const G4Material* oldMaterial;
|
||||
G4std::vector<G4DataVector*> partialSumSigma;
|
||||
G4bool samplingTablesAreFilled;
|
||||
};
|
||||
|
||||
@@ -29,21 +29,25 @@
|
||||
// File name: G4MuPairProductionSTD
|
||||
//
|
||||
// Author: Laszlo Urban
|
||||
//
|
||||
//
|
||||
// Creation date: 30.05.1998
|
||||
//
|
||||
// Modifications:
|
||||
// Modifications:
|
||||
|
||||
// 10-02-00 modifications , new e.m. structure, L.Urban
|
||||
// 10-08-01 new methods Store/Retrieve PhysicsTable (mma)
|
||||
// 29-10-01 all static functions no more inlined (mma)
|
||||
// 29-10-01 all static functions no more inlined (mma)
|
||||
// 10-05-02 V.Ivanchenko update to new design
|
||||
// 26-12-02 secondary production moved to derived classes (VI)
|
||||
// 27-01-03 Make models region aware (V.Ivanchenko)
|
||||
// 05-02-03 Fix compilation warnings (V.Ivanchenko)
|
||||
// 13-02-03 SubCutoff regime is assigned to a region (V.Ivanchenko)
|
||||
//
|
||||
// Class Description:
|
||||
// Class Description:
|
||||
//
|
||||
// This class manages the PairProduction process for muons.
|
||||
// it inherites from G4VContinuousDiscreteProcess via G4VEnergyLossSTD.
|
||||
//
|
||||
//
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -57,14 +61,14 @@
|
||||
#include "G4VEnergyLossSTD.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
class G4MuPairProductionSTD : public G4VEnergyLossSTD
|
||||
|
||||
{
|
||||
|
||||
{
|
||||
public:
|
||||
|
||||
|
||||
G4MuPairProductionSTD(const G4String& processName = "MuPairProd");
|
||||
|
||||
|
||||
~G4MuPairProductionSTD();
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition& p)
|
||||
@@ -73,6 +77,21 @@ public:
|
||||
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition* p,
|
||||
const G4Material*, G4double cut);
|
||||
|
||||
virtual G4std::vector<G4Track*>* SecondariesAlongStep(
|
||||
const G4Step&,
|
||||
G4double&,
|
||||
G4double&,
|
||||
G4double&);
|
||||
|
||||
virtual void SecondariesPostStep(
|
||||
G4VEmModel*,
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double&,
|
||||
G4double&);
|
||||
|
||||
void SetSubCutoff(G4bool val);
|
||||
|
||||
void PrintInfoDefinition() const;
|
||||
// Print out of the class parameters
|
||||
|
||||
@@ -93,25 +112,73 @@ private:
|
||||
const G4ParticleDefinition* theParticle;
|
||||
const G4ParticleDefinition* theBaseParticle;
|
||||
|
||||
G4bool subCutoff;
|
||||
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4MuPairProductionSTD::MinPrimaryEnergy(const G4ParticleDefinition*,
|
||||
const G4Material*,
|
||||
const G4Material*,
|
||||
G4double cut)
|
||||
{
|
||||
return G4std::max(cut, 2.0*electron_mass_c2);
|
||||
return G4std::max(cut, 2.0*electron_mass_c2);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4MuPairProductionSTD::MaxSecondaryEnergy(const G4DynamicParticle* dp)
|
||||
inline G4double G4MuPairProductionSTD::MaxSecondaryEnergy(const G4DynamicParticle* dp)
|
||||
{
|
||||
return dp->GetKineticEnergy();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#include "G4VSubCutoffProcessor.hh"
|
||||
|
||||
inline G4std::vector<G4Track*>* G4MuPairProductionSTD::SecondariesAlongStep(
|
||||
const G4Step& step,
|
||||
G4double& tmax,
|
||||
G4double& eloss,
|
||||
G4double& kinEnergy)
|
||||
{
|
||||
G4std::vector<G4Track*>* newp = 0;
|
||||
if(subCutoff) {
|
||||
G4VSubCutoffProcessor* sp = SubCutoffProcessor(CurrentMaterialCutsCoupleIndex());
|
||||
if (sp) {
|
||||
G4VEmModel* model = SelectModel(kinEnergy);
|
||||
newp = sp->SampleSecondaries(step,tmax,eloss,model);
|
||||
}
|
||||
}
|
||||
return newp;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#include "G4VEmModel.hh"
|
||||
|
||||
inline void G4MuPairProductionSTD::SecondariesPostStep(
|
||||
G4VEmModel* model,
|
||||
const G4MaterialCutsCouple* couple,
|
||||
const G4DynamicParticle* dp,
|
||||
G4double& tcut,
|
||||
G4double& kinEnergy)
|
||||
{
|
||||
G4std::vector<G4DynamicParticle*>* newp =
|
||||
model->SampleSecondaries(couple, dp, tcut, kinEnergy);
|
||||
if(newp) {
|
||||
aParticleChange.SetNumberOfSecondaries(2);
|
||||
G4DynamicParticle* elpos = (*newp)[0];
|
||||
aParticleChange.AddSecondary(elpos);
|
||||
kinEnergy -= elpos->GetKineticEnergy();
|
||||
elpos = (*newp)[1];
|
||||
aParticleChange.AddSecondary(elpos);
|
||||
kinEnergy -= elpos->GetKineticEnergy();
|
||||
delete newp;
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4VMuEnergyLoss.hh,v 1.7 2001/10/29 13:53:18 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-05-00 $
|
||||
// $Id: G4VMuEnergyLoss.hh,v 1.8 2003/01/17 18:54:40 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-05-01 $
|
||||
// -------------------------------------------------------------------
|
||||
// GEANT 4 class header file
|
||||
//
|
||||
@@ -41,17 +41,18 @@
|
||||
// This class creates static muplus/muminus dE/dx and range tables ,
|
||||
// which tables can be used by other processes.
|
||||
// ************************************************************
|
||||
// 27-05-98 some corrections by L.Urban
|
||||
// 23-10-98 cleanup L.Urban
|
||||
// 10-02-00 corrections due to new e.m. structure L.Urban
|
||||
// 27-05-98 some corrections by L.Urban
|
||||
// 23-10-98 cleanup L.Urban
|
||||
// 10-02-00 corrections due to new e.m. structure L.Urban
|
||||
// 10-09-01 loss+ mechanism has been implemented (subcutoff delta rays), L.Urban
|
||||
// 28-09-01 suppression of theMuonPlus ..etc..data members (mma)
|
||||
// 29-10-01 all static functions no more inlined (mma)
|
||||
// 16-01-03 Migrade to cut per region (V.Ivanchenko)
|
||||
// ------------------------------------------------------------
|
||||
|
||||
|
||||
#ifndef G4VMuEnergyLoss_h
|
||||
#define G4VMuEnergyLoss_h 1
|
||||
|
||||
|
||||
#include "G4ios.hh"
|
||||
#include "g4std/fstream"
|
||||
#include "g4std/iomanip"
|
||||
@@ -71,16 +72,17 @@
|
||||
#include "G4MuonPlus.hh"
|
||||
#include "G4PhysicsLogVector.hh"
|
||||
#include "G4PhysicsLinearVector.hh"
|
||||
|
||||
#include "G4MaterialCutsCouple.hh"
|
||||
|
||||
class G4EnergyLossMessenger ;
|
||||
|
||||
|
||||
class G4VMuEnergyLoss : public G4VEnergyLoss
|
||||
|
||||
|
||||
{
|
||||
public:
|
||||
|
||||
G4VMuEnergyLoss(const G4String& );
|
||||
|
||||
|
||||
virtual ~G4VMuEnergyLoss();
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition&);
|
||||
@@ -91,7 +93,7 @@ class G4VMuEnergyLoss : public G4VEnergyLoss
|
||||
const G4Track& track,
|
||||
G4double previousStepSize,
|
||||
G4double currentMinimumStep,
|
||||
G4double& currentSafety) ;
|
||||
G4double& currentSafety) ;
|
||||
|
||||
G4VParticleChange* AlongStepDoIt(const G4Track& track ,const G4Step& Step) ;
|
||||
|
||||
@@ -109,20 +111,19 @@ class G4VMuEnergyLoss : public G4VEnergyLoss
|
||||
|
||||
private:
|
||||
|
||||
// hide assignment operator
|
||||
// hide assignment operator
|
||||
G4VMuEnergyLoss(G4VMuEnergyLoss &);
|
||||
G4VMuEnergyLoss & operator=(const G4VMuEnergyLoss &right);
|
||||
|
||||
G4double GetConstraints(const G4DynamicParticle *aParticle,
|
||||
G4Material *aMaterial);
|
||||
|
||||
const G4MaterialCutsCouple* couple);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
virtual G4double SecondaryEnergyThreshold(size_t index) = 0;
|
||||
|
||||
G4PhysicsTable* theLossTable ;
|
||||
|
||||
G4double* lastgammaCutInRange ;
|
||||
G4double* lastelectronCutInRange ;
|
||||
|
||||
private:
|
||||
|
||||
@@ -134,13 +135,13 @@ class G4VMuEnergyLoss : public G4VEnergyLoss
|
||||
|
||||
G4PhysicsTable** RecorderOfProcess;
|
||||
G4int CounterOfProcess;
|
||||
|
||||
|
||||
|
||||
// fdEdx=(-dE/dx)
|
||||
// computed in GetConstraints at every call;
|
||||
G4double fdEdx;
|
||||
|
||||
// fRangeNow is the actual range of the particle
|
||||
// fRangeNow is the actual range of the particle
|
||||
// computed in GetConstraints
|
||||
G4double fRangeNow ;
|
||||
|
||||
@@ -181,16 +182,16 @@ class G4VMuEnergyLoss : public G4VEnergyLoss
|
||||
static G4PhysicsTable* theRangemuminusTable;
|
||||
|
||||
static G4PhysicsTable* theInverseRangemuplusTable;
|
||||
static G4PhysicsTable* theInverseRangemuminusTable;
|
||||
static G4PhysicsTable* theInverseRangemuminusTable;
|
||||
|
||||
static G4PhysicsTable* theLabTimemuplusTable;
|
||||
static G4PhysicsTable* theLabTimemuminusTable;
|
||||
|
||||
static G4PhysicsTable* theLabTimemuminusTable;
|
||||
|
||||
static G4PhysicsTable* theProperTimemuplusTable;
|
||||
static G4PhysicsTable* theProperTimemuminusTable;
|
||||
|
||||
|
||||
// processes inherited from G4muEnergyLoss
|
||||
// processes inherited from G4muEnergyLoss
|
||||
// register themselves in the static array Recorder
|
||||
static G4int NbOfProcesses;
|
||||
static G4PhysicsTable** RecorderOfmuplusProcess;
|
||||
@@ -221,7 +222,7 @@ class G4VMuEnergyLoss : public G4VEnergyLoss
|
||||
// delta rays in one step
|
||||
|
||||
};
|
||||
|
||||
|
||||
#include "G4VMuEnergyLoss.icc"
|
||||
|
||||
#endif
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4VMuEnergyLoss.icc,v 1.3 2001/09/28 15:44:20 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-05-00 $
|
||||
// $Id: G4VMuEnergyLoss.icc,v 1.4 2003/01/17 18:54:40 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-05-01 $
|
||||
// ---------------------------------------------------------------
|
||||
// GEANT 4 class inlined methods file
|
||||
//
|
||||
@@ -38,19 +38,20 @@
|
||||
// 27-05-98 corrections by L. Urban
|
||||
// 23-10-98 cleanup L.Urban
|
||||
// 28-09-01 suppression of theMuonPlus ..etc..data members (mma)
|
||||
// 16-01-03 Migrade to cut per region (V.Ivanchenko)
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
inline G4double G4VMuEnergyLoss::GetContinuousStepLimit(
|
||||
const G4Track& track,
|
||||
G4double,
|
||||
G4double currentMinimumStep,
|
||||
G4double&)
|
||||
{
|
||||
|
||||
|
||||
G4double Step =
|
||||
GetConstraints(track.GetDynamicParticle(),track.GetMaterial()) ;
|
||||
GetConstraints(track.GetDynamicParticle(),track.GetMaterialCutsCouple()) ;
|
||||
|
||||
if((Step>0.0)&&(Step<currentMinimumStep))
|
||||
currentMinimumStep = Step ;
|
||||
@@ -59,7 +60,7 @@ inline G4double G4VMuEnergyLoss::GetContinuousStepLimit(
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
inline G4bool G4VMuEnergyLoss::IsApplicable(const G4ParticleDefinition&
|
||||
particle)
|
||||
{
|
||||
@@ -68,4 +69,4 @@ inline G4bool G4VMuEnergyLoss::IsApplicable(const G4ParticleDefinition&
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user