Import Geant4 10.7.0 source tree
This commit is contained in:
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
Executable → Regular
+36
-35
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+42
-67
@@ -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
|
||||
Executable → Regular
+31
-36
@@ -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];
|
||||
|
||||
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Reference in New Issue
Block a user