Import Geant4 9.3.0 source tree
This commit is contained in:
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4BetheBlochModel.hh,v 1.16 2008/10/22 16:00:57 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4BetheBlochModel.hh,v 1.20 2009/04/23 17:44:43 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -63,11 +63,10 @@
|
||||
#define G4BetheBlochModel_h 1
|
||||
|
||||
#include "G4VEmModel.hh"
|
||||
#include "G4NistManager.hh"
|
||||
|
||||
class G4EmCorrections;
|
||||
class G4ParticleChangeForLoss;
|
||||
class G4NistManager;
|
||||
|
||||
|
||||
class G4BetheBlochModel : public G4VEmModel
|
||||
{
|
||||
@@ -81,8 +80,8 @@ public:
|
||||
|
||||
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
G4double MinEnergyCut(const G4ParticleDefinition*,
|
||||
const G4MaterialCutsCouple*);
|
||||
virtual G4double MinEnergyCut(const G4ParticleDefinition*,
|
||||
const G4MaterialCutsCouple*);
|
||||
|
||||
virtual G4double ComputeCrossSectionPerElectron(
|
||||
const G4ParticleDefinition*,
|
||||
@@ -130,12 +129,16 @@ public:
|
||||
|
||||
protected:
|
||||
|
||||
G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kinEnergy);
|
||||
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kinEnergy);
|
||||
|
||||
private:
|
||||
|
||||
void SetParticle(const G4ParticleDefinition* p);
|
||||
inline void SetupParameters();
|
||||
|
||||
inline void SetParticle(const G4ParticleDefinition* p);
|
||||
|
||||
inline void SetGenericIon(const G4ParticleDefinition* p);
|
||||
|
||||
// hide assignment operator
|
||||
G4BetheBlochModel & operator=(const G4BetheBlochModel &right);
|
||||
@@ -165,17 +168,46 @@ private:
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4BetheBlochModel::MaxSecondaryEnergy(
|
||||
const G4ParticleDefinition* pd,
|
||||
G4double kinEnergy)
|
||||
inline void G4BetheBlochModel::SetupParameters()
|
||||
{
|
||||
if(isIon) SetParticle(pd);
|
||||
G4double tau = kinEnergy/mass;
|
||||
G4double tmax = 2.0*electron_mass_c2*tau*(tau + 2.) /
|
||||
(1. + 2.0*(tau + 1.)*ratio + ratio*ratio);
|
||||
return std::min(tmax,tlimit);
|
||||
mass = particle->GetPDGMass();
|
||||
spin = particle->GetPDGSpin();
|
||||
G4double q = particle->GetPDGCharge()/eplus;
|
||||
chargeSquare = q*q;
|
||||
ratio = electron_mass_c2/mass;
|
||||
G4double magmom = particle->GetPDGMagneticMoment()*mass/(0.5*eplus*hbar_Planck*c_squared);
|
||||
magMoment2 = magmom*magmom - 1.0;
|
||||
formfact = 0.0;
|
||||
if(particle->GetLeptonNumber() == 0) {
|
||||
G4double x = 0.8426*GeV;
|
||||
if(spin == 0.0 && mass < GeV) {x = 0.736*GeV;}
|
||||
else if(mass > GeV) {
|
||||
x /= nist->GetZ13(mass/proton_mass_c2);
|
||||
// tlimit = 51.2*GeV*A13[iz]*A13[iz];
|
||||
}
|
||||
formfact = 2.0*electron_mass_c2/(x*x);
|
||||
tlimit = 2.0/formfact;
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4BetheBlochModel::SetParticle(const G4ParticleDefinition* p)
|
||||
{
|
||||
if(particle != p) {
|
||||
particle = p;
|
||||
if (p->GetPDGCharge()/eplus > 1.5 && p->GetBaryonNumber() > 2) isIon = true;
|
||||
SetupParameters();
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4BetheBlochModel::SetGenericIon(const G4ParticleDefinition* p)
|
||||
{
|
||||
if(p && particle != p) {
|
||||
if(p->GetParticleName() == "GenericIon") isIon = true;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4BohrFluctuations.hh,v 1.3 2007/09/27 13:53:11 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4BohrFluctuations.hh,v 1.4 2009/02/19 19:17:50 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -78,8 +78,6 @@ public:
|
||||
|
||||
void InitialiseMe(const G4ParticleDefinition*);
|
||||
|
||||
protected:
|
||||
|
||||
private:
|
||||
|
||||
// hide assignment operator
|
||||
@@ -102,26 +100,5 @@ private:
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
|
||||
inline G4double G4BohrFluctuations::Dispersion(
|
||||
const G4Material* material,
|
||||
const G4DynamicParticle* dp,
|
||||
G4double& tmax,
|
||||
G4double& length)
|
||||
{
|
||||
if(!particle) InitialiseMe(dp->GetDefinition());
|
||||
|
||||
G4double electronDensity = material->GetElectronDensity();
|
||||
kineticEnergy = dp->GetKineticEnergy();
|
||||
G4double etot = kineticEnergy + particleMass;
|
||||
beta2 = kineticEnergy*(kineticEnergy + 2.0*particleMass)/(etot*etot);
|
||||
G4double siga = (1.0/beta2 - 0.5) * twopi_mc2_rcl2 * tmax * length
|
||||
* electronDensity * chargeSquare;
|
||||
|
||||
return siga;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4BraggIonModel.hh,v 1.11 2008/10/22 16:00:57 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4BraggIonModel.hh,v 1.12 2009/02/20 12:06:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -76,8 +76,8 @@ public:
|
||||
|
||||
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
G4double MinEnergyCut(const G4ParticleDefinition*,
|
||||
const G4MaterialCutsCouple*);
|
||||
virtual G4double MinEnergyCut(const G4ParticleDefinition*,
|
||||
const G4MaterialCutsCouple*);
|
||||
|
||||
virtual G4double ComputeCrossSectionPerElectron(
|
||||
const G4ParticleDefinition*,
|
||||
@@ -127,8 +127,8 @@ public:
|
||||
|
||||
protected:
|
||||
|
||||
G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kinEnergy);
|
||||
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kinEnergy);
|
||||
|
||||
private:
|
||||
|
||||
@@ -179,19 +179,6 @@ private:
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double G4BraggIonModel::MaxSecondaryEnergy(
|
||||
const G4ParticleDefinition* pd,
|
||||
G4double kinEnergy)
|
||||
{
|
||||
if(pd != particle) SetParticle(pd);
|
||||
G4double tau = kinEnergy/mass;
|
||||
G4double tmax = 2.0*electron_mass_c2*tau*(tau + 2.) /
|
||||
(1. + 2.0*(tau + 1.)*ratio + ratio*ratio);
|
||||
return tmax;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline void G4BraggIonModel::SetParticle(const G4ParticleDefinition* p)
|
||||
{
|
||||
particle = p;
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4BraggModel.hh,v 1.12 2008/09/14 17:11:48 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4BraggModel.hh,v 1.14 2009/11/10 19:25:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -79,8 +79,8 @@ public:
|
||||
|
||||
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
G4double MinEnergyCut(const G4ParticleDefinition*,
|
||||
const G4MaterialCutsCouple*);
|
||||
virtual G4double MinEnergyCut(const G4ParticleDefinition*,
|
||||
const G4MaterialCutsCouple*);
|
||||
|
||||
virtual G4double ComputeCrossSectionPerElectron(
|
||||
const G4ParticleDefinition*,
|
||||
@@ -120,22 +120,23 @@ public:
|
||||
virtual G4double GetParticleCharge(const G4ParticleDefinition* p,
|
||||
const G4Material* mat,
|
||||
G4double kineticEnergy);
|
||||
|
||||
/*
|
||||
// add correction to energy loss and compute non-ionizing energy loss
|
||||
virtual void CorrectionsAlongStep(const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double& eloss,
|
||||
G4double& niel,
|
||||
G4double length);
|
||||
*/
|
||||
|
||||
protected:
|
||||
|
||||
G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kinEnergy);
|
||||
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kinEnergy);
|
||||
|
||||
private:
|
||||
|
||||
void SetParticle(const G4ParticleDefinition* p);
|
||||
inline void SetParticle(const G4ParticleDefinition* p);
|
||||
|
||||
G4bool HasMaterial(const G4Material* material);
|
||||
|
||||
@@ -184,19 +185,6 @@ private:
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double G4BraggModel::MaxSecondaryEnergy(
|
||||
const G4ParticleDefinition* pd,
|
||||
G4double kinEnergy)
|
||||
{
|
||||
if(pd != particle) SetParticle(pd);
|
||||
G4double tau = kinEnergy/mass;
|
||||
G4double tmax = 2.0*electron_mass_c2*tau*(tau + 2.) /
|
||||
(1. + 2.0*(tau + 1.)*ratio + ratio*ratio);
|
||||
return tmax;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline void G4BraggModel::SetParticle(const G4ParticleDefinition* p)
|
||||
{
|
||||
particle = p;
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4ComptonScattering.hh,v 1.20 2007/05/23 08:47:34 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4ComptonScattering.hh,v 1.21 2009/02/20 12:06:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
//------------------ G4ComptonScattering physics process -----------------------
|
||||
// by Michel Maire, April 1996
|
||||
@@ -81,12 +81,11 @@ public: // with description
|
||||
virtual ~G4ComptonScattering();
|
||||
|
||||
// true for Gamma only.
|
||||
G4bool IsApplicable(const G4ParticleDefinition&);
|
||||
virtual G4bool IsApplicable(const G4ParticleDefinition&);
|
||||
|
||||
// Print few lines of informations about the process: validity range,
|
||||
virtual void PrintInfo();
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
virtual void InitialiseProcess(const G4ParticleDefinition*);
|
||||
@@ -96,15 +95,6 @@ private:
|
||||
G4bool isInitialised;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline
|
||||
G4bool G4ComptonScattering::IsApplicable(const G4ParticleDefinition& p)
|
||||
{
|
||||
return (&p == G4Gamma::Gamma());
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4CoulombScattering.hh,v 1.11 2008/06/13 08:19:43 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4CoulombScattering.hh,v 1.13 2009/05/07 18:41:45 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -58,7 +58,7 @@ class G4CoulombScattering : public G4VEmProcess
|
||||
|
||||
public:
|
||||
|
||||
G4CoulombScattering(const G4String& name = "eCoulombScat");
|
||||
G4CoulombScattering(const G4String& name = "CoulombScat");
|
||||
|
||||
virtual ~G4CoulombScattering();
|
||||
|
||||
@@ -103,13 +103,6 @@ private:
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4bool G4CoulombScattering::IsApplicable(const G4ParticleDefinition& p)
|
||||
{
|
||||
return (p.GetPDGCharge() != 0.0 && !p.IsShortLived());
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4CoulombScattering::SetThetaMin(G4double val)
|
||||
{
|
||||
thetaMin = val;
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4GammaConversion.hh,v 1.22 2007/05/23 08:47:34 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4GammaConversion.hh,v 1.23 2009/02/20 12:06:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
//
|
||||
//------------------ G4GammaConversion physics process------------------------
|
||||
@@ -84,7 +84,7 @@ public: // with description
|
||||
virtual ~G4GammaConversion();
|
||||
|
||||
// true for Gamma only.
|
||||
G4bool IsApplicable(const G4ParticleDefinition&);
|
||||
virtual G4bool IsApplicable(const G4ParticleDefinition&);
|
||||
|
||||
// Print few lines of informations about the process: validity range,
|
||||
virtual void PrintInfo();
|
||||
@@ -98,14 +98,6 @@ private:
|
||||
G4bool isInitialised;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4bool G4GammaConversion::IsApplicable(const G4ParticleDefinition& p)
|
||||
{
|
||||
return (&p == G4Gamma::Gamma());
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
+183
@@ -0,0 +1,183 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * 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. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4GoudsmitSaundersonMscModel.hh,v 1.2 2009/06/04 13:45:49 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4GoudsmitSaundersonMscModel
|
||||
//
|
||||
// Author: Omrane Kadri
|
||||
//
|
||||
// Creation date: 20.02.2009
|
||||
//
|
||||
// Modifications:
|
||||
// 04.03.2009 V.Ivanchenko cleanup and format according to Geant4 EM style
|
||||
//
|
||||
// Class description:
|
||||
//
|
||||
// Multiple scattering model using classical Goudsmit-Saunderson model
|
||||
//
|
||||
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
//REFERENCES:
|
||||
//Ref.1:E. Benedito et al.,"Mixed simulation ... cross-sections", NIMB 174 (2001) pp 91-110;
|
||||
//Ref.2:I. Kawrakow et al.,"On the condensed ... transport",NIMB 142 (1998) pp 253-280;
|
||||
//Ref.3:I. Kawrakow et al.,"On the representation ... calculations",NIMB 134 (1998) pp 325-336;
|
||||
//Ref.4:I. Kawrakow et al.,"The EGSnrc code ... Transport",NRCC Report PIRS-701, Sept. 21, 2006;
|
||||
//Ref.5:F. Salvat et al.,"ELSEPA--Dirac partial ...molecules", Comp. Phys. Comm. 165 (2005) pp 157-190;
|
||||
//Ref.6:G4UrbanMscModel G4_v9.1Ref09;
|
||||
//Ref.7:G4eCoulombScatteringModel G4_v9.1Ref09.
|
||||
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
#ifndef G4GoudsmitSaundersonMscModel_h
|
||||
#define G4GoudsmitSaundersonMscModel_h 1
|
||||
|
||||
#include "G4VMscModel.hh"
|
||||
#include "G4PhysicsTable.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4DataInterpolation.hh"
|
||||
|
||||
class G4DataVector;
|
||||
class G4ParticleChangeForMSC;
|
||||
class G4LossTableManager;
|
||||
class G4GoudsmitSaundersonTable;
|
||||
class G4PhysicsTable;
|
||||
|
||||
class G4GoudsmitSaundersonMscModel : public G4VMscModel
|
||||
{
|
||||
public:
|
||||
|
||||
G4GoudsmitSaundersonMscModel(const G4String& nam = "GoudsmitSaunderson");
|
||||
|
||||
virtual ~G4GoudsmitSaundersonMscModel();
|
||||
|
||||
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition* particle,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber, G4double,
|
||||
G4double, G4double);
|
||||
|
||||
virtual void SampleScattering(const G4DynamicParticle* ,
|
||||
G4double );
|
||||
|
||||
virtual G4double ComputeTruePathLengthLimit(
|
||||
const G4Track& track,
|
||||
G4PhysicsTable* theLambdaTable,
|
||||
G4double currentMinimalStep);
|
||||
|
||||
virtual G4double ComputeGeomPathLength(G4double truePathLength);
|
||||
|
||||
virtual G4double ComputeTrueStepLength(G4double geomStepLength);
|
||||
|
||||
private:
|
||||
void SampleCosineTheta(G4double,G4double,G4double &,G4double &);
|
||||
|
||||
void CalculateIntegrals(const G4ParticleDefinition* ,G4double,G4double,
|
||||
G4double&,G4double&);
|
||||
|
||||
void LoadELSEPAXSections();
|
||||
|
||||
inline void SetParticle(const G4ParticleDefinition* p);
|
||||
|
||||
inline G4double GetLambda(G4double);
|
||||
|
||||
// hide assignment operator
|
||||
G4GoudsmitSaundersonMscModel & operator=(const G4GoudsmitSaundersonMscModel &right);
|
||||
G4GoudsmitSaundersonMscModel(const G4GoudsmitSaundersonMscModel&);
|
||||
|
||||
G4double lowKEnergy;
|
||||
G4double highKEnergy;
|
||||
G4double currentKinEnergy;
|
||||
G4double currentRange;
|
||||
|
||||
G4double smallstep,tlimitminfix,skindepth;
|
||||
G4double fr,rangeinit,masslimite,tgeom;
|
||||
G4double par1,par2,par3,zPathLength,truePathLength;
|
||||
G4double tausmall,taulim,tlimit,tlimitmin,geommin,geombig;
|
||||
G4double charge,lambdalimit;
|
||||
G4double tPathLength,stepmin ;
|
||||
G4double lambda1,lambda11;
|
||||
G4double mass;
|
||||
G4double lambda0;
|
||||
G4int currentMaterialIndex;
|
||||
|
||||
G4bool inside;
|
||||
G4bool insideskin;
|
||||
G4bool isInitialized;
|
||||
|
||||
G4PhysicsTable* theLambdaTable;
|
||||
G4GoudsmitSaundersonTable* GSTable;
|
||||
G4LossTableManager* theManager;
|
||||
const G4ParticleDefinition* particle;
|
||||
G4ParticleChangeForMSC* fParticleChange;
|
||||
G4DataInterpolation* MyValue;
|
||||
const G4MaterialCutsCouple* currentCouple;
|
||||
|
||||
static G4double ener[106];
|
||||
static G4double TCSE[103][106];
|
||||
static G4double FTCSE[103][106];
|
||||
static G4double TCSP[103][106];
|
||||
static G4double FTCSP[103][106];
|
||||
|
||||
};
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
void G4GoudsmitSaundersonMscModel::SetParticle(const G4ParticleDefinition* p)
|
||||
{
|
||||
if (p != particle) {
|
||||
particle = p;
|
||||
mass = p->GetPDGMass();
|
||||
charge = p->GetPDGCharge()/eplus;
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double G4GoudsmitSaundersonMscModel::GetLambda(G4double e)
|
||||
{
|
||||
G4double x;
|
||||
if(theLambdaTable) {
|
||||
G4bool b;
|
||||
x = ((*theLambdaTable)[currentMaterialIndex])->GetValue(e, b);
|
||||
} else {
|
||||
x = CrossSection(currentCouple,particle,e);
|
||||
}
|
||||
|
||||
if(x > DBL_MIN) x = 1./x;
|
||||
else x = DBL_MAX;
|
||||
return x;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * 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. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4GoudsmitSaundersonTable.hh,v 1.3 2009/06/18 18:43:09 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
// File name: G4GoudsmitSaundersonTable
|
||||
//
|
||||
// Author: Omrane Kadri
|
||||
//
|
||||
// Creation date: 20.02.2009
|
||||
//
|
||||
// Modifications:
|
||||
// 04.03.2009 V.Ivanchenko cleanup and format according to Geant4 EM style
|
||||
//
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#ifndef G4GoudsmitSaundersonTable_h
|
||||
#define G4GoudsmitSaundersonTable_h 1
|
||||
|
||||
#include "globals.hh"
|
||||
|
||||
class G4GoudsmitSaundersonTable
|
||||
{
|
||||
public:
|
||||
|
||||
G4GoudsmitSaundersonTable();
|
||||
|
||||
~G4GoudsmitSaundersonTable();
|
||||
|
||||
G4double SampleTheta(G4double , G4double ,G4double);
|
||||
|
||||
private:
|
||||
|
||||
// hide assignment operator
|
||||
G4GoudsmitSaundersonTable & operator=(const G4GoudsmitSaundersonTable &right);
|
||||
G4GoudsmitSaundersonTable(const G4GoudsmitSaundersonTable&);
|
||||
|
||||
void LoadPDFandCPDFdata();
|
||||
|
||||
static G4double* PDF;
|
||||
static G4double* CPDF;
|
||||
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * 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. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4HeatedKleinNishinaCompton.hh,v 1.2 2009/04/11 13:05:03 grichine Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4HeatedKleinNishinaCompton
|
||||
//
|
||||
// Author: Vladimir Grichine on base of M. Maire and V. Ivanchenko code
|
||||
//
|
||||
// Creation date: 15.03.2009
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
//
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of gamma Compton scattering on heated electrons
|
||||
// Maxwell distributed with the temperature fTemperature (default = 1*keV)
|
||||
//
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4HeatedKleinNishinaCompton_h
|
||||
#define G4HeatedKleinNishinaCompton_h 1
|
||||
|
||||
#include "G4VEmModel.hh"
|
||||
|
||||
class G4ParticleChangeForGamma;
|
||||
|
||||
class G4HeatedKleinNishinaCompton : public G4VEmModel
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4HeatedKleinNishinaCompton(const G4ParticleDefinition* p = 0,
|
||||
const G4String& nam = "Heated-Klein-Nishina");
|
||||
|
||||
virtual ~G4HeatedKleinNishinaCompton();
|
||||
|
||||
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
virtual G4double ComputeCrossSectionPerAtom(
|
||||
const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
G4double Z,
|
||||
G4double A,
|
||||
G4double cut,
|
||||
G4double emax);
|
||||
|
||||
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double tmin,
|
||||
G4double maxEnergy);
|
||||
|
||||
void SetElectronTemperature(G4double t){fTemperature=t;};
|
||||
G4double GetElectronTemperature(){return fTemperature;};
|
||||
|
||||
protected:
|
||||
|
||||
G4ParticleDefinition* theGamma;
|
||||
G4ParticleDefinition* theElectron;
|
||||
G4ParticleChangeForGamma* fParticleChange;
|
||||
G4double lowestGammaEnergy;
|
||||
G4double fTemperature; // electron temperature in energy units
|
||||
|
||||
private:
|
||||
|
||||
// hide assignment operator
|
||||
G4HeatedKleinNishinaCompton & operator=(const G4HeatedKleinNishinaCompton &right);
|
||||
G4HeatedKleinNishinaCompton(const G4HeatedKleinNishinaCompton&);
|
||||
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,119 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * 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. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4ICRU49NuclearStoppingModel.hh,v 1.2 2009/11/10 19:25:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4ICRU49NuclearStoppingModel
|
||||
//
|
||||
// Author: V.Ivanchenko
|
||||
//
|
||||
// Creation date: 20.07.2009
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of the ICRU'49 model of nuclear stopping
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4ICRU49NuclearStoppingModel_h
|
||||
#define G4ICRU49NuclearStoppingModel_h 1
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#include "G4VEmModel.hh"
|
||||
|
||||
class G4ParticleChangeForLoss;
|
||||
class G4Pow;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4ICRU49NuclearStoppingModel : public G4VEmModel
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4ICRU49NuclearStoppingModel(const G4String& nam = "ICRU49NucStopping");
|
||||
|
||||
virtual ~G4ICRU49NuclearStoppingModel();
|
||||
|
||||
virtual void Initialise(const G4ParticleDefinition*,
|
||||
const G4DataVector&);
|
||||
|
||||
// main method to compute dEdx
|
||||
virtual G4double ComputeDEDXPerVolume(const G4Material*,
|
||||
const G4ParticleDefinition*,
|
||||
G4double kineticEnergy,
|
||||
G4double cutEnergy = DBL_MAX);
|
||||
|
||||
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double, G4double);
|
||||
|
||||
inline void SetFluctuationFlag(G4bool);
|
||||
|
||||
private:
|
||||
|
||||
void InitialiseNuclearStopping();
|
||||
|
||||
G4double NuclearStoppingPower(G4double kineticEnergy,
|
||||
G4double Z1, G4double Z2,
|
||||
G4double A1, G4double A2);
|
||||
|
||||
// hide assignment operator
|
||||
G4ICRU49NuclearStoppingModel & operator=(const G4ICRU49NuclearStoppingModel &right);
|
||||
G4ICRU49NuclearStoppingModel(const G4ICRU49NuclearStoppingModel&);
|
||||
|
||||
G4Pow* g4pow;
|
||||
|
||||
static G4double ed[104];
|
||||
static G4double ad[104];
|
||||
|
||||
G4double theZieglerFactor;
|
||||
|
||||
// flags
|
||||
G4bool lossFlucFlag;
|
||||
};
|
||||
|
||||
inline void G4ICRU49NuclearStoppingModel::SetFluctuationFlag(G4bool val)
|
||||
{
|
||||
lossFlucFlag = val;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4IonFluctuations.hh,v 1.8 2008/10/22 16:04:33 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4IonFluctuations.hh,v 1.9 2009/02/19 19:17:50 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -83,7 +83,7 @@ public:
|
||||
void InitialiseMe(const G4ParticleDefinition*);
|
||||
|
||||
// Initialisation prestep
|
||||
inline void SetParticleAndCharge(const G4ParticleDefinition*, G4double q2);
|
||||
void SetParticleAndCharge(const G4ParticleDefinition*, G4double q2);
|
||||
|
||||
private:
|
||||
|
||||
@@ -116,21 +116,5 @@ private:
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline
|
||||
void G4IonFluctuations::SetParticleAndCharge(const G4ParticleDefinition* part,
|
||||
G4double q2)
|
||||
{
|
||||
if(part != particle) {
|
||||
particle = part;
|
||||
particleMass = part->GetPDGMass();
|
||||
charge = part->GetPDGCharge()/eplus;
|
||||
chargeSquare = charge*charge;
|
||||
}
|
||||
effChargeSquare = q2;
|
||||
uniFluct.SetParticleAndCharge(part, q2);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4MollerBhabhaModel.hh,v 1.19 2007/05/22 17:34:36 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4MollerBhabhaModel.hh,v 1.20 2009/02/20 12:06:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -73,8 +73,8 @@ public:
|
||||
|
||||
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
G4double MinEnergyCut(const G4ParticleDefinition*,
|
||||
const G4MaterialCutsCouple*);
|
||||
virtual G4double MinEnergyCut(const G4ParticleDefinition*,
|
||||
const G4MaterialCutsCouple*);
|
||||
|
||||
virtual G4double ComputeCrossSectionPerElectron(
|
||||
const G4ParticleDefinition*,
|
||||
@@ -108,10 +108,10 @@ public:
|
||||
|
||||
protected:
|
||||
|
||||
G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kinEnergy);
|
||||
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kinEnergy);
|
||||
|
||||
void SetParticle(const G4ParticleDefinition* p);
|
||||
inline void SetParticle(const G4ParticleDefinition* p);
|
||||
|
||||
const G4ParticleDefinition* particle;
|
||||
G4ParticleDefinition* theElectron;
|
||||
@@ -126,17 +126,17 @@ private:
|
||||
// hide assignment operator
|
||||
G4MollerBhabhaModel & operator=(const G4MollerBhabhaModel &right);
|
||||
G4MollerBhabhaModel(const G4MollerBhabhaModel&);
|
||||
|
||||
G4bool isInitialised;
|
||||
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double G4MollerBhabhaModel::MaxSecondaryEnergy(
|
||||
const G4ParticleDefinition*,
|
||||
G4double kinEnergy)
|
||||
inline void G4MollerBhabhaModel::SetParticle(const G4ParticleDefinition* p)
|
||||
{
|
||||
G4double tmax = kinEnergy;
|
||||
if(isElectron) tmax *= 0.5;
|
||||
return tmax;
|
||||
particle = p;
|
||||
if(p != theElectron) isElectron = false;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4MscModel71.hh,v 1.5 2007/05/22 17:34:36 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4MscModel71.hh,v 1.6 2009/11/01 13:04:12 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -80,7 +80,7 @@ class G4MscModel71 : public G4VEmModel
|
||||
public:
|
||||
|
||||
G4MscModel71(G4double&, G4double&, G4double&, G4double&, G4bool&,
|
||||
const G4String& nam = "MscUni");
|
||||
const G4String& nam = "UrbanMsc71");
|
||||
|
||||
virtual ~G4MscModel71();
|
||||
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * 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. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4NuclearStopping.hh,v 1.2 2009/11/10 19:25:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -----------------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
// Author: Vladimir Ivanchenko
|
||||
//
|
||||
// Creation date: 20 July 2009
|
||||
//
|
||||
// Modified:
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
//
|
||||
|
||||
// class description
|
||||
//
|
||||
// The class simulates nuclear stopping due to multiple scattering
|
||||
//
|
||||
// class description - end
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#ifndef G4NuclearStopping_h
|
||||
#define G4NuclearStopping_h 1
|
||||
|
||||
#include "G4VEmProcess.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4Track.hh"
|
||||
#include "G4Step.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4GPILSelection.hh"
|
||||
#include "G4ParticleChangeForLoss.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4ICRU49NuclearStoppingModel;
|
||||
|
||||
class G4NuclearStopping : public G4VEmProcess
|
||||
{
|
||||
|
||||
public: // with description
|
||||
|
||||
G4NuclearStopping(const G4String& processName="nuclearStopping");
|
||||
|
||||
virtual ~G4NuclearStopping();
|
||||
|
||||
// returns true for charged particles, false otherwise
|
||||
G4bool IsApplicable (const G4ParticleDefinition& p);
|
||||
|
||||
// implementation of pure virtual method
|
||||
G4double AlongStepGetPhysicalInteractionLength(const G4Track& track,
|
||||
G4double previousStepSize,
|
||||
G4double currentMinimumStep,
|
||||
G4double& proposedSafety,
|
||||
G4GPILSelection* selection);
|
||||
|
||||
// implementation of energy loss along step
|
||||
G4VParticleChange* AlongStepDoIt(const G4Track& track,
|
||||
const G4Step& step);
|
||||
|
||||
// Print few lines of informations about the process: validity range,
|
||||
void PrintInfo();
|
||||
|
||||
protected:
|
||||
|
||||
// This function initialise process
|
||||
void InitialiseProcess(const G4ParticleDefinition*);
|
||||
|
||||
private:
|
||||
|
||||
G4ParticleChangeForLoss nParticleChange;
|
||||
|
||||
G4ICRU49NuclearStoppingModel* modelICRU49;
|
||||
|
||||
G4bool isInitialized;
|
||||
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
@@ -23,6 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4PAIModel.hh,v 1.22 2009/02/19 19:17:50 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -74,14 +76,14 @@ public:
|
||||
|
||||
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
virtual void InitialiseMe(const G4ParticleDefinition*) {};
|
||||
virtual void InitialiseMe(const G4ParticleDefinition*);
|
||||
|
||||
virtual G4double ComputeDEDX(const G4MaterialCutsCouple*,
|
||||
virtual G4double ComputeDEDXPerVolume(const G4Material*,
|
||||
const G4ParticleDefinition*,
|
||||
G4double kineticEnergy,
|
||||
G4double cutEnergy);
|
||||
|
||||
virtual G4double CrossSection(const G4MaterialCutsCouple*,
|
||||
virtual G4double CrossSectionPerVolume(const G4Material*,
|
||||
const G4ParticleDefinition*,
|
||||
G4double kineticEnergy,
|
||||
G4double cutEnergy,
|
||||
@@ -118,8 +120,6 @@ public:
|
||||
|
||||
void SetVerboseLevel(G4int verbose){fVerbose=verbose;};
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
@@ -191,30 +191,6 @@ private:
|
||||
G4bool isInitialised;
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
inline G4double G4PAIModel::MaxSecondaryEnergy( const G4ParticleDefinition* p,
|
||||
G4double kinEnergy)
|
||||
{
|
||||
G4double tmax = kinEnergy;
|
||||
if(p == fElectron) tmax *= 0.5;
|
||||
else if(p != fPositron) {
|
||||
G4double mass = p->GetPDGMass();
|
||||
G4double ratio= electron_mass_c2/mass;
|
||||
G4double gamma= kinEnergy/mass + 1.0;
|
||||
tmax = 2.0*electron_mass_c2*(gamma*gamma - 1.) /
|
||||
(1. + 2.0*gamma*ratio + ratio*ratio);
|
||||
}
|
||||
return tmax;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
inline void G4PAIModel::DefineForRegion(const G4Region* r)
|
||||
{
|
||||
fPAIRegionVector.push_back(r);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4PAIPhotonModel.hh,v 1.12 2009/02/19 19:17:50 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -73,18 +75,18 @@ public:
|
||||
|
||||
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
virtual void InitialiseMe(const G4ParticleDefinition*) {};
|
||||
virtual void InitialiseMe(const G4ParticleDefinition*);
|
||||
|
||||
virtual G4double ComputeDEDX(const G4MaterialCutsCouple*,
|
||||
const G4ParticleDefinition*,
|
||||
G4double kineticEnergy,
|
||||
G4double cutEnergy);
|
||||
virtual G4double ComputeDEDXPerVolume(const G4Material*,
|
||||
const G4ParticleDefinition*,
|
||||
G4double kineticEnergy,
|
||||
G4double cutEnergy);
|
||||
|
||||
virtual G4double CrossSection(const G4MaterialCutsCouple*,
|
||||
const G4ParticleDefinition*,
|
||||
G4double kineticEnergy,
|
||||
G4double cutEnergy,
|
||||
G4double maxEnergy);
|
||||
virtual G4double CrossSectionPerVolume(const G4Material*,
|
||||
const G4ParticleDefinition*,
|
||||
G4double kineticEnergy,
|
||||
G4double cutEnergy,
|
||||
G4double maxEnergy);
|
||||
|
||||
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
|
||||
const G4MaterialCutsCouple*,
|
||||
@@ -121,12 +123,10 @@ public:
|
||||
G4double GetEnergyTransfer(G4PhysicsTable*, G4int iPlace,
|
||||
G4double position, G4int iTransfer );
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kinEnergy);
|
||||
G4double kinEnergy);
|
||||
|
||||
private:
|
||||
|
||||
@@ -145,8 +145,6 @@ private:
|
||||
G4int fVerbose;
|
||||
G4PhysicsLogVector* fProtonEnergyVector ;
|
||||
|
||||
|
||||
|
||||
// vectors
|
||||
|
||||
G4PhysicsTable* fPAItransferTable;
|
||||
@@ -203,30 +201,6 @@ private:
|
||||
G4bool isInitialised;
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
inline G4double G4PAIPhotonModel::MaxSecondaryEnergy( const G4ParticleDefinition* p,
|
||||
G4double kinEnergy)
|
||||
{
|
||||
G4double tmax = kinEnergy;
|
||||
if(p == fElectron) tmax *= 0.5;
|
||||
else if(p != fPositron) {
|
||||
G4double mass = p->GetPDGMass();
|
||||
G4double ratio= electron_mass_c2/mass;
|
||||
G4double gamma= kinEnergy/mass + 1.0;
|
||||
tmax = 2.0*electron_mass_c2*(gamma*gamma - 1.) /
|
||||
(1. + 2.0*gamma*ratio + ratio*ratio);
|
||||
}
|
||||
return tmax;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
inline void G4PAIPhotonModel::DefineForRegion(const G4Region* r)
|
||||
{
|
||||
fPAIRegionVector.push_back(r);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4PEEffectModel.hh,v 1.6 2007/05/22 17:34:36 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4PEEffectModel.hh,v 1.7 2009/02/20 12:06:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -40,6 +40,8 @@
|
||||
// Modifications:
|
||||
//
|
||||
// 06.02.2006 : added ComputeMeanFreePath() (mma)
|
||||
// 20.02.2009 : move virtual inline to .cc, substitute
|
||||
// ComputeMeanFreePath() by CrossSectionPerVolume (VI)
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
@@ -69,16 +71,17 @@ public:
|
||||
|
||||
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
G4double Z,
|
||||
G4double A,
|
||||
G4double, G4double);
|
||||
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
G4double Z,
|
||||
G4double A,
|
||||
G4double, G4double);
|
||||
|
||||
G4double ComputeMeanFreePath( const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
const G4Material* material,
|
||||
G4double, G4double);
|
||||
virtual G4double CrossSectionPerVolume(const G4Material*,
|
||||
const G4ParticleDefinition*,
|
||||
G4double kineticEnergy,
|
||||
G4double cutEnergy,
|
||||
G4double maxEnergy);
|
||||
|
||||
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
|
||||
const G4MaterialCutsCouple*,
|
||||
@@ -99,45 +102,6 @@ private:
|
||||
G4bool isInitialized;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....
|
||||
|
||||
inline G4double G4PEEffectModel::ComputeCrossSectionPerAtom(
|
||||
const G4ParticleDefinition*,
|
||||
G4double energy,
|
||||
G4double Z, G4double,
|
||||
G4double, G4double)
|
||||
{
|
||||
G4double* SandiaCof = G4SandiaTable::GetSandiaCofPerAtom((G4int)Z, energy);
|
||||
|
||||
G4double energy2 = energy*energy, energy3 = energy*energy2,
|
||||
energy4 = energy2*energy2;
|
||||
|
||||
return SandiaCof[0]/energy + SandiaCof[1]/energy2 +
|
||||
SandiaCof[2]/energy3 + SandiaCof[3]/energy4;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4PEEffectModel::ComputeMeanFreePath(
|
||||
const G4ParticleDefinition*,
|
||||
G4double energy,
|
||||
const G4Material* material,
|
||||
G4double, G4double)
|
||||
{
|
||||
G4double* SandiaCof = material->GetSandiaTable()
|
||||
->GetSandiaCofForMaterial(energy);
|
||||
|
||||
G4double energy2 = energy*energy, energy3 = energy*energy2,
|
||||
energy4 = energy2*energy2;
|
||||
|
||||
G4double cross = SandiaCof[0]/energy + SandiaCof[1]/energy2 +
|
||||
SandiaCof[2]/energy3 + SandiaCof[3]/energy4;
|
||||
|
||||
G4double mfp = DBL_MAX;
|
||||
if (cross > 0.) mfp = 1./cross;
|
||||
return mfp;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,297 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * 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. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4PairProductionRelModel.hh,v 1.3 2009/06/04 13:45:53 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4PairProductionRelModel
|
||||
//
|
||||
// Author: Andreas Schaelicke
|
||||
//
|
||||
// Creation date: 02.04.2009
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of gamma convertion to e+e- in the field of a nucleus
|
||||
// relativistic approximation
|
||||
//
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4PairProductionRelModel_h
|
||||
#define G4PairProductionRelModel_h 1
|
||||
|
||||
#include "G4VEmModel.hh"
|
||||
#include "G4PhysicsTable.hh"
|
||||
#include "G4NistManager.hh"
|
||||
|
||||
class G4ParticleChangeForGamma;
|
||||
|
||||
class G4PairProductionRelModel : public G4VEmModel
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4PairProductionRelModel(const G4ParticleDefinition* p = 0,
|
||||
const G4String& nam = "Bethe-Heitler");
|
||||
|
||||
virtual ~G4PairProductionRelModel();
|
||||
|
||||
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
virtual G4double ComputeCrossSectionPerAtom(
|
||||
const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
G4double Z,
|
||||
G4double A=0.,
|
||||
G4double cut=0.,
|
||||
G4double emax=DBL_MAX);
|
||||
|
||||
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double tmin,
|
||||
G4double maxEnergy);
|
||||
|
||||
virtual void SetupForMaterial(const G4ParticleDefinition*,
|
||||
const G4Material*,G4double);
|
||||
|
||||
// * fast inline functions *
|
||||
inline void SetCurrentElement(const G4double);
|
||||
|
||||
// set / get methods
|
||||
inline void SetLPMconstant(G4double val);
|
||||
inline G4double LPMconstant() const;
|
||||
|
||||
inline void SetLPMflag(G4bool);
|
||||
inline G4bool LPMflag() const;
|
||||
|
||||
protected:
|
||||
// screening functions
|
||||
inline G4double Phi1(G4double delta) const;
|
||||
inline G4double Phi2(G4double delta) const;
|
||||
inline G4double DeltaMax() const;
|
||||
inline G4double DeltaMin(G4double) const;
|
||||
// lpm functions
|
||||
void CalcLPMFunctions(G4double k, G4double eplus);
|
||||
|
||||
// obsolete
|
||||
G4double ScreenFunction1(G4double ScreenVariable);
|
||||
G4double ScreenFunction2(G4double ScreenVariable);
|
||||
|
||||
|
||||
|
||||
|
||||
G4double ComputeXSectionPerAtom(G4double totalEnergy, G4double Z);
|
||||
|
||||
G4double ComputeDXSectionPerAtom(G4double eplusEnergy, G4double totalEnergy, G4double Z);
|
||||
G4double ComputeRelDXSectionPerAtom(G4double eplusEnergy, G4double totalEnergy, G4double Z);
|
||||
|
||||
// hide assignment operator
|
||||
G4PairProductionRelModel & operator=(const G4PairProductionRelModel &right);
|
||||
G4PairProductionRelModel(const G4PairProductionRelModel&);
|
||||
|
||||
G4NistManager* nist;
|
||||
|
||||
G4ParticleDefinition* theGamma;
|
||||
G4ParticleDefinition* theElectron;
|
||||
G4ParticleDefinition* thePositron;
|
||||
G4ParticleChangeForGamma* fParticleChange;
|
||||
G4PhysicsTable* theCrossSectionTable;
|
||||
|
||||
G4double lowGammaEnergy;
|
||||
G4double highGammaEnergy;
|
||||
|
||||
G4int nbins;
|
||||
size_t indexZ[120];
|
||||
|
||||
G4double fLPMconstant;
|
||||
G4bool fLPMflag;
|
||||
|
||||
// cash
|
||||
G4double z13, z23, lnZ;
|
||||
G4double Fel, Finel, fCoulomb;
|
||||
G4double currentZ;
|
||||
|
||||
// LPM effect
|
||||
G4double lpmEnergy;
|
||||
G4double xiLPM, phiLPM, gLPM;
|
||||
|
||||
// consts
|
||||
G4bool use_completescreening;
|
||||
|
||||
static const G4double xgi[8], wgi[8];
|
||||
static const G4double Fel_light[5];
|
||||
static const G4double Finel_light[5];
|
||||
static const G4double facFel;
|
||||
static const G4double facFinel;
|
||||
|
||||
static const G4double preS1, logTwo;
|
||||
|
||||
};
|
||||
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline
|
||||
void G4PairProductionRelModel::SetLPMconstant(G4double val)
|
||||
{
|
||||
fLPMconstant = val;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline
|
||||
G4double G4PairProductionRelModel::LPMconstant() const
|
||||
{
|
||||
return fLPMconstant;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline
|
||||
void G4PairProductionRelModel::SetLPMflag(G4bool val)
|
||||
{
|
||||
fLPMflag = val;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline
|
||||
G4bool G4PairProductionRelModel::LPMflag() const
|
||||
{
|
||||
return fLPMflag;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline void G4PairProductionRelModel::SetCurrentElement(const G4double Z)
|
||||
{
|
||||
if(Z != currentZ) {
|
||||
currentZ = Z;
|
||||
|
||||
G4int iz = G4int(Z);
|
||||
z13 = nist->GetZ13(iz);
|
||||
z23 = z13*z13;
|
||||
lnZ = nist->GetLOGZ(iz);
|
||||
|
||||
if (iz <= 4) {
|
||||
Fel = Fel_light[iz];
|
||||
Finel = Finel_light[iz] ;
|
||||
}
|
||||
else {
|
||||
Fel = facFel - lnZ/3. ;
|
||||
Finel = facFinel - 2.*lnZ/3. ;
|
||||
}
|
||||
|
||||
fCoulomb=GetCurrentElement()->GetfCoulomb();
|
||||
}
|
||||
}
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4PairProductionRelModel::Phi1(G4double delta) const
|
||||
{
|
||||
G4double screenVal;
|
||||
|
||||
if (delta > 1.)
|
||||
screenVal = 21.12 - 4.184*std::log(delta+0.952);
|
||||
else
|
||||
screenVal = 20.868 - delta*(3.242 - 0.625*delta);
|
||||
|
||||
return screenVal;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double G4PairProductionRelModel::Phi2(G4double delta) const
|
||||
{
|
||||
G4double screenVal;
|
||||
|
||||
if (delta > 1.)
|
||||
screenVal = 21.12 - 4.184*std::log(delta+0.952);
|
||||
else
|
||||
screenVal = 20.209 - delta*(1.930 + 0.086*delta);
|
||||
|
||||
return screenVal;
|
||||
}
|
||||
|
||||
inline G4double G4PairProductionRelModel::ScreenFunction1(G4double ScreenVariable)
|
||||
|
||||
// compute the value of the screening function 3*PHI1 - PHI2
|
||||
|
||||
{
|
||||
G4double screenVal;
|
||||
|
||||
if (ScreenVariable > 1.)
|
||||
screenVal = 42.24 - 8.368*std::log(ScreenVariable+0.952);
|
||||
else
|
||||
screenVal = 42.392 - ScreenVariable*(7.796 - 1.961*ScreenVariable);
|
||||
|
||||
return screenVal;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double G4PairProductionRelModel::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*std::log(ScreenVariable+0.952);
|
||||
else
|
||||
screenVal = 41.405 - ScreenVariable*(5.828 - 0.8945*ScreenVariable);
|
||||
|
||||
return screenVal;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
|
||||
inline G4double G4PairProductionRelModel::DeltaMax() const
|
||||
{
|
||||
// k > 50 MeV
|
||||
G4double FZ = 8.*(lnZ/3. + fCoulomb);
|
||||
return std::exp( (42.24-FZ)/8.368 ) + 0.952;
|
||||
}
|
||||
|
||||
inline G4double G4PairProductionRelModel::DeltaMin(G4double k) const
|
||||
{
|
||||
return 4.*136./z13*(electron_mass_c2/k);
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4PhotoElectricEffect.hh,v 1.24 2007/05/23 08:47:34 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4PhotoElectricEffect.hh,v 1.25 2009/02/20 12:06:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
//
|
||||
//------------------ G4PhotoElectricEffect physics process ------------------
|
||||
@@ -90,29 +90,20 @@ public: // with description
|
||||
virtual ~G4PhotoElectricEffect();
|
||||
|
||||
// true for Gamma only.
|
||||
G4bool IsApplicable(const G4ParticleDefinition&);
|
||||
virtual G4bool IsApplicable(const G4ParticleDefinition&);
|
||||
|
||||
// Print few lines of informations about the process: validity range,
|
||||
void PrintInfo();
|
||||
virtual void PrintInfo();
|
||||
|
||||
protected:
|
||||
|
||||
void InitialiseProcess(const G4ParticleDefinition*);
|
||||
virtual void InitialiseProcess(const G4ParticleDefinition*);
|
||||
|
||||
private:
|
||||
|
||||
G4bool isInitialised;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline
|
||||
G4bool G4PhotoElectricEffect::IsApplicable(const G4ParticleDefinition& p)
|
||||
{
|
||||
return (&p == G4Gamma::Gamma());
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4UniversalFluctuation.hh,v 1.6 2008/10/22 16:04:33 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4UniversalFluctuation.hh,v 1.10 2009/03/19 14:15:17 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -69,23 +69,21 @@ public:
|
||||
|
||||
virtual ~G4UniversalFluctuation();
|
||||
|
||||
G4double SampleFluctuations(const G4Material*,
|
||||
const G4DynamicParticle*,
|
||||
G4double&,
|
||||
G4double&,
|
||||
G4double&);
|
||||
virtual G4double SampleFluctuations(const G4Material*,
|
||||
const G4DynamicParticle*,
|
||||
G4double&,
|
||||
G4double&,
|
||||
G4double&);
|
||||
|
||||
G4double Dispersion( const G4Material*,
|
||||
const G4DynamicParticle*,
|
||||
G4double&,
|
||||
G4double&);
|
||||
virtual G4double Dispersion( const G4Material*,
|
||||
const G4DynamicParticle*,
|
||||
G4double&,
|
||||
G4double&);
|
||||
|
||||
void InitialiseMe(const G4ParticleDefinition*);
|
||||
virtual void InitialiseMe(const G4ParticleDefinition*);
|
||||
|
||||
// Initialisation prestep
|
||||
inline void SetParticleAndCharge(const G4ParticleDefinition*, G4double q2);
|
||||
|
||||
protected:
|
||||
virtual void SetParticleAndCharge(const G4ParticleDefinition*, G4double q2);
|
||||
|
||||
private:
|
||||
|
||||
@@ -112,9 +110,6 @@ private:
|
||||
G4double ipotLogFluct;
|
||||
G4double e0;
|
||||
|
||||
G4double facwidth;
|
||||
G4double oldloss;
|
||||
G4double samestep;
|
||||
G4double e1,e2;
|
||||
|
||||
G4double minNumberInteractionsBohr;
|
||||
@@ -125,19 +120,6 @@ private:
|
||||
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void
|
||||
G4UniversalFluctuation::SetParticleAndCharge(const G4ParticleDefinition* part,
|
||||
G4double q2)
|
||||
{
|
||||
if(part != particle) {
|
||||
particle = part;
|
||||
particleMass = part->GetPDGMass();
|
||||
}
|
||||
chargeSquare = q2;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4UrbanMscModel.hh,v 1.33 2008/03/10 10:39:21 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4UrbanMscModel.hh,v 1.35 2009/04/29 13:30:22 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -36,46 +36,12 @@
|
||||
//
|
||||
// Author: Laszlo Urban
|
||||
//
|
||||
// Creation date: 01.03.2001
|
||||
// Creation date: 06.03.2008
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
// 27-03-03 Move model part from G4MultipleScattering (V.Ivanchenko)
|
||||
// 27-03-03 Rename (V.Ivanchenko)
|
||||
//
|
||||
// 05-08-03 angle distribution has been modified (L.Urban)
|
||||
// 26-11-03 new data member currentRange (L.Urban)
|
||||
// 01-03-04 changes in data members + signature changed in SampleCosineTheta
|
||||
// 11-03-04 changes in data members (L.Urban)
|
||||
// 23-04-04 changes in data members and in signature of SampleCosineTheta
|
||||
// (L.Urban)
|
||||
// 17-08-04 name of data member facxsi changed to factail (L.Urban)
|
||||
// 08-04-05 Major optimisation of internal interfaces (V.Ivantchenko)
|
||||
// 15-04-05 optimize internal interface - add SampleSecondaries method (V.Ivanchenko)
|
||||
// 11-08-05 computation of lateral correlation added (L.Urban)
|
||||
// 02-10-05 nuclear size correction computation removed, the correction
|
||||
// included in the (theoretical) tabulated values (L.Urban)
|
||||
// 16-02-06 data members b and xsi have been removed (L.Urban)
|
||||
// 17-02-06 Save table of transport cross sections not mfp (V.Ivanchenko)
|
||||
// 07-03-06 Create G4UrbanMscModel and move there step limit calculation (V.Ivanchenko)
|
||||
// 10-05-06 SetMscStepLimitation at initialisation (V.Ivantchenko)
|
||||
// 11-05-06 name of data member safety changed to presafety, some new data
|
||||
// members added (frscaling1,frscaling2,tlimitminfix,nstepmax)
|
||||
// (L.Urban)
|
||||
// 13-10-06 data member factail removed, data member tkinlimit changed
|
||||
// to lambdalimit,
|
||||
// new data members tgeom,tnow,skin,skindepth,Zeff,geomlimit
|
||||
// G4double GeomLimit(const G4Track& track) changed to
|
||||
// void GeomLimit(const G4Track& track) (L.Urban)
|
||||
// 20-10-06 parameter theta0 now computed in the (public)
|
||||
// function ComputeTheta0,
|
||||
// single scattering modified allowing not small
|
||||
// angles as well (L.Urban)
|
||||
// 31-01-07 code cleaning (L.Urban)
|
||||
// 06-02-07 Move SetMscStepLimitation method into the source (VI)
|
||||
// 15-02-07 new data member : smallstep (L.Urban)
|
||||
// 10-04-07 remove navigator, smallstep, tnow (V.Ivanchenko)
|
||||
//
|
||||
// 28-04-09 move G4UrbanMscModel2 from the g49.2 to G4UrbanMscModel.
|
||||
// now it is frozen (V.Ivanchenk0)
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
@@ -110,7 +76,7 @@ public:
|
||||
virtual ~G4UrbanMscModel();
|
||||
|
||||
void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
|
||||
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition* particle,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
@@ -118,12 +84,6 @@ public:
|
||||
G4double cut =0.,
|
||||
G4double emax=DBL_MAX);
|
||||
|
||||
void SampleSecondaries(std::vector<G4DynamicParticle*>*,
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double,
|
||||
G4double);
|
||||
|
||||
void SampleScattering(const G4DynamicParticle*,
|
||||
G4double safety);
|
||||
|
||||
@@ -140,18 +100,20 @@ public:
|
||||
|
||||
private:
|
||||
|
||||
G4double SimpleScattering(G4double xmeanth, G4double x2meanth);
|
||||
|
||||
G4double SampleCosineTheta(G4double trueStepLength, G4double KineticEnergy);
|
||||
|
||||
G4double SampleDisplacement();
|
||||
|
||||
G4double LatCorrelation();
|
||||
|
||||
void GeomLimit(const G4Track& track);
|
||||
|
||||
inline G4double GetLambda(G4double kinEnergy);
|
||||
|
||||
inline void SetParticle(const G4ParticleDefinition*);
|
||||
|
||||
inline void UpdateCache();
|
||||
|
||||
// hide assignment operator
|
||||
G4UrbanMscModel & operator=(const G4UrbanMscModel &right);
|
||||
G4UrbanMscModel(const G4UrbanMscModel&);
|
||||
@@ -159,26 +121,23 @@ private:
|
||||
const G4ParticleDefinition* particle;
|
||||
G4ParticleChangeForMSC* fParticleChange;
|
||||
|
||||
G4SafetyHelper* safetyHelper;
|
||||
G4PhysicsTable* theLambdaTable;
|
||||
const G4MaterialCutsCouple* couple;
|
||||
G4LossTableManager* theManager;
|
||||
|
||||
G4double mass;
|
||||
G4double charge;
|
||||
|
||||
G4double masslimite,masslimitmu;
|
||||
G4double charge,ChargeSquare;
|
||||
G4double masslimite,lambdalimit,fr;
|
||||
|
||||
G4double taubig;
|
||||
G4double tausmall;
|
||||
G4double taulim;
|
||||
G4double currentTau;
|
||||
G4double frscaling1,frscaling2;
|
||||
G4double tlimit;
|
||||
G4double tlimitmin;
|
||||
G4double tlimitminfix;
|
||||
G4double tgeom;
|
||||
|
||||
G4double nstepmax;
|
||||
G4double geombig;
|
||||
G4double geommin;
|
||||
G4double geomlimit;
|
||||
@@ -197,18 +156,27 @@ private:
|
||||
|
||||
G4double currentKinEnergy;
|
||||
G4double currentRange;
|
||||
G4double rangeinit;
|
||||
G4double currentRadLength;
|
||||
|
||||
G4double Zeff;
|
||||
G4double theta0max,rellossmax;
|
||||
G4double third;
|
||||
|
||||
G4int currentMaterialIndex;
|
||||
|
||||
G4double y;
|
||||
G4double Zold;
|
||||
G4double Zeff,Z2,Z23,lnZ;
|
||||
G4double coeffth1,coeffth2;
|
||||
G4double coeffc1,coeffc2;
|
||||
G4double scr1ini,scr2ini,scr1,scr2;
|
||||
|
||||
G4bool isInitialized;
|
||||
G4bool inside;
|
||||
G4bool insideskin;
|
||||
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
@@ -235,10 +203,27 @@ void G4UrbanMscModel::SetParticle(const G4ParticleDefinition* p)
|
||||
particle = p;
|
||||
mass = p->GetPDGMass();
|
||||
charge = p->GetPDGCharge()/eplus;
|
||||
ChargeSquare = charge*charge;
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
void G4UrbanMscModel::UpdateCache()
|
||||
{
|
||||
lnZ = std::log(Zeff);
|
||||
coeffth1 = 0.885+lnZ*(0.104-0.0170*lnZ);
|
||||
coeffth2 = 0.028+lnZ*(0.012-0.00125*lnZ);
|
||||
coeffc1 = 2.134-lnZ*(0.1045-0.00602*lnZ);
|
||||
coeffc2 = 0.001126-lnZ*(0.0001089+0.0000247*lnZ);
|
||||
Z2 = Zeff*Zeff;
|
||||
Z23 = std::exp(2.*lnZ/3.);
|
||||
scr1 = scr1ini*Z23;
|
||||
scr2 = scr2ini*Z2*ChargeSquare;
|
||||
// lastMaterial = couple->GetMaterial();
|
||||
Zold = Zeff;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4UrbanMscModel2.hh,v 1.11 2008/12/18 13:01:34 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4UrbanMscModel2.hh,v 1.17 2009/05/15 09:26:42 urban Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -39,7 +39,7 @@
|
||||
// Creation date: 06.03.2008
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
// 23.04.2009 L.Urban updated parameterization in UpdateCache method
|
||||
//
|
||||
//
|
||||
// Class Description:
|
||||
@@ -83,12 +83,6 @@ public:
|
||||
G4double cut =0.,
|
||||
G4double emax=DBL_MAX);
|
||||
|
||||
void SampleSecondaries(std::vector<G4DynamicParticle*>*,
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double,
|
||||
G4double);
|
||||
|
||||
void SampleScattering(const G4DynamicParticle*,
|
||||
G4double safety);
|
||||
|
||||
@@ -113,8 +107,6 @@ private:
|
||||
|
||||
G4double LatCorrelation();
|
||||
|
||||
void GeomLimit(const G4Track& track);
|
||||
|
||||
inline G4double GetLambda(G4double kinEnergy);
|
||||
|
||||
inline void SetParticle(const G4ParticleDefinition*);
|
||||
@@ -128,12 +120,10 @@ private:
|
||||
const G4ParticleDefinition* particle;
|
||||
G4ParticleChangeForMSC* fParticleChange;
|
||||
|
||||
G4SafetyHelper* safetyHelper;
|
||||
G4PhysicsTable* theLambdaTable;
|
||||
const G4MaterialCutsCouple* couple;
|
||||
G4LossTableManager* theManager;
|
||||
|
||||
|
||||
G4double mass;
|
||||
G4double charge,ChargeSquare;
|
||||
G4double masslimite,lambdalimit,fr;
|
||||
@@ -222,15 +212,19 @@ inline
|
||||
void G4UrbanMscModel2::UpdateCache()
|
||||
{
|
||||
lnZ = std::log(Zeff);
|
||||
coeffth1 = 0.885+lnZ*(0.104-0.0170*lnZ);
|
||||
coeffth2 = 0.028+lnZ*(0.012-0.00125*lnZ);
|
||||
coeffc1 = 2.134-lnZ*(0.1045-0.00602*lnZ);
|
||||
coeffc2 = 0.001126-lnZ*(0.0001089+0.0000247*lnZ);
|
||||
//new correction in theta0 formula
|
||||
coeffth1 = (1.-8.7780e-2/Zeff)*(0.87+0.03*lnZ);
|
||||
coeffth2 = (4.0780e-2+1.7315e-4*Zeff)*(0.87+0.03*lnZ);
|
||||
// tail parameters
|
||||
G4double lnZ1 = std::log(Zeff+1.);
|
||||
coeffc1 = 2.943-0.197*lnZ1;
|
||||
coeffc2 = 0.0987-0.0143*lnZ1;
|
||||
// for single scattering
|
||||
Z2 = Zeff*Zeff;
|
||||
Z23 = std::exp(2.*lnZ/3.);
|
||||
scr1 = scr1ini*Z23;
|
||||
scr2 = scr2ini*Z2*ChargeSquare;
|
||||
// lastMaterial = couple->GetMaterial();
|
||||
|
||||
Zold = Zeff;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4UrbanMscModel90.hh,v 1.4 2008/10/29 14:15:30 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4UrbanMscModel90.hh,v 1.6 2009/11/01 13:04:12 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -69,7 +69,7 @@ class G4UrbanMscModel90 : public G4VMscModel
|
||||
|
||||
public:
|
||||
|
||||
G4UrbanMscModel90(const G4String& nam = "UrbanMscUni90");
|
||||
G4UrbanMscModel90(const G4String& nam = "UrbanMsc90");
|
||||
|
||||
virtual ~G4UrbanMscModel90();
|
||||
|
||||
@@ -110,8 +110,6 @@ private:
|
||||
|
||||
G4double LatCorrelation();
|
||||
|
||||
void GeomLimit(const G4Track& track);
|
||||
|
||||
inline G4double GetLambda(G4double kinEnergy);
|
||||
|
||||
inline void SetParticle(const G4ParticleDefinition*);
|
||||
|
||||
@@ -0,0 +1,230 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * 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. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4UrbanMscModel92.hh,v 1.1 2009/11/01 13:04:12 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4UrbanMscModel92
|
||||
//
|
||||
// Author: Laszlo Urban
|
||||
//
|
||||
// Creation date: 06.03.2008
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
// 28-10-2009 V.Ivanchenko moved G4UrbanMscModel to G4UrbanMscModel92,
|
||||
// now it is a frozen version of the Urban model corresponding
|
||||
// to g4 9.2
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of the model of multiple scattering based on
|
||||
// H.W.Lewis Phys Rev 78 (1950) 526 and L.Urban model
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4UrbanMscModel92_h
|
||||
#define G4UrbanMscModel92_h 1
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#include "G4VMscModel.hh"
|
||||
#include "G4PhysicsTable.hh"
|
||||
#include "G4MscStepLimitType.hh"
|
||||
|
||||
class G4ParticleChangeForMSC;
|
||||
class G4SafetyHelper;
|
||||
class G4LossTableManager;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4UrbanMscModel92 : public G4VMscModel
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4UrbanMscModel92(const G4String& nam = "UrbanMsc92");
|
||||
|
||||
virtual ~G4UrbanMscModel92();
|
||||
|
||||
void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition* particle,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
G4double AtomicWeight=0.,
|
||||
G4double cut =0.,
|
||||
G4double emax=DBL_MAX);
|
||||
|
||||
void SampleScattering(const G4DynamicParticle*,
|
||||
G4double safety);
|
||||
|
||||
G4double ComputeTruePathLengthLimit(const G4Track& track,
|
||||
G4PhysicsTable* theLambdaTable,
|
||||
G4double currentMinimalStep);
|
||||
|
||||
G4double ComputeGeomPathLength(G4double truePathLength);
|
||||
|
||||
G4double ComputeTrueStepLength(G4double geomStepLength);
|
||||
|
||||
G4double ComputeTheta0(G4double truePathLength,
|
||||
G4double KineticEnergy);
|
||||
|
||||
private:
|
||||
|
||||
G4double SimpleScattering(G4double xmeanth, G4double x2meanth);
|
||||
|
||||
G4double SampleCosineTheta(G4double trueStepLength, G4double KineticEnergy);
|
||||
|
||||
G4double SampleDisplacement();
|
||||
|
||||
G4double LatCorrelation();
|
||||
|
||||
inline G4double GetLambda(G4double kinEnergy);
|
||||
|
||||
inline void SetParticle(const G4ParticleDefinition*);
|
||||
|
||||
inline void UpdateCache();
|
||||
|
||||
// hide assignment operator
|
||||
G4UrbanMscModel92 & operator=(const G4UrbanMscModel92 &right);
|
||||
G4UrbanMscModel92(const G4UrbanMscModel92&);
|
||||
|
||||
const G4ParticleDefinition* particle;
|
||||
G4ParticleChangeForMSC* fParticleChange;
|
||||
|
||||
G4PhysicsTable* theLambdaTable;
|
||||
const G4MaterialCutsCouple* couple;
|
||||
G4LossTableManager* theManager;
|
||||
|
||||
G4double mass;
|
||||
G4double charge,ChargeSquare;
|
||||
G4double masslimite,lambdalimit,fr;
|
||||
|
||||
G4double taubig;
|
||||
G4double tausmall;
|
||||
G4double taulim;
|
||||
G4double currentTau;
|
||||
G4double tlimit;
|
||||
G4double tlimitmin;
|
||||
G4double tlimitminfix;
|
||||
G4double tgeom;
|
||||
|
||||
G4double geombig;
|
||||
G4double geommin;
|
||||
G4double geomlimit;
|
||||
G4double skindepth;
|
||||
G4double smallstep;
|
||||
|
||||
G4double presafety;
|
||||
|
||||
G4double lambda0;
|
||||
G4double lambdaeff;
|
||||
G4double tPathLength;
|
||||
G4double zPathLength;
|
||||
G4double par1,par2,par3;
|
||||
|
||||
G4double stepmin;
|
||||
|
||||
G4double currentKinEnergy;
|
||||
G4double currentRange;
|
||||
G4double rangeinit;
|
||||
G4double currentRadLength;
|
||||
|
||||
G4double theta0max,rellossmax;
|
||||
G4double third;
|
||||
|
||||
G4int currentMaterialIndex;
|
||||
|
||||
G4double y;
|
||||
G4double Zold;
|
||||
G4double Zeff,Z2,Z23,lnZ;
|
||||
G4double coeffth1,coeffth2;
|
||||
G4double coeffc1,coeffc2;
|
||||
G4double scr1ini,scr2ini,scr1,scr2;
|
||||
|
||||
G4bool isInitialized;
|
||||
G4bool inside;
|
||||
G4bool insideskin;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
G4double G4UrbanMscModel92::GetLambda(G4double e)
|
||||
{
|
||||
G4double x;
|
||||
if(theLambdaTable) {
|
||||
G4bool b;
|
||||
x = ((*theLambdaTable)[currentMaterialIndex])->GetValue(e, b);
|
||||
} else {
|
||||
x = CrossSection(couple,particle,e);
|
||||
}
|
||||
if(x > DBL_MIN) x = 1./x;
|
||||
else x = DBL_MAX;
|
||||
return x;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
void G4UrbanMscModel92::SetParticle(const G4ParticleDefinition* p)
|
||||
{
|
||||
if (p != particle) {
|
||||
particle = p;
|
||||
mass = p->GetPDGMass();
|
||||
charge = p->GetPDGCharge()/eplus;
|
||||
ChargeSquare = charge*charge;
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
void G4UrbanMscModel92::UpdateCache()
|
||||
{
|
||||
lnZ = std::log(Zeff);
|
||||
coeffth1 = 0.885+lnZ*(0.104-0.0170*lnZ);
|
||||
coeffth2 = 0.028+lnZ*(0.012-0.00125*lnZ);
|
||||
coeffc1 = 2.134-lnZ*(0.1045-0.00602*lnZ);
|
||||
coeffc2 = 0.001126-lnZ*(0.0001089+0.0000247*lnZ);
|
||||
Z2 = Zeff*Zeff;
|
||||
Z23 = std::exp(2.*lnZ/3.);
|
||||
scr1 = scr1ini*Z23;
|
||||
scr2 = scr2ini*Z2*ChargeSquare;
|
||||
// lastMaterial = couple->GetMaterial();
|
||||
Zold = Zeff;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,235 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * 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. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4UrbanMscModel93.hh,v 1.1 2009/11/01 13:04:12 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4UrbanMscModel93
|
||||
//
|
||||
// Author: Laszlo Urban
|
||||
//
|
||||
// Creation date: 06.03.2008
|
||||
//
|
||||
// Modifications:
|
||||
// 23-04-2009 L.Urban updated parameterization in UpdateCache method
|
||||
// 28-10-2009 V.Ivanchenko moved G4UrbanMscModel2 to G4UrbanMscModel93,
|
||||
// now it is a frozen version of the Urban model corresponding
|
||||
// to g4 9.3
|
||||
//
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of the model of multiple scattering based on
|
||||
// H.W.Lewis Phys Rev 78 (1950) 526 and L.Urban model
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4UrbanMscModel93_h
|
||||
#define G4UrbanMscModel93_h 1
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#include "G4VMscModel.hh"
|
||||
#include "G4PhysicsTable.hh"
|
||||
#include "G4MscStepLimitType.hh"
|
||||
|
||||
class G4ParticleChangeForMSC;
|
||||
class G4SafetyHelper;
|
||||
class G4LossTableManager;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4UrbanMscModel93 : public G4VMscModel
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4UrbanMscModel93(const G4String& nam = "UrbanMsc93");
|
||||
|
||||
virtual ~G4UrbanMscModel93();
|
||||
|
||||
void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition* particle,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
G4double AtomicWeight=0.,
|
||||
G4double cut =0.,
|
||||
G4double emax=DBL_MAX);
|
||||
|
||||
void SampleScattering(const G4DynamicParticle*,
|
||||
G4double safety);
|
||||
|
||||
G4double ComputeTruePathLengthLimit(const G4Track& track,
|
||||
G4PhysicsTable* theLambdaTable,
|
||||
G4double currentMinimalStep);
|
||||
|
||||
G4double ComputeGeomPathLength(G4double truePathLength);
|
||||
|
||||
G4double ComputeTrueStepLength(G4double geomStepLength);
|
||||
|
||||
G4double ComputeTheta0(G4double truePathLength,
|
||||
G4double KineticEnergy);
|
||||
|
||||
private:
|
||||
|
||||
G4double SimpleScattering(G4double xmeanth, G4double x2meanth);
|
||||
|
||||
G4double SampleCosineTheta(G4double trueStepLength, G4double KineticEnergy);
|
||||
|
||||
G4double SampleDisplacement();
|
||||
|
||||
G4double LatCorrelation();
|
||||
|
||||
inline G4double GetLambda(G4double kinEnergy);
|
||||
|
||||
inline void SetParticle(const G4ParticleDefinition*);
|
||||
|
||||
inline void UpdateCache();
|
||||
|
||||
// hide assignment operator
|
||||
G4UrbanMscModel93 & operator=(const G4UrbanMscModel93 &right);
|
||||
G4UrbanMscModel93(const G4UrbanMscModel93&);
|
||||
|
||||
const G4ParticleDefinition* particle;
|
||||
G4ParticleChangeForMSC* fParticleChange;
|
||||
|
||||
G4PhysicsTable* theLambdaTable;
|
||||
const G4MaterialCutsCouple* couple;
|
||||
G4LossTableManager* theManager;
|
||||
|
||||
G4double mass;
|
||||
G4double charge,ChargeSquare;
|
||||
G4double masslimite,lambdalimit,fr;
|
||||
|
||||
G4double taubig;
|
||||
G4double tausmall;
|
||||
G4double taulim;
|
||||
G4double currentTau;
|
||||
G4double tlimit;
|
||||
G4double tlimitmin;
|
||||
G4double tlimitminfix;
|
||||
G4double tgeom;
|
||||
|
||||
G4double geombig;
|
||||
G4double geommin;
|
||||
G4double geomlimit;
|
||||
G4double skindepth;
|
||||
G4double smallstep;
|
||||
|
||||
G4double presafety;
|
||||
|
||||
G4double lambda0;
|
||||
G4double lambdaeff;
|
||||
G4double tPathLength;
|
||||
G4double zPathLength;
|
||||
G4double par1,par2,par3;
|
||||
|
||||
G4double stepmin;
|
||||
|
||||
G4double currentKinEnergy;
|
||||
G4double currentRange;
|
||||
G4double rangeinit;
|
||||
G4double currentRadLength;
|
||||
|
||||
G4double theta0max,rellossmax;
|
||||
G4double third;
|
||||
|
||||
G4int currentMaterialIndex;
|
||||
|
||||
G4double y;
|
||||
G4double Zold;
|
||||
G4double Zeff,Z2,Z23,lnZ;
|
||||
G4double coeffth1,coeffth2;
|
||||
G4double coeffc1,coeffc2;
|
||||
G4double scr1ini,scr2ini,scr1,scr2;
|
||||
|
||||
G4bool isInitialized;
|
||||
G4bool inside;
|
||||
G4bool insideskin;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
G4double G4UrbanMscModel93::GetLambda(G4double e)
|
||||
{
|
||||
G4double x;
|
||||
if(theLambdaTable) {
|
||||
G4bool b;
|
||||
x = ((*theLambdaTable)[currentMaterialIndex])->GetValue(e, b);
|
||||
} else {
|
||||
x = CrossSection(couple,particle,e);
|
||||
}
|
||||
if(x > DBL_MIN) x = 1./x;
|
||||
else x = DBL_MAX;
|
||||
return x;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
void G4UrbanMscModel93::SetParticle(const G4ParticleDefinition* p)
|
||||
{
|
||||
if (p != particle) {
|
||||
particle = p;
|
||||
mass = p->GetPDGMass();
|
||||
charge = p->GetPDGCharge()/eplus;
|
||||
ChargeSquare = charge*charge;
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
void G4UrbanMscModel93::UpdateCache()
|
||||
{
|
||||
lnZ = std::log(Zeff);
|
||||
//new correction in theta0 formula
|
||||
coeffth1 = (1.-8.7780e-2/Zeff)*(0.87+0.03*lnZ);
|
||||
coeffth2 = (4.0780e-2+1.7315e-4*Zeff)*(0.87+0.03*lnZ);
|
||||
// tail parameters
|
||||
G4double lnZ1 = std::log(Zeff+1.);
|
||||
coeffc1 = 2.943-0.197*lnZ1;
|
||||
coeffc2 = 0.0987-0.0143*lnZ1;
|
||||
// for single scattering
|
||||
Z2 = Zeff*Zeff;
|
||||
Z23 = std::exp(2.*lnZ/3.);
|
||||
scr1 = scr1ini*Z23;
|
||||
scr2 = scr2ini*Z2*ChargeSquare;
|
||||
|
||||
Zold = Zeff;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4WaterStopping.hh,v 1.6 2008/09/09 09:30:58 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4WaterStopping.hh,v 1.7 2009/06/19 10:39:48 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
|
||||
#ifndef G4WaterStopping_h
|
||||
#define G4WaterStopping_h 1
|
||||
@@ -76,8 +76,8 @@ private:
|
||||
G4WaterStopping(const G4WaterStopping&);
|
||||
|
||||
G4bool spline;
|
||||
G4int Z[16];
|
||||
G4double A[16];
|
||||
G4int Z[17];
|
||||
G4double A[17];
|
||||
std::vector<G4LPhysicsFreeVector*> dedx;
|
||||
};
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4WentzelVIModel.hh,v 1.7 2008/08/04 08:49:09 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4WentzelVIModel.hh,v 1.21 2009/10/10 15:16:57 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -65,7 +65,6 @@
|
||||
|
||||
class G4LossTableManager;
|
||||
class G4ParticleChangeForMSC;
|
||||
class G4SafetyHelper;
|
||||
class G4ParticleDefinition;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
@@ -79,34 +78,28 @@ public:
|
||||
|
||||
virtual ~G4WentzelVIModel();
|
||||
|
||||
void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
G4double AtomicWeight=0.,
|
||||
G4double cut = DBL_MAX,
|
||||
G4double emax= DBL_MAX);
|
||||
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
G4double AtomicWeight=0.,
|
||||
G4double cut = DBL_MAX,
|
||||
G4double emax= DBL_MAX);
|
||||
|
||||
void SampleScattering(const G4DynamicParticle*, G4double safety);
|
||||
virtual void SampleScattering(const G4DynamicParticle*, G4double safety);
|
||||
|
||||
void SampleSecondaries(std::vector<G4DynamicParticle*>*,
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double,
|
||||
G4double);
|
||||
virtual G4double ComputeTruePathLengthLimit(const G4Track& track,
|
||||
G4PhysicsTable* theLambdaTable,
|
||||
G4double currentMinimalStep);
|
||||
|
||||
G4double ComputeTruePathLengthLimit(const G4Track& track,
|
||||
G4PhysicsTable* theLambdaTable,
|
||||
G4double currentMinimalStep);
|
||||
virtual G4double ComputeGeomPathLength(G4double truePathLength);
|
||||
|
||||
G4double ComputeGeomPathLength(G4double truePathLength);
|
||||
|
||||
G4double ComputeTrueStepLength(G4double geomStepLength);
|
||||
virtual G4double ComputeTrueStepLength(G4double geomStepLength);
|
||||
|
||||
private:
|
||||
|
||||
G4double ComputeTransportXSectionPerVolume();
|
||||
G4double ComputeTransportXSectionPerAtom();
|
||||
|
||||
G4double ComputeXSectionPerVolume();
|
||||
|
||||
@@ -132,7 +125,6 @@ private:
|
||||
|
||||
G4ParticleChangeForMSC* fParticleChange;
|
||||
|
||||
G4SafetyHelper* safetyHelper;
|
||||
G4PhysicsTable* theLambdaTable;
|
||||
G4PhysicsTable* theLambda2Table;
|
||||
G4LossTableManager* theManager;
|
||||
@@ -172,7 +164,6 @@ private:
|
||||
|
||||
// single scattering parameters
|
||||
G4double coeff;
|
||||
G4double constn;
|
||||
G4double cosThetaMin;
|
||||
G4double cosThetaMax;
|
||||
G4double cosTetMaxNuc;
|
||||
@@ -181,7 +172,6 @@ private:
|
||||
G4double cosTetMaxElec2;
|
||||
G4double q2Limit;
|
||||
G4double alpha2;
|
||||
G4double a0;
|
||||
|
||||
// projectile
|
||||
const G4ParticleDefinition* particle;
|
||||
@@ -192,14 +182,19 @@ private:
|
||||
G4double tkin;
|
||||
G4double mom2;
|
||||
G4double invbeta2;
|
||||
G4double kinFactor;
|
||||
G4double etag;
|
||||
G4double lowEnergyLimit;
|
||||
|
||||
// target
|
||||
G4double targetZ;
|
||||
G4double targetMass;
|
||||
G4double screenZ;
|
||||
G4double formfactA;
|
||||
G4double FF[100];
|
||||
G4int iz;
|
||||
|
||||
static G4double ScreenRSquare[100];
|
||||
static G4double FormFactor[100];
|
||||
|
||||
// flags
|
||||
G4bool isInitialized;
|
||||
@@ -239,8 +234,7 @@ G4double G4WentzelVIModel::GetLambda(G4double e)
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline
|
||||
void G4WentzelVIModel::SetupParticle(const G4ParticleDefinition* p)
|
||||
inline void G4WentzelVIModel::SetupParticle(const G4ParticleDefinition* p)
|
||||
{
|
||||
// Initialise mass and charge
|
||||
if(p != particle) {
|
||||
@@ -250,7 +244,6 @@ void G4WentzelVIModel::SetupParticle(const G4ParticleDefinition* p)
|
||||
G4double q = particle->GetPDGCharge()/eplus;
|
||||
chargeSquare = q*q;
|
||||
tkin = 0.0;
|
||||
lowEnergyLimit = keV*mass/electron_mass_c2;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -263,7 +256,7 @@ inline void G4WentzelVIModel::SetupKinematic(G4double ekin, G4double cut)
|
||||
mom2 = tkin*(tkin + 2.0*mass);
|
||||
invbeta2 = 1.0 + mass*mass/mom2;
|
||||
cosTetMaxNuc = cosThetaMax;
|
||||
if(ekin <= 10.*cut && mass < MeV) {
|
||||
if(mass < MeV && ekin <= 10.*cut) {
|
||||
cosTetMaxNuc = ekin*(cosThetaMax + 1.0)/(10.*cut) - 1.0;
|
||||
}
|
||||
ComputeMaxElectronScattering(cut);
|
||||
@@ -277,28 +270,16 @@ inline void G4WentzelVIModel::SetupTarget(G4double Z, G4double e)
|
||||
if(Z != targetZ || e != etag) {
|
||||
etag = e;
|
||||
targetZ = Z;
|
||||
G4int iz= G4int(Z);
|
||||
iz = G4int(Z);
|
||||
if(iz > 99) iz = 99;
|
||||
G4double x = fNistManager->GetZ13(iz);
|
||||
screenZ = a0*x*x/mom2;
|
||||
if(iz > 1) screenZ *=(1.13 + 3.76*invbeta2*Z*Z*chargeSquare*alpha2);
|
||||
// screenZ = a0*x*x*(1.13 + 3.76*Z*Z*chargeSquare*alpha2)/mom2;
|
||||
// A.V. Butkevich et al., NIM A 488 (2002) 282
|
||||
formfactA = FF[iz];
|
||||
if(formfactA == 0.0) {
|
||||
x = fNistManager->GetA27(iz);
|
||||
formfactA = constn*x*x;
|
||||
FF[iz] = formfactA;
|
||||
}
|
||||
formfactA *= mom2;
|
||||
targetMass = fNistManager->GetAtomicMassAmu(iz)*amu_c2;
|
||||
screenZ = ScreenRSquare[iz]/mom2;
|
||||
G4double meff = targetMass/(mass+targetMass);
|
||||
kinFactor = coeff*targetZ*chargeSquare*invbeta2/(mom2*meff*meff);
|
||||
screenZ *=(1.13 + std::min(1.0,3.76*Z*Z*invbeta2*alpha2));
|
||||
if(mass > MeV) { screenZ *= 2.0; }
|
||||
formfactA = FormFactor[iz]*mom2;
|
||||
cosTetMaxNuc2 = cosTetMaxNuc;
|
||||
/*
|
||||
G4double ee = 10.*eV*Z;
|
||||
if(1 == iz) ee *= 2.0;
|
||||
G4double z = std::min(cosTetMaxElec, 1.0 - std::max(ecut,ee)*amu_c2
|
||||
*fNistManager->GetAtomicMassAmu(iz)/mom2);
|
||||
cosTetMaxElec2 = std::max(cosTetMaxNuc2, z);
|
||||
*/
|
||||
cosTetMaxElec2 = cosTetMaxElec;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * 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. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4alphaIonisation.hh,v 1.1 2009/11/10 11:50:30 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4alphaIonisation
|
||||
//
|
||||
// Author: Vladimir Ivanchenko
|
||||
//
|
||||
// Creation date: 28.10.2009
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// This class manages the ionisation process for He ions. Effective charge,
|
||||
// nuclear stopping power, energy loss corrections are taken into account.
|
||||
// It inherites from G4VEnergyLossLoss.
|
||||
//
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4alphaIonisation_h
|
||||
#define G4alphaIonisation_h 1
|
||||
|
||||
#include "G4VEnergyLossProcess.hh"
|
||||
|
||||
class G4Material;
|
||||
|
||||
class G4alphaIonisation : public G4VEnergyLossProcess
|
||||
{
|
||||
public:
|
||||
|
||||
G4alphaIonisation(const G4String& name = "alphaIoni");
|
||||
|
||||
virtual ~G4alphaIonisation();
|
||||
|
||||
virtual G4bool IsApplicable(const G4ParticleDefinition& p);
|
||||
|
||||
// Print out of the class parameters
|
||||
virtual void PrintInfo();
|
||||
|
||||
void ActivateNuclearStopping(G4bool);
|
||||
|
||||
protected:
|
||||
|
||||
virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition*,
|
||||
const G4ParticleDefinition*);
|
||||
|
||||
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition* p,
|
||||
const G4Material*, G4double cut);
|
||||
|
||||
inline G4double BetheBlochEnergyThreshold();
|
||||
|
||||
inline G4bool NuclearStoppingFlag();
|
||||
|
||||
private:
|
||||
|
||||
// hide assignment operator
|
||||
G4alphaIonisation & operator=(const G4alphaIonisation &right);
|
||||
G4alphaIonisation(const G4alphaIonisation&);
|
||||
|
||||
const G4ParticleDefinition* theParticle;
|
||||
|
||||
G4double mass;
|
||||
G4double ratio;
|
||||
G4double eth;
|
||||
|
||||
G4bool isInitialised;
|
||||
G4bool nuclearStopping;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4alphaIonisation::ActivateNuclearStopping(G4bool val)
|
||||
{
|
||||
nuclearStopping = val;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4alphaIonisation::BetheBlochEnergyThreshold()
|
||||
{
|
||||
return eth;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4bool G4alphaIonisation::NuclearStoppingFlag()
|
||||
{
|
||||
return nuclearStopping;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4eBremsstrahlung.hh,v 1.36 2007/05/23 08:47:34 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4eBremsstrahlung.hh,v 1.37 2009/02/20 12:06:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -88,7 +88,7 @@ public:
|
||||
|
||||
virtual ~G4eBremsstrahlung();
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition& p);
|
||||
virtual G4bool IsApplicable(const G4ParticleDefinition& p);
|
||||
|
||||
// Print out of the class parameters
|
||||
virtual void PrintInfo();
|
||||
@@ -109,14 +109,6 @@ private:
|
||||
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4bool G4eBremsstrahlung::IsApplicable(const G4ParticleDefinition& p)
|
||||
{
|
||||
return (&p == G4Electron::Electron() || &p == G4Positron::Positron());
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4eBremsstrahlungModel.hh,v 1.25 2008/11/13 19:28:58 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4eBremsstrahlungModel.hh,v 1.26 2009/02/20 12:06:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -74,8 +74,8 @@ public:
|
||||
|
||||
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
G4double MinEnergyCut(const G4ParticleDefinition*,
|
||||
const G4MaterialCutsCouple*);
|
||||
virtual G4double MinEnergyCut(const G4ParticleDefinition*,
|
||||
const G4MaterialCutsCouple*);
|
||||
|
||||
virtual G4double ComputeDEDXPerVolume(const G4Material*,
|
||||
const G4ParticleDefinition*,
|
||||
@@ -102,9 +102,6 @@ public:
|
||||
|
||||
protected:
|
||||
|
||||
inline G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kineticEnergy);
|
||||
|
||||
const G4Element* SelectRandomAtom(const G4MaterialCutsCouple* couple);
|
||||
|
||||
private:
|
||||
@@ -190,14 +187,4 @@ G4double G4eBremsstrahlungModel::ScreenFunction2(G4double ScreenVariable)
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline
|
||||
G4double G4eBremsstrahlungModel::MaxSecondaryEnergy(
|
||||
const G4ParticleDefinition*,
|
||||
G4double kineticEnergy)
|
||||
{
|
||||
return kineticEnergy;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4eBremsstrahlungRelModel.hh,v 1.10 2008/11/14 09:25:19 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4eBremsstrahlungRelModel.hh,v 1.11 2009/02/20 12:06:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -70,8 +70,8 @@ public:
|
||||
|
||||
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
G4double MinEnergyCut(const G4ParticleDefinition*,
|
||||
const G4MaterialCutsCouple*);
|
||||
virtual G4double MinEnergyCut(const G4ParticleDefinition*,
|
||||
const G4MaterialCutsCouple*);
|
||||
|
||||
virtual G4double ComputeDEDXPerVolume(const G4Material*,
|
||||
const G4ParticleDefinition*,
|
||||
@@ -96,11 +96,6 @@ public:
|
||||
inline void SetLPMconstant(G4double val);
|
||||
inline G4double LPMconstant() const;
|
||||
|
||||
protected:
|
||||
|
||||
inline G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kineticEnergy);
|
||||
|
||||
private:
|
||||
|
||||
void InitialiseConstants();
|
||||
@@ -206,15 +201,6 @@ inline void G4eBremsstrahlungRelModel::SetCurrentElement(const G4double Z)
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double
|
||||
G4eBremsstrahlungRelModel::MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kineticEnergy)
|
||||
{
|
||||
return kineticEnergy;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
|
||||
inline G4double G4eBremsstrahlungRelModel::Phi1(G4double gg, G4double)
|
||||
{
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4eCoulombScatteringModel.hh,v 1.36 2008/08/04 08:49:09 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4eCoulombScatteringModel.hh,v 1.49 2009/10/10 15:16:57 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -45,6 +45,8 @@
|
||||
// make some members protected
|
||||
// 09.10.07 V.Ivanchenko reorganized methods, add cut dependence in scattering off e-
|
||||
// 09.06.08 V.Ivanchenko add SelectIsotope and sampling of the recoil ion
|
||||
// 17.06.09 C.Consoalndi modified SetupTarget method - remove kinFactor
|
||||
//
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
@@ -64,8 +66,9 @@
|
||||
|
||||
#include "G4VEmModel.hh"
|
||||
#include "G4PhysicsTable.hh"
|
||||
#include "G4NistManager.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4NistManager.hh"
|
||||
#include <vector>
|
||||
|
||||
class G4ParticleChangeForGamma;
|
||||
class G4ParticleDefinition;
|
||||
@@ -128,7 +131,8 @@ protected:
|
||||
G4ParticleTable* theParticleTable;
|
||||
G4ParticleChangeForGamma* fParticleChange;
|
||||
G4NistManager* fNistManager;
|
||||
const G4DataVector* currentCuts;
|
||||
|
||||
const std::vector<G4double>* pCuts;
|
||||
|
||||
const G4MaterialCutsCouple* currentCouple;
|
||||
const G4Material* currentMaterial;
|
||||
@@ -136,7 +140,6 @@ protected:
|
||||
G4int currentMaterialIndex;
|
||||
|
||||
G4double coeff;
|
||||
G4double constn;
|
||||
G4double cosThetaMin;
|
||||
G4double cosThetaMax;
|
||||
G4double cosTetMinNuc;
|
||||
@@ -164,16 +167,19 @@ protected:
|
||||
|
||||
// target
|
||||
G4double targetZ;
|
||||
G4double targetMass;
|
||||
G4double screenZ;
|
||||
G4double formfactA;
|
||||
G4int idxelm;
|
||||
G4int iz;
|
||||
|
||||
private:
|
||||
|
||||
G4double a0;
|
||||
G4double alpha2;
|
||||
G4double faclim;
|
||||
G4double FF[100];
|
||||
|
||||
static G4double ScreenRSquare[100];
|
||||
static G4double FormFactor[100];
|
||||
|
||||
G4bool isInitialised;
|
||||
};
|
||||
@@ -203,7 +209,6 @@ void G4eCoulombScatteringModel::SetupParticle(const G4ParticleDefinition* p)
|
||||
G4double q = particle->GetPDGCharge()/eplus;
|
||||
chargeSquare = q*q;
|
||||
tkin = 0.0;
|
||||
lowEnergyLimit = keV*mass/electron_mass_c2;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -218,7 +223,7 @@ inline void G4eCoulombScatteringModel::SetupKinematic(G4double ekin,
|
||||
invbeta2 = 1.0 + mass*mass/mom2;
|
||||
cosTetMinNuc = cosThetaMin;
|
||||
cosTetMaxNuc = cosThetaMax;
|
||||
if(ekin <= 10.*cut && mass < MeV && cosThetaMin < 1.0) {
|
||||
if(mass < MeV && cosThetaMin < 1.0 && ekin <= 10.*cut) {
|
||||
cosTetMinNuc = ekin*(cosThetaMin + 1.0)/(10.*cut) - 1.0;
|
||||
}
|
||||
ComputeMaxElectronScattering(cut);
|
||||
@@ -232,31 +237,17 @@ inline void G4eCoulombScatteringModel::SetupTarget(G4double Z, G4double e)
|
||||
if(Z != targetZ || e != etag) {
|
||||
etag = e;
|
||||
targetZ = Z;
|
||||
G4int iz= G4int(Z);
|
||||
iz= G4int(Z);
|
||||
if(iz > 99) iz = 99;
|
||||
G4double x = fNistManager->GetZ13(iz);
|
||||
screenZ = a0*x*x/mom2;
|
||||
if(iz > 1) screenZ *=(1.13 + 3.76*invbeta2*Z*Z*chargeSquare*alpha2);
|
||||
//screenZ = a0*x*x*(1.13 + 3.76*Z*Z*chargeSquare*alpha2)/mom2;
|
||||
// A.V. Butkevich et al., NIM A 488 (2002) 282
|
||||
formfactA = FF[iz];
|
||||
if(formfactA == 0.0) {
|
||||
x = fNistManager->GetA27(iz);
|
||||
formfactA = constn*x*x;
|
||||
FF[iz] = formfactA;
|
||||
}
|
||||
formfactA *= mom2;
|
||||
targetMass = fNistManager->GetAtomicMassAmu(iz)*amu_c2;
|
||||
screenZ = ScreenRSquare[iz]/mom2;
|
||||
screenZ *=(1.13 + std::min(1.0,3.76*Z*Z*invbeta2*alpha2));
|
||||
if(mass > MeV) { screenZ *= 2.0; }
|
||||
formfactA = FormFactor[iz]*mom2;
|
||||
cosTetMaxNuc2 = cosTetMaxNuc;
|
||||
if(particle == theProton && 1 == iz && cosTetMaxNuc2 < 0.0) {
|
||||
if(1 == iz && particle == theProton && cosTetMaxNuc2 < 0.0) {
|
||||
cosTetMaxNuc2 = 0.0;
|
||||
}
|
||||
/*
|
||||
G4double ee = 10.*eV*Z;
|
||||
if(1 == iz) ee *= 2.0;
|
||||
G4double z = std::min(cosTetMaxElec, 1.0 - std::max(ecut,ee)*amu_c2
|
||||
*fNistManager->GetAtomicMassAmu(iz)/mom2);
|
||||
cosTetMaxElec2 = std::max(cosTetMaxNuc2, z);
|
||||
*/
|
||||
cosTetMaxElec2 = cosTetMaxElec;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4eIonisation.hh,v 1.35 2007/05/23 08:47:34 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4eIonisation.hh,v 1.36 2009/02/20 12:06:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -87,7 +87,7 @@ public:
|
||||
|
||||
virtual ~G4eIonisation();
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition& p);
|
||||
virtual G4bool IsApplicable(const G4ParticleDefinition& p);
|
||||
|
||||
// Print out of the class parameters
|
||||
virtual void PrintInfo();
|
||||
@@ -97,8 +97,8 @@ protected:
|
||||
virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition*,
|
||||
const G4ParticleDefinition*);
|
||||
|
||||
G4double MinPrimaryEnergy(const G4ParticleDefinition*,
|
||||
const G4Material*, G4double cut);
|
||||
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition*,
|
||||
const G4Material*, G4double cut);
|
||||
|
||||
private:
|
||||
|
||||
@@ -113,25 +113,6 @@ private:
|
||||
G4bool isInitialised;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4eIonisation::MinPrimaryEnergy(const G4ParticleDefinition*,
|
||||
const G4Material*,
|
||||
G4double cut)
|
||||
{
|
||||
G4double x = cut;
|
||||
if(isElectron) x += cut;
|
||||
return x;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4bool G4eIonisation::IsApplicable(const G4ParticleDefinition& p)
|
||||
{
|
||||
return (&p == G4Electron::Electron() || &p == G4Positron::Positron());
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4eMultipleScattering.hh,v 1.2 2008/03/11 12:03:43 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4eMultipleScattering.hh,v 1.3 2009/11/01 13:04:12 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -----------------------------------------------------------------------------
|
||||
//
|
||||
@@ -58,8 +58,6 @@
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4VMscModel;
|
||||
|
||||
class G4eMultipleScattering : public G4VMultipleScattering
|
||||
|
||||
{
|
||||
@@ -91,8 +89,6 @@ protected:
|
||||
|
||||
private: // data members
|
||||
|
||||
G4VMscModel* mscUrban;
|
||||
|
||||
G4double lambdalimit;
|
||||
G4double dtrl;
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4eplusAnnihilation.hh,v 1.23 2007/05/23 08:47:34 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4eplusAnnihilation.hh,v 1.24 2009/02/20 12:06:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -72,13 +72,13 @@ public:
|
||||
|
||||
virtual ~G4eplusAnnihilation();
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition& p);
|
||||
virtual G4bool IsApplicable(const G4ParticleDefinition& p);
|
||||
|
||||
virtual G4VParticleChange* AtRestDoIt(
|
||||
const G4Track& track,
|
||||
const G4Step& stepData);
|
||||
|
||||
G4double AtRestGetPhysicalInteractionLength(
|
||||
virtual G4double AtRestGetPhysicalInteractionLength(
|
||||
const G4Track& track,
|
||||
G4ForceCondition* condition
|
||||
);
|
||||
@@ -95,24 +95,6 @@ private:
|
||||
G4bool isInitialised;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4bool G4eplusAnnihilation::IsApplicable(const G4ParticleDefinition& p)
|
||||
{
|
||||
return (&p == G4Positron::Positron());
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline
|
||||
G4double G4eplusAnnihilation::AtRestGetPhysicalInteractionLength(
|
||||
const G4Track&, G4ForceCondition* condition)
|
||||
{
|
||||
*condition = NotForced;
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4hIonisation.hh,v 1.41 2008/09/14 17:11:48 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4hIonisation.hh,v 1.42 2009/02/20 12:06:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -92,10 +92,10 @@ public:
|
||||
|
||||
virtual ~G4hIonisation();
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition& p);
|
||||
virtual G4bool IsApplicable(const G4ParticleDefinition& p);
|
||||
|
||||
G4double MinPrimaryEnergy(const G4ParticleDefinition* p,
|
||||
const G4Material*, G4double cut);
|
||||
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition* p,
|
||||
const G4Material*, G4double cut);
|
||||
|
||||
// Print out of the class parameters
|
||||
virtual void PrintInfo();
|
||||
@@ -121,26 +121,6 @@ private:
|
||||
G4double eth;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4bool G4hIonisation::IsApplicable(const G4ParticleDefinition& p)
|
||||
{
|
||||
return (p.GetPDGCharge() != 0.0 && p.GetPDGMass() > 10.0*MeV &&
|
||||
!p.IsShortLived());
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4hIonisation::MinPrimaryEnergy(const G4ParticleDefinition*,
|
||||
const G4Material*,
|
||||
G4double cut)
|
||||
{
|
||||
G4double x = 0.5*cut/electron_mass_c2;
|
||||
G4double g = x*ratio + std::sqrt((1. + x)*(1. + x*ratio*ratio));
|
||||
return mass*(g - 1.0);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4hIonisation::ActivateNuclearStopping(G4bool val)
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4hMultipleScattering.hh,v 1.6 2008/05/09 08:23:44 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4hMultipleScattering.hh,v 1.8 2009/11/01 13:04:12 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -----------------------------------------------------------------------------
|
||||
//
|
||||
@@ -38,6 +38,7 @@
|
||||
//
|
||||
// Modifications:
|
||||
// 20.03.07 Remove local parameter skin (V.Ivanchenko)
|
||||
// 04.07.09 Remove other local parameters (V.Ivanchenko)
|
||||
//
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
@@ -59,8 +60,6 @@
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4VMscModel;
|
||||
|
||||
class G4hMultipleScattering : public G4VMultipleScattering
|
||||
|
||||
{
|
||||
@@ -76,25 +75,6 @@ public: // with description
|
||||
// Print few lines of informations about the process: validity range,
|
||||
void PrintInfo();
|
||||
|
||||
// geom. step length distribution should be sampled or not
|
||||
void Setsamplez(G4bool value) { samplez = value;};
|
||||
|
||||
// to reduce the energy/step dependence
|
||||
void Setdtrl(G4double value) { dtrl = value;};
|
||||
|
||||
// 'soften' step limitation above lambdalimit
|
||||
void SetLambdalimit(G4double value) { lambdalimit = value;};
|
||||
|
||||
// The function overloads the corresponding function of the base
|
||||
// class.It limits the step near to boundaries only
|
||||
// and invokes the method GetMscContinuousStepLimit at every step.
|
||||
G4double AlongStepGetPhysicalInteractionLength(
|
||||
const G4Track&,
|
||||
G4double previousStepSize,
|
||||
G4double currentMinimalStep,
|
||||
G4double& currentSafety,
|
||||
G4GPILSelection* selection);
|
||||
|
||||
protected:
|
||||
|
||||
// This function initialise models
|
||||
@@ -102,14 +82,7 @@ protected:
|
||||
|
||||
private: // data members
|
||||
|
||||
G4VMscModel* mscUrban;
|
||||
|
||||
G4double lambdalimit;
|
||||
G4double dtrl;
|
||||
|
||||
G4bool samplez;
|
||||
G4bool isInitialized;
|
||||
G4bool isIon;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4ionIonisation.hh,v 1.56 2008/09/14 17:11:48 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4ionIonisation.hh,v 1.57 2009/02/20 12:06:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -84,7 +84,7 @@ public:
|
||||
|
||||
virtual ~G4ionIonisation();
|
||||
|
||||
inline G4bool IsApplicable(const G4ParticleDefinition& p);
|
||||
virtual G4bool IsApplicable(const G4ParticleDefinition& p);
|
||||
|
||||
// Print out of the class parameters
|
||||
virtual void PrintInfo();
|
||||
@@ -101,7 +101,7 @@ protected:
|
||||
virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition*,
|
||||
const G4ParticleDefinition*);
|
||||
|
||||
inline G4double MinPrimaryEnergy(const G4ParticleDefinition* p,
|
||||
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition* p,
|
||||
const G4Material*, G4double cut);
|
||||
|
||||
inline G4double BetheBlochEnergyThreshold();
|
||||
@@ -128,23 +128,6 @@ private:
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4bool G4ionIonisation::IsApplicable(const G4ParticleDefinition& p)
|
||||
{
|
||||
return (p.GetPDGCharge() != 0.0 && !p.IsShortLived() &&
|
||||
p.GetParticleType() == "nucleus");
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4ionIonisation::MinPrimaryEnergy(
|
||||
const G4ParticleDefinition* p, const G4Material*, G4double cut)
|
||||
{
|
||||
return
|
||||
p->GetPDGMass()*(std::sqrt(1. + 0.5*cut/CLHEP::electron_mass_c2) - 1.0);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4ionIonisation::ActivateStoppingData(G4bool val)
|
||||
{
|
||||
stopDataActive = val;
|
||||
|
||||
Reference in New Issue
Block a user