Import Geant4 10.4.0 source tree
This commit is contained in:
@@ -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), 235–245.
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// ----------------------------------------------------------------------------------------
|
||||
|
||||
//
|
||||
@@ -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;
|
||||
|
||||
|
||||
+36
-25
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user