Import Geant4 5.0.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-08 16:57:27 +02:00
parent 330b82b769
commit 37fff30d2e
5733 changed files with 263867 additions and 74574 deletions
@@ -22,7 +22,7 @@
//
//
// $Id: G4ComptonScattering.hh,v 1.9 2002/04/09 17:34:40 vnivanch Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
//------------------ G4ComptonScattering physics process -----------------------
// by Michel Maire, April 1996
@@ -22,7 +22,7 @@
//
//
// $Id: G4ComptonScattering.icc,v 1.8 2001/09/21 09:50:53 maire Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
//------------------ G4ComptonScattering physics process -----------------------
// by Michel Maire, April 1996
@@ -22,7 +22,7 @@
//
//
// $Id: G4GammaConversion.hh,v 1.10 2002/04/09 17:34:40 vnivanch Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
//------------------ G4GammaConversion physics process -------------------------
// by Michel Maire, 24 May 1996
@@ -22,7 +22,7 @@
//
//
// $Id: G4GammaConversion.icc,v 1.7 2001/09/17 17:07:11 maire Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
//
// ------------ G4GammaConversion physics process -------------------------
@@ -22,7 +22,7 @@
//
//
// $Id: G4GammaConversionToMuons.hh,v 1.2 2002/05/06 09:32:41 maire Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
// ------------ G4GammaConversionToMuons physics process ------
// by H.Burkhardt, S. Kelner and R. Kokoulin, April 2002
@@ -22,7 +22,7 @@
//
//
// $Id: G4GammaConversionToMuons.icc,v 1.1 2002/04/19 14:44:33 hbu Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
// ------------ G4GammaConversionToMuons physics process ------
// by H.Burkhardt, S. Kelner and R. Kokoulin, April 2002
@@ -0,0 +1,139 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
//
// GEANT4 Class header file
//
//
// File name: G4MollerBhabhaModel
//
// Author: Vladimir Ivanchenko on base of Laszlo Urban code
//
// Creation date: 07.01.2002
//
// Modifications:
//
// Class Description:
//
// Implementation of energy loss process and delta-electrons production
// of electrons and positrons
// -------------------------------------------------------------------
//
#ifndef G4MollerBhabhaModel_h
#define G4MollerBhabhaModel_h 1
#include "G4VEmModel.hh"
class G4MollerBhabhaModel : public G4VEmModel
{
public:
G4MollerBhabhaModel(const G4ParticleDefinition* p = 0);
~G4MollerBhabhaModel();
G4double HighEnergyLimit(const G4ParticleDefinition* p,
const G4Material*);
G4double LowEnergyLimit(const G4ParticleDefinition* p,
const G4Material*);
void SetHighEnergyLimit(const G4Material*, G4double e) {highKinEnergy = e;};
void SetLowEnergyLimit(const G4Material*, G4double e) {lowKinEnergy = e;};
G4double MinEnergyCut(const G4ParticleDefinition*,
const G4Material*);
G4bool IsInCharge(const G4ParticleDefinition*,
const G4Material*);
G4double ComputeDEDX(const G4Material*,
const G4ParticleDefinition*,
G4double kineticEnergy,
G4double cutEnergy);
G4double CrossSection(const G4Material*,
const G4ParticleDefinition*,
G4double kineticEnergy,
G4double cutEnergy,
G4double maxEnergy);
G4std::vector<G4DynamicParticle*>* SampleSecondary(
const G4Material*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy);
G4double MaxSecondaryEnergy(const G4DynamicParticle*);
protected:
G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
G4double kinEnergy);
private:
void SetParticle(const G4ParticleDefinition* p);
// hide assignment operator
G4MollerBhabhaModel & operator=(const G4MollerBhabhaModel &right);
G4MollerBhabhaModel(const G4MollerBhabhaModel&);
const G4ParticleDefinition* particle;
G4ParticleDefinition* theElectron;
G4double highKinEnergy;
G4double lowKinEnergy;
G4double twoln10;
G4double lowLimit;
G4bool isElectron;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline G4double G4MollerBhabhaModel::MaxSecondaryEnergy(
const G4ParticleDefinition* p,
G4double kinEnergy)
{
G4double tmax = kinEnergy;
if(isElectron) tmax *= 0.5;
return tmax;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline G4double G4MollerBhabhaModel::MaxSecondaryEnergy(const G4DynamicParticle* dp)
{
G4double tmax = dp->GetKineticEnergy();
if(isElectron) tmax *= 0.5;
return tmax;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -21,8 +21,8 @@
// ********************************************************************
//
//
// $Id: G4PAIonisation.hh,v 1.12 2002/04/09 17:34:40 vnivanch Exp $
// GEANT4 tag $Name: geant4-04-01 $
// $Id: G4PAIonisation.hh,v 1.16 2002/11/20 15:41:47 gcosmo Exp $
// GEANT4 tag $Name: geant4-05-00 $
//
//
// ------------------------------------------------------------
@@ -144,7 +144,10 @@ class G4PAIonisation : public G4VPAIenergyLoss
// Compute Sandia photoabsorption coefficient matrix
void ComputeSandiaPhotoAbsCof() ;
private:
G4PhysicsLogVector* GetProtonEnergyVector();
private:
@@ -192,11 +195,3 @@ class G4PAIonisation : public G4VPAIenergyLoss
#include "G4PAIonisation.icc"
#endif
@@ -124,7 +124,7 @@ GetMeanFreePath( const G4Track& trackData,
for(iTkin=0;iTkin<G4PAIonisation::GetBinNumber();iTkin++)
{
if(scaledE < fProtonEnergyVector->GetLowEdgeEnergy(iTkin)) // <= ?
if(scaledE < GetProtonEnergyVector()->GetLowEdgeEnergy(iTkin)) // <= ?
{
break ;
}
@@ -143,8 +143,8 @@ GetMeanFreePath( const G4Track& trackData,
}
else
{
E1 = fProtonEnergyVector->GetLowEdgeEnergy(iTkin - 1) ;
E2 = fProtonEnergyVector->GetLowEdgeEnergy(iTkin) ;
E1 = GetProtonEnergyVector()->GetLowEdgeEnergy(iTkin - 1) ;
E2 = GetProtonEnergyVector()->GetLowEdgeEnergy(iTkin) ;
W = 1.0/(E2 - E1) ;
W1 = (E2 - scaledE)*W ;
W2 = (scaledE - E1)*W ;
@@ -173,7 +173,7 @@ GetFreePath( G4double scaledTkin, G4double charge2 )
for( iTkin = 0 ; iTkin < G4PAIonisation::GetBinNumber() ; iTkin++ )
{
if(scaledTkin < fProtonEnergyVector->GetLowEdgeEnergy(iTkin)) break ;
if(scaledTkin < GetProtonEnergyVector()->GetLowEdgeEnergy(iTkin)) break ;
}
iPlace = iTkin - 1 ;
@@ -189,8 +189,8 @@ GetFreePath( G4double scaledTkin, G4double charge2 )
}
else
{
E1 = fProtonEnergyVector->GetLowEdgeEnergy(iTkin - 1) ;
E2 = fProtonEnergyVector->GetLowEdgeEnergy(iTkin) ;
E1 = GetProtonEnergyVector()->GetLowEdgeEnergy(iTkin - 1) ;
E2 = GetProtonEnergyVector()->GetLowEdgeEnergy(iTkin) ;
W = 1.0/(E2 - E1) ;
W1 = (E2 - scaledTkin)*W ;
W2 = (scaledTkin - E1)*W ;
@@ -219,7 +219,7 @@ GetdEdx( G4double scaledTkin, G4double charge2 )
for( iTkin = 0 ; iTkin < G4PAIonisation::GetBinNumber() ; iTkin++ )
{
if(scaledTkin < fProtonEnergyVector->GetLowEdgeEnergy(iTkin)) break ;
if(scaledTkin < GetProtonEnergyVector()->GetLowEdgeEnergy(iTkin)) break ;
}
iPlace = iTkin - 1 ;
@@ -235,8 +235,8 @@ GetdEdx( G4double scaledTkin, G4double charge2 )
}
else
{
E1 = fProtonEnergyVector->GetLowEdgeEnergy(iTkin - 1) ;
E2 = fProtonEnergyVector->GetLowEdgeEnergy(iTkin) ;
E1 = GetProtonEnergyVector()->GetLowEdgeEnergy(iTkin - 1) ;
E2 = GetProtonEnergyVector()->GetLowEdgeEnergy(iTkin) ;
W = 1.0/(E2 - E1) ;
W1 = (E2 - scaledTkin)*W ;
W2 = (scaledTkin - E1)*W ;
@@ -21,8 +21,8 @@
// ********************************************************************
//
//
// $Id: G4PAIxSection.hh,v 1.7 2002/04/09 17:34:40 vnivanch Exp $
// GEANT4 tag $Name: geant4-04-01 $
// $Id: G4PAIxSection.hh,v 1.9 2002/10/14 17:30:10 maire Exp $
// GEANT4 tag $Name: geant4-05-00 $
//
//
// G4PAIxSection.hh -- header file
@@ -22,7 +22,7 @@
//
//
// $Id: G4PhotoElectricEffect.hh,v 1.15 2002/05/02 11:37:22 maire Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4PhotoElectricEffect.icc,v 1.10 2002/04/18 10:12:01 maire Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -22,7 +22,7 @@
//
//
// $Id: G4PolarizedComptonScattering.hh,v 1.7 2002/04/09 17:34:40 vnivanch Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
// --------- G4PolarizedComptonScattering physics process ----------------------
// by Vicente Lara, March 1998
@@ -22,7 +22,7 @@
//
//
// $Id: G4SynchrotronRadiation.hh,v 1.7 2002/04/09 17:34:40 vnivanch Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
// ------------------------------------------------------------
// GEANT 4 class header file
@@ -22,7 +22,7 @@
//
//
// $Id: G4VPAIenergyLoss.hh,v 1.8 2002/04/09 17:34:40 vnivanch Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
// ------------------------------------------------------------
// GEANT 4 class header file
@@ -22,7 +22,7 @@
//
//
// $Id: G4VeEnergyLoss.hh,v 1.11 2002/04/09 17:34:40 vnivanch Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
// -----------------------------------------------------------------------------
@@ -22,7 +22,7 @@
//
//
// $Id: G4VeEnergyLoss.icc,v 1.7 2001/11/09 13:56:28 maire Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4VhEnergyLoss.hh,v 1.15 2002/04/09 17:34:41 vnivanch Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
// ------------- G4VhEnergyLoss physics process --------------------------------
// by Laszlo Urban, 30 May 1997
@@ -22,7 +22,7 @@
//
//
// $Id: G4VhEnergyLoss.icc,v 1.5 2002/02/26 18:11:33 vnivanch Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
//
// ---------------- G4VhEnergyLoss physics process -----------------------------
@@ -22,7 +22,7 @@
//
//
// $Id: G4eBremsstrahlung.hh,v 1.14 2002/04/09 17:34:41 vnivanch Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
//
// ------------ G4eBremsstrahlung physics process ------
@@ -22,7 +22,7 @@
//
//
// $Id: G4eBremsstrahlung.icc,v 1.6 2001/08/09 17:24:22 maire Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
// ------------ G4eBremsstrahlung physics process ---------
// by Michel Maire, 27 July 1996
@@ -0,0 +1,201 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
//
// GEANT4 Class header file
//
//
// File name: G4eBremsstrahlungModel
//
// Author: Vladimir Ivanchenko on base of Laszlo Urban code
//
// Creation date: 07.01.2002
//
// Modifications:
//
// Class Description:
//
// Implementation of energy loss for gamma emission by electrons and
// positrons
// -------------------------------------------------------------------
//
#ifndef G4eBremsstrahlungModel_h
#define G4eBremsstrahlungModel_h 1
#include "G4VEmModel.hh"
class G4eBremsstrahlungModel : public G4VEmModel
{
public:
G4eBremsstrahlungModel(const G4ParticleDefinition* p = 0);
~G4eBremsstrahlungModel();
G4double HighEnergyLimit(const G4ParticleDefinition* p,
const G4Material*);
G4double LowEnergyLimit(const G4ParticleDefinition* p,
const G4Material*);
void SetHighEnergyLimit(const G4Material*, G4double e) {highKinEnergy = e;};
void SetLowEnergyLimit(const G4Material*, G4double e) {lowKinEnergy = e;};
G4double MinEnergyCut(const G4ParticleDefinition*,
const G4Material*);
G4bool IsInCharge(const G4ParticleDefinition*,
const G4Material*);
G4double ComputeDEDX(const G4Material*,
const G4ParticleDefinition*,
G4double kineticEnergy,
G4double cutEnergy);
G4double CrossSection(const G4Material*,
const G4ParticleDefinition*,
G4double kineticEnergy,
G4double cutEnergy,
G4double maxEnergy);
G4std::vector<G4DynamicParticle*>* SampleSecondary(
const G4Material*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy);
void SetLPMflag(G4bool val) {theLPMflag = val;};
G4bool LPMflag() const {return theLPMflag;};
virtual G4double MaxSecondaryEnergy(
const G4DynamicParticle* dynParticle);
protected:
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
G4double kineticEnergy);
private:
void SetParticle(const G4ParticleDefinition* p);
G4double ComputeBremLoss(G4double Z, G4double tkin, G4double cut, G4double x);
G4double PositronCorrFactorLoss(G4double Z, G4double tkin, G4double cut);
G4double PositronCorrFactorSigma(G4double Z, G4double tkin, G4double cut);
G4double CrossSectionPerAtom(G4double tkin, G4double Z, G4double cut);
void ComputePartialSumSigma(const G4Material* material, G4double tkin,
G4double cut);
const G4Element* SelectRandomAtom(const G4Material* material) const;
G4double SupressionFunction(const G4Material* material, G4double tkin,
G4double gammaEnergy);
G4double ScreenFunction1(G4double ScreenVariable);
G4double ScreenFunction2(G4double ScreenVariable);
// hide assignment operator
G4eBremsstrahlungModel & operator=(const G4eBremsstrahlungModel &right);
G4eBremsstrahlungModel(const G4eBremsstrahlungModel&);
const G4ParticleDefinition* particle;
G4double highKinEnergy;
G4double lowKinEnergy;
G4double minThreshold;
G4double probsup;
G4double MigdalConstant;
G4double LPMconstant;
G4bool isElectron;
G4bool theLPMflag;
const G4Material* oldMaterial;
G4std::vector<G4DataVector*> partialSumSigma;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline G4double G4eBremsstrahlungModel::ScreenFunction1(G4double ScreenVariable)
// compute the value of the screening function 3*PHI1 - PHI2
{
G4double screenVal;
if (ScreenVariable > 1.)
screenVal = 42.24 - 8.368*log(ScreenVariable+0.952);
else
screenVal = 42.392 - ScreenVariable* (7.796 - 1.961*ScreenVariable);
return screenVal;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline
G4double G4eBremsstrahlungModel::ScreenFunction2(G4double ScreenVariable)
// compute the value of the screening function 1.5*PHI1 - 0.5*PHI2
{
G4double screenVal;
if (ScreenVariable > 1.)
screenVal = 42.24 - 8.368*log(ScreenVariable+0.952);
else
screenVal = 41.734 - ScreenVariable* (6.484 - 1.250*ScreenVariable);
return screenVal;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline
G4double G4eBremsstrahlungModel::MaxSecondaryEnergy(
const G4DynamicParticle* dynParticle)
{
return dynParticle->GetKineticEnergy();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline
G4double G4eBremsstrahlungModel::MaxSecondaryEnergy(
const G4ParticleDefinition*,
G4double kineticEnergy)
{
return kineticEnergy;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -0,0 +1,103 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
//
// GEANT4 Class header file
//
//
// File name: G4eBremsstrahlungSTD
//
// Author: Laszlo Urban
//
// Creation date: 24.06.1996
//
// Modifications:
//
// 01-10-96 new type G4OrderedTable; ComputePartialSumSigma()
// 20-03-97 new energy loss+ionisation+brems scheme, L.Urban
// 01-09-98 new method PrintInfo()
// 10-02-00 modifications , new e.m. structure, L.Urban
// 07-08-00 new cross section/en.loss parametrisation, LPM flag , L.Urban
// 09-08-01 new methods Store/Retrieve PhysicsTable (mma)
// 19-09-01 come back to previous process name "eBrem"
// 29-10-01 all static functions no more inlined (mma)
// 07-01-02 new design of em processes (V.Ivanchenko)
//
//
// Class Description:
//
// This class manages the bremsstrahlung for e-/e+
// it inherites from G4VContinuousDiscreteProcess via G4VEnergyLoss.
//
// -------------------------------------------------------------------
//
#ifndef G4eBremsstrahlungSTD_h
#define G4eBremsstrahlungSTD_h 1
#include "G4VEnergyLossSTD.hh"
#include "G4Electron.hh"
#include "G4Positron.hh"
class G4Material;
class G4eBremsstrahlungSTD : public G4VEnergyLossSTD
{
public:
G4eBremsstrahlungSTD(const G4String& name = "eBrem");
~G4eBremsstrahlungSTD();
G4bool IsApplicable(const G4ParticleDefinition& p)
{return (&p == G4Electron::Electron() || &p == G4Positron::Positron());};
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition*,
const G4Material*, G4double cut)
{return cut;};
void PrintInfoDefinition() const;
// Print out of the class parameters
protected:
virtual G4double MaxSecondaryEnergy(const G4DynamicParticle* dynParticle)
{return dynParticle->GetKineticEnergy();};
private:
void InitialiseProcess();
// hide assignment operator
G4eBremsstrahlungSTD & operator=(const G4eBremsstrahlungSTD &right);
G4eBremsstrahlungSTD(const G4eBremsstrahlungSTD&);
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -22,7 +22,7 @@
//
//
// $Id: G4eIonisation.hh,v 1.16 2002/04/09 17:34:41 vnivanch Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
//--------------- G4eIonisation physics process --------------------------------
// by Laszlo Urban, 20 March 1997
@@ -22,7 +22,7 @@
//
//
// $Id: G4eIonisation.icc,v 1.10 2001/11/09 13:56:28 maire Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
//
//----------------- G4eIonisation physics process ------------------------------
@@ -0,0 +1,130 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
//
// GEANT4 Class header file
//
//
// File name: G4eIonisationSTD
//
// Author: Laszlo Urban
//
// Creation date: 20.03.1997
//
// Modifications:
//
// 10-02-00 modifications , new e.m. structure, L.Urban
// 03-08-01 new methods Store/Retrieve PhysicsTable (mma)
// 13-08-01 new function ComputeRestrictedMeandEdx() (mma)
// 19-09-01 come back to previous ProcessName "eIoni"
// 29-10-01 all static functions no more inlined (mma)
// 07-01-02 new design of em processes (V.Ivanchenko)
//
//
// Class Description:
//
// This class manages the ionisation process for e-/e+
// it inherites from G4VContinuousDiscreteProcess via G4VEnergyLoss.
//
// -------------------------------------------------------------------
//
#ifndef G4eIonisationSTD_h
#define G4eIonisationSTD_h 1
#include "G4VEnergyLossSTD.hh"
#include "G4Electron.hh"
#include "G4Positron.hh"
class G4Material;
class G4ParticleDefinition;
class G4eIonisationSTD : public G4VEnergyLossSTD
{
public:
G4eIonisationSTD(const G4String& name = "eIoni");
~G4eIonisationSTD();
G4bool IsApplicable(const G4ParticleDefinition& p);
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition*,
const G4Material*, G4double cut);
void PrintInfoDefinition() const;
// Print out of the class parameters
protected:
const G4ParticleDefinition* DefineBaseParticle(const G4ParticleDefinition* p);
virtual G4double MaxSecondaryEnergy(const G4DynamicParticle* dp);
private:
void InitialiseProcess();
// hide assignment operator
G4eIonisationSTD & operator=(const G4eIonisationSTD &right);
G4eIonisationSTD(const G4eIonisationSTD&);
const G4ParticleDefinition* theElectron;
G4bool isElectron;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline G4double G4eIonisationSTD::MinPrimaryEnergy(const G4ParticleDefinition*,
const G4Material*,
G4double cut)
{
G4double x = cut;
if(isElectron) x += cut;
return x;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline G4bool G4eIonisationSTD::IsApplicable(const G4ParticleDefinition& p)
{
return (&p == G4Electron::Electron() || &p == G4Positron::Positron());
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline G4double G4eIonisationSTD::MaxSecondaryEnergy(const G4DynamicParticle* dp)
{
G4double tmax = dp->GetKineticEnergy();
if(isElectron) tmax *= 0.5;
return tmax;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -22,7 +22,7 @@
//
//
// $Id: G4eplusAnnihilation.hh,v 1.10 2002/04/09 17:34:41 vnivanch Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -22,7 +22,7 @@
//
//
// $Id: G4eplusAnnihilation.icc,v 1.8 2001/09/17 17:07:11 maire Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -22,7 +22,7 @@
//
//
// $Id: G4hIonisation.hh,v 1.20 2002/03/27 21:43:55 vnivanch Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
// --------------- G4hIonisation physics process -------------------------------
// by Laszlo Urban, 30 May 1997
@@ -22,7 +22,7 @@
//
//
// $Id: G4hIonisation.icc,v 1.11 2002/04/09 17:34:41 vnivanch Exp $
// GEANT4 tag $Name: geant4-04-01 $
// GEANT4 tag $Name: geant4-05-00 $
//
//
//------------------ G4hIonisation physics process -----------------------------
@@ -0,0 +1,129 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
//
// GEANT4 Class header file
//
//
// File name: G4hIonisationSTD
//
// Author: Laszlo Urban
//
// Creation date: 30.05.1997
//
// Modifications:
//
// corrected by L.Urban on 24/09/97
// corrected by L.Urban on 13/01/98
// bugs fixed by L.Urban on 02/02/99
// 10/02/00 modifications , new e.m. structure, L.Urban
// 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
//
// Class Description:
//
// This class manages the ionisation process for hadrons.
// it inherites from G4VContinuousDiscreteProcess via G4VEnergyLoss.
//
// -------------------------------------------------------------------
//
#ifndef G4hIonisationSTD_h
#define G4hIonisationSTD_h 1
#include "G4VEnergyLossSTD.hh"
#include "G4Electron.hh"
#include "G4Positron.hh"
#include "globals.hh"
class G4Material;
class G4hIonisationSTD : public G4VEnergyLossSTD
{
public:
G4hIonisationSTD(const G4String& name = "hIoni");
~G4hIonisationSTD();
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);
void PrintInfoDefinition() const;
// Print out of the class parameters
protected:
virtual const G4ParticleDefinition* DefineBaseParticle(const G4ParticleDefinition* p);
virtual G4double MaxSecondaryEnergy(const G4DynamicParticle* dynParticle);
private:
void InitialiseProcess();
// hide assignment operator
G4hIonisationSTD & operator=(const G4hIonisationSTD &right);
G4hIonisationSTD(const G4hIonisationSTD&);
const G4ParticleDefinition* theParticle;
const G4ParticleDefinition* theBaseParticle;
G4double mass;
G4double ratio;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline G4double G4hIonisationSTD::MinPrimaryEnergy(const G4ParticleDefinition*,
const G4Material*,
G4double cut)
{
G4double x = 0.5*cut/electron_mass_c2;
G4double y = electron_mass_c2/mass;
G4double g = x*y + sqrt((1. + x)*(1. + x*y*y));
return mass*(g - 1.0);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline G4double G4hIonisationSTD::MaxSecondaryEnergy(const G4DynamicParticle* dynParticle)
{
G4double gamma= dynParticle->GetKineticEnergy()/mass + 1.0;
G4double tmax = 2.0*electron_mass_c2*(gamma*gamma - 1.) /
(1. + 2.0*gamma*ratio + ratio*ratio);
return tmax;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -0,0 +1,146 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
//
// GEANT4 Class header file
//
//
// File name: G4ionIonisation
//
// Author: Vladimir Ivanchenko
//
// Creation date: 07.05.2002
//
// Modifications:
//
//
// Class Description:
//
// This class manages the ionisation process for ions.
// it inherites from G4VContinuousDiscreteProcess via G4VEnergyLoss.
//
// -------------------------------------------------------------------
//
#ifndef G4ionIonisation_h
#define G4ionIonisation_h 1
#include "G4VEnergyLossSTD.hh"
class G4ParticleDefinition;
class G4Track;
class G4Step;
class G4Material;
class G4VEffectiveChargeModel;
class G4ionIonisation : public G4VEnergyLossSTD
{
public:
G4ionIonisation(const G4String& name = "ionIoni");
~G4ionIonisation();
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);
void PrintInfoDefinition() const;
// Print out of the class parameters
protected:
const G4ParticleDefinition* DefineBaseParticle(const G4ParticleDefinition* p);
virtual G4double GetMeanFreePath(const G4Track& track,
G4double previousStepSize,
G4ForceCondition* condition);
virtual G4double MaxSecondaryEnergy(const G4DynamicParticle* dynParticle);
private:
void InitialiseProcess();
// hide assignment operator
G4ionIonisation & operator=(const G4ionIonisation &right);
G4ionIonisation(const G4ionIonisation&);
const G4ParticleDefinition* theParticle;
const G4ParticleDefinition* theBaseParticle;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline G4double G4ionIonisation::MinPrimaryEnergy(
const G4ParticleDefinition* p, const G4Material*, G4double cut)
{
G4double mass = p->GetPDGMass();
G4double x = 0.5*cut/electron_mass_c2;
// G4double y = electron_mass_c2/mass;
// G4double g = x*y + sqrt((1. + x)*(1. + x*y*y));
G4double g = sqrt(1. + x);
return mass*(g - 1.0);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline G4double G4ionIonisation::MaxSecondaryEnergy(const G4DynamicParticle* dynParticle)
{
G4double mass = dynParticle->GetMass();
G4double gamma = dynParticle->GetKineticEnergy()/mass + 1.0;
G4double ratio = electron_mass_c2/mass;
G4double tmax = 2.0*electron_mass_c2*(gamma*gamma - 1.) /
(1. + 2.0*gamma*ratio + ratio*ratio);
return tmax;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline G4double G4ionIonisation::GetMeanFreePath(const G4Track& track,
G4double step,
G4ForceCondition* cond)
{
const G4DynamicParticle* dp = track.GetDynamicParticle();
G4double mRatio = proton_mass_c2/dp->GetMass();
G4double q = dp->GetCharge()/eplus;
G4double q_2 = q*q;
SetMassRatio(mRatio);
SetReduceFactor(1.0/(q_2*mRatio));
SetChargeSquare(q_2);
SetChargeSquareRatio(q_2);
return G4VEnergyLossSTD::GetMeanFreePath(track, step, cond);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif