Import Geant4 10.4.0 source tree

This commit is contained in:
Gabriele Cosmo
2017-12-08 12:52:30 +01:00
parent 98e455a940
commit fc6af9e721
2166 changed files with 276760 additions and 100873 deletions
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4BetheHeitlerModel.hh 104477 2017-06-01 07:39:33Z gcosmo $
// $Id: G4BetheHeitlerModel.hh 106628 2017-10-17 06:25:38Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -97,6 +97,8 @@ private:
G4BetheHeitlerModel & operator=(const G4BetheHeitlerModel &right) = delete;
G4BetheHeitlerModel(const G4BetheHeitlerModel&) = delete;
protected:
G4Pow* g4calc;
G4ParticleDefinition* theGamma;
G4ParticleDefinition* theElectron;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4ComptonScattering.hh 96934 2016-05-18 09:10:41Z gcosmo $
// $Id: G4ComptonScattering.hh 106717 2017-10-20 09:41:27Z gcosmo $
//
//------------------ G4ComptonScattering physics process -----------------------
// by Michel Maire, April 1996
@@ -83,6 +83,9 @@ public: // with description
// Print few lines of informations about the process: validity range,
virtual void PrintInfo() override;
// print description in html
virtual void ProcessDescription(std::ostream&) const override;
protected:
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4CoulombScattering.hh 96934 2016-05-18 09:10:41Z gcosmo $
// $Id: G4CoulombScattering.hh 106717 2017-10-20 09:41:27Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -63,11 +63,15 @@ public:
virtual G4bool IsApplicable(const G4ParticleDefinition& p) final;
// Print out of the class parameters
virtual void PrintInfo() override;
// print documentation in html format
virtual void ProcessDescription(std::ostream&) const override;
protected:
// Print out of the class parameters
virtual void StreamProcessInfo(std::ostream& outFile,
G4String endOfLine=G4String("\n")) const override;
virtual void InitialiseProcess(const G4ParticleDefinition*) override;
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition*,
@@ -0,0 +1,185 @@
//
// ********************************************************************
// * 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: $
//
// ----------------------------------------------------------------------------
//
// GEANT4 Class header file
//
// File name: G4GSMottCorrection
//
// Author: Mihaly Novak
//
// Creation date: 23.08.2017
//
// Modifications:
//
// Class description:
// An object of this calss is used in the G4GoudsmitSaundersonTable when Mott-correction
// was required by the user in the G4GoudsmitSaundersonMscModel.
// The class is responsible to handle pre-computed Mott correction (rejection) functions
// obtained as a ratio of GS angular distributions computed based on the Screened-Rutherford
// DCS to GS angular distributions computed based on a more accurate corrected DCS_{cor}.
// The DCS used to compute the accurate Goudsmit-Saunderson angular distributions is [1]:
// DCS_{cor} = DCS_{SR}x[ DCS_{R}/DCS_{Mott}] where :
// # DCS_{SR} is the relativistic Screened-Rutherford DCS (first Born approximate
// solution of the Klein-Gordon i.e. relativistic Schrodinger equation =>
// scattering of spinless e- on exponentially screened Coulomb potential)
// note: the default (without using Mott-correction) GS angular distributions
// are based on this DCS_{SR} with Moliere's screening parameter!
// # DCS_{R} is the Rutherford DCS which is the same as above but without
// screening
// # DCS_{Mott} is the Mott DCS i.e. solution of the Dirac equation with a bare
// Coulomb potential i.e. scattering of particles with spin (e- or e+) on a
// point-like unscreened Coulomb potential [2]
// # moreover, the screening parameter of the DCS_{cor} was determined such that
// the DCS_{cor} with this corrected screening parameter reproduce the first
// transport cross sections obtained from the corresponding most accurate DCS [3].
// Unlike the default GS, the Mott-corrected angular distributions are particle type
// (different for e- and e+ <= the DCS_{Mott} and the screening correction) and target
// (Z and material) dependent.
//
// References:
// [2] I.Kawrakow, E.Mainegra-Hing, D.W.O.Rogers, F.Tessier,B.R.B.Walters, NRCC
// Report PIRS-701 (2013)
// [2] N.F. Mott, Proc. Roy. Soc. (London) A 124 (1929) 425.
// [3] F.Salvat, A.Jablonski, C.J. Powell, CPC 165(2005) 157-190
//
// -----------------------------------------------------------------------------
#ifndef G4GSMottCorrection_h
#define G4GSMottCorrection_h 1
#include <CLHEP/Units/SystemOfUnits.h>
#include "globals.hh"
#include <vector>
#include <string>
#include <sstream>
class G4Material;
class G4Element;
class G4GSMottCorrection {
public:
G4GSMottCorrection(G4bool iselectron=true);
~G4GSMottCorrection();
void Initialise();
void GetMottCorrectionFactors(G4double logekin, G4double beta2, G4int matindx,
G4double &mcToScr, G4double &mcToQ1, G4double &mcToG2PerG1);
G4double GetMottRejectionValue(G4double logekin, G4double G4beta2, G4double q1, G4double cost,
G4int matindx, G4int &ekindx, G4int &deltindx);
static G4int GetMaxZet() { return gMaxZet; }
private:
void InitMCDataPerElement();
void InitMCDataPerMaterials();
void LoadMCDataElement(const G4Element*);
void ReadCompressedFile(std::string fname, std::istringstream &iss);
void InitMCDataMaterial(const G4Material*);
//
// dat structures
struct DataPerDelta {
G4double fSA; // a,b,c,d spline interpolation parameters for the last \sin(0.5\theta) bin
G4double fSB;
G4double fSC;
G4double fSD;
G4double *fRejFuntion; // rejection func. for a given E_{kin}, \delta, e^-/e^+ over the \sin(0.5\theta) grid
};
struct DataPerEkin {
G4double fMCScreening; // correction factor to Moliere screening parameter
G4double fMCFirstMoment; // correction factor to first moment
G4double fMCSecondMoment; // correction factor to second
DataPerDelta **fDataPerDelta; // per delta value data structure for each delta values
};
// either per material or per Z
struct DataPerMaterial {
DataPerEkin **fDataPerEkin; // per kinetic energy data structure for each kinetic energy value
};
//
void AllocateDataPerMaterial(DataPerMaterial*);
void DeAllocateDataPerMaterial(DataPerMaterial*);
void ClearMCDataPerElement();
void ClearMCDataPerMaterial();
//
// data members:
// - Mott correction data are computed over a :
// I. Kinetic energy grid [both rejection functions and correction factors]:
// 1. kinetic energy grid from 1[keV] - 100[keV] with log-spacing 16 points:
// # linear interpolation on \ln[E_{kin}] will be used
// 2. \beta^2 grid from E_{kin} = 100[keV](~0.300546) - \beta^2=0.9999(~50.5889MeV]) with linear spacing 16 points:
// # linear interpolation on \beta^2 will be used
// 3. the overall kinetic energy grid is from E_{kin}=1[keV] - E_{kin}<=\beta^2=0.9999(~50.5889MeV]) with 31 points
// II. Delta value grid [rejection functions at a given kinetic energy(also depends on \theta;Z,e-/e+)]:
// 1. \delta=2 Q_{1SR} (\eta_{MCcor})/ [1-2 Q_{1SR} (\eta_{MCcor})] where Q_{1SR} is the first moment i.e.
// Q_{1SR}(\eta_{MCcor}) =s/\lambda_{el}G_{1SR}(\eta_{MCcor}) where s/\lambda_{el} is the mean number of elastic
// scattering along the path s and G_{1SR}(\eta_{MCcor}) is the first, Screened-Rutherford transport coefficient
// but computed by using the Mott-corrected Moliere screening parameter
// 2. the delta value grid is from [0(1e-3) - 0.9] with linear spacing of 28 points:
// # linear interpolation will be used on \delta
// III. \sin(0.5\theta) grid[rejection function at a given kinetic energy - delta value pair (also depends on Z,e-/e+)]:
// 1. 32 \sin(0.5\theta) pints between [0,1] with linear spacing: # linear interpolation on \sin(0.5\theta) will
// be used exept the last bin where spline is used (the corresponding 4 spline parameters are also stored)
private:
G4bool fIsElectron;
static constexpr G4int gNumEkin = 31; // number of kinetic energy grid points for Mott correction
static constexpr G4int gNumBeta2 = 16; // \beta^2 values between [fMinBeta2-fMaxBeta2]
static constexpr G4int gNumDelta = 28; // \delta values between [0(1.e-3)-0.9]
static constexpr G4int gNumAngle = 32; //
static constexpr G4int gMaxZet = 98; // max. Z for which Mott-correction data were computed (98)
static constexpr G4double gMinEkin = 1.*CLHEP::keV; // minimum kinetic energy value
static constexpr G4double gMidEkin = 100.*CLHEP::keV; // kinetic energy at the border of the E_{kin}-\beta^2 grids
static constexpr G4double gMaxBeta2 = 0.9999; // maximum \beta^2 value
static constexpr G4double gMaxDelta = 0.9; // maximum \delta value (the minimum is 0(1.e-3))
//
G4double fMaxEkin; // from max fMaxBeta2 = 0.9999 (~50.5889 [MeV])
G4double fLogMinEkin; // \ln[fMinEkin]
G4double fInvLogDelEkin; // 1/[\ln(fMidEkin/fMinEkin)/(fNumEkin-fNumBeta2)]
G4double fMinBeta2; // <= E_{kin}=100 [keV] (~0.300546)
G4double fInvDelBeta2; // 1/[(fMaxBeta2-fMinBeta2)/(fNumBeta2-1)]
G4double fInvDelDelta; // 1/[0.9/(fNumDelta-1)]
G4double fInvDelAngle; // 1/[(1-0)/fNumAngle-1]
//
static const std::string gElemSymbols[];
//
std::vector<DataPerMaterial*> fMCDataPerElement; // size will be gMaxZet+1; won't be null only at used Z indices
std::vector<DataPerMaterial*> fMCDataPerMaterial; // size will #materials; won't be null only at used mat. indices
};
#endif // G4GSMottCorrection_h
@@ -0,0 +1,116 @@
//
// ********************************************************************
// * 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: $
//
// ----------------------------------------------------------------------------
//
// GEANT4 Class header file
//
// File name: G4GSPWACorrections
//
// Author: Mihaly Novak
//
// Creation date: 17.10.2017
//
// Modifications:
//
// Class description: class to describe and store correction factors to the
// integrated quantities of G4GoudsmitSaundersonMscModel (screening parameter,
// first and second moments) derived by using accurate Dirac-PWA based
// integrated quantities.
//
// ----------------------------------------------------------------------------
#ifndef G4GSPWACorrections_h
#define G4GSPWACorrections_h 1
#include <CLHEP/Units/SystemOfUnits.h>
#include "globals.hh"
#include <vector>
#include <string>
#include <sstream>
class G4Material;
class G4Element;
class G4GSPWACorrections {
public:
G4GSPWACorrections(G4bool iselectron=true);
~G4GSPWACorrections();
void Initialise();
void GetPWACorrectionFactors(G4double logekin, G4double beta2, G4int matindx,
G4double &corToScr, G4double &corToQ1, G4double &corToG2PerG1);
private:
void InitDataPerElement();
void InitDataPerMaterials();
void LoadDataElement(const G4Element*);
void InitDataMaterial(const G4Material*);
void ClearDataPerElement();
void ClearDataPerMaterial();
// either per material or per Z
struct DataPerMaterial {
std::vector<G4double> fCorScreening; // correction factor to Moliere screening parameter
std::vector<G4double> fCorFirstMoment; // correction factor to first moment
std::vector<G4double> fCorSecondMoment; // correction factor to second
};
// data members
private:
G4bool fIsElectron;
static constexpr G4int gMaxZet = 98; // max. Z for which correction data were computed (98)
static constexpr G4int gNumEkin = 31; // number of kinetic energy grid points for Mott correction
static constexpr G4int gNumBeta2 = 16; // \beta^2 values between [fMinBeta2-fMaxBeta2]
static constexpr G4double gMinEkin = 1.*CLHEP::keV; // minimum kinetic energy value
static constexpr G4double gMidEkin = 100.*CLHEP::keV; // kinetic energy at the border of the E_{kin}-\beta^2 grids
static constexpr G4double gMaxBeta2 = 0.9999; // maximum \beta^2 value
//
G4double fMaxEkin; // from max fMaxBeta2 = 0.9999 (~50.5889 [MeV])
G4double fLogMinEkin; // \ln[fMinEkin]
G4double fInvLogDelEkin; // 1/[\ln(fMidEkin/fMinEkin)/(fNumEkin-fNumBeta2)]
G4double fMinBeta2; // <= E_{kin}=100 [keV] (~0.300546)
G4double fInvDelBeta2; // 1/[(fMaxBeta2-fMinBeta2)/(fNumBeta2-1)]
//
static const std::string gElemSymbols[];
//
std::vector<DataPerMaterial*> fDataPerElement; // size will be gMaxZet+1; won't be null only at used Z indices
std::vector<DataPerMaterial*> fDataPerMaterial; // size will #materials; won't be null only at used mat. indices
};
#endif
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4GammaConversion.hh 96934 2016-05-18 09:10:41Z gcosmo $
// $Id: G4GammaConversion.hh 106717 2017-10-20 09:41:27Z gcosmo $
//
//
//------------------ G4GammaConversion physics process------------------------
@@ -91,6 +91,9 @@ public: // with description
// Print few lines of informations about the process: validity range,
virtual void PrintInfo() override;
// print documentation in html format
virtual void ProcessDescription(std::ostream&) const override;
protected:
virtual void InitialiseProcess(const G4ParticleDefinition*) override;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4GoudsmitSaundersonMscModel.hh 94933 2015-12-18 09:22:52Z gcosmo $
// $Id: G4GoudsmitSaundersonMscModel.hh 106953 2017-10-31 08:30:13Z gcosmo $
//
// ----------------------------------------------------------------------------
//
@@ -73,12 +73,40 @@
// fUseDistanceToBoundary corresponds to Urban fUseDistanceToBoundary
// fUseSafety corresponds to EGSnrc error-free stepping algorithm
// Range factor can be significantly higher at each case than in Urban.
// 23.08.2017 M. Novak: added corrections to account spin effects (Mott-correction).
// It can be activated by setting the fIsMottCorrection flag to be true
// before initialization using the SetOptionMottCorrection() public method.
// The fMottCorrection member is responsible to handle pre-computed Mott
// correction (rejection) functions obtained by numerically computing
// Goudsmit-Saunderson agnular distributions based on a DCS accounting spin
// effects and screening corrections. The DCS used to compute the accurate
// GS angular distributions is: DCS_{cor} = DCS_{SR}x[ DCS_{R}/DCS_{Mott}] where :
// # DCS_{SR} is the relativistic Screened-Rutherford DCS (first Born approximate
// solution of the Klein-Gordon i.e. relativistic Schrodinger equation =>
// scattering of spinless e- on exponentially screened Coulomb potential)
// note: the default (without using Mott-correction) GS angular distributions
// are based on this DCS_{SR} with Moliere's screening parameter!
// # DCS_{R} is the Rutherford DCS which is the same as above but without
// screening
// # DCS_{Mott} is the Mott DCS i.e. solution of the Dirac equation with a bare
// Coulomb potential i.e. scattering of particles with spin (e- or e+) on a
// point-like unscreened Coulomb potential
// # moreover, the screening parameter of the DCS_{cor} was determined such that
// the DCS_{cor} with this corrected screening parameter reproduce the first
// transport cross sections obtained from the corresponding most accurate DCS
// (i.e. from elsepa [4])
// Unlike the default GS, the Mott-corrected angular distributions are particle type
// (different for e- and e+ <= the DCS_{Mott} and the screening correction) and target
// (Z and material) dependent.
//
// Class description:
// Kawrakow-Bielajew Goudsmit-Saunderson MSC model based on the screened
// Rutherford DCS for elastic scattering of electrons/positrons. Step limitation
// algorithm as well as true to geomerty and geometry to true step length
// computations are adopted from Urban model[5].
// Kawrakow-Bielajew Goudsmit-Saunderson MSC model based on the screened Rutherford DCS
// for elastic scattering of e-/e+. Option, to include (Mott) correction (see above), is
// also available now (SetOptionMottCorrection(true)). An EGSnrc like error-free stepping
// algorithm (UseSafety) is available beyond the usual Geant4 step limitation algorithms
// and true to geomerty and geometry to true step length computations that were adopted
// from the Urban model[5]. The most accurate setting: error-free stepping (UseSafety)
// with Mott-correction (SetOptionMottCorrection(true)).
//
// References:
// [1] A.F.Bielajew, NIMB 111 (1996) 195-208
@@ -105,8 +133,7 @@ class G4DataVector;
class G4ParticleChangeForMSC;
class G4LossTableManager;
class G4GoudsmitSaundersonTable;
class G4PWATotalXsecTable;
class G4GSPWACorrections;
class G4GoudsmitSaundersonMscModel : public G4VMscModel
{
@@ -118,26 +145,37 @@ public:
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
void StartTracking(G4Track*);
virtual void InitialiseLocal(const G4ParticleDefinition* p, G4VEmModel* masterModel);
G4double GetTransportMeanFreePath(const G4ParticleDefinition*, G4double);
void SingleScattering(G4double &cost, G4double &sint);
void SampleMSC();
virtual G4ThreeVector& SampleScattering(const G4ThreeVector&,
G4double safety);
virtual G4ThreeVector& SampleScattering(const G4ThreeVector&, G4double safety);
virtual G4double ComputeTruePathLengthLimit(const G4Track& track,
G4double& currentMinimalStep);
virtual G4double ComputeTruePathLengthLimit(const G4Track& track, G4double& currentMinimalStep);
virtual G4double ComputeGeomPathLength(G4double truePathLength);
virtual G4double ComputeTrueStepLength(G4double geomStepLength);
void SetOptionPWAScreening(G4bool opt){fIsUsePWATotalXsecData=opt;}
void StartTracking(G4Track*);
void SampleMSC();
G4double GetTransportMeanFreePath(const G4ParticleDefinition*, G4double);
void SetOptionPWACorrection(G4bool opt) { fIsUsePWACorrection = opt; }
G4bool GetOptionPWACorrection() const { return fIsUsePWACorrection; }
void SetOptionMottCorrection(G4bool opt) { fIsUseMottCorrection = opt; }
G4bool GetOptionMottCorrection() const { return fIsUseMottCorrection; }
G4GoudsmitSaundersonTable* GetGSTable() { return fGSTable; }
G4GSPWACorrections* GetPWACorrection() { return fPWACorrection; }
private:
inline void SetParticle(const G4ParticleDefinition* p);
inline void SetParticle(const G4ParticleDefinition* p);
inline G4double GetLambda(G4double);
@@ -149,44 +187,60 @@ private:
inline G4double Randomizetlimit();
private:
CLHEP::HepRandomEngine* rndmEngineMod;
G4double lowKEnergy;
G4double highKEnergy;
CLHEP::HepRandomEngine* rndmEngineMod;
//
G4double currentKinEnergy;
G4double currentRange;
G4double fr,rangeinit,geombig,geomlimit;
G4double lambdalimit,tlimit,tgeom;
G4int charge,currentMaterialIndex;
//
G4double fr;
G4double rangeinit;
G4double geombig;
G4double geomlimit;
G4double lambdalimit;
G4double tlimit;
G4double tgeom;
//
G4double par1;
G4double par2;
G4double par3;
G4double tlimitminfix2;
G4double tausmall;
G4double mass;
G4double taulim;
//
//
G4double presafety;
G4double fZeff;
//
G4int charge;
G4int currentMaterialIndex;
//
G4bool firstStep;
G4double par1,par2,par3,tlimitminfix2,tausmall,mass,taulim;
//
G4LossTableManager* theManager;
const G4ParticleDefinition* particle;
G4ParticleChangeForMSC* fParticleChange;
const G4MaterialCutsCouple* currentCouple;
static G4GoudsmitSaundersonTable* fgGSTable;
static G4PWATotalXsecTable* fgPWAXsecTable;
G4bool fIsUsePWATotalXsecData;
G4double presafety;
G4double fZeff;
G4GoudsmitSaundersonTable* fGSTable;
G4GSPWACorrections* fPWACorrection;
G4bool fIsUsePWACorrection;
G4bool fIsUseMottCorrection;
//
G4double fLambda0; // elastic mean free path
G4double fLambda1; // first transport mean free path
G4double fScrA; // screening parameter
G4double fG1; // first transport coef.
// in case of Mott-correction
G4double fMCtoScrA;
G4double fMCtoQ1;
G4double fMCtoG2PerG1;
//
G4double fTheTrueStepLenght;
G4double fTheTransportDistance;
G4double fTheZPathLenght;
//
G4double fTheTrueStepLenght;
G4double fTheTransportDistance;
G4double fTheZPathLenght;
G4ThreeVector fTheDisplacementVector;
G4ThreeVector fTheNewDirection;
//
@@ -200,8 +254,8 @@ private:
G4bool fIsWasOnBoundary;
G4bool fIsFirstRealStep;
//
static G4bool fgIsUseAccurate;
static G4bool fgIsOptimizationOn;
static G4bool gIsUseAccurate;
static G4bool gIsOptimizationOn;
};
////////////////////////////////////////////////////////////////////////////////
@@ -222,8 +276,8 @@ G4double G4GoudsmitSaundersonMscModel::Randomizetlimit()
{
G4double temptlimit = tlimit;
do {
temptlimit = G4RandGauss::shoot(rndmEngineMod,tlimit,0.3*tlimit);
} while ( (temptlimit<0.) || (temptlimit > 2.*tlimit));
temptlimit = G4RandGauss::shoot(rndmEngineMod,tlimit,0.1*tlimit);
} while ( (temptlimit<0.) || (temptlimit>2.*tlimit));
return temptlimit;
}
@@ -4,7 +4,7 @@
// * *
// * 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 Liscense, included in the file *
// * 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. *
// * *
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4GoudsmitSaundersonTable.hh 103884 2017-05-03 08:04:50Z gcosmo $
// $Id: G4GoudsmitSaundersonTable.hh 107824 2017-12-05 15:47:44Z gunter $
//
// -----------------------------------------------------------------------------
//
@@ -55,10 +55,14 @@
// The new version is several times faster, more robust and accurate
// compared to the earlier version (G4GoudsmitSaundersonMscModel class
// that use these data has been also completely replaced)
// 28.04.2017 M. Novak: the GS angular distributions has been recomputed, the
// data size has been reduced from 16 MB down to 5 MB by using a new
// representation, the class has been modified significantly due to
// 28.04.2017 M. Novak: the GS angular distributions has been recomputed, the
// data size has been reduced from 16 MB down to 5 MB by using a new
// representation, the class has been modified significantly due to
// this new data representation.
// 23.08.2017 M. Novak: Added funtionality to handle Mott-correction to the
// base GS angular distributions and some other factors (screening
// parameter, first and second moments) when Mott-correction is
// activated in the GS-MSC model.
//
// References:
// [1] A.F.Bielajew, NIMB, 111 (1996) 195-208
@@ -74,41 +78,66 @@
#include "G4Types.hh"
class G4GSMottCorrection;
class G4MaterialCutsCouple;
class G4GoudsmitSaundersonTable {
public:
G4GoudsmitSaundersonTable();
G4GoudsmitSaundersonTable(G4bool iselectron);
~G4GoudsmitSaundersonTable();
void Initialise();
void Initialise(G4double lownergylimit, G4double highenergylimit);
// structure to store one GS transformed angular distribution (for a given s/lambda_el,s/lambda_elG1)
struct GSMSCAngularDtr {
G4int fNumData; // # of data points
G4double fQScale;
G4double *fUValues; // array of transformed variables
G4double *fParamA; // array of interpolation parameters a
G4double *fParamB; // array of interpolation parameters b
};
void LoadMSCData();
GSMSCAngularDtr* GetOne(G4int indx) {return fGSMSCAngularDistributions1[indx];}
void LoadMSCData();
void Sampling(G4double lambdaval, G4double qval, G4double scra,
G4double &cost, G4double &sint);
G4double SampleCosTheta(G4double lambdaval, G4double qval, G4double scra,
G4double rndm1, G4double rndm2, G4double rndm);
G4double SampleCosTheta1(G4double lambdaval, G4double qval, G4double scra,
G4double rndm1, G4double rndm2, G4double rndm);
G4double SampleCosTheta2(G4double lambdaval, G4double qval, G4double scra,
G4double rndm1, G4double rndm2, G4double rndm);
G4double GetScreeningParam(G4double G1);
G4bool Sampling(G4double lambdaval, G4double qval, G4double scra,
G4double &cost, G4double &sint, G4double lekin,
G4double beta2, G4int matindx, GSMSCAngularDtr **gsDtr,
G4int &mcekini, G4int &mcdelti, G4double &transfPar,
G4bool isfirst);
G4double SampleCosTheta(G4double lambdaval, G4double qval, G4double scra,
G4double lekin, G4double beta2, G4int matindx,
GSMSCAngularDtr **gsDtr, G4int &mcekini, G4int &mcdelti,
G4double &transfPar, G4bool isfirst);
G4double SampleGSSRCosTheta(const GSMSCAngularDtr* gsDrt, G4double transfpar);
G4double SingleScattering(G4double lambdaval, G4double scra, G4double lekin,
G4double beta2, G4int matindx);
GSMSCAngularDtr* GetGSAngularDtr(G4double scra, G4double &lambdaval,
G4double &qval, G4double &transfpar);
// material dependent MSC parameters (computed at initialisation) regarding
// Moliere's screening parameter
G4double GetMoliereBc(G4int matindx){return (*fgMoliereBc)[matindx];}
G4double GetMoliereXc2(G4int matindx){return (*fgMoliereXc2)[matindx];}
G4double GetMoliereBc(G4int matindx) { return gMoliereBc[matindx]; }
G4double GetMoliereXc2(G4int matindx) { return gMoliereXc2[matindx]; }
void GetMottCorrectionFactors(G4double logekin, G4double beta2,
G4int matindx, G4double &mcToScr,
G4double &mcToQ1, G4double &mcToG2PerG1);
// set option to activate/inactivate Mott-correction
void SetOptionMottCorrection(G4bool val) { fIsMottCorrection = val; }
// set option to activate/inactivate PWA-correction
void SetOptionPWACorrection(G4bool val) { fIsPWACorrection = val; }
// this method returns with the scattering power correction (to avoid double counting of sub-threshold deflections)
// interpolated from tables prepared at initialisation
G4double ComputeScatteringPowerCorrection(const G4MaterialCutsCouple *matcut, G4double ekin);
void InitSCPCorrection();
private:
// initialisation of material dependent Moliere's MSC parameters
@@ -116,46 +145,47 @@ private:
private:
static bool gIsInitialised; // are the precomputed angular distributions already loaded in?
static G4bool gIsInitialised; // are the precomputed angular distributions already loaded in?
static constexpr G4int gLAMBNUM = 64; // # L=s/lambda_el in [fLAMBMIN,fLAMBMAX]
static constexpr G4int gQNUM1 = 15; // # Q=s/lambda_el G1 in [fQMIN1,fQMAX1] in the 1-st Q grid
static constexpr G4int gQNUM2 = 32; // # Q=s/lambda_el G1 in [fQMIN2,fQMAX2] in the 2-st Q grid
static constexpr G4int gQNUM2 = 32; // # Q=s/lambda_el G1 in [fQMIN2,fQMAX2] in the 2-nd Q grid
static constexpr G4int gNUMSCR1 = 201; // # of screening parameters in the A(G1) function
static constexpr G4int gNUMSCR2 = 51; // # of screening parameters in the A(G1) function
static constexpr G4double gLAMBMIN = 1.0; // minimum s/lambda_el
static constexpr G4double gLAMBMAX = 100000.0; // maximum s/lambda_el
static constexpr G4double gQMIN1 = 0.001; // minimum s/lambda_el G1 in the 1-st Q grid
static constexpr G4double gQMAX1 = 0.99; // maximum s/lambda_el G1 in the 1-st Q grid
static constexpr G4double gQMIN2 = 0.99; // minimum s/lambda_el G1 in the 1-st Q grid
static constexpr G4double gQMAX2 = 7.99; // maximum s/lambda_el G1 in the 1-st Q grid
// precomputed A(G1) function with its interpolation parameters
static constexpr G4double gSCRMIN1 = 1.93214991408357e-12;
static constexpr G4double gSCRMAX1 = 2.42974344203683e-01;
static constexpr G4double gSCRMAX2 = 5.50564555556202e+01;
static constexpr G4double gQMIN2 = 0.99; // minimum s/lambda_el G1 in the 2-nd Q grid
static constexpr G4double gQMAX2 = 7.99; // maximum s/lambda_el G1 in the 2-nd Q grid
//
static const G4double gG1Values1[];
static const G4double gScrAValues1[];
static const G4double gScrBValues1[];
static const G4double gG1Values2[];
static const G4double gScrAValues2[];
static const G4double gScrBValues2[];
G4bool fIsElectron; // GS-table for e- (for e+ otherwise)
G4bool fIsMottCorrection; // flag to indicate if Mott-correction was requested to be used
G4bool fIsPWACorrection; // flag to indicate is PWA corrections were requested to be used
G4double fLogLambda0; // ln(gLAMBMIN)
G4double fLogDeltaLambda; // ln(gLAMBMAX/gLAMBMIN)/(gLAMBNUM-1)
G4double fInvLogDeltaLambda; // 1/[ln(gLAMBMAX/gLAMBMIN)/(gLAMBNUM-1)]
G4double fInvDeltaQ1; // 1/[(gQMAX1-gQMIN1)/(gQNUM1-1)]
G4double fDeltaQ2; // [(gQMAX2-gQMIN2)/(gQNUM2-1)]
G4double fInvDeltaQ2; // 1/[(gQMAX2-gQMIN2)/(gQNUM2-1)]
// for the precumputed A(G1) function
G4double fLogG1FuncMin1;
G4double fInvLogDeltaG1Func1;
G4double fLogG1FuncMin2;
G4double fInvLogDeltaG1Func2;
//
G4double fLowEnergyLimit;
G4double fHighEnergyLimit;
//
int fNumSPCEbinPerDec; // scattering power correction energy grid bins per decade
struct SCPCorrection {
bool fIsUse; //
double fPrCut; // sec. e- production cut energy
double fLEmin; // log min energy
double fILDel; // inverse log delta kinetic energy
//std::vector<double> fVEkin; // scattering power correction energies
std::vector<double> fVSCPC; // scattering power correction vector
};
std::vector<SCPCorrection*> fSCPCPerMatCuts;
// vector to store all GS transformed angular distributions
std::vector<GSMSCAngularDtr*> fGSMSCAngularDistributions1;
std::vector<GSMSCAngularDtr*> fGSMSCAngularDistributions2;
// vector to store all GS transformed angular distributions (cumputed based on the Screened-Rutherford DCS)
static std::vector<GSMSCAngularDtr*> gGSMSCAngularDistributions1;
static std::vector<GSMSCAngularDtr*> gGSMSCAngularDistributions2;
//@{
/** Precomputed \f$ b_lambda_{c} $\f and \f$ \chi_c^{2} $\f material dependent
@@ -164,10 +194,11 @@ private:
* screened Rutherford cross section approximation. (These are used in
* G4GoudsmitSaundersonMscModel if fgIsUsePWATotalXsecData is FALSE.)
*/
static std::vector<G4double> *fgMoliereBc;
static std::vector<G4double> *fgMoliereXc2;
static std::vector<double> gMoliereBc;
static std::vector<double> gMoliereXc2;
//
//
G4GSMottCorrection *fMottCorrection;
};
#endif
@@ -32,26 +32,26 @@
//
// Author: Cristina Consolandi
//
// Creation date: 27.05.2012
//
// Creation date: 27.05.2012
//
// Class Description:
//
//
// Mott Coulomb Cross section coefficients:
//
//
// Reference:
// M.J. Boschini et al.
// "Non Ionizing Energy Loss induced by Electrons in the Space Environment"
// Proc. of the 13th International Conference on Particle Physics and Advanced Technology
// Proc. of the 13th International Conference on Particle Physics and Advanced Technology
// (13th ICPPAT, Como 3-7/10/2011), World Scientific (Singapore).
//
//
// Available at: http://arxiv.org/abs/1111.4042v4
// coeffb of par. 2.1 , eq. (17) were recalculated by M. Tacconi
// following the same procedur as:
//
// T. Lijian et al. "Analytic Fitting to the Mott Cross Section of Electrons"
// following the same procedur as:
//
// T. Lijian et al. "Analytic Fitting to the Mott Cross Section of Electrons"
// Radiat. Phys. Chem. 45 (1995), 235245.
//
//
//
//
// ----------------------------------------------------------------------------------------
//
@@ -69,6 +69,8 @@ class G4Pow;
class G4MottCoefficients
{
public:
explicit G4MottCoefficients();
@@ -76,6 +78,7 @@ public:
virtual ~G4MottCoefficients();
void SetMottCoeff( G4double targetZ, G4double coeff[5][6] );
G4double GetTransitionRandom(G4double targetZ, G4double energy);
private:
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4NuclearStopping.hh 103955 2017-05-04 11:29:54Z gcosmo $
// $Id: G4NuclearStopping.hh 106717 2017-10-20 09:41:27Z gcosmo $
//
// -----------------------------------------------------------------------------
//
@@ -87,6 +87,9 @@ public: // with description
// Print few lines of informations about the process: validity range,
virtual void PrintInfo() final;
// print documentation in html format
virtual void ProcessDescription(std::ostream&) const override;
protected:
// This function initialise process
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PAIModel.hh 96934 2016-05-18 09:10:41Z gcosmo $
// $Id: G4PAIModel.hh 105869 2017-08-24 13:37:59Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -74,43 +74,41 @@ public:
explicit G4PAIModel(const G4ParticleDefinition* p = nullptr,
const G4String& nam = "PAI");
virtual ~G4PAIModel();
~G4PAIModel() final;
virtual void Initialise(const G4ParticleDefinition*,
const G4DataVector&) final;
void Initialise(const G4ParticleDefinition*, const G4DataVector&) final;
virtual void InitialiseLocal(const G4ParticleDefinition*,
G4VEmModel* masterModel) final;
void InitialiseLocal(const G4ParticleDefinition*,
G4VEmModel* masterModel) final;
virtual G4double ComputeDEDXPerVolume(const G4Material*,
const G4ParticleDefinition*,
G4double kineticEnergy,
G4double cutEnergy) final;
G4double MinEnergyCut(const G4ParticleDefinition*,
const G4MaterialCutsCouple* couple) final;
virtual G4double CrossSectionPerVolume(const G4Material*,
const G4ParticleDefinition*,
G4double kineticEnergy,
G4double cutEnergy,
G4double maxEnergy) final;
G4double ComputeDEDXPerVolume(const G4Material*,
const G4ParticleDefinition*,
G4double kineticEnergy,
G4double cutEnergy) final;
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
G4double CrossSectionPerVolume(const G4Material*,
const G4ParticleDefinition*,
G4double kineticEnergy,
G4double cutEnergy,
G4double maxEnergy) final;
void SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy) final;
virtual G4double SampleFluctuations(const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double,
G4double,
G4double) final;
G4double SampleFluctuations(const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double, G4double, G4double) final;
virtual G4double Dispersion( const G4Material*,
const G4DynamicParticle*,
G4double,
G4double) final;
G4double Dispersion(const G4Material*, const G4DynamicParticle*,
G4double, G4double) final;
virtual void DefineForRegion(const G4Region* r) final;
void DefineForRegion(const G4Region* r) final;
inline G4PAIModelData* GetPAIModelData();
@@ -122,8 +120,8 @@ public:
protected:
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
G4double kinEnergy) final;
G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
G4double kinEnergy) final;
private:
@@ -150,6 +148,7 @@ private:
G4double fMass;
G4double fRatio;
G4double fChargeSquare;
G4double fLowestTcut;
};
inline G4PAIModelData* G4PAIModel::GetPAIModelData()
@@ -69,43 +69,41 @@ public:
explicit G4PAIPhotModel(const G4ParticleDefinition* p = nullptr,
const G4String& nam = "PAI");
virtual ~G4PAIPhotModel();
~G4PAIPhotModel() final;
virtual void Initialise(const G4ParticleDefinition*,
const G4DataVector&) final;
void Initialise(const G4ParticleDefinition*, const G4DataVector&) final;
virtual void InitialiseLocal(const G4ParticleDefinition*,
G4VEmModel* masterModel) final;
void InitialiseLocal(const G4ParticleDefinition*,
G4VEmModel* masterModel) final;
virtual G4double ComputeDEDXPerVolume(const G4Material*,
const G4ParticleDefinition*,
G4double kineticEnergy,
G4double cutEnergy) final;
G4double MinEnergyCut(const G4ParticleDefinition*,
const G4MaterialCutsCouple* couple) final;
virtual G4double CrossSectionPerVolume(const G4Material*,
const G4ParticleDefinition*,
G4double kineticEnergy,
G4double cutEnergy,
G4double maxEnergy) final;
G4double ComputeDEDXPerVolume(const G4Material*,
const G4ParticleDefinition*,
G4double kineticEnergy,
G4double cutEnergy) final;
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
G4double CrossSectionPerVolume(const G4Material*,
const G4ParticleDefinition*,
G4double kineticEnergy,
G4double cutEnergy,
G4double maxEnergy) final;
void SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy) final;
virtual G4double SampleFluctuations(const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double,
G4double,
G4double) final;
G4double SampleFluctuations(const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double, G4double, G4double) final;
virtual G4double Dispersion( const G4Material*,
const G4DynamicParticle*,
G4double,
G4double) final;
G4double Dispersion(const G4Material*, const G4DynamicParticle*,
G4double, G4double) final;
virtual void DefineForRegion(const G4Region* r) final;
void DefineForRegion(const G4Region* r) final;
inline G4PAIPhotData* GetPAIPhotData();
@@ -117,7 +115,7 @@ public:
protected:
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
G4double kinEnergy) final;
private:
@@ -145,6 +143,7 @@ private:
G4double fMass;
G4double fRatio;
G4double fChargeSquare;
G4double fLowestTcut;
};
inline G4PAIPhotData* G4PAIPhotModel::GetPAIPhotData()
@@ -1,159 +0,0 @@
//
// ********************************************************************
// * 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: $
//
// -----------------------------------------------------------------------------
//
// GEANT4 Class header file
//
// File name: G4PWATotalXsecTable
//
// Author: Mihaly Novak
//
// Creation date: 18.05.2015
//
// Class description:
// Class to load and handle elastic, first and second transport cross sections
// precomputed by using ELSEPA [1] in the 100 eV - 1 GeV kinetic and Z = 1-103
// energy range for electrons and positrons.G4PWATotalXsecZ is responsible to
// to handle cross sections by individual Z that are used in the current
// geometry and G4PWATotalXsecTable is a collection of G4PWATotalXsecZ objects.
//
// Modifications:
//
// References:
// [1] Francesc Salvat, Aleksander Jablonski, Cedric J Powell,
// ELSEPA—Dirac partial-wave calculation of elastic scattering of electrons
// and positrons by atoms, positive ions and molecules,
// Computer physics communications; 165, 2, (2005)
//
// -----------------------------------------------------------------------------
#ifndef G4PWATotalXsecTable_h
#define G4PWATotalXsecTable_h 1
#include "G4Types.hh"
////////////////////////////////////////////////////////////////////////////////
// G4PWATotalXsecZ: sub-class for PWA xsec data that belong to a given Z number
////////////////////////////////////////////////////////////////////////////////
class G4PWATotalXsecZ
{
friend class G4PWATotalXsecTable;
public:
//
// out of energy grid cases
G4int GetLowestEnergyBinIndex() const {return 0;}
G4int GetHighestEnergyBinIndex()const {return fgNumTotalXsecBins-1;}
G4double GetLowestEnergy() const {return fgPWATotalXsecEnergyGrid[0];}
G4double GetHighestEnergy()const {return fgPWATotalXsecEnergyGrid[fgNumTotalXsecBins-1];}
// see below what is input parameter j
G4double GetLowestXsecValue(G4int j) const {return fPWAXsecs[j*fgNumTotalXsecBins];}
G4double GetHighestXsecValue(G4int j)const {return fPWAXsecs[(j+1)*fgNumTotalXsecBins-1];}
//
// normal cases i.e. energy is within the grid
// kinetic energy in MeV ; returns with the index of the lower energy bin edge
G4int GetPWATotalXsecEnergyBinIndex(G4double energy) const;
//------------------------------------------------------------------------------//
// The GetPWATotalXsecEnergyBinIndex(energy) will return with the lower energy //
// bin edge index = elowindx. Then the following formulas can be used to get the//
// elastic, first and second transport mean free path lower bin edge values: //
// index of the lower energy bin edge = j*fgNumTotalXsecBins + elowindex //
// where j is //
// -elastic cross section lower bin edge index: j = 1.5 + chrage*1.5 //
// -first transport cross section lower energy bin index: j = 2.5 + chrage*1.5 //
// -first transport cross section lower energy bin index: j = 3.5 + chrage*1.5 //
// With this, we can avoid to use an IF over particle types (e-/e+) //
// Additional note: it's probably a good idea to separate the elowindex comp- //
// utation because it depends only on the energy of the particle while the //
// cross sections depends on Z and particle type as well //
//------------------------------------------------------------------------------//
G4double GetInterpXsec(G4double energy, G4int elowindex, G4int j) const ;
G4double GetInterpXsec(G4double energy, G4int j) const ;
private:
// ctr and dtr can be called only by the G4PWATotalXsecTable friend
G4PWATotalXsecZ(G4int Z);
~G4PWATotalXsecZ(){};
// hide assignment operator and cpy ctr.
G4PWATotalXsecZ & operator=(const G4PWATotalXsecZ &right);
G4PWATotalXsecZ(const G4PWATotalXsecZ&);
void LoadPWATotalXsecZ(G4int Z);
private:
//size of the common energy grid //
static const G4int fgNumTotalXsecBins = 106;
// common energy grid in [1.e-4;1.e+3] MeV //
// size is fgNumTotalXsecBins
static const G4double fgPWATotalXsecEnergyGrid[fgNumTotalXsecBins];
// elastic cross sections, first and second transport cross sections for e-/e+
// over the common energy grid fgPWATotalXsecEnergyGrid in Geant4 internal length^2
G4double fPWAXsecs[fgNumTotalXsecBins*6];
// interpolation parameters if log-log linear interpolation is used
G4double fInterpParamA[fgNumTotalXsecBins*6];
G4double fInterpParamB[fgNumTotalXsecBins*6];
};
////////////////////////////////////////////////////////////////////////////////
// G4PWATotalXsecTable
////////////////////////////////////////////////////////////////////////////////
class G4PWATotalXsecTable
{
public:
G4PWATotalXsecTable() {};
~G4PWATotalXsecTable();
void Initialise();
const G4PWATotalXsecZ* GetPWATotalXsecForZet(G4int Z) const{
Z = Z>fgNumZet ? fgNumZet : Z;
return fgPWATotalXsecTable[Z-1];
}
private:
// hide assignment operator and cpy ctr.
G4PWATotalXsecTable & operator=(const G4PWATotalXsecTable &right);
G4PWATotalXsecTable(const G4PWATotalXsecTable&);
private:
// size of the table: Z=1-103 //
static const G4int fgNumZet = 103;
// G4PWATotalXsecZ pointers for Z=1-103 //
static G4PWATotalXsecZ *fgPWATotalXsecTable[fgNumZet];
};
#endif
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PairProductionRelModel.hh 104477 2017-06-01 07:39:33Z gcosmo $
// $Id: G4PairProductionRelModel.hh 106628 2017-10-17 06:25:38Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -54,9 +54,9 @@
#include "G4VEmModel.hh"
#include "G4PhysicsTable.hh"
#include "G4NistManager.hh"
#include "G4Log.hh"
#include "G4Exp.hh"
#include "G4Pow.hh"
class G4ParticleChangeForGamma;
@@ -126,8 +126,7 @@ protected:
(const G4PairProductionRelModel &right) = delete;
G4PairProductionRelModel(const G4PairProductionRelModel&) = delete;
G4NistManager* nist;
G4Pow* g4calc;
G4ParticleDefinition* theGamma;
G4ParticleDefinition* theElectron;
G4ParticleDefinition* thePositron;
@@ -198,9 +197,9 @@ inline void G4PairProductionRelModel::SetCurrentElement(G4double Z)
currentZ = Z;
G4int iz = G4lrint(Z);
z13 = nist->GetZ13(iz);
z13 = g4calc->Z13(iz);
z23 = z13*z13;
lnZ = nist->GetLOGZ(iz);
lnZ = g4calc->logZ(iz);
if (iz <= 4) {
Fel = Fel_light[iz];
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PhotoElectricEffect.hh 96934 2016-05-18 09:10:41Z gcosmo $
// $Id: G4PhotoElectricEffect.hh 106717 2017-10-20 09:41:27Z gcosmo $
//
//------------------ G4PhotoElectricEffect physics process ------------------
// by Michel Maire, 24 May 1996
@@ -92,6 +92,9 @@ public: // with description
// Print few lines of informations about the process: validity range,
virtual void PrintInfo() override;
// print documentation in html format
virtual void ProcessDescription(std::ostream&) const override;
protected:
virtual void InitialiseProcess(const G4ParticleDefinition*) override;
@@ -32,7 +32,7 @@
//
// Author: Cristina Consolandi
//
// Creation date: 20.10.2011
// Creation date: 20.10.2011
//
// Modifications:
// 27-05-2012 Added Analytic Fitting to the Mott Cross Section by means of G4MottCoefficients class.
@@ -40,24 +40,24 @@
//
// Class Description:
// Computation of electron Coulomb Scattering Cross Section.
// Suitable for high energy electrons and light target materials.
// Suitable for high energy electrons and light target materials.
//
// Reference:
// M.J. Boschini et al.
// "Non Ionizing Energy Loss induced by Electrons in the Space Environment"
// Proc. of the 13th International Conference on Particle Physics and Advanced Technology
// Proc. of the 13th International Conference on Particle Physics and Advanced Technology
// (13th ICPPAT, Como 3-7/10/2011), World Scientific (Singapore).
// Available at: http://arxiv.org/abs/1111.4042v4
//
// 1) Mott Differential Cross Section Approximation:
// 1) Mott Differential Cross Section Approximation:
// For Target material up to Z=92 (U):
// As described in http://arxiv.org/abs/1111.4042v4
// As described in http://arxiv.org/abs/1111.4042v4
// par. 2.1 , eq. (16)-(17)
// Else (Z>92):
// W. A. McKinley and H. Fashbach, Phys. Rev. 74, (1948) 1759.
// 2) Screening coefficient:
// 2) Screening coefficient:
// vomn G. Moliere, Z. Naturforsh A2 (1947), 133-145; A3 (1948), 78.
// 3) Nuclear Form Factor:
// 3) Nuclear Form Factor:
// A.V. Butkevich et al. Nucl. Instr. and Meth. in Phys. Res. A 488 (2002), 282-294.
//
// ----------------------------------------------------------------------------------------
@@ -98,11 +98,11 @@ public:
G4double GetScreeningAngle();
void SetScreeningCoefficient();
inline void SetupParticle(const G4ParticleDefinition*);
void SetupKinematic(G4double kinEnergy ,G4double Z);
G4double NuclearCrossSection(G4int form);
G4double NuclearCrossSection(G4int, G4int);
G4ThreeVector GetNewDirection();
inline G4double GetMom2CM()const;
@@ -116,56 +116,55 @@ public:
G4double FormFactor2ExpHof(G4double);
G4double FormFactor2Gauss(G4double);
G4double FormFactor2UniformHelm(G4double);
G4double GetScatteringAngle();
G4double AngleDistribution(G4double);
G4double GetScatteringAngle(G4int, G4int);
G4double SetDifferentialXSection(G4double, G4double, G4int);
private:
G4ScreeningMottCrossSection & operator=(const G4ScreeningMottCrossSection &right) = delete;
G4ScreeningMottCrossSection(const G4ScreeningMottCrossSection&) = delete;
G4NistManager* fNistManager;
G4Pow* fG4pow;
G4NistManager* fNistManager;
G4Pow* fG4pow;
G4MottCoefficients * mottcoeff;
G4double TotalCross;
//cost - min - max
G4double TotalCross;
//cost - min - max
G4double cosThetaMin;// def 1.0
G4double cosThetaMax;// def -1.0
G4double cosTetMinNuc;
G4double cosTetMaxNuc;
G4double cosTetMinNuc;
G4double cosTetMaxNuc;
//energy cut
G4double ecut;
G4double etag;
G4double ecut;
G4double etag;
// projectile........................
const G4ParticleDefinition* particle;
G4double spin;
G4double mass;
G4double spin;
G4double mass;
//lab of incedent particle
//lab of incedent particle
G4double tkinLab;
G4double momLab2;
G4double invbetaLab2;
//relative system with nucleus
G4double mu_rel;
G4double tkin;
G4double mom2;
G4double invbeta2;
G4double tkin;
G4double mom2;
G4double invbeta2;
G4double beta;
G4double gamma;
// target nucleus
G4double targetZ;
G4double targetZ;
G4double targetA;
G4double targetMass;
G4double targetMass;
G4double Trec;
G4double As;
G4double As;
G4double coeffb[5][6];
//constants
@@ -229,5 +228,3 @@ inline G4double G4ScreeningMottCrossSection::GetTotalCross() const
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4UniversalFluctuation.hh 104353 2017-05-26 07:24:51Z gcosmo $
// $Id: G4UniversalFluctuation.hh 106204 2017-09-19 10:37:49Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -38,12 +38,6 @@
//
// Modifications:
//
// 09-12-02 remove warnings (V.Ivanchenko)
// 28-12-02 add method Dispersion (V.Ivanchenko)
// 07-02-03 change signature (V.Ivanchenko)
// 13-02-03 Add name (V.Ivanchenko)
// 16-10-03 Changed interface to Initialisation (V.Ivanchenko)
// 07-02-05 define problem = 5.e-3 (mma)
//
// Class Description:
//
@@ -130,7 +124,7 @@ private:
G4double minNumberInteractionsBohr;
G4double minLoss;
G4double nmaxCont;
G4double rate,fw;
G4double rate,a0,fw;
G4int sizearray;
G4double* rndmarray;
@@ -148,10 +142,9 @@ G4UniversalFluctuation::AddExcitation(CLHEP::HepRandomEngine* rndm,
if(ax > nmaxCont) {
eav += ax*ex;
esig2 += ax*ex*ex;
} else if(ax > 0.) {
G4double p = G4double(G4Poisson(ax));
eloss += p*ex;
if(p > 0.) { eloss += (1.-2.*rndm->flat())*ex; }
} else {
G4int p = G4Poisson(ax);
if(p > 0) { eloss += ((p + 1) - 2.*rndm->flat())*ex; }
}
}
@@ -161,17 +154,14 @@ G4UniversalFluctuation::SampleGauss(CLHEP::HepRandomEngine* rndm,
G4double& eloss)
{
G4double x = eav;
if(esig2 > 0.0) {
G4double sig = std::sqrt(esig2);
G4double deltae = std::min(4.*sig, eav);
if(deltae < 0.25*sig) {
x += (2.*rndm->flat() - 1.)*deltae;
} else {
do {
x = G4RandGauss::shoot(rndm, eav, sig);
} while (x < eav-deltae || x > eav+deltae);
// Loop checking, 23-Feb-2016, Vladimir Ivanchenko
}
G4double sig = std::sqrt(esig2);
if(eav < 0.25*sig) {
x += (2.*rndm->flat() - 1.)*eav;
} else {
do {
x = G4RandGauss::shoot(rndm, eav, sig);
} while (x < 0.0 || x > 2*eav);
// Loop checking, 23-Feb-2016, Vladimir Ivanchenko
}
eloss += x;
}
@@ -1,174 +0,0 @@
//
// ********************************************************************
// * 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: G4UniversalFluctuation2017.hh 104218 2017-05-18 14:23:13Z urban $
//
// -------------------------------------------------------------------
//
// GEANT4 Class header file
//
//
// File name: G4UniversalFluctuation2017
//
// Author: V.Ivanchenko clone a class with the Laszlo Urban model
//
// Creation date: 24.05.2017
//
// Modifications:
//
//
// Class Description:
//
// Implementation of energy loss fluctuations
// -------------------------------------------------------------------
//
#ifndef G4UniversalFluctuation2017_h
#define G4UniversalFluctuation2017_h 1
#include "G4VEmFluctuationModel.hh"
#include "G4ParticleDefinition.hh"
#include "G4Poisson.hh"
#include <CLHEP/Random/RandomEngine.h>
class G4UniversalFluctuation2017 : public G4VEmFluctuationModel
{
public:
explicit G4UniversalFluctuation2017(const G4String& nam = "UniFluc");
virtual ~G4UniversalFluctuation2017();
virtual G4double SampleFluctuations(const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double,
G4double,
G4double) override;
virtual G4double Dispersion(const G4Material*,
const G4DynamicParticle*,
G4double,
G4double) override;
virtual void InitialiseMe(const G4ParticleDefinition*) final;
// Initialisation prestep
virtual void SetParticleAndCharge(const G4ParticleDefinition*,
G4double q2) final;
private:
inline void AddExcitation(CLHEP::HepRandomEngine* rndm,
G4double a, G4double e, G4double& eav,
G4double& eloss, G4double& esig2);
inline void SampleGauss(CLHEP::HepRandomEngine* rndm,
G4double eav, G4double esig2,
G4double& eloss);
// hide assignment operator
G4UniversalFluctuation2017 & operator=(const G4UniversalFluctuation2017 &right) = delete;
G4UniversalFluctuation2017(const G4UniversalFluctuation2017&) = delete;
const G4ParticleDefinition* particle;
const G4Material* lastMaterial;
G4double particleMass;
// Derived quantities
G4double m_Inv_particleMass;
G4double m_massrate;
G4double chargeSquare;
// data members to speed up the fluctuation calculation
G4double ipotFluct;
G4double electronDensity;
G4double f1Fluct;
G4double f2Fluct;
G4double e1Fluct;
G4double e2Fluct;
G4double e1LogFluct;
G4double e2LogFluct;
G4double ipotLogFluct;
G4double e0;
G4double esmall;
G4double e1,e2;
G4double minNumberInteractionsBohr;
G4double minLoss;
G4double nmaxCont;
G4double rate,fw,fw2,fw3;
G4int sizearray;
G4double* rndmarray;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
inline void
G4UniversalFluctuation2017::AddExcitation(CLHEP::HepRandomEngine* rndm,
G4double ax, G4double ex, G4double& eav,
G4double& eloss, G4double& esig2)
{
if(ax > nmaxCont) {
eav += ax*ex;
esig2 += ax*ex*ex;
} else {
G4double p = (G4double)(G4Poisson(ax));
eloss += p*ex;
if(p > 0.) { eloss += (1.-2.*rndm->flat())*ex; }
}
}
inline void
G4UniversalFluctuation2017::SampleGauss(CLHEP::HepRandomEngine* rndm,
G4double eav, G4double esig2,
G4double& eloss)
{
G4double x = eav;
if(esig2 > 0.0) {
G4double sig = std::sqrt(esig2);
G4double deltae = std::min(4.*sig, eav);
if(deltae < 0.25*sig) {
x += (2.*rndm->flat() - 1.)*deltae;
} else {
do {
x = G4RandGauss::shoot(rndm, eav, sig);
} while (x < eav-deltae || x > eav+deltae);
// Loop checking, 23-Feb-2016, Vladimir Ivanchenko
}
}
eloss += x;
}
#endif
@@ -104,8 +104,6 @@ public:
G4double ComputeTheta0(G4double truePathLength, G4double KineticEnergy);
inline void SetNewDisplacementFlag(G4bool);
private:
G4double SampleCosineTheta(G4double trueStepLength, G4double KineticEnergy);
@@ -180,7 +178,7 @@ private:
G4bool insideskin;
G4bool latDisplasmentbackup ;
G4bool displacementFlag;
G4bool dispAlg96;
G4double rangecut;
G4double drr,finalr;
@@ -190,13 +188,6 @@ private:
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
inline void G4UrbanMscModel::SetNewDisplacementFlag(G4bool val)
{
displacementFlag = val;
}
inline
void G4UrbanMscModel::SetParticle(const G4ParticleDefinition* p)
{
@@ -212,19 +203,13 @@ void G4UrbanMscModel::SetParticle(const G4ParticleDefinition* p)
inline G4double G4UrbanMscModel::Randomizetlimit()
{
G4double temptlimit = tlimit;
G4double res = tlimitmin;
if(tlimit > tlimitmin)
{
G4double delta = tlimit-tlimitmin;
do {
temptlimit = G4RandGauss::shoot(rndmEngineMod,tlimit,0.1*delta);
// Loop checking, 10-Apr-2016, Laszlo Urban
} while ((temptlimit < tlimit-delta) ||
(temptlimit > tlimit+delta));
res = G4RandGauss::shoot(rndmEngineMod,tlimit,0.1*(tlimit-tlimitmin));
res = std::max(res, tlimitmin);
}
else { temptlimit = tlimitmin; }
return temptlimit;
return res;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -262,12 +247,9 @@ G4double G4UrbanMscModel::SimpleScattering(G4double xmeanth, G4double x2meanth)
G4double prob = (a+2.)*xmeanth/a;
// sampling
G4double cth = 1.;
if(rndmEngineMod->flat() < prob) {
cth = -1.+2.*G4Exp(G4Log(rndmEngineMod->flat())/(a+1.));
} else {
cth = -1.+2.*rndmEngineMod->flat();
}
G4double rdm = rndmEngineMod->flat();
G4double cth = (rndmEngineMod->flat() < prob)
? -1.+2.*G4Exp(G4Log(rdm)/(a+1.)) : -1.+2.*rdm;
return cth;
}
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4alphaIonisation.hh 96934 2016-05-18 09:10:41Z gcosmo $
// $Id: G4alphaIonisation.hh 106717 2017-10-20 09:41:27Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -69,6 +69,9 @@ public:
// Print out of the class parameters
virtual void PrintInfo() override;
// print documentation in html format
virtual void ProcessDescription(std::ostream&) const override;
protected:
virtual void
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4eBremsstrahlung.hh 96934 2016-05-18 09:10:41Z gcosmo $
// $Id: G4eBremsstrahlung.hh 106717 2017-10-20 09:41:27Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -88,12 +88,16 @@ public:
virtual ~G4eBremsstrahlung();
virtual G4bool IsApplicable(const G4ParticleDefinition& p) final;
// Print out of the class parameters
virtual void PrintInfo() override;
// print documentation in html format
virtual void ProcessDescription(std::ostream&) const override;
protected:
// Print out of the class parameters
virtual void StreamProcessInfo(std::ostream& outFile,
G4String endOfLine=G4String("\n")) const override;
virtual void
InitialiseEnergyLossProcess(const G4ParticleDefinition*,
const G4ParticleDefinition*) override;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4eIonisation.hh 96934 2016-05-18 09:10:41Z gcosmo $
// $Id: G4eIonisation.hh 106717 2017-10-20 09:41:27Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -91,6 +91,9 @@ public:
// Print out of the class parameters
virtual void PrintInfo() override;
// print documentation in html format
virtual void ProcessDescription(std::ostream&) const override;
protected:
virtual void
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4eMultipleScattering.hh 96934 2016-05-18 09:10:41Z gcosmo $
// $Id: G4eMultipleScattering.hh 106717 2017-10-20 09:41:27Z gcosmo $
//
// -----------------------------------------------------------------------------
//
@@ -69,11 +69,15 @@ public: // with description
// returns true for charged particles, false otherwise
G4bool IsApplicable (const G4ParticleDefinition& p) final;
// Print few lines of informations about the process: validity range,
void PrintInfo() override;
// print documentation in html format
virtual void ProcessDescription(std::ostream&) const override;
protected:
// Print out of the class parameters
virtual void StreamProcessInfo(std::ostream& outFile,
G4String endOfLine=G4String("\n")) const override;
// This function initialise models
void InitialiseProcess(const G4ParticleDefinition*) override;
@@ -28,20 +28,20 @@
//
// GEANT4 Class header file
//
// File name: G4eSingleCoulombScatteringModel
// File name: G4eSingleCoulombScatteringModel
//
// Author: Cristina Consolandi
//
// Creation date: 20.10.2011
//
// Creation date: 20.10.2011
//
// Class Description:
// Single Scattering model for electron-nuclei interaction.
// Suitable for high energy electrons and low scattering angles.
//
//
// Reference:
// M.J. Boschini et al.
// "Non Ionizing Energy Loss induced by Electrons in the Space Environment"
// Proc. of the 13th International Conference on Particle Physics and Advanced Technology
// Proc. of the 13th International Conference on Particle Physics and Advanced Technology
// (13th ICPPAT, Como 3-7/10/2011), World Scientific (Singapore).
// Available at: http://arxiv.org/abs/1111.4042v4
//
@@ -69,20 +69,20 @@ class G4eSingleCoulombScatteringModel : public G4VEmModel
public:
explicit G4eSingleCoulombScatteringModel(const G4String& nam = "eSingleCoulombScat");
virtual ~G4eSingleCoulombScatteringModel();
virtual void Initialise(const G4ParticleDefinition*,
virtual void Initialise(const G4ParticleDefinition*,
const G4DataVector&) final;
virtual void InitialiseLocal(const G4ParticleDefinition*,
virtual void InitialiseLocal(const G4ParticleDefinition*,
G4VEmModel* masterModel) final;
virtual G4double ComputeCrossSectionPerAtom(
const G4ParticleDefinition*,
G4double kinEnergy,
G4double Z,
G4double A,
G4double kinEnergy,
G4double Z,
G4double A,
G4double cut,
G4double emax) final;
@@ -91,12 +91,12 @@ public:
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy) final;
inline void SetRecoilThreshold(G4double eth);
//protected:
inline void SetRecoilThreshold(G4double eth);
inline void SetXSectionModel(const G4String& model);
private:
inline void DefineMaterial(const G4MaterialCutsCouple*);
inline void SetupParticle(const G4ParticleDefinition*);
@@ -106,12 +106,12 @@ private:
G4eSingleCoulombScatteringModel(const G4eSingleCoulombScatteringModel&) = delete;
G4IonTable* theIonTable;
G4ParticleChangeForGamma* fParticleChange;
G4ParticleChangeForGamma* fParticleChange;
G4NistManager* fNistManager;
G4ScreeningMottCrossSection* Mottcross;
G4ScreeningMottCrossSection* Mottcross;
const std::vector<G4double>* pCuts;
const G4MaterialCutsCouple* currentCouple;
const G4MaterialCutsCouple* currentCouple;
const G4Material* currentMaterial;
const G4Element* currentElement;
G4int currentMaterialIndex;
@@ -119,19 +119,20 @@ private:
G4double cosThetaMin;
G4double recoilThreshold;
G4int FormFactor;
G4int XSectionModel;
// projectile
const G4ParticleDefinition* particle;
G4double mass;
const G4ParticleDefinition* particle;
G4double mass;
G4double lowEnergyLimit;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline void
inline void
G4eSingleCoulombScatteringModel::DefineMaterial(const G4MaterialCutsCouple* cup)
{
{
if(cup != currentCouple) {
currentCouple = cup;
currentMaterial = cup->GetMaterial();
@@ -141,7 +142,7 @@ G4eSingleCoulombScatteringModel::DefineMaterial(const G4MaterialCutsCouple* cup)
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline void
inline void
G4eSingleCoulombScatteringModel::SetupParticle(const G4ParticleDefinition* p)
{
if(p != particle) {
@@ -159,4 +160,14 @@ inline void G4eSingleCoulombScatteringModel::SetRecoilThreshold(G4double eth)
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline void G4eSingleCoulombScatteringModel::SetXSectionModel(const G4String& model)
{
if(model == "fast") { XSectionModel=1; }
else if(model == "precise") { XSectionModel=0; }
else { G4cout<<"G4eSingleCoulombScatteringModel WARNING: "<<model
<<" : G4eSingleScatteringModel x-section model is not valid"<<G4endl;}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4eplusAnnihilation.hh 96934 2016-05-18 09:10:41Z gcosmo $
// $Id: G4eplusAnnihilation.hh 106717 2017-10-20 09:41:27Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -82,11 +82,15 @@ public:
G4ForceCondition* condition
) override;
// Print out of the class parameters
virtual void PrintInfo() override;
// print documentation in html format
virtual void ProcessDescription(std::ostream&) const override;
protected:
// Print out of the class parameters
virtual void StreamProcessInfo(std::ostream& outFile,
G4String endOfLine=G4String("\n")) const override;
virtual void InitialiseProcess(const G4ParticleDefinition*) override;
private:
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4hIonisation.hh 96934 2016-05-18 09:10:41Z gcosmo $
// $Id: G4hIonisation.hh 106717 2017-10-20 09:41:27Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -99,6 +99,9 @@ public:
// Print out of the class parameters
virtual void PrintInfo() final;
// print documentation in html format
virtual void ProcessDescription(std::ostream&) const override;
protected:
virtual void
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4hMultipleScattering.hh 96934 2016-05-18 09:10:41Z gcosmo $
// $Id: G4hMultipleScattering.hh 106717 2017-10-20 09:41:27Z gcosmo $
//
// -----------------------------------------------------------------------------
//
@@ -71,11 +71,15 @@ public: // with description
// returns true for charged particles, false otherwise
virtual G4bool IsApplicable (const G4ParticleDefinition& p) final;
// Print few lines of informations about the process: validity range,
virtual void PrintInfo() override;
// print documentation in html format
virtual void ProcessDescription(std::ostream&) const override;
protected:
// Print out of the class parameters
virtual void StreamProcessInfo(std::ostream& outFile,
G4String endOfLine=G4String("\n")) const override;
// This function initialise models
virtual void InitialiseProcess(const G4ParticleDefinition*) override;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4ionIonisation.hh 96934 2016-05-18 09:10:41Z gcosmo $
// $Id: G4ionIonisation.hh 106717 2017-10-20 09:41:27Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -85,16 +85,20 @@ public:
virtual G4bool IsApplicable(const G4ParticleDefinition& p) final;
// Print out of the class parameters
virtual void PrintInfo() override;
void AddStoppingData(G4int Z, G4int A, const G4String& materialName,
G4PhysicsVector* dVector);
void ActivateStoppingData(G4bool);
// print documentation in html format
virtual void ProcessDescription(std::ostream&) const override;
protected:
// Print out of the class parameters
virtual void StreamProcessInfo(std::ostream& outFile,
G4String endOfLine=G4String("\n")) const override;
virtual void
InitialiseEnergyLossProcess(const G4ParticleDefinition*,
const G4ParticleDefinition*) override;