Import Geant4 10.7.0 source tree

This commit is contained in:
Gabriele Cosmo
2020-12-04 12:30:43 +01:00
parent 67ba86d073
commit dab42d2018
3770 changed files with 226369 additions and 286486 deletions
@@ -98,7 +98,7 @@ public:
// Given the atomic number and the vacancy intial shell index returns
// Given the atomic number and the vacancy initial shell index returns
// the AugerTransition object related to that shell
G4AugerTransition* GetAugerTransition(G4int Z, G4int vacancyShellIndex);
@@ -28,7 +28,7 @@
// 30 October 2008
// on base of G4LowEnergyPhotoElectric developed by A.Forti and M.G.Pia
//
// 15 Mar 2010 L. Pandola, removed methods to set explicitely fluorescence cuts.
// 15 Mar 2010 L. Pandola, removed methods to set explicitly fluorescence cuts.
// Main cuts from G4ProductionCutsTable are always used
// 30 May 2011 A Mantero & V Ivanchenko Migration to model design for deexcitation
// 22 Oct 2012 A & V Ivanchenko Migration data structure to G4PhysicsVector
@@ -28,7 +28,7 @@
// 30 October 2008
// on base of G4LowEnergyPhotoElectric developed by A.Forti and M.G.Pia
//
// 15 Mar 2010 L. Pandola, removed methods to set explicitely fluorescence cuts.
// 15 Mar 2010 L. Pandola, removed methods to set explicitly fluorescence cuts.
// Main cuts from G4ProductionCutsTable are always used
// 30 May 2011 A Mantero & V Ivanchenko Migration to model design for deexcitation
// 22 Oct 2012 A & V Ivanchenko Migration data structure to G4PhysicsVector
@@ -23,50 +23,51 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// gpaterno, March 2019
//
// G4MuElecElastic.hh, 2011/08/29 A.Valentin, M. Raine
//
// Based on the following publications
// - Geant4 physics processes for microdosimetry simulation:
// very low energy electromagnetic models for electrons in Si,
// NIM B, vol. 288, pp. 66 - 73, 2012.
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#ifndef G4MuElecElastic_h
#define G4MuElecElastic_h 1
#ifndef G4MIData_h
#define G4MIData_h 1
#include "G4VEmProcess.hh"
#include "G4Electron.hh"
// Available models
#include "G4MuElecElasticModel.hh"
#include "globals.hh"
#include "G4VMaterialExtension.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4MuElecElastic : public G4VEmProcess
class G4MIData : public G4VMaterialExtension {
{
public:
G4MuElecElastic(const G4String& processName ="MuElecElastic",
G4ProcessType type = fElectromagnetic);
virtual ~G4MuElecElastic();
virtual G4bool IsApplicable(const G4ParticleDefinition&);
public:
G4MIData(const G4String&);
virtual ~G4MIData();
public:
void Print() const override
{G4cout << "Molecular Interference data for Rayleigh scattering" << G4endl;};
void SetFilenameFF(const G4String& filenameff) {fFilenameFF = filenameff;};
void SetFilenameCS(const G4String& filenamecs) {fFilenameCS = filenamecs;};
void SetMolWeight(const G4double mw) {fMolWeight = mw;};
public:
const G4String& GetFilenameFF() {return fFilenameFF;};
const G4String& GetFilenameCS() {return fFilenameCS;};
const G4double& GetMolWeight() {return fMolWeight;};
virtual void PrintInfo();
protected:
virtual void InitialiseProcess(const G4ParticleDefinition*);
private:
G4bool isInitialised;
G4String fFilenameFF;
G4String fFilenameCS;
G4double fMolWeight;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -27,90 +27,65 @@
// Based on G4DNACrossSectionDataSet
//
#ifndef G4MUELECCROSSSECTIONDATASET_HH
#define G4MUELECCROSSSECTIONDATASET_HH 1
#ifndef G4MICROELECCROSSSECTIONDATASET_HH
#define G4MICROELECCROSSSECTIONDATASET_HH 1
#include <CLHEP/Units/SystemOfUnits.h>
#include "G4ShellEMDataSet.hh"
class G4MuElecCrossSectionDataSet : public G4VEMDataSet
class G4MicroElecCrossSectionDataSet_new : public G4VEMDataSet
{
public:
G4MuElecCrossSectionDataSet(G4VDataSetAlgorithm* algo,
G4MicroElecCrossSectionDataSet_new(G4VDataSetAlgorithm* algo,
G4double xUnit=CLHEP::MeV,
G4double dataUnit=CLHEP::barn);
~G4MicroElecCrossSectionDataSet_new() override;
virtual ~G4MuElecCrossSectionDataSet();
virtual G4double FindValue(G4double e, G4int componentId=0) const;
virtual void PrintData(void) const;
virtual const G4VEMDataSet* GetComponent(G4int componentId) const
{ return components[componentId]; }
virtual void AddComponent(G4VEMDataSet* dataSet)
{ components.push_back(dataSet); }
virtual size_t NumberOfComponents(void) const
{ return components.size(); }
virtual const G4DataVector& GetEnergies(G4int componentId) const
{ return GetComponent(componentId)->GetEnergies(0); }
virtual const G4DataVector& GetData(G4int componentId) const
{ return GetComponent(componentId)->GetData(0); }
virtual const G4DataVector& GetLogEnergies(G4int componentId) const
{ return GetComponent(componentId)->GetLogEnergies(0); }
virtual const G4DataVector& GetLogData(G4int componentId) const
{ return GetComponent(componentId)->GetLogData(0); }
virtual void SetEnergiesData(G4DataVector* x, G4DataVector* values, G4int componentId);
virtual void SetLogEnergiesData(G4DataVector* x,
G4DataVector* values,
G4DataVector* log_x,
G4DataVector* log_values,
G4int componentId);
virtual G4bool LoadData(const G4String & argFileName);
virtual G4bool LoadNonLogData(const G4String & argFileName);
virtual G4bool SaveData(const G4String & argFileName) const;
virtual G4double RandomSelect(G4int /*componentId */) const { return -1.; };
// void CleanUpComponents();
G4double FindValue(G4double e, G4int componentId=0) const override;
G4double FindShellValue(G4double argEnergy, G4int shell) const;
void PrintData(void) const override;
const G4VEMDataSet* GetComponent(G4int componentId) const override
{ return components[componentId]; }
void AddComponent(G4VEMDataSet* dataSet) override
{ components.push_back(dataSet); }
size_t NumberOfComponents(void) const override
{ return components.size(); }
const G4DataVector& GetEnergies(G4int componentId) const override
{ return GetComponent(componentId)->GetEnergies(0); }
const G4DataVector& GetData(G4int componentId) const override
{ return GetComponent(componentId)->GetData(0); }
const G4DataVector& GetLogEnergies(G4int componentId) const override
{ return GetComponent(componentId)->GetLogEnergies(0); }
const G4DataVector& GetLogData(G4int componentId) const override
{ return GetComponent(componentId)->GetLogData(0); }
void SetEnergiesData(G4DataVector* x, G4DataVector* values, G4int componentId) override;
void SetLogEnergiesData(G4DataVector* x,
G4DataVector* values,
G4DataVector* log_x,
G4DataVector* log_values,
G4int componentId) override;
G4bool LoadData(const G4String & argFileName) override;
G4bool LoadNonLogData(const G4String & argFileName) override;
G4bool SaveData(const G4String & argFileName) const override;
G4double RandomSelect(G4int /*componentId */) const override
{ return -1.; };
private:
G4MicroElecCrossSectionDataSet_new();
G4MicroElecCrossSectionDataSet_new(const G4MicroElecCrossSectionDataSet_new & copy);
G4MicroElecCrossSectionDataSet_new& operator=(const G4MicroElecCrossSectionDataSet_new & right);
G4String FullFileName(const G4String & argFileName) const;
// Hide copy constructor and assignment operator
G4MuElecCrossSectionDataSet();
G4MuElecCrossSectionDataSet(const G4MuElecCrossSectionDataSet & copy);
G4MuElecCrossSectionDataSet& operator=(const G4MuElecCrossSectionDataSet & right);
std::vector<G4VEMDataSet*> components; // Owned pointers
G4int z;
G4VDataSetAlgorithm* algorithm; // Owned pointer
G4double unitEnergies;
G4double unitData;
G4double GetUnitEnergies() const { return unitEnergies; }
G4double GetUnitData() const { return unitData; }
const G4VDataSetAlgorithm* GetAlgorithm() const { return algorithm; }
void CleanUpComponents(void);
std::vector<G4VEMDataSet*> components; // Owned pointers
G4int z;
G4VDataSetAlgorithm* algorithm; // Owned pointer
G4double unitEnergies;
G4double unitData;
};
#endif /* G4MuElecCrossSectionDataSet_HH */
#endif
@@ -0,0 +1,190 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// G4MicroElecElasticModel_new.hh, 2011/08/29 A.Valentin, M. Raine are with CEA [a]
// 2020/05/20 P. Caron, C. Inguimbert are with ONERA [b]
// Q. Gibaru is with CEA [a], ONERA [b] and CNES [c]
// M. Raine and D. Lambert are with CEA [a]
//
// A part of this work has been funded by the French space agency(CNES[c])
// [a] CEA, DAM, DIF - 91297 ARPAJON, France
// [b] ONERA - DPHY, 2 avenue E.Belin, 31055 Toulouse, France
// [c] CNES, 18 av.E.Belin, 31401 Toulouse CEDEX, France
//
// Based on the following publications
// - A.Valentin, M. Raine,
// Inelastic cross-sections of low energy electrons in silicon
// for the simulation of heavy ion tracks with the Geant4-DNA toolkit,
// NSS Conf. Record 2010, pp. 80-85
// https://doi.org/10.1109/NSSMIC.2010.5873720
//
// - A.Valentin, M. Raine, M.Gaillardin, P.Paillet
// Geant4 physics processes for microdosimetry simulation:
// very low energy electromagnetic models for electrons in Silicon,
// https://doi.org/10.1016/j.nimb.2012.06.007
// NIM B, vol. 288, pp. 66-73, 2012, part A
// heavy ions in Si, NIM B, vol. 287, pp. 124-129, 2012, part B
// https://doi.org/10.1016/j.nimb.2012.07.028
//
// - M. Raine, M. Gaillardin, P. Paillet
// Geant4 physics processes for silicon microdosimetry simulation:
// Improvements and extension of the energy-range validity up to 10 GeV/nucleon
// NIM B, vol. 325, pp. 97-100, 2014
// https://doi.org/10.1016/j.nimb.2014.01.014
//
// - J. Pierron, C. Inguimbert, M. Belhaj, T. Gineste, J. Puech, M. Raine
// Electron emission yield for low energy electrons:
// Monte Carlo simulation and experimental comparison for Al, Ag, and Si
// Journal of Applied Physics 121 (2017) 215107.
// https://doi.org/10.1063/1.4984761
//
// - P. Caron,
// Study of Electron-Induced Single-Event Upset in Integrated Memory Devices
// PHD, 16th October 2019
//
// - Q.Gibaru, C.Inguimbert, P.Caron, M.Raine, D.Lambert, J.Puech,
// Geant4 physics processes for microdosimetry and secondary electron emission simulation :
// Extension of MicroElec to very low energies and new materials
// NIM B, 2020, in review.
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef G4MICROELECELASTICMODEL_HH
#define G4MICROELECELASTICMODEL_HH 1
#include <map>
#include <CLHEP/Units/SystemOfUnits.h>
#include "G4MicroElecMaterialStructure.hh"
#include "G4MicroElecCrossSectionDataSet_new.hh"
#include "G4VEmModel.hh"
#include "G4Electron.hh"
#include "G4ParticleChangeForGamma.hh"
#include "G4LogLogInterpolation.hh"
#include "G4ProductionCutsTable.hh"
#include "G4NistManager.hh"
class G4MicroElecElasticModel_new : public G4VEmModel
{
public:
G4MicroElecElasticModel_new(const G4ParticleDefinition* p = 0,
const G4String& nam = "MicroElecElasticModel");
~G4MicroElecElasticModel_new() override;
void Initialise(const G4ParticleDefinition*, const G4DataVector&) override;
G4double CrossSectionPerVolume(const G4Material* material,
const G4ParticleDefinition* p,
G4double ekin,
G4double emin,
G4double emax) override;
G4double AcousticCrossSectionPerVolume(G4double ekin, G4double kbz, G4double rho,
G4double cs, G4double Aac, G4double Eac,
G4double prefactor);
void SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy) override;
void SetKillBelowThreshold (G4double threshold);
G4double GetKillBelowThreshold () { return killBelowEnergy; }
G4double DamageEnergy(G4double T,G4double A, G4double Z);
protected:
G4ParticleChangeForGamma* fParticleChangeForGamma;
private:
G4MicroElecElasticModel_new & operator=(const G4MicroElecElasticModel_new &right);
G4MicroElecElasticModel_new(const G4MicroElecElasticModel_new&);
// Final state
G4double Theta(G4ParticleDefinition * aParticleDefinition, G4double k, G4double integrDiff);
G4double LinLinInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2);
G4double LogLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2);
G4double LinLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2);
G4double QuadInterpolator(G4double e11, G4double e12, G4double e21, G4double e22,
G4double x11, G4double x12, G4double x21, G4double x22,
G4double t1, G4double t2, G4double t, G4double e);
G4double RandomizeCosTheta(G4double k);
G4Material* nistSi = nullptr;
G4double killBelowEnergy;
G4double lowEnergyLimit;
G4double lowEnergyLimitOfModel;
G4double highEnergyLimit;
G4bool isInitialised;
G4int verboseLevel;
// Cross section
typedef std::map<G4String,G4String,std::less<G4String> > MapFile;
MapFile tableFile;
typedef std::map<G4String,G4MicroElecCrossSectionDataSet_new*,std::less<G4String> > MapData;
//MapData tableData;
typedef std::map<G4String, MapData*, std::less<G4String> > TCSMap;
TCSMap tableTCS;
//Maps for multilayers
typedef std::map<double, std::map<double, double> > TriDimensionMap;
typedef std::map<G4String, TriDimensionMap* > ThetaMap;
ThetaMap thetaDataStorage; //Storage of angles (cumulated)
typedef std::map<G4String, std::vector<double>* > energyMap;
energyMap eIncidentEnergyStorage;
typedef std::map<double, std::vector<double> > VecMap;
typedef std::map<G4String, VecMap* > ProbaMap;
ProbaMap eProbaStorage; //Storage of probabilities for cumulated sections
typedef std::map<G4String, G4MicroElecMaterialStructure*, std::less<G4String> > MapStructure;
MapStructure tableMaterialsStructures; //Structures of all materials simulated
G4MicroElecMaterialStructure* currentMaterialStructure = nullptr;
typedef std::map<G4String, G4double, std::less<G4String> > MapEnergy;
MapEnergy lowEnergyLimitTable;
MapEnergy highEnergyLimitTable;
MapEnergy workFunctionTable;
G4bool killElectron, acousticModelEnabled;
G4String currentMaterialName;
G4bool isOkToBeInitialised;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -0,0 +1,194 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// G4MicroElecInelasticModel_new.hh, 2011/08/29 A.Valentin, M. Raine are with CEA [a]
// 2020/05/20 P. Caron, C. Inguimbert are with ONERA [b]
// Q. Gibaru is with CEA [a], ONERA [b] and CNES [c]
// M. Raine and D. Lambert are with CEA [a]
//
// A part of this work has been funded by the French space agency(CNES[c])
// [a] CEA, DAM, DIF - 91297 ARPAJON, France
// [b] ONERA - DPHY, 2 avenue E.Belin, 31055 Toulouse, France
// [c] CNES, 18 av.E.Belin, 31401 Toulouse CEDEX, France
//
// Based on the following publications
// - A.Valentin, M. Raine,
// Inelastic cross-sections of low energy electrons in silicon
// for the simulation of heavy ion tracks with the Geant4-DNA toolkit,
// NSS Conf. Record 2010, pp. 80-85
// https://doi.org/10.1109/NSSMIC.2010.5873720
//
// - A.Valentin, M. Raine, M.Gaillardin, P.Paillet
// Geant4 physics processes for microdosimetry simulation:
// very low energy electromagnetic models for electrons in Silicon,
// https://doi.org/10.1016/j.nimb.2012.06.007
// NIM B, vol. 288, pp. 66-73, 2012, part A
// heavy ions in Si, NIM B, vol. 287, pp. 124-129, 2012, part B
// https://doi.org/10.1016/j.nimb.2012.07.028
//
// - M. Raine, M. Gaillardin, P. Paillet
// Geant4 physics processes for silicon microdosimetry simulation:
// Improvements and extension of the energy-range validity up to 10 GeV/nucleon
// NIM B, vol. 325, pp. 97-100, 2014
// https://doi.org/10.1016/j.nimb.2014.01.014
//
// - J. Pierron, C. Inguimbert, M. Belhaj, T. Gineste, J. Puech, M. Raine
// Electron emission yield for low energy electrons:
// Monte Carlo simulation and experimental comparison for Al, Ag, and Si
// Journal of Applied Physics 121 (2017) 215107.
// https://doi.org/10.1063/1.4984761
//
// - P. Caron,
// Study of Electron-Induced Single-Event Upset in Integrated Memory Devices
// PHD, 16th October 2019
//
// - Q.Gibaru, C.Inguimbert, P.Caron, M.Raine, D.Lambert, J.Puech,
// Geant4 physics processes for microdosimetry and secondary electron emission simulation :
// Extension of MicroElec to very low energies and new materials
// NIM B, 2020, in review.
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef G4MICROELECINELASTICMODEL_NEW_HH
#define G4MICROELECINELASTICMODEL_NEW_HH 1
#include "globals.hh"
#include "G4VEmModel.hh"
#include "G4ParticleChangeForGamma.hh"
#include "G4ProductionCutsTable.hh"
#include "G4MicroElecMaterialStructure.hh"
#include "G4MicroElecCrossSectionDataSet_new.hh"
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4GenericIon.hh"
#include "G4ParticleDefinition.hh"
#include "G4LogLogInterpolation.hh"
#include "G4VAtomDeexcitation.hh"
#include "G4NistManager.hh"
class G4MicroElecInelasticModel_new : public G4VEmModel
{
public:
G4MicroElecInelasticModel_new(const G4ParticleDefinition* p = 0,
const G4String& nam = "MicroElecInelasticModel");
~G4MicroElecInelasticModel_new() override;
void Initialise(const G4ParticleDefinition*, const G4DataVector&) override;
G4double CrossSectionPerVolume(const G4Material* material,
const G4ParticleDefinition* p,
G4double ekin,
G4double emin,
G4double emax) override;
void SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy) override;
G4double DifferentialCrossSection(const G4ParticleDefinition * aParticleDefinition,
G4double k, G4double energyTransfer, G4int shell);
G4double ComputeRelativistVelocity(G4double E, G4double mass);
G4double ComputeElasticQmax(G4double T1i, G4double T2i, G4double m1, G4double m2);
G4double BKZ(G4double Ep, G4double mp, G4int Zp, G4double EF);
// compute the effective charge according Brandt et Kitagawa theory
G4double stepFunc(G4double x);
G4double vrkreussler(G4double v, G4double vF);
protected:
G4ParticleChangeForGamma* fParticleChangeForGamma = nullptr;
private:
//
// private methods
//
G4MicroElecInelasticModel_new & operator=(const G4MicroElecInelasticModel_new &right);
G4MicroElecInelasticModel_new(const G4MicroElecInelasticModel_new&);
G4int RandomSelect(G4double energy,const G4String& particle, G4double originalMass, G4int originalZ );
G4double RandomizeCreatedElectronEnergy(G4double secondaryKinetic);
G4double RandomizeEjectedElectronEnergy(const G4ParticleDefinition * aParticleDefinition,
G4double incomingParticleEnergy, G4int shell,
G4double originalMass, G4int originalZ) ;
G4double RandomizeEjectedElectronEnergyFromCumulatedDcs(const G4ParticleDefinition*,
G4double k, G4int shell);
G4double TransferedEnergy(const G4ParticleDefinition*, G4double k,
G4int ionizationLevelIndex, G4double random);
G4double Interpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2);
G4double QuadInterpolator( G4double e11, G4double e12, G4double e21, G4double e22,
G4double x11, G4double x12, G4double x21, G4double x22,
G4double t1, G4double t2, G4double t, G4double e);
//
// private elements
//
G4String currentMaterial = "";
G4bool fasterCode = false;
//deexcitation manager to produce fluo photns and e-
G4VAtomDeexcitation* fAtomDeexcitation = nullptr;
G4Material* nistSi = nullptr;
std::map<G4String,G4double,std::less<G4String> > lowEnergyLimit;
std::map<G4String,G4double,std::less<G4String> > highEnergyLimit;
G4bool isInitialised = false;
G4int verboseLevel = 0;
typedef std::map<G4String,G4String,std::less<G4String> > MapFile;
typedef std::map<G4String,G4MicroElecCrossSectionDataSet_new*,std::less<G4String> > MapData;
typedef std::map<G4double, std::map<G4double, G4double> > TriDimensionMap;
typedef std::map<G4double, std::vector<G4double> > VecMap;
//Tables for multilayers
typedef std::map<G4String, MapData*, std::less<G4String> > TCSMap;
TCSMap tableTCS; //TCS tables by particle
typedef std::map<G4String, std::vector<TriDimensionMap>* > dataDiffCSMap;
dataDiffCSMap eDiffDatatable, pDiffDatatable; //Transfer probabilities (for slower code)
dataDiffCSMap eNrjTransStorage, pNrjTransStorage; //Transfered energies and corresponding probability (faster code)
typedef std::map<G4String, std::vector<VecMap>* > dataProbaShellMap;
dataProbaShellMap eProbaShellStorage, pProbaShellStorage; //Cumulated Transfer probabilities (faster code)
typedef std::map<G4String, std::vector<G4double>* > incidentEnergyMap;
incidentEnergyMap eIncidentEnergyStorage, pIncidentEnergyStorage; //Incident energies for interpolation (faster code)
typedef std::map<G4String, VecMap* > TranfEnergyMap;
TranfEnergyMap eVecmStorage, pVecmStorage; //Transfered energy for interpolation (slower code)
typedef std::map<G4String, G4MicroElecMaterialStructure*, std::less<G4String> > MapStructure;
MapStructure tableMaterialsStructures; //Structures of all materials simulated
G4MicroElecMaterialStructure* currentMaterialStructure = nullptr;
};
#endif
@@ -0,0 +1,105 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// G4MicroElecInelastic_new.hh, 2011/08/29 A.Valentin, M. Raine are with CEA [a]
// 2020/05/20 P. Caron, C. Inguimbert are with ONERA [b]
// Q. Gibaru is with CEA [a], ONERA [b] and CNES [c]
// M. Raine and D. Lambert are with CEA [a]
//
// A part of this work has been funded by the French space agency(CNES[c])
// [a] CEA, DAM, DIF - 91297 ARPAJON, France
// [b] ONERA - DPHY, 2 avenue E.Belin, 31055 Toulouse, France
// [c] CNES, 18 av.E.Belin, 31401 Toulouse CEDEX, France
//
// Based on the following publications
// - A.Valentin, M. Raine,
// Inelastic cross-sections of low energy electrons in silicon
// for the simulation of heavy ion tracks with the Geant4-DNA toolkit,
// NSS Conf. Record 2010, pp. 80-85
// https://doi.org/10.1109/NSSMIC.2010.5873720
//
// - A.Valentin, M. Raine, M.Gaillardin, P.Paillet
// Geant4 physics processes for microdosimetry simulation:
// very low energy electromagnetic models for electrons in Silicon,
// https://doi.org/10.1016/j.nimb.2012.06.007
// NIM B, vol. 288, pp. 66-73, 2012, part A
// heavy ions in Si, NIM B, vol. 287, pp. 124-129, 2012, part B
// https://doi.org/10.1016/j.nimb.2012.07.028
//
// - M. Raine, M. Gaillardin, P. Paillet
// Geant4 physics processes for silicon microdosimetry simulation:
// Improvements and extension of the energy-range validity up to 10 GeV/nucleon
// NIM B, vol. 325, pp. 97-100, 2014
// https://doi.org/10.1016/j.nimb.2014.01.014
//
// - J. Pierron, C. Inguimbert, M. Belhaj, T. Gineste, J. Puech, M. Raine
// Electron emission yield for low energy electrons:
// Monte Carlo simulation and experimental comparison for Al, Ag, and Si
// Journal of Applied Physics 121 (2017) 215107.
// https://doi.org/10.1063/1.4984761
//
// - P. Caron,
// Study of Electron-Induced Single-Event Upset in Integrated Memory Devices
// PHD, 16th October 2019
//
// - Q.Gibaru, C.Inguimbert, P.Caron, M.Raine, D.Lambert, J.Puech,
// Geant4 physics processes for microdosimetry and secondary electron emission simulation :
// Extension of MicroElec to very low energies and new materials
// NIM B, 2020, in review.
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef G4MICROELEINELASTIC_HH
#define G4MICROELEINELASTIC_HH 1
#include "G4VEmProcess.hh"
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4GenericIon.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4MicroElecInelastic_new : public G4VEmProcess
{
public:
G4MicroElecInelastic_new(const G4String& processName ="MicroElecIonisation",
G4ProcessType type = fElectromagnetic);
~G4MicroElecInelastic_new() override;
G4bool IsApplicable(const G4ParticleDefinition&) override;
void PrintInfo() override;
protected:
void InitialiseProcess(const G4ParticleDefinition*) override;
private:
G4bool isInitialised = false;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -0,0 +1,94 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// G4MicroElecLOPhononModel.hh,
// 2020/05/20 P. Caron, C. Inguimbert are with ONERA [b]
// Q. Gibaru is with CEA [a], ONERA [b] and CNES [c]
// M. Raine and D. Lambert are with CEA [a]
//
// A part of this work has been funded by the French space agency(CNES[c])
// [a] CEA, DAM, DIF - 91297 ARPAJON, France
// [b] ONERA - DPHY, 2 avenue E.Belin, 31055 Toulouse, France
// [c] CNES, 18 av.E.Belin, 31401 Toulouse CEDEX, France
//
// Based on the following publications
//
// - Q.Gibaru, C.Inguimbert, P.Caron, M.Raine, D.Lambert, J.Puech,
// Geant4 physics processes for microdosimetry and secondary electron emission simulation :
// Extension of MicroElec to very low energies and new materials
// NIM B, 2020, in review.
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef G4MICROELECLOPHONONMODEL_HH
#define G4MICROELECLOPHONONMODEL_HH 1
#include "G4Step.hh"
#include "G4VDiscreteProcess.hh"
#include "G4DynamicParticle.hh"
#include "G4Material.hh"
#include "G4VEmModel.hh"
#include "G4Electron.hh"
#include "G4TransportationManager.hh"
#include "G4ParticleChangeForGamma.hh"
class G4MicroElecLOPhononModel : public G4VEmModel
{
public:
G4MicroElecLOPhononModel(const G4ParticleDefinition*p = 0,
const G4String& nam = "G4MicroElecLOPhononModel");
~G4MicroElecLOPhononModel() override;
void Initialise(const G4ParticleDefinition*, const G4DataVector&) override;
G4double CrossSectionPerVolume(const G4Material* material,
const G4ParticleDefinition* p,
G4double ekin,
G4double emin,
G4double emax) override;
void SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy) override;
protected:
G4ParticleChangeForGamma* fParticleChangeForGamma;
private:
G4bool Interband;
G4MicroElecLOPhononModel & operator=(const G4MicroElecLOPhononModel &right);
G4MicroElecLOPhononModel(const G4MicroElecLOPhononModel&);
G4bool isOkToBeInitialised;
G4bool isInitialised;
G4bool abs = false;
G4double Eprim = 0, signe = -1,phononEnergy=0;
};
#endif
@@ -24,58 +24,53 @@
// ********************************************************************
//
//
// G4MuElecInelastic.hh, 2011/08/29 A.Valentin, M. Raine
// G4MicroElecLOPhononModel.hh,
// 2020/05/20 P. Caron, C. Inguimbert are with ONERA [b]
// Q. Gibaru is with CEA [a], ONERA [b] and CNES [c]
// M. Raine and D. Lambert are with CEA [a]
//
// A part of this work has been funded by the French space agency(CNES[c])
// [a] CEA, DAM, DIF - 91297 ARPAJON, France
// [b] ONERA - DPHY, 2 avenue E.Belin, 31055 Toulouse, France
// [c] CNES, 18 av.E.Belin, 31401 Toulouse CEDEX, France
//
// Based on the following publications
//
// - Inelastic cross-sections of low energy electrons in silicon
// for the simulation of heavy ion tracks with theGeant4-DNA toolkit,
// NSS Conf. Record 2010, pp. 80-85
// - Geant4 physics processes for microdosimetry simulation:
// very low energy electromagnetic models for electrons in Si,
// NIM B, vol. 288, pp. 66-73, 2012.
// - Geant4 physics processes for microdosimetry simulation:
// very low energy electromagnetic models for protons and
// heavy ions in Si, NIM B, vol. 287, pp. 124-129, 2012.
// - Q.Gibaru, C.Inguimbert, P.Caron, M.Raine, D.Lambert, J.Puech,
// Geant4 physics processes for microdosimetry and secondary electron emission simulation :
// Extension of MicroElec to very low energies and new materials
// NIM B, 2020, in review.
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef G4MuElecInelastic_h
#define G4MuElecInelastic_h 1
#ifndef G4MICROELECLOPHONONSCATTERING_HH
#define G4MICROELECLOPHONONSCATTERING_HH 1
#include "G4VEmProcess.hh"
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4GenericIon.hh"
// Available models
#include "G4MuElecInelasticModel.hh"
#include "G4MicroElecLOPhononModel.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4MuElecInelastic : public G4VEmProcess
class G4MicroElecLOPhononScattering : public G4VEmProcess
{
public:
G4MuElecInelastic(const G4String& processName ="MuElecIonisation",
G4ProcessType type = fElectromagnetic);
virtual ~G4MuElecInelastic();
virtual G4bool IsApplicable(const G4ParticleDefinition&);
public:
G4MicroElecLOPhononScattering(const G4String& processName = "LOPhononScattering",
G4ProcessType type = fElectromagnetic);
~G4MicroElecLOPhononScattering() override;
G4bool IsApplicable(const G4ParticleDefinition&) override;
void PrintInfo() override;
virtual void PrintInfo();
protected:
virtual void InitialiseProcess(const G4ParticleDefinition*);
void InitialiseProcess(const G4ParticleDefinition*) override;
private:
G4bool isInitialised;
G4bool isInitialised;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
#endif
@@ -1,73 +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. *
// ********************************************************************
//
//
// G4MicroElecSiStructure.hh, 2011/08/29 A.Valentin, M. Raine
//
// Based on the following publications
//
// - Inelastic cross-sections of low energy electrons in silicon
// for the simulation of heavy ion tracks with theGeant4-DNA toolkit,
// NSS Conf. Record 2010, pp. 80-85
// - Geant4 physics processes for microdosimetry simulation:
// very low energy electromagnetic models for electrons in Si,
// NIM B, vol. 288, pp. 66-73, 2012.
// - Geant4 physics processes for microdosimetry simulation:
// very low energy electromagnetic models for protons and
// heavy ions in Si, NIM B, vol. 287, pp. 124-129, 2012.
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef G4MICROELECSISTRUCTURE_HH
#define G4MICROELECSISTRUCTURE_HH 1
#include "globals.hh"
#include <vector>
class G4MicroElecSiStructure
{
public:
G4MicroElecSiStructure();
virtual ~G4MicroElecSiStructure();
G4double Energy(G4int level);
G4int NumberOfLevels() { return nLevels; }
private:
// Number of levels of silicon
G4int nLevels;
std::vector<G4double> energyConstant;
};
#endif
@@ -0,0 +1,143 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// G4MicroElecSurface.hh,
// 2020/05/20 P. Caron, C. Inguimbert are with ONERA [b]
// Q. Gibaru is with CEA [a], ONERA [b] and CNES [c]
// D. Lambert is with CEA [a]
//
// A part of this work has been funded by the French space agency(CNES[c])
// [a] CEA, DAM, DIF - 91297 ARPAJON, France
// [b] ONERA - DPHY, 2 avenue E.Belin, 31055 Toulouse, France
// [c] CNES, 18 av.E.Belin, 31401 Toulouse CEDEX, France
//
// Based on the following publications
//
// - Q.Gibaru, C.Inguimbert, P.Caron, M.Raine, D.Lambert, J.Puech,
// Geant4 physics processes for microdosimetry and secondary electron emission simulation :
// Extension of MicroElec to very low energies and new materials
// NIM B, 2020, in review.
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef G4MicroElecSurface_h
#define G4MicroElecSurface_h 1
/////////////
// Includes
/////////////
#include "globals.hh"
#include "templates.hh"
#include "geomdefs.hh"
#include "Randomize.hh"
#include "G4ProductionCutsTable.hh"
#include "G4RandomTools.hh"
#include "G4RandomDirection.hh"
#include "G4MicroElecMaterialStructure.hh"
#include "G4Step.hh"
#include "G4VDiscreteProcess.hh"
#include "G4DynamicParticle.hh"
#include "G4Material.hh"
#include "G4LogicalBorderSurface.hh"
#include "G4LogicalSkinSurface.hh"
#include "G4TransportationManager.hh"
// Class Description:
// Discrete Process -- reflection/refraction at interfaces for electrons.
// Class inherits publicly from G4VDiscreteProcess.
// Class Description - End:
/////////////////////
// Class Definition
/////////////////////
enum G4MicroElecSurfaceStatus { UndefinedSurf,
NotAtBoundarySurf,
SameMaterialSurf,
StepTooSmallSurf };
class G4MicroElecSurface : public G4VDiscreteProcess
{
public:
G4MicroElecSurface(const G4String& processName = "MicroElecSurface",
G4ProcessType type = fElectromagnetic);
~G4MicroElecSurface() override;
G4bool IsApplicable(const G4ParticleDefinition& aParticleType) override;
// Returns true -> 'is applicable' only for an electron.
void SetFlagFranchissement();
G4double GetMeanFreePath(const G4Track& ,
G4double ,
G4ForceCondition* condition) override;
// Returns infinity; i. e. the process does not limit the step,
// but sets the 'Forced' condition for the DoIt to be invoked at
// every step. However, only at a boundary will any action be
// taken.
G4VParticleChange* PostStepDoIt(const G4Track& aTrack,
const G4Step& aStep) override;
// This is the method implementing boundary processes.
void BuildPhysicsTable(const G4ParticleDefinition&) override;
// Initialisation
G4MicroElecSurfaceStatus GetStatus() const;
// Returns the current status.
G4MicroElecSurface(const G4MicroElecSurface &right) = delete;
G4MicroElecSurface& operator=(const G4MicroElecSurface &right) = delete;
private:
G4double GetIncidentAngle();
G4ThreeVector Reflexion(const G4StepPoint* PostStepPoint);
// private elements
typedef std::map<G4String, G4double, std::less<G4String> > WorkFunctionTable;
WorkFunctionTable tableWF; //Table of all materials simulated
G4double theParticleMomentum;
G4ThreeVector oldMomentum, previousMomentum;
G4ThreeVector theGlobalNormal;
G4ThreeVector theFacetNormal;
G4Material* material1;
G4Material* material2;
G4MicroElecSurfaceStatus theStatus;
G4double kCarTolerance;
G4double ekint, thetat, thetaft, energyThreshold, crossingProbability;
G4bool flag_franchissement_surface, flag_reflexion,flag_normal, teleportToDo, teleportDone, isInitialised;
};
#endif
@@ -1,153 +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. *
// ********************************************************************
//
//
// G4MuElecElasticModel.hh, 2011/08/29 A.Valentin, M. Raine
//
// Based on the following publications
// - Geant4 physics processes for microdosimetry simulation:
// very low energy electromagnetic models for electrons in Si,
// NIM B, vol. 288, pp. 66 - 73, 2012.
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef G4MuElecElasticModel_h
#define G4MuElecElasticModel_h 1
#include <map>
#include <CLHEP/Units/SystemOfUnits.h>
#include "G4MuElecCrossSectionDataSet.hh"
#include "G4VEmModel.hh"
#include "G4Electron.hh"
#include "G4ParticleChangeForGamma.hh"
#include "G4LogLogInterpolation.hh"
#include "G4ProductionCutsTable.hh"
#include "G4NistManager.hh"
class G4MuElecElasticModel : public G4VEmModel
{
public:
G4MuElecElasticModel(const G4ParticleDefinition* p = 0,
const G4String& nam = "MuElecElasticModel");
virtual ~G4MuElecElasticModel();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual G4double CrossSectionPerVolume(const G4Material* material,
const G4ParticleDefinition* p,
G4double ekin,
G4double emin,
G4double emax);
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy);
inline void SetKillBelowThreshold (G4double threshold);
G4double GetKillBelowThreshold () { return killBelowEnergy; }
protected:
G4ParticleChangeForGamma* fParticleChangeForGamma;
private:
G4Material* nistSi;
G4double killBelowEnergy;
G4double lowEnergyLimit;
G4double lowEnergyLimitOfModel;
G4double highEnergyLimit;
G4bool isInitialised;
G4int verboseLevel;
// Cross section
typedef std::map<G4String,G4String,std::less<G4String> > MapFile;
MapFile tableFile;
typedef std::map<G4String,G4MuElecCrossSectionDataSet*,std::less<G4String> > MapData;
MapData tableData;
// Final state
G4double Theta(G4ParticleDefinition * aParticleDefinition, G4double k, G4double integrDiff);
G4double LogLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2);
G4double LinLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2);
G4double QuadInterpolator(G4double e11,
G4double e12,
G4double e21,
G4double e22,
G4double x11,
G4double x12,
G4double x21,
G4double x22,
G4double t1,
G4double t2,
G4double t,
G4double e);
typedef std::map<double, std::map<double, double> > TriDimensionMap;
TriDimensionMap eDiffCrossSectionData;
std::vector<double> eTdummyVec;
typedef std::map<double, std::vector<double> > VecMap;
VecMap eVecm;
G4double RandomizeCosTheta(G4double k);
//
G4MuElecElasticModel & operator=(const G4MuElecElasticModel &right);
G4MuElecElasticModel(const G4MuElecElasticModel&);
};
inline void G4MuElecElasticModel::SetKillBelowThreshold (G4double threshold)
{
killBelowEnergy = threshold;
if (threshold < 5*CLHEP::eV)
{
G4Exception ("*** WARNING : the G4MuElecElasticModel class is not validated below 5 eV !","",JustWarning,"") ;
threshold = 0.025*CLHEP::eV;
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -1,162 +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. *
// ********************************************************************
//
//
// G4MuElecInelasticModel.hh, 2011/08/29 A.Valentin, M. Raine
//
// Based on the following publications
//
// - Inelastic cross-sections of low energy electrons in silicon
// for the simulation of heavy ion tracks with theGeant4-DNA toolkit,
// NSS Conf. Record 2010, pp. 80-85
// - Geant4 physics processes for microdosimetry simulation:
// very low energy electromagnetic models for electrons in Si,
// NIM B, vol. 288, pp. 66-73, 2012.
// - Geant4 physics processes for microdosimetry simulation:
// very low energy electromagnetic models for protons and
// heavy ions in Si, NIM B, vol. 287, pp. 124-129, 2012.
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef G4MuElecInelasticModel_h
#define G4MuElecInelasticModel_h 1
#include "globals.hh"
#include "G4VEmModel.hh"
#include "G4ParticleChangeForGamma.hh"
#include "G4ProductionCutsTable.hh"
#include "G4MuElecCrossSectionDataSet.hh"
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4GenericIon.hh"
#include "G4ParticleDefinition.hh"
#include "G4LogLogInterpolation.hh"
#include "G4MuElecSiStructure.hh"
#include "G4VAtomDeexcitation.hh"
#include "G4NistManager.hh"
class G4MuElecInelasticModel : public G4VEmModel
{
public:
G4MuElecInelasticModel(const G4ParticleDefinition* p = 0,
const G4String& nam = "MuElecInelasticModel");
virtual ~G4MuElecInelasticModel();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual G4double CrossSectionPerVolume( const G4Material* material,
const G4ParticleDefinition* p,
G4double ekin,
G4double emin,
G4double emax);
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy);
double DifferentialCrossSection(G4ParticleDefinition * aParticleDefinition, G4double k, G4double energyTransfer, G4int shell);
protected:
G4ParticleChangeForGamma* fParticleChangeForGamma;
private:
//deexcitation manager to produce fluo photns and e-
G4VAtomDeexcitation* fAtomDeexcitation;
G4Material* nistSi;
std::map<G4String,G4double,std::less<G4String> > lowEnergyLimit;
std::map<G4String,G4double,std::less<G4String> > highEnergyLimit;
G4bool isInitialised;
G4int verboseLevel;
// Cross section
typedef std::map<G4String,G4String,std::less<G4String> > MapFile;
MapFile tableFile;
typedef std::map<G4String,G4MuElecCrossSectionDataSet*,std::less<G4String> > MapData;
MapData tableData;
// Final state
G4MuElecSiStructure SiStructure;
G4double RandomizeEjectedElectronEnergy(G4ParticleDefinition * aParticleDefinition, G4double incomingParticleEnergy, G4int shell) ;
void RandomizeEjectedElectronDirection(G4ParticleDefinition * aParticleDefinition, G4double incomingParticleEnergy, G4double
outgoingParticleEnergy, G4double & cosTheta, G4double & phi );
G4double LogLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2);
G4double QuadInterpolator( G4double e11,
G4double e12,
G4double e21,
G4double e22,
G4double x11,
G4double x12,
G4double x21,
G4double x22,
G4double t1,
G4double t2,
G4double t,
G4double e);
typedef std::map<double, std::map<double, double> > TriDimensionMap;
TriDimensionMap eDiffCrossSectionData[7];
TriDimensionMap pDiffCrossSectionData[7];
std::vector<double> eTdummyVec;
std::vector<double> pTdummyVec;
typedef std::map<double, std::vector<double> > VecMap;
VecMap eVecm;
VecMap pVecm;
// Partial cross section
G4int RandomSelect(G4double energy,const G4String& particle );
//
G4MuElecInelasticModel & operator=(const G4MuElecInelasticModel &right);
G4MuElecInelasticModel(const G4MuElecInelasticModel&);
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -1,73 +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. *
// ********************************************************************
//
//
// G4MuElecSiStructure.hh, 2011/08/29 A.Valentin, M. Raine
//
// Based on the following publications
//
// - Inelastic cross-sections of low energy electrons in silicon
// for the simulation of heavy ion tracks with theGeant4-DNA toolkit,
// NSS Conf. Record 2010, pp. 80-85
// - Geant4 physics processes for microdosimetry simulation:
// very low energy electromagnetic models for electrons in Si,
// NIM B, vol. 288, pp. 66-73, 2012.
// - Geant4 physics processes for microdosimetry simulation:
// very low energy electromagnetic models for protons and
// heavy ions in Si, NIM B, vol. 287, pp. 124-129, 2012.
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef G4MUELECSISTRUCTURE_HH
#define G4MUELECSISTRUCTURE_HH 1
#include "globals.hh"
#include <vector>
class G4MuElecSiStructure
{
public:
G4MuElecSiStructure();
virtual ~G4MuElecSiStructure();
G4double Energy(G4int level);
G4int NumberOfLevels() { return nLevels; }
private:
// Number of levels of silicon
G4int nLevels;
std::vector<G4double> energyConstant;
};
#endif
@@ -0,0 +1,168 @@
//
// ********************************************************************
// * 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: G4PenelopeRayleighModelMI.hh 75573 2013-11-04 11:48:15Z gcosmo $
//
// Author: Luciano Pandola and Gianfranco Paternò
//
// -------------------------------------------------------------------
// History:
// 03 Dec 2009 L. Pandola 1st implementation
// 25 May 2011 L. Pandola Renamed (make v2008 as default Penelope)
// 27 Sep 2013 L. Pandola Migration to MT paradigm
// 20 Aug 2017 G. Paternò Molecular Interference implementation
// 24 Mar 2019 G. Paternò Improved Molecular Interference implementation
// 20 Jun 2020 G. Paternò Read qext separately and leave original atomic form factors
// 27 Aug 2020 G. Paternò Further improvement of MI implementation
//
// -------------------------------------------------------------------
// Class description:
// Low Energy Electromagnetic Physics, Rayleigh Scattering
// with the model from Penelope, version 2008
// extended for Molecular Interference Effects
// -------------------------------------------------------------------
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#ifndef G4PenelopeRayleighModelMI_HH
#define G4PenelopeRayleighModelMI_HH 1
#include "globals.hh"
#include "G4VEmModel.hh"
#include "G4DataVector.hh"
#include "G4ParticleChangeForGamma.hh"
#include "G4ExtendedMaterial.hh"
#include "G4MIData.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
class G4ParticleDefinition;
class G4DynamicParticle;
class G4MaterialCutsCouple;
class G4Material;
class G4PhysicsFreeVector;
class G4PenelopeSamplingData;
class G4PenelopeRayleighModelMI : public G4VEmModel
{
public:
G4PenelopeRayleighModelMI(const G4ParticleDefinition* p = nullptr,
const G4String& processName = "PenRayleighMI");
virtual ~G4PenelopeRayleighModelMI();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&) override;
virtual void InitialiseLocal(const G4ParticleDefinition*,
G4VEmModel *masterModel) override;
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
G4double kinEnergy,
G4double Z,
G4double A = 0,
G4double cut = 0,
G4double emax = DBL_MAX) override;
//Overriding of parent's (G4VEmModel) method
virtual G4double CrossSectionPerVolume(const G4Material*,
const G4ParticleDefinition*,
G4double kineticEnergy,
G4double cutEnergy = 0.,
G4double maxEnergy = DBL_MAX) override;
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy) override;
void SetVerbosityLevel(G4int lev) {verboseLevel = lev;};
G4int GetVerbosityLevel() {return verboseLevel;};
//Testing purposes
void DumpFormFactorTable(const G4Material*);
//Settings
void SetMIActive(G4bool val){fIsMIActive = val;};
G4bool IsMIActive(){return fIsMIActive;};
private:
G4PenelopeRayleighModelMI& operator=(const G4PenelopeRayleighModelMI &right);
G4PenelopeRayleighModelMI(const G4PenelopeRayleighModelMI&);
void SetParticle(const G4ParticleDefinition*);
//Helper methods
void ReadDataFile(G4int);
void ClearTables();
void BuildFormFactorTable(const G4Material*);
void GetPMaxTable(const G4Material*);
G4double GetFSquared(const G4Material*,const G4double);
void InitializeSamplingAlgorithm(const G4Material*);
void ReadMolInterferenceData(const G4String&,const G4String& filename="NULL");
G4MIData* GetMIData(const G4Material*);
void CalculateThetaAndAngFun();
G4double CalculateQSquared(G4double angle, G4double energy);
G4double IntegrateFun(G4double y[], G4int n, G4double dTheta);
void LoadKnownMIFFMaterials();
/// Data members
G4ParticleChangeForGamma* fParticleChange;
const G4ParticleDefinition* fParticle;
//Intrinsic energy limits of the model: cannot be extended by the parent process
G4double fIntrinsicLowEnergyLimit;
G4double fIntrinsicHighEnergyLimit;
G4int verboseLevel;
G4bool isInitialised;
//Internal tables and manager methods
std::map<G4int,G4PhysicsFreeVector*> *logAtomicCrossSection;
std::map<G4int,G4PhysicsFreeVector*> *atomicFormFactor;
std::map<G4String,G4PhysicsFreeVector*> *MolInterferenceData; //G. Paternò
G4DataVector logQSquareGrid; //log(Q^2) grid for interpolation
std::map<const G4Material*,G4PhysicsFreeVector*> *logFormFactorTable; //log(Q^2) vs. log(F^2)
G4DataVector logEnergyGridPMax; //energy grid for PMax (and originally for the x-section)
std::map<const G4Material*,G4PhysicsFreeVector*> *pMaxTable; //E vs. Pmax
std::map<const G4Material*,G4PenelopeSamplingData*> *samplingTable;
//Used only for G4EmCalculator and Unit Tests
G4bool fLocalTable;
static const G4int Ntheta = 31415;
G4double fDTheta = {0.0001};
G4bool fIsMIActive;
G4PhysicsFreeVector* angularFunction;
std::map<G4String,G4String> *fKnownMaterials;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -98,7 +98,7 @@ private:
G4double zParticle) const;
// returns the energy loss via the quantal harmonic oscillator model
// get number of shell, energy and oscillator strenghts for material
// get number of shell, energy and oscillator strengths for material
G4int GetNumberOfShell(const G4Material* material) const;
G4double GetShellEnergy(const G4Material* material,G4int nbOfTheShell) const;
@@ -117,7 +117,7 @@ private:
// Z of element at now avaliable for the model
static const G4int materialAvailable[6];
// number, energy and oscillator strenghts
// number, energy and oscillator strengths
// for an harmonic oscillator model of material
static const G4int nbofShellForMaterial[6];
static const G4double alShellEnergy[3];
View File
View File