Import Geant4 10.0.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-10 11:51:14 +02:00
parent e2d2f9810a
commit 286caacf06
12421 changed files with 730077 additions and 502383 deletions
@@ -25,7 +25,6 @@
//
//
// $Id: G4AtomicTransitionManager.hh,v 1.2 ????
// GEANT4 tag $Name: not supported by cvs2svn $
//
// Authors: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
// Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
@@ -119,7 +118,7 @@ private:
G4AtomicTransitionManager& operator=(const G4AtomicTransitionManager& right);
G4AtomicTransitionManager(const G4AtomicTransitionManager&);
static G4AtomicTransitionManager* instance;
static G4ThreadLocal G4AtomicTransitionManager* instance;
// the first element of the map is the atomic number Z.
// the second element is a vector of G4AtomicShell*.
@@ -24,7 +24,6 @@
// ********************************************************************
//
// $Id: G4AugerData.hh
// GEANT4 tag $Name: not supported by cvs2svn $
//
// Author: Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
//
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4BoldyshevTripletModel.hh 66241 2012-12-13 18:34:42Z gunter $
// GEANT4 tag $Name: geant4-09-03-patch-01 $
//
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4BremsstrahlungParameters.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
// V. Ivanchenko (Vladimir.Ivantchenko@cern.ch)
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4CompositeEMDataSet.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4CrossSectionDataSet.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Riccardo Capra <capra@ge.infn.it>
//
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4CrossSectionHandler.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4DopplerProfile.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4EMDataSet.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -25,7 +25,6 @@
//
//
// $Id: G4FluoTransition.hh,v 1.2 ????
// GEANT4 tag $Name: not supported by cvs2svn $
//
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
//
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4Generator2BN.hh 68038 2013-03-13 14:16:11Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4Generator2BS.hh 66241 2012-12-13 18:34:42Z gunter $
//
// -------------------------------------------------------------------
//
@@ -109,8 +109,10 @@ class G4IonDEDXScalingICRU73 : public G4VIonDEDXScalingAlgorithm {
G4int minAtomicNumber;
G4int maxAtomicNumber;
G4bool referencePrepared;
// Some properties of reference particle (Fe) are stored for faster access
G4ParticleDefinition* referenceFe;
///////////////////////////G4ParticleDefinition* referenceFe;
G4int atomicNumberRefFe;
G4int massNumberRefFe;
G4double atomicNumberRefPow23Fe;
@@ -118,7 +120,7 @@ class G4IonDEDXScalingICRU73 : public G4VIonDEDXScalingAlgorithm {
G4double massRefFe;
// Some properties of reference particle (Ar) are stored for faster access
G4ParticleDefinition* referenceAr;
///////////////////////////G4ParticleDefinition* referenceAr;
G4int atomicNumberRefAr;
G4int massNumberRefAr;
G4double atomicNumberRefPow23Ar;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4IonParametrisedLossModel.hh 66241 2012-12-13 18:34:42Z gunter $
//
// ===========================================================================
// GEANT4 class header file
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4IonParametrisedLossModel.icc 66241 2012-12-13 18:34:42Z gunter $
//
// ===========================================================================
// GEANT4 class
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4LinInterpolation.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -23,103 +23,92 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
//
// Author: Luciano Pandola
// on base of G4LowEnergyBremsstrahlung developed by A.Forti and V.Ivanchenko
//
// History:
// -----------
// 03 Mar 2009 L. Pandola 1st implementation. Migration from EM process
// to EM model. Physics is unchanged.
// $Id: G4LivermoreBremsstrahlungModel.hh 74822 2013-10-22 14:42:13Z gcosmo $
//
// -------------------------------------------------------------------
//
// Class description:
// Low Energy Electromagnetic Physics, e- bremsstrahlung
// with Livermore Model
// GEANT4 Class header file
//
//
// File name: G4LivermoreBremsstrahlungModel
//
// Author: Andreas Schaelicke & Vladimir Ivantchenko
//
// Creation date: 04.10.2011
//
// Modifications:
//
//
// Class Description:
//
// Implementation of the bremssrahlung energy spectrum using
// 1. S.M. Seltzer and M.J. Berger Nucl. Instr. Meth. B12 (1985) 95
// 2. S.M. Seltzer and M.J. Berger Atomic data and Nuclear Data
// Tables 35 (1986) 345
// Cross section computation in the base class G4eBremsstrahlungRelModel
// -------------------------------------------------------------------
//
#ifndef G4LIVERMOREBREMSSTRAHLUNGMODEL_HH
#define G4LIVERMOREBREMSSTRAHLUNGMODEL_HH 1
#ifndef G4LivermoreBremsstrahlungModel_h
#define G4LivermoreBremsstrahlungModel_h 1
#include "G4eBremsstrahlungRelModel.hh"
#include "globals.hh"
#include "G4VEmModel.hh"
#include "G4ParticleChangeForLoss.hh"
class G4ParticleDefinition;
class G4MaterialCutsCouple;
class G4Material;
//class G4VBremAngularDistribution;
class G4BremsstrahlungCrossSectionHandler;
class G4VEnergySpectrum;
class G4Physics2DVector;
class G4LivermoreBremsstrahlungModel : public G4VEmModel
class G4LivermoreBremsstrahlungModel : public G4eBremsstrahlungRelModel
{
public:
G4LivermoreBremsstrahlungModel(const G4ParticleDefinition* p=0,
const G4String& processName = "LowEnBrem");
G4LivermoreBremsstrahlungModel(const G4ParticleDefinition* p = 0,
const G4String& nam = "LowEnBrem");
virtual ~G4LivermoreBremsstrahlungModel();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
G4double kinEnergy,
G4double Z,
G4double A=0,
G4double cut=0,
G4double emax=DBL_MAX);
virtual void InitialiseForElement(const G4ParticleDefinition*, G4int Z);
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
G4double cutEnergy,
G4double maxEnergy);
virtual G4double ComputeDEDXPerVolume(const G4Material*,
const G4ParticleDefinition*,
G4double kineticEnergy,
G4double cutEnergy);
// min cut in kinetic energy allowed by the model
virtual G4double MinEnergyCut(const G4ParticleDefinition*,
const G4MaterialCutsCouple*);
void SetVerboseLevel(G4int vl) {verboseLevel = vl;};
/*
void SetAngularGenerator(G4VBremAngularDistribution* distribution);
void SetAngularGenerator(const G4String& name);
*/
inline void SetBicubicInterpolationFlag(G4bool);
protected:
G4ParticleChangeForLoss* fParticleChange;
virtual G4double ComputeDXSectionPerAtom(G4double gammaEnergy);
virtual G4String DirectoryPath() const;
private:
G4LivermoreBremsstrahlungModel & operator=(const G4LivermoreBremsstrahlungModel &right);
G4LivermoreBremsstrahlungModel(const G4LivermoreBremsstrahlungModel&);
void ReadData(G4int Z, const char* path = 0);
//Intrinsic energy limits of the model: cannot be extended by the parent process
G4double fIntrinsicLowEnergyLimit;
G4double fIntrinsicHighEnergyLimit;
G4int fNBinEnergyLoss;
// hide assignment operator
G4LivermoreBremsstrahlungModel & operator=(const G4LivermoreBremsstrahlungModel &right);
G4LivermoreBremsstrahlungModel(const G4LivermoreBremsstrahlungModel&);
G4bool isInitialised;
G4int verboseLevel;
G4BremsstrahlungCrossSectionHandler* crossSectionHandler;
G4VEnergySpectrum* energySpectrum;
G4DataVector energyBins;
//G4VBremAngularDistribution* angularDistribution;
// G4VBremAngularDistribution* TsaiAngularDistribution;
//G4String generatorName;
static G4Physics2DVector* dataSB[101];
static G4double ylimit[101];
static G4double expnumlim;
G4int nwarn;
size_t idx;
size_t idy;
G4bool useBicubicInterpolation;
};
#endif
inline void G4LivermoreBremsstrahlungModel::SetBicubicInterpolationFlag(G4bool val)
{
useBicubicInterpolation = val;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -23,31 +23,30 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4LivermoreComptonModel.hh 76220 2013-11-08 10:15:00Z gcosmo $
// GEANT4 tag $Name: not supported by cvs2svn $
//
// Author: Sebastien Incerti
// 30 October 2008
// on base of G4LowEnergyCompton developed by A.Forti and M.G.Pia
//
// Modified:
// Author: Alexander Bagulya
// 11 March 2012
// on the base of G4LivermoreComptonModel
//
// History:
// --------
// 30 May 2011 V Ivanchenko Migration to model design for deexcitation
#ifndef G4LivermoreComptonModel_h
#define G4LivermoreComptonModel_h 1
#include "G4VEmModel.hh"
#include "G4ShellData.hh"
#include "G4DopplerProfile.hh"
#include "G4LPhysicsFreeVector.hh"
class G4ParticleChangeForGamma;
class G4VCrossSectionHandler;
class G4VAtomDeexcitation;
class G4VEMDataSet;
class G4ShellData;
class G4DopplerProfile;
class G4LivermoreComptonModel : public G4VEmModel
{
public:
G4LivermoreComptonModel(const G4ParticleDefinition* p = 0,
@@ -57,6 +56,11 @@ public:
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual void InitialiseLocal(const G4ParticleDefinition*,
G4VEmModel* masterModel);
virtual void InitialiseForElement(const G4ParticleDefinition*, G4int Z);
virtual G4double ComputeCrossSectionPerAtom( const G4ParticleDefinition*,
G4double kinEnergy,
G4double Z,
@@ -70,28 +74,31 @@ public:
G4double tmin,
G4double maxEnergy);
protected:
G4ParticleChangeForGamma* fParticleChange;
private:
G4double lowEnergyLimit;
G4double highEnergyLimit;
G4bool isInitialised;
G4int verboseLevel;
G4VEMDataSet* scatterFunctionData;
G4VCrossSectionHandler* crossSectionHandler;
void ReadData(size_t Z, const char* path = 0);
G4VAtomDeexcitation* fAtomDeexcitation;
G4ShellData shellData;
G4DopplerProfile profileData;
G4double ComputeScatteringFunction(G4double x, G4int Z);
G4LivermoreComptonModel & operator=(const G4LivermoreComptonModel &right);
G4LivermoreComptonModel(const G4LivermoreComptonModel&);
G4bool isInitialised;
G4int verboseLevel;
G4double lowestEnergy;
G4ParticleChangeForGamma* fParticleChange;
G4VAtomDeexcitation* fAtomDeexcitation;
static G4ShellData* shellData;
static G4DopplerProfile* profileData;
static G4int maxZ;
static G4LPhysicsFreeVector* data[100];
static const G4double ScatFuncFitParam[101][9];
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4LivermoreComptonModifiedModel.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Sebastien Incerti
// 30 October 2008
@@ -25,7 +25,8 @@
//
// Author: Sebastien Incerti
// 22 January 2012
// on base of G4LivermoreGammaConversionModel
// on base of G4LivermoreGammaConversionModel (original version)
// and G4LivermoreRayleighModel (MT version)
#ifndef G4LivermoreGammaConversionModel_h
#define G4LivermoreGammaConversionModel_h 1
@@ -43,11 +44,19 @@ class G4LivermoreGammaConversionModel : public G4VEmModel
public:
G4LivermoreGammaConversionModel(const G4ParticleDefinition* p = 0,
const G4String& nam = "LivermoreConversion");
const G4String& nam = "LivermoreConversion");
virtual ~G4LivermoreGammaConversionModel();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual void Initialise(const G4ParticleDefinition*,
const G4DataVector&);
//MT
virtual void InitialiseLocal(const G4ParticleDefinition*,
G4VEmModel* masterModel);
virtual void InitialiseForElement(const G4ParticleDefinition*, G4int Z);
//END MT
virtual G4double ComputeCrossSectionPerAtom(
const G4ParticleDefinition*,
@@ -60,8 +69,12 @@ public:
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy);
G4double tmin,
G4double maxEnergy);
virtual G4double MinPrimaryEnergy(const G4Material*,
const G4ParticleDefinition*,
G4double);
private:
@@ -73,17 +86,21 @@ private:
G4LivermoreGammaConversionModel & operator=(const G4LivermoreGammaConversionModel &right);
G4LivermoreGammaConversionModel(const G4LivermoreGammaConversionModel&);
G4double smallEnergy;
G4bool isInitialised;
G4int maxZ;
G4int verboseLevel;
G4double lowEnergyLimit;
G4int verboseLevel;
G4double smallEnergy;
//MT
static G4int maxZ;
static G4LPhysicsFreeVector* data[100]; // 100 because Z range is 1-99
// in LivermoreRayleighModel, 101
// because Z range is 1-100
//END MT
G4ParticleChangeForGamma* fParticleChange;
std::vector<G4LPhysicsFreeVector*> data;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4LivermoreGammaConversionModelRC.hh 74822 2013-10-22 14:42:13Z gcosmo $
//
// Author: Francesco Longo & Gerardo Depaola
// on base of G4LivermoreGammaConversionModel
@@ -91,6 +91,9 @@ private:
G4LivermoreGammaConversionModelRC & operator=(const G4LivermoreGammaConversionModelRC &right);
G4LivermoreGammaConversionModelRC(const G4LivermoreGammaConversionModelRC&);
G4double fbeta (G4double x);
G4double Dilog (G4double x);
};
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4LivermoreIonisationCrossSection.hh 66241 2012-12-13 18:34:42Z gunter $
//
//
// Author: Vladimir Ivanchenko
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4LivermoreIonisationModel.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Luciano Pandola
// on base of G4LowEnergyIonisation developed by A.Forti and V.Ivanchenko
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4LivermoreNuclearGammaConversionModel.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Authors: G.Depaola & F.Longo
//
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4LivermorePhotoElectricModel.hh 72941 2013-08-14 13:32:37Z gcosmo $
//
// Author: Sebastien Incerti
// 30 October 2008
@@ -72,8 +72,10 @@ public:
G4double tmin,
G4double maxEnergy);
inline void SetLimitNumberOfShells(G4int);
virtual void InitialiseForElement(const G4ParticleDefinition*, G4int Z);
inline void SetLimitNumberOfShells(G4int);
protected:
@@ -83,8 +85,8 @@ private:
void ReadData(G4int Z, const char* path = 0);
G4LivermorePhotoElectricModel & operator=(const G4LivermorePhotoElectricModel &right);
G4LivermorePhotoElectricModel(const G4LivermorePhotoElectricModel&);
G4LivermorePhotoElectricModel & operator=(const G4LivermorePhotoElectricModel &right);
G4LivermorePhotoElectricModel(const G4LivermorePhotoElectricModel&);
G4ParticleDefinition* theGamma;
G4ParticleDefinition* theElectron;
@@ -95,12 +97,12 @@ private:
G4bool fDeexcitationActive;
G4bool isInitialised;
G4LPhysicsFreeVector* fCrossSection[99];
G4LPhysicsFreeVector* fCrossSectionLE[99];
std::vector<G4double> fParam[99];
G4int fNShells[99];
G4int fNShellsUsed[99];
G4ElementData fShellCrossSection;
static G4LPhysicsFreeVector* fCrossSection[99];
static G4LPhysicsFreeVector* fCrossSectionLE[99];
static std::vector<G4double>* fParam[99];
static G4int fNShells[99];
static G4int fNShellsUsed[99];
static G4ElementData* fShellCrossSection;
G4VAtomDeexcitation* fAtomDeexcitation;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4LivermorePolarizedComptonModel.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Authors: G.Depaola & F.Longo
//
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4LivermorePolarizedGammaConversionModel.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Authors: G.Depaola & F.Longo
//
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4LivermorePolarizedPhotoElectricModel.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Authors: G.Depaola & F.Longo
//
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4LivermorePolarizedRayleighModel.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Sebastien Incerti
// 30 October 2008
@@ -47,6 +47,11 @@ public:
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual void InitialiseLocal(const G4ParticleDefinition*,
G4VEmModel* masterModel);
virtual void InitialiseForElement(const G4ParticleDefinition*, G4int Z);
virtual G4double ComputeCrossSectionPerAtom(
const G4ParticleDefinition*,
G4double kinEnergy,
@@ -71,12 +76,12 @@ private:
G4LivermoreRayleighModel(const G4LivermoreRayleighModel&);
G4bool isInitialised;
G4int maxZ;
G4int verboseLevel;
G4double lowEnergyLimit;
std::vector<G4LPhysicsFreeVector*> dataCS;
static G4int maxZ;
static G4LPhysicsFreeVector* dataCS[101];
G4ParticleChangeForGamma* fParticleChange;
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4LogLogInterpolation.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -0,0 +1,116 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// MR - 04/04/2012
// Based on G4DNACrossSectionDataSet
//
#ifndef G4MICROELECCROSSSECTIONDATASET_HH
#define G4MICROELECCROSSSECTIONDATASET_HH 1
#include <CLHEP/Units/SystemOfUnits.h>
#include "G4ShellEMDataSet.hh"
class G4MicroElecCrossSectionDataSet : public G4VEMDataSet
{
public:
G4MicroElecCrossSectionDataSet(G4VDataSetAlgorithm* algo,
G4double xUnit=CLHEP::MeV,
G4double dataUnit=CLHEP::barn);
virtual ~G4MicroElecCrossSectionDataSet();
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();
private:
G4String FullFileName(const G4String & argFileName) const;
// Hide copy constructor and assignment operator
G4MicroElecCrossSectionDataSet();
G4MicroElecCrossSectionDataSet(const G4MicroElecCrossSectionDataSet & copy);
G4MicroElecCrossSectionDataSet& operator=(const G4MicroElecCrossSectionDataSet & 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);
};
#endif /* G4MicroElecCrossSectionDataSet_HH */
@@ -24,53 +24,49 @@
// ********************************************************************
//
//
// -------------------------------------------------------------------
// G4MicroElecElastic.hh, 2011/08/29 A.Valentin, M. Raine
//
// GEANT4 Class file
// 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.
//
//
// File name: G4hZiegler1977Nuclear
//
// Author: V.Ivanchenko (Vladimir.Ivanchenko@cern.ch)
//
// Creation date: 20 July 2000
//
// Modifications:
// 20/07/2000 V.Ivanchenko First implementation
//
// Class Description:
//
// Nuclear stopping power parametrised according to
// J.F.Ziegler, Helium Stopping Powers and
// Ranges in All Elemental Matter, Vol.4, Pergamon Press, 1977
// Further documentation available from http://www.ge.infn.it/geant4/lowE
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
// -------------------------------------------------------------------
//
#ifndef G4MicroElecElastic_h
#define G4MicroElecElastic_h 1
#ifndef G4hZiegler1977Nuclear_h
#define G4hZiegler1977Nuclear_h 1
#include "G4VEmProcess.hh"
#include "G4Electron.hh"
#include "globals.hh"
#include "G4VhNuclearStoppingPower.hh"
// Available models
#include "G4MicroElecElasticModel.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4MicroElecElastic : public G4VEmProcess
class G4hZiegler1977Nuclear : public G4VhNuclearStoppingPower
{
public:
public:
G4MicroElecElastic(const G4String& processName ="MicroElecElastic",
G4ProcessType type = fElectromagnetic);
G4hZiegler1977Nuclear();
virtual ~G4MicroElecElastic();
~G4hZiegler1977Nuclear();
virtual G4bool IsApplicable(const G4ParticleDefinition&);
virtual void PrintInfo();
G4double NuclearStoppingPower(G4double kineticEnergy,
G4double z1, G4double z2,
G4double m1, G4double m2) const;
protected:
private:
virtual void InitialiseProcess(const G4ParticleDefinition*);
private:
G4bool isInitialised;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -0,0 +1,153 @@
//
// ********************************************************************
// * 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.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 G4MicroElecElasticModel_h
#define G4MicroElecElasticModel_h 1
#include <map>
#include <CLHEP/Units/SystemOfUnits.h>
#include "G4MicroElecCrossSectionDataSet.hh"
#include "G4VEmModel.hh"
#include "G4Electron.hh"
#include "G4ParticleChangeForGamma.hh"
#include "G4LogLogInterpolation.hh"
#include "G4ProductionCutsTable.hh"
#include "G4NistManager.hh"
class G4MicroElecElasticModel : public G4VEmModel
{
public:
G4MicroElecElasticModel(const G4ParticleDefinition* p = 0,
const G4String& nam = "MicroElecElasticModel");
virtual ~G4MicroElecElasticModel();
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,G4MicroElecCrossSectionDataSet*,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);
//
G4MicroElecElasticModel & operator=(const G4MicroElecElasticModel &right);
G4MicroElecElasticModel(const G4MicroElecElasticModel&);
};
inline void G4MicroElecElasticModel::SetKillBelowThreshold (G4double threshold)
{
killBelowEnergy = threshold;
if (threshold < 5*CLHEP::eV)
{
G4Exception ("*** WARNING : the G4MicroElecElasticModel class is not validated below 5 eV !","",JustWarning,"") ;
threshold = 0.025*CLHEP::eV;
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -24,62 +24,58 @@
// ********************************************************************
//
//
// -------------------------------------------------------------------
// G4MicroElecInelastic.hh, 2011/08/29 A.Valentin, M. Raine
//
// GEANT4 Class file
// 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.
//
// File name: G4hZiegler1977He
//
// Author: V.Ivanchenko (Vladimir.Ivanchenko@cern.ch)
//
// Creation date: 20 July 2000
//
// Modifications:
// 20/07/2000 V.Ivanchenko First implementation
//
// Class Description:
//
// Electronic stopping power parameterised according to
// J.F.Ziegler, Helium Stopping Powers and
// Ranges in All Elemental Matter, Vol.4, Pergamon Press, 1977
// Further documentation available from http://www.ge.infn.it/geant4/lowE/
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
// -------------------------------------------------------------------
//
#ifndef G4MicroElecInelastic_h
#define G4MicroElecInelastic_h 1
#ifndef G4hZiegler1977He_h
#define G4hZiegler1977He_h 1
#include "G4VEmProcess.hh"
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4GenericIon.hh"
#include "globals.hh"
#include "G4VhElectronicStoppingPower.hh"
// Available models
#include "G4MicroElecInelasticModel.hh"
class G4Material;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4MicroElecInelastic : public G4VEmProcess
class G4hZiegler1977He : public G4VhElectronicStoppingPower
{
public:
public:
G4MicroElecInelastic(const G4String& processName ="MicroElecIonisation",
G4ProcessType type = fElectromagnetic);
G4hZiegler1977He() ;
virtual ~G4MicroElecInelastic();
~G4hZiegler1977He() ;
virtual G4bool IsApplicable(const G4ParticleDefinition&);
virtual void PrintInfo();
G4bool HasMaterial(const G4Material* material);
G4double StoppingPower(const G4Material* material,
G4double kineticEnergy);
G4double ElectronicStoppingPower(G4double z,
G4double kineticEnergy) const;
protected:
private:
G4double rateMass; // HeMassAMU/ProtonMassAMU
virtual void InitialiseProcess(const G4ParticleDefinition*);
private:
G4bool isInitialised;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -0,0 +1,162 @@
//
// ********************************************************************
// * 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.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 G4MicroElecInelasticModel_h
#define G4MicroElecInelasticModel_h 1
#include "globals.hh"
#include "G4VEmModel.hh"
#include "G4ParticleChangeForGamma.hh"
#include "G4ProductionCutsTable.hh"
#include "G4MicroElecCrossSectionDataSet.hh"
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4GenericIon.hh"
#include "G4ParticleDefinition.hh"
#include "G4LogLogInterpolation.hh"
#include "G4MicroElecSiStructure.hh"
#include "G4VAtomDeexcitation.hh"
#include "G4NistManager.hh"
class G4MicroElecInelasticModel : public G4VEmModel
{
public:
G4MicroElecInelasticModel(const G4ParticleDefinition* p = 0,
const G4String& nam = "MicroElecInelasticModel");
virtual ~G4MicroElecInelasticModel();
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,G4MicroElecCrossSectionDataSet*,std::less<G4String> > MapData;
MapData tableData;
// Final state
G4MicroElecSiStructure 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 );
//
G4MicroElecInelasticModel & operator=(const G4MicroElecInelasticModel &right);
G4MicroElecInelasticModel(const G4MicroElecInelasticModel&);
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -24,58 +24,50 @@
// ********************************************************************
//
//
// $Id$
// G4MicroElecSiStructure.hh, 2011/08/29 A.Valentin, M. Raine
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
// Based on the following publications
//
// History:
// -----------
// 5 Oct 2001 MGP Created
// 21 Jan 2003 VI Cuts per region
// - 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.
//
// -------------------------------------------------------------------
// Class description:
// Class for a strategy pattern encapsulating algorithms to test the range
// of a perticle: test range against cut and safety
// Further documentation available from http://www.ge.infn.it/geant4/lowE/index.html
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
// -------------------------------------------------------------------
#ifndef G4RANGETEST_HH
#define G4RANGETEST_HH 1
#ifndef G4MICROELECSISTRUCTURE_HH
#define G4MICROELECSISTRUCTURE_HH 1
#include "globals.hh"
#include "G4VRangeTest.hh"
class G4ParticleDefinition;
class G4Material;
class G4RangeTest : public G4VRangeTest {
#include <vector>
class G4MicroElecSiStructure
{
public:
G4MicroElecSiStructure();
virtual ~G4MicroElecSiStructure();
G4double Energy(G4int level);
G4RangeTest() { }
virtual ~G4RangeTest();
virtual G4bool Escape(const G4ParticleDefinition* particle,
const G4MaterialCutsCouple* couple,
G4double energy,
G4double safety) const;
G4int NumberOfLevels() { return nLevels; }
private:
// Number of levels of silicon
G4int nLevels;
std::vector<G4double> energyConstant;
};
#endif
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4PenelopeAnnihilationModel.hh 74452 2013-10-07 15:08:00Z gcosmo $
//
// Author: Luciano Pandola
//
@@ -31,6 +31,7 @@
// -----------
// 29 Oct 2008 L. Pandola 1st implementation. Migration from EM process
// to EM model
// 02 Oct 2013 L. Pandola Migration to MT paradigm
//
// -------------------------------------------------------------------
//
@@ -62,6 +63,8 @@ public:
virtual ~G4PenelopeAnnihilationModel();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual void InitialiseLocal(const G4ParticleDefinition*,
G4VEmModel* );
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
G4double kinEnergy,
@@ -75,12 +78,13 @@ public:
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy);
void SetVerbosityLevel(G4int lev){verboseLevel = lev;};
G4int GetVerbosityLevel(){return verboseLevel;};
protected:
G4ParticleChangeForGamma* fParticleChange;
const G4ParticleDefinition* fParticle;
private:
G4double ComputeCrossSectionPerElectron(G4double energy);
@@ -88,6 +92,8 @@ private:
G4PenelopeAnnihilationModel & operator=(const G4PenelopeAnnihilationModel &right);
G4PenelopeAnnihilationModel(const G4PenelopeAnnihilationModel&);
void SetParticle(const G4ParticleDefinition*);
G4int verboseLevel;
G4bool isInitialised;
@@ -95,7 +101,7 @@ private:
G4double fIntrinsicHighEnergyLimit;
//Stored here so it is not recalculated every time
G4double fPielr2;
static G4double fPielr2;
};
#endif
@@ -25,7 +25,7 @@
//
//
// -------------------------------------------------------------------
// $Id$
// $Id: G4PenelopeBremsstrahlungAngular.hh 74452 2013-10-07 15:08:00Z gcosmo $
//
// Author: L.Pandola
//
@@ -36,6 +36,7 @@
// 13 Mar 2012 L. Pandola Made a derived class of G4VEmAngularDistribution
// and update the interface accordingly
// 18 Jul 2012 L. Pandola Migrate to the new interface of G4VEmAngularDistribution
// 03 Oct 2013 L. Pandola Migration to MT
//
// Class description:
// Calculation of angular distribution for Penelope Bremsstrahlung
@@ -59,8 +60,6 @@ public:
G4PenelopeBremsstrahlungAngular();
~G4PenelopeBremsstrahlungAngular();
//! The Initialize() method forces the cleaning of tables
void Initialize();
//! Old interface, backwards compatibility. Will not work in this case
//! it will produce a G4Exception().
@@ -69,7 +68,6 @@ public:
const G4int Z);
//! Samples the direction of the outgoing photon (in global coordinates).
//! Forces the calculation of tables, if they are not available
G4ThreeVector& SampleDirection(const G4DynamicParticle* dp,
G4double out_energy,
G4int Z,
@@ -79,11 +77,20 @@ public:
void SetVerbosityLevel(G4int vl){verbosityLevel = vl;};
G4int GetVerbosityLevel(){return verbosityLevel;};
private:
void PrepareInterpolationTables(G4double Zeq);
void ClearTables();
//! Reserved for Master Model
//! The Initialize() method forces the cleaning of tables
void Initialize();
//! Reserved for Master Model
void PrepareTables(const G4Material* material,
G4bool isMaster);
G4double GetEffectiveZ(const G4Material* material);
private:
void ClearTables();
G4double CalculateEffectiveZ(const G4Material* material);
std::map<const G4Material*,G4double> *theEffectiveZSq;
//Tables containing the Lorentz sampling coefficients
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4PenelopeBremsstrahlungFS.hh 75573 2013-11-04 11:48:15Z gcosmo $
//
// Author: Luciano Pandola
//
@@ -32,6 +32,11 @@
// 20 Oct 2010 L. Pandola 1st implementation.
// 02 May 2011 L. Pandola Remove dependency on CLHEP::HepMatrix
// 24 May 2011 L. Pandola Renamed (make default Penelope)
// 03 Oct 2013 L. Pandola Migration to MT
// 07 Oct 2013 L. Pandola Add verbosity and ismaster flag for the
// master-only methods
// 30 Oct 2013 L. Pandola Add a G4Cache of temporary vectors as
// private member.
//
// -------------------------------------------------------------------
//
@@ -45,6 +50,7 @@
#include "globals.hh"
#include "G4DataVector.hh"
#include "G4Cache.hh"
#include <map>
class G4PhysicsFreeVector;
@@ -55,21 +61,30 @@ class G4PhysicsTable;
class G4PenelopeBremsstrahlungFS
{
public:
G4PenelopeBremsstrahlungFS();
//! Only master models are supposed to create instances
G4PenelopeBremsstrahlungFS(G4int verbosity=0);
~G4PenelopeBremsstrahlungFS();
G4double GetEffectiveZSquared(const G4Material* mat);
void ClearTables();
size_t GetNBinsX(){return nBinsX;};
//utilities
//!
//! Master and workers (do not touch tables)
//! All of them are const
//!
G4double GetEffectiveZSquared(const G4Material* mat) const;
size_t GetNBinsX() const {return nBinsX;};
G4double GetMomentumIntegral(G4double* y,
G4double up,G4int momOrder);
G4double up,G4int momOrder) const;
const G4PhysicsTable* GetScaledXSTable(const G4Material*,
const G4double cut) const;
G4double SampleGammaEnergy(G4double energy,
const G4Material*, const G4double cut) const;
G4PhysicsTable* GetScaledXSTable(const G4Material*,G4double cut);
G4double SampleGammaEnergy(G4double energy,const G4Material*, G4double cut);
//! Reserved for the master model: they build and handle tables
void ClearTables(G4bool isMaster=true);
void BuildScaledXSTable(const G4Material* material,G4double cut,
G4bool isMaster);
void SetVerbosity(G4int ver){fVerbosity=ver;};
G4int GetVerbosity(){return fVerbosity;};
private:
//assignment operator
@@ -78,12 +93,11 @@ private:
G4PenelopeBremsstrahlungFS(const G4PenelopeBremsstrahlungFS&);
//Differential cross section tables
//Table contains G4PhysicsVectors of log(XS(E,x)) vs. log(E) for a grid of 32 values in
//x (= reduced photon energy)
//Table contains G4PhysicsVectors of log(XS(E,x)) vs. log(E)
//for a grid of 32 values in x (= reduced photon energy)
std::map< std::pair<const G4Material*,G4double> ,
G4PhysicsTable*> *theReducedXSTable;
void BuildScaledXSTable(const G4Material* material,G4double cut);
std::map<const G4Material*,G4double> *theEffectiveZSq;
@@ -114,8 +128,11 @@ private:
//temporary vector. Used as member variable to avoid to book/release the
//memory on the fly. This vector is over-written at every call of
//SampleGammaEnergy()
G4PhysicsFreeVector* theTempVec;
//SampleGammaEnergy(). It is thread-local (each thread has its own)
//and managed by G4Cache
G4Cache<G4PhysicsFreeVector*> fCache;
G4int fVerbosity;
};
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4PenelopeBremsstrahlungModel.hh 76988 2013-11-20 09:54:40Z gcosmo $
//
// Author: Luciano Pandola
//
@@ -31,6 +31,7 @@
// -----------
// 23 Aug 2010 L. Pandola 1st implementation.
// 24 May 2011 L. Pandola Renamed (make v2008 as default Penelope)
// 02 Oct 2013 L. Pandola Migrated to multi-thread
//
// -------------------------------------------------------------------
//
@@ -54,7 +55,6 @@ class G4ParticleDefinition;
class G4DynamicParticle;
class G4MaterialCutsCouple;
class G4Material;
class G4PhysicsTable;
class G4PenelopeOscillatorManager;
class G4PenelopeCrossSection;
class G4PenelopeBremsstrahlungFS;
@@ -71,7 +71,9 @@ public:
virtual ~G4PenelopeBremsstrahlungModel();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual void InitialiseLocal(const G4ParticleDefinition*,
G4VEmModel*);
//DUMMY METHOD
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition* theParticle,
G4double kinEnergy,
@@ -108,6 +110,7 @@ public:
protected:
G4ParticleChangeForLoss* fParticleChange;
const G4ParticleDefinition* fParticle;
private:
void ClearTables();
@@ -117,7 +120,8 @@ private:
G4PenelopeCrossSection* GetCrossSectionTableForCouple(const G4ParticleDefinition*,
const G4Material*,G4double cut);
void SetParticle(const G4ParticleDefinition*);
//Intrinsic energy limits of the model: cannot be extended by the parent process
G4double fIntrinsicLowEnergyLimit;
G4double fIntrinsicHighEnergyLimit;
@@ -130,7 +134,8 @@ private:
//
//Members to handle and store cross section tables
void BuildXSTable(const G4Material*,G4double cut);
void BuildXSTable(const G4Material* material,G4double cut);
//This is the main energy grid
G4PhysicsLogVector* energyGrid;
size_t nBins;
@@ -143,6 +148,9 @@ private:
G4PenelopeBremsstrahlungFS* fPenelopeFSHelper;
G4PenelopeBremsstrahlungAngular* fPenelopeAngular;
//Used only for G4EmCalculator and Unit Tests
G4bool fLocalTable;
};
#endif
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4PenelopeComptonModel.hh 74626 2013-10-17 07:00:59Z gcosmo $
//
// Author: Luciano Pandola
//
@@ -34,6 +34,7 @@
// to G4PenelopeOscillatorManager
// 24 May 2011 L. Pandola Renamed (make v2008 as default Penelope)
// 10 Jun 2011 L. Pandola Migrated to the new AtomDeexcitation interface
// 09 Oct 2013 L. Pandola Migration to MT
//
// -------------------------------------------------------------------
//*
@@ -70,6 +71,8 @@ public:
virtual ~G4PenelopeComptonModel();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual void InitialiseLocal(const G4ParticleDefinition*,
G4VEmModel *masterModel);
virtual G4double CrossSectionPerVolume(const G4Material*,
const G4ParticleDefinition*,
@@ -99,8 +102,11 @@ public:
protected:
G4ParticleChangeForGamma* fParticleChange;
const G4ParticleDefinition* fParticle;
private:
void SetParticle(const G4ParticleDefinition*);
//Differential cross section which is numerically integrated
G4double DifferentialCrossSection (G4double cdt,G4double energy,
G4PenelopeOscillator* osc);
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4PenelopeCrossSection.hh 74626 2013-10-17 07:00:59Z gcosmo $
//
// Author: Luciano Pandola
//
@@ -81,31 +81,33 @@ public:
~G4PenelopeCrossSection();
//! Returns total cross section at the given energy
G4double GetTotalCrossSection(G4double energy);
G4double GetTotalCrossSection(G4double energy) const;
//! Returns hard cross section at the given energy
G4double GetHardCrossSection(G4double energy);
G4double GetHardCrossSection(G4double energy) const;
//! Returns the total stopping power due to soft collisions
G4double GetSoftStoppingPower(G4double energy);
G4double GetSoftStoppingPower(G4double energy) const;
//! Returns the hard cross section for the given shell (per molecule)
G4double GetShellCrossSection(size_t shellID,G4double energy);
G4double GetShellCrossSection(size_t shellID,G4double energy) const;
//! Returns the hard cross section for the given shell (normalized to 1)
G4double GetNormalizedShellCrossSection(size_t shellID,G4double energy);
G4double GetNormalizedShellCrossSection(size_t shellID,G4double energy) const;
size_t GetNumberOfShells(){return numberOfShells;};
size_t GetNumberOfShells() const {return numberOfShells;};
//!
//! Public interface for the master thread
//!
void AddCrossSectionPoint(size_t binNumber,
G4double energy,G4double XH0, G4double XH1,
G4double XH2,
G4double XS0, G4double XS1, G4double XS2);
void AddShellCrossSectionPoint(size_t binNumber,
size_t shellID,G4double energy,G4double xs);
void NormalizeShellCrossSections();
private:
G4PenelopeCrossSection & operator=(const G4PenelopeCrossSection &right);
G4PenelopeCrossSection(const G4PenelopeCrossSection&);
void NormalizeShellCrossSections();
G4bool isNormalized;
size_t numberOfEnergyPoints;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4PenelopeGammaConversionModel.hh 75573 2013-11-04 11:48:15Z gcosmo $
//
// Author: Luciano Pandola
//
@@ -31,6 +31,7 @@
// -----------
// 13 Jan 2010 L. Pandola First implementation
// 24 May 2011 L. Pandola Renamed (make v2008 as default Penelope)
// 18 Sep 2013 L. Pandola Migration to MT paradigm
//
// -------------------------------------------------------------------
//
@@ -64,7 +65,7 @@ public:
virtual ~G4PenelopeGammaConversionModel();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual void InitialiseLocal(const G4ParticleDefinition*, G4VEmModel*);
virtual G4double ComputeCrossSectionPerAtom(
const G4ParticleDefinition*,
G4double kinEnergy,
@@ -84,12 +85,14 @@ public:
protected:
G4ParticleChangeForGamma* fParticleChange;
const G4ParticleDefinition* fParticle;
private:
G4PenelopeGammaConversionModel & operator=(const
G4PenelopeGammaConversionModel &right);
G4PenelopeGammaConversionModel(const G4PenelopeGammaConversionModel&);
void SetParticle(const G4ParticleDefinition*);
//Intrinsic energy limits of the model: cannot be extended by the parent process
G4double fIntrinsicLowEnergyLimit;
@@ -115,10 +118,13 @@ private:
std::pair<G4double,G4double> GetScreeningFunctions(G4double);
G4int verboseLevel;
G4bool isInitialised;
//Used only for G4EmCalculator and Unit Tests
G4bool fLocalTable;
};
#endif
#endif
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4PenelopeIonisationCrossSection.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Luciano Pandola
//
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4PenelopeIonisationModel.hh 75573 2013-11-04 11:48:15Z gcosmo $
//
// Author: Luciano Pandola
//
@@ -33,6 +33,7 @@
// 25 May 2011 L. Pandola Renamed (make v2008 as default Penelope)
// 09 Mar 2012 L. Pandola Moved the management and calculation of
// cross sections to a separate class
// 07 Oct 2013 L. Pandola Migration to MT
//
// -------------------------------------------------------------------
//
@@ -72,6 +73,8 @@ public:
virtual ~G4PenelopeIonisationModel();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual void InitialiseLocal(const G4ParticleDefinition*,
G4VEmModel*);
//*This is a dummy method. Never inkoved by the tracking, it just issues
//*a warning if one tries to get Cross Sections per Atom via the
@@ -109,12 +112,14 @@ public:
protected:
G4ParticleChangeForLoss* fParticleChange;
const G4ParticleDefinition* fParticle;
private:
G4PenelopeIonisationModel & operator=(const G4PenelopeIonisationModel &right);
G4PenelopeIonisationModel(const G4PenelopeIonisationModel&);
void SetParticle(const G4ParticleDefinition*);
void SampleFinalStateElectron(const G4Material*,G4double cutEnergy,G4double kineticEnergy);
void SampleFinalStatePositron(const G4Material*,G4double cutEnergy,G4double kineticEnergy);
@@ -140,6 +145,9 @@ private:
size_t nBins;
//Used only for G4EmCalculator and Unit Tests
G4bool fLocalTable;
};
#endif
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4PenelopeIonisationXSHandler.hh 74626 2013-10-17 07:00:59Z gcosmo $
//
// Author: Luciano Pandola
//
@@ -70,24 +70,22 @@ public:
virtual ~G4PenelopeIonisationXSHandler();
//!Returns the density coeection for the material at the given energy
G4double GetDensityCorrection(const G4Material*,G4double energy);
G4double GetDensityCorrection(const G4Material*,const G4double energy) const;
//! Returns the table of cross sections for the given particle, given
//! material and given cut as a G4PenelopeCrossSection* pointer.
G4PenelopeCrossSection* GetCrossSectionTableForCouple(const G4ParticleDefinition*,
const G4Material*,G4double cut);
const G4PenelopeCrossSection* GetCrossSectionTableForCouple(const G4ParticleDefinition*,
const G4Material*,const G4double cut) const;
//!Setter for the verbosity level
void SetVerboseLevel(G4int vl){verboseLevel = vl;};
//! This can be inkoved only by the master
void BuildXSTable(const G4Material*,G4double cut,
const G4ParticleDefinition*,G4bool isMaster=true);
private:
G4PenelopeIonisationXSHandler & operator=(const G4PenelopeIonisationXSHandler &right);
G4PenelopeIonisationXSHandler(const G4PenelopeIonisationXSHandler&);
void BuildXSTable(const G4Material*,G4double cut,
const G4ParticleDefinition*);
void BuildDeltaTable(const G4Material*);
G4DataVector* ComputeShellCrossSectionsElectron(G4PenelopeOscillator* ,
@@ -113,7 +113,7 @@ private:
G4PenelopeOscillatorManager& right);
G4PenelopeOscillatorManager(const G4PenelopeOscillatorManager&);
static G4PenelopeOscillatorManager* instance;
static G4ThreadLocal G4PenelopeOscillatorManager* instance;
//In Penelope2008, the Ionisation and Compton oscillator tables are
//slightly different!
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4PenelopePhotoElectricModel.hh 75573 2013-11-04 11:48:15Z gcosmo $
//
// Author: Luciano Pandola
//
@@ -32,6 +32,7 @@
// 08 Jan 2010 L. Pandola 1st implementation.
// 25 May 2011 L. Pandola Renamed (make v2008 as default Penelope)
// 10 Jun 2011 L. Pandola Migrated to the new AtomDeexcitation interface
// 18 Sep 2013 L. Pandola Migrated to the MT paradigm
//
// -------------------------------------------------------------------
//
@@ -66,6 +67,8 @@ public:
virtual ~G4PenelopePhotoElectricModel();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual void InitialiseLocal(const G4ParticleDefinition*,
G4VEmModel *masterModel);
virtual G4double ComputeCrossSectionPerAtom(
const G4ParticleDefinition*,
@@ -91,11 +94,14 @@ public:
protected:
G4ParticleChangeForGamma* fParticleChange;
const G4ParticleDefinition* fParticle;
private:
G4PenelopePhotoElectricModel & operator=(const G4PenelopePhotoElectricModel &right);
G4PenelopePhotoElectricModel(const G4PenelopePhotoElectricModel&);
void SetParticle(const G4ParticleDefinition*);
G4double SampleElectronDirection(G4double energy);
//Intrinsic energy limits of the model: cannot be extended by the parent process
@@ -119,6 +125,8 @@ private:
size_t SelectRandomShell(G4int Z,G4double energy);
G4String WriteTargetShell(size_t shellID);
//Used only for G4EmCalculator and Unit Tests
G4bool fLocalTable;
};
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4PenelopeRayleighModel.hh 75573 2013-11-04 11:48:15Z gcosmo $
//
// Author: Luciano Pandola
//
@@ -31,6 +31,7 @@
// -----------
// 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
//
// -------------------------------------------------------------------
//
@@ -64,7 +65,9 @@ public:
virtual ~G4PenelopeRayleighModel();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual void InitialiseLocal(const G4ParticleDefinition*,
G4VEmModel *masterModel);
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
G4double kinEnergy,
G4double Z,
@@ -86,11 +89,14 @@ public:
protected:
G4ParticleChangeForGamma* fParticleChange;
const G4ParticleDefinition* fParticle;
private:
G4PenelopeRayleighModel& operator=(const G4PenelopeRayleighModel &right);
G4PenelopeRayleighModel(const G4PenelopeRayleighModel&);
void SetParticle(const G4ParticleDefinition*);
//Intrinsic energy limits of the model: cannot be extended by
//the parent process
G4double fIntrinsicLowEnergyLimit;
@@ -121,6 +127,9 @@ private:
G4double GetFSquared(const G4Material*,const G4double);
void InitializeSamplingAlgorithm(const G4Material*);
//Used only for G4EmCalculator and Unit Tests
G4bool fLocalTable;
};
#endif
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4PenelopeSamplingData.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Luciano Pandola
//
@@ -120,18 +120,18 @@ private:
// number, energy and oscillator strenghts
// for an harmonic oscillator model of material
static const G4int nbofShellForMaterial[6];
static G4double alShellEnergy[3];
static G4double alShellStrength[3];
static G4double siShellEnergy[3];
static G4double siShellStrength[3];
static G4double cuShellEnergy[4];
static G4double cuShellStrength[4];
static G4double taShellEnergy[6];
static G4double taShellStrength[6];
static G4double auShellEnergy[6];
static G4double auShellStrength[6];
static G4double ptShellEnergy[6];
static G4double ptShellStrength[6];
static const G4double alShellEnergy[3];
static const G4double alShellStrength[3];
static const G4double siShellEnergy[3];
static const G4double siShellStrength[3];
static const G4double cuShellEnergy[4];
static const G4double cuShellStrength[4];
static const G4double taShellEnergy[6];
static const G4double taShellStrength[6];
static const G4double auShellEnergy[6];
static const G4double auShellStrength[6];
static const G4double ptShellEnergy[6];
static const G4double ptShellStrength[6];
G4int numberOfMaterials;
@@ -1,81 +0,0 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
// $Id$
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
// History:
// -----------
// 5 Oct 2001 MGP Created
// 22 Jan 2003 V.Ivanchenko Cut per region
//
// -------------------------------------------------------------------
// Class description:
// Class for a strategy pattern encapsulating algorithms to test the range
// of a particle: no test is performed
// Further documentation available from http://www.ge.infn.it/geant4/lowE/index.html
// -------------------------------------------------------------------
#ifndef G4RANGENOTEST_HH
#define G4RANGENOTEST_HH 1
#include "globals.hh"
#include "G4VRangeTest.hh"
class G4ParticleDefinition;
class G4MaterialCutsCouple;
class G4RangeNoTest : public G4VRangeTest {
public:
G4RangeNoTest() { }
virtual ~G4RangeNoTest() { }
virtual G4bool Escape(const G4ParticleDefinition*, // particle
const G4MaterialCutsCouple*, // couple,
G4double, // energy,
G4double ) const { return true; } // safety
private:
};
#endif
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4RayleighScattering.hh 66241 2012-12-13 18:34:42Z gunter $
//
//------------------ G4RayleighScattering physics process -----------------------
//
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4SemiLogInterpolation.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4ShellData.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4ShellEMDataSet.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -24,7 +24,6 @@
// ********************************************************************
//
// $Id: G4UAtomicDeexcitation.cc,v 1.11
// GEANT4 tag $Name: not supported by cvs2svn $
//
// -------------------------------------------------------------------
//
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4VCrossSectionHandler.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4VDataSetAlgorithm.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4VEMDataSet.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -1,182 +0,0 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
//
// --------------------------------------------------------------
//
// File name: G4VLowEnergyDiscretePhotonProcess.hh
//
// Author: Capra Riccardo
//
// Creation date: May 2005
//
// History:
// -----------
// 02 May 2005 R. Capra 1st implementation
// 20 May 2005 MGP Modified protected member functions to return a const pointer
//
//----------------------------------------------------------------
#ifndef G4VLowEnergyDiscretePhotonProcess_hh
#define G4VLowEnergyDiscretePhotonProcess_hh
// Base class
#include "G4VLowEnergyTestableDiscreteProcess.hh"
// Forward declaration
class G4String;
class G4ParticleDefinition;
class G4DynamicParticle;
class G4Track;
class G4VCrossSectionHandler;
class G4VEMDataSet;
class G4VDataSetAlgorithm;
// G4VLowEnergyDiscretePhotonProcess
// A common class for Rayleigh and Compton processes
class G4VLowEnergyDiscretePhotonProcess : public G4VLowEnergyTestableDiscreteProcess
{
public:
// Class constructor
//
// Creates crossSectionHandler and scatterFunctionData
// scatterFunctionData are loaded from the scatterFile file, and are interpolated with scatterInterpolation algorithm
// processName The name of the process
// aCrossSectionFileName The name of the cross-section data file
// aScatterFileName The name of the scatter function data
// aScatterInterpolation The interpolation algorithm
// aLowEnergyLimit The lower energy limit of validity against data
// aHighEnergyLimit The higher energy limit of validity against data
G4VLowEnergyDiscretePhotonProcess(const G4String& processName,
const G4String& aCrossSectionFileName,
const G4String& aScatterFileName,
G4VDataSetAlgorithm* aScatterInterpolation,
G4double aLowEnergyLimit,
G4double aHighEnergyLimit);
// Class destructor
//
// Deletes crossSectionHandler, meanFreePathTable and scatterFunctionData
virtual ~G4VLowEnergyDiscretePhotonProcess(void);
// Checks if the process is applicable to the particle
//
// For processes inheriting from this class the only applicable particle is the photon
// particleDefinition Is the particle to be checked for the applicability of the process
// true only if the particle is a photon
virtual G4bool IsApplicable(const G4ParticleDefinition& particleDefinition);
// Updates the crossSectionHandler and builds the meanFreePathTable from it
//
// crossSectionHandler data is loaded from crossSectionFile file
// photon particle is always a photon
virtual void BuildPhysicsTable(const G4ParticleDefinition& photon);
// Returns the low energy limit of the process
// The low energy limit of the process
inline G4double GetLowEnergyLimit(void) const {return lowEnergyLimit;}
// Returns the high energy limit of the process
// The high energy limit of the process
inline G4double GetHighEnergyLimit(void) const {return highEnergyLimit;}
protected:
// Evaluates the process mean free path
//
// Mean free path evaluation is based on meanFreePathTable generated by the crossSectionHandler with data taken from the crossSectionFile.
// The method uses lowEnergyLimit and highEnergyLimit
// aTrack the particle momentum for which the mean free path must be evaluates (a photon)
// previousStepSize the size of the prevous step (not used by this implementation)
// condition the consition to be updated (not used by this implementation)
// The mean free path for the process
virtual G4double GetMeanFreePath(const G4Track &aTrack,
G4double previousStepSize,
G4ForceCondition* condition);
// Returns the cross-section handler
// The cross-section handler
inline const G4VCrossSectionHandler* GetCrossSectionHandler(void) const {return crossSectionHandler;}
// Returns the mean free path table
// The mean free path table
inline const G4VEMDataSet* GetMeanFreePathTable(void) const {return meanFreePathTable;}
// Returns the scatter function data
// The scatter function data
inline const G4VEMDataSet* GetScatterFunctionData(void) const {return scatterFunctionData;}
// Verifies if the polarization vector is orthonormal to the photon direction
//
// This method is used by polarized processes. It returns always a vector orthonormal to the photon direction.
// When G4DynamicParticle::GetPolarization() is well defined the returned vector matches this vector.
// When G4DynamicParticle::GetPolarization() is sensibly different from a null-vector, the returned vector is
// orthonormal to the photon direction and on the plane made with G4DynamicParticle::GetPolarization()
// When G4DynamicParticle::GetPolarization() is almost a null-vector, the returned vector is a random
// vector orthonormal to the photon direction
// photon The incoming photon
// s Always a vector ortogonal to the photon direction.
G4ThreeVector GetPhotonPolarization(const G4DynamicParticle& photon);
private:
// Hides copy constructor
G4VLowEnergyDiscretePhotonProcess(const G4VLowEnergyDiscretePhotonProcess& );
// Hides assignment operator
G4VLowEnergyDiscretePhotonProcess& operator=(const G4VLowEnergyDiscretePhotonProcess& );
// Low energy limit
G4double lowEnergyLimit;
// High energy limit
G4double highEnergyLimit;
// Cross-section file name
G4String crossSectionFileName;
// Cross-section handler
G4VCrossSectionHandler* crossSectionHandler;
// The mean free path table based on cross-section data
G4VEMDataSet* meanFreePathTable;
// Scatter function table
G4VEMDataSet* scatterFunctionData;
};
#endif /* G4VLowEnergyDiscretePhotonProcess_hh */
@@ -1,53 +0,0 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
// $Id$
//
#ifndef G4VLowEnergyTestableDiscreteProcess_hh
#define G4VLowEnergyTestableDiscreteProcess_hh 1
#include "G4VDiscreteProcess.hh"
class G4VLowEnergyTestableDiscreteProcess : public G4VDiscreteProcess
{
public:
G4VLowEnergyTestableDiscreteProcess(const G4String & name) : G4VDiscreteProcess(name) {}
virtual ~G4VLowEnergyTestableDiscreteProcess() {}
G4double DumpMeanFreePath(const G4Track & aTrack, G4double previousStepSize, G4ForceCondition * condition)
{ return GetMeanFreePath(aTrack, previousStepSize, condition); }
private:
// Hides default constructor and assignment operator as private
G4VLowEnergyTestableDiscreteProcess();
G4VLowEnergyTestableDiscreteProcess & operator=(const G4VLowEnergyTestableDiscreteProcess & right);
};
#endif /* G4VLowEnergyTestableDiscreteProcess_hh */
@@ -1,84 +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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
//
// GEANT4 Class file
//
//
// File name: G4VPhotoElectricAngularDistribution
//
// Author: Pedro Rodrigues (psilva@lip.pt)
// Andreia Trindade (andreia@lip.pt)
//
// Creation date: 10 May 2004
//
// Modifications:
// 10 May 2004 A. Trindade First implementation acording with new design
//
// Class Description:
//
// Abstract class for PhotoElectricsstrahlung Angular Distribution Generation
// Further documentation available from http://www.ge.infn.it/geant4/lowE
// -------------------------------------------------------------------
//
#ifndef G4VPhotoElectricAngularDistribution_h
#define G4VPhotoElectricAngularDistribution_h 1
#include "G4ios.hh"
#include "globals.hh"
#include "G4ThreeVector.hh"
class G4VPhotoElectricAngularDistribution
{
public:
G4VPhotoElectricAngularDistribution(const G4String& name);
virtual ~G4VPhotoElectricAngularDistribution();
virtual G4ThreeVector GetPhotoElectronDirection(const G4ThreeVector& direction,
const G4double kineticEnergy,
const G4ThreeVector& polarization,
const G4int shellID) const = 0;
virtual void PrintGeneratorInformation() const = 0;
protected:
private:
// hide assignment operator
G4VPhotoElectricAngularDistribution & operator=(const G4VPhotoElectricAngularDistribution &right);
G4VPhotoElectricAngularDistribution(const G4VPhotoElectricAngularDistribution&);
};
#endif
@@ -1,79 +0,0 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
// $Id$
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
// History:
// -----------
// 5 Oct 2001 MGP Created
// 22 Jan 2003 V.Ivanchenko Cut per region
//
// -------------------------------------------------------------------
// Class description:
// Base class for a strategy pattern encapsulating algorithms to test the range
// of a particle
// Further documentation available from http://www.ge.infn.it/geant4/lowE/index.html
// -------------------------------------------------------------------
#ifndef G4VRANGETEST_HH
#define G4VRANGETEST_HH 1
#include "globals.hh"
class G4ParticleDefinition;
class G4MaterialCutsCouple;
class G4VRangeTest {
public:
G4VRangeTest() { }
virtual ~G4VRangeTest() { }
virtual G4bool Escape(const G4ParticleDefinition* particle,
const G4MaterialCutsCouple* couple,
G4double energy,
G4double safety) const = 0;
private:
};
#endif
@@ -1,248 +0,0 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
// $Id$
//
// 3.4.2000 Veronique Lefebure:
// Move utils/include/G4VEnergyLoss.hh to
// lowenergy/include/G4VeLowEnergyLoss.hh
//
// ------------------------------------------------------------
// GEANT 4 class header file
//
//
// Class Description
//
// General service class for the energy loss classes
//
// It contains code needed to compute the range tables,
// time tables, the inverse range tables and some auxiliary
// tables.
// The energy loss fluctuation code is here,too.
//
// All the EnergyLoss classes are inherited from G4VeLowEnergyLoss
// class.
//
// -----------------------------------------------------------
// created on 28 January 2000 by L. Urban
// -----------------------------------------------------------
//
// Modifications:
// 20/09/00 V.Ivanchenko update fluctuations
// 23/11/01 V.Ivanchenko Move static member-functions from header to source
// 22/01/03 V.Ivanchenko Cut per range
//
// Class description:
// Abstract class for Low Energy Electromagnetic electron energy loss
// Further documentation available from http://www.ge.infn.it/geant4/lowE
// -----------------------------------------------------------
#ifndef G4VeLowEnergyLoss_h
#define G4VeLowEnergyLoss_h 1
#include "globals.hh"
#include "G4ios.hh"
#include "Randomize.hh"
#include "G4Poisson.hh"
#include "G4Electron.hh"
#include "G4VContinuousDiscreteProcess.hh"
#include "G4PhysicsLogVector.hh"
#include "G4PhysicsLinearVector.hh"
#include "G4MaterialCutsCouple.hh"
class G4VeLowEnergyLoss : public G4VContinuousDiscreteProcess
{
public:
G4VeLowEnergyLoss(const G4String& ,
G4ProcessType aType = fNotDefined );
G4VeLowEnergyLoss(G4VeLowEnergyLoss &);
virtual ~G4VeLowEnergyLoss();
virtual G4double GetContinuousStepLimit(const G4Track& track,
G4double previousStepSize,
G4double currentMinimumStep,
G4double& currentSafety) = 0 ;
virtual G4VParticleChange* AlongStepDoIt(const G4Track& track,
const G4Step& Step) = 0 ;
virtual G4double GetMeanFreePath(const G4Track& track,
G4double previousStepSize,
G4ForceCondition* condition) = 0;
virtual G4VParticleChange* PostStepDoIt(const G4Track& track,
const G4Step& Step) = 0;
protected:// with description
// code for the energy loss fluctuation
G4double GetLossWithFluct(const G4DynamicParticle* aParticle,
const G4MaterialCutsCouple* couple,
G4double MeanLoss,
G4double step);
private:
// hide default constructor and assignment operator as private
G4VeLowEnergyLoss();
G4VeLowEnergyLoss & operator=(const G4VeLowEnergyLoss &right);
protected:
// data members to speed up the fluctuation calculation
const G4Material* lastMaterial;
G4int imat;
G4double f1Fluct,f2Fluct,e1Fluct,e2Fluct,rateFluct,ipotFluct;
G4double e1LogFluct,e2LogFluct,ipotLogFluct;
const G4int nmaxCont1,nmaxCont2 ;
// static part of the class
public: // With description
static void SetRndmStep (G4bool value);
// use / do not use randomisation in energy loss steplimit
// ( default = no randomisation)
static void SetEnlossFluc (G4bool value);
// compute energy loss with/without fluctuation
// ( default : with fluctuation)
static void SetStepFunction (G4double c1, G4double c2);
// sets values for data members used to compute the step limit:
// dRoverRange : max. relative range change in one step,
// finalRange : if range <= finalRange --> last step for the particle.
protected: // With description
// Build range table starting from the DEDXtable
static G4PhysicsTable*
BuildRangeTable(G4PhysicsTable* theDEDXTable,
G4PhysicsTable* theRangeTable,
G4double Tmin,G4double Tmax,G4int nbin);
// Build time tables starting from the DEDXtable
static G4PhysicsTable*
BuildLabTimeTable(G4PhysicsTable* theDEDXTable,
G4PhysicsTable* theLabTimeTable,
G4double Tmin,G4double Tmax,G4int nbin);
static G4PhysicsTable*
BuildProperTimeTable(G4PhysicsTable* theDEDXTable,
G4PhysicsTable* ProperTimeTable,
G4double Tmin,G4double Tmax,G4int nbin);
// Build tables of coefficients needed for inverting the range table
static G4PhysicsTable*
BuildRangeCoeffATable(G4PhysicsTable* theRangeTable,
G4PhysicsTable* theCoeffATable,
G4double Tmin,G4double Tmax,G4int nbin);
static G4PhysicsTable*
BuildRangeCoeffBTable(G4PhysicsTable* theRangeTable,
G4PhysicsTable* theCoeffBTable,
G4double Tmin,G4double Tmax,G4int nbin);
static G4PhysicsTable*
BuildRangeCoeffCTable(G4PhysicsTable* theRangeTable,
G4PhysicsTable* theCoeffCTable,
G4double Tmin,G4double Tmax,G4int nbin);
// Invert range table
static G4PhysicsTable*
BuildInverseRangeTable(G4PhysicsTable* theRangeTable,
G4PhysicsTable* theRangeCoeffATable,
G4PhysicsTable* theRangeCoeffBTable,
G4PhysicsTable* theRangeCoeffCTable,
G4PhysicsTable* theInverseRangeTable,
G4double Tmin,G4double Tmax,G4int nbin);
private:
static void BuildRangeVector(G4PhysicsTable* theDEDXTable,
G4double Tmin,G4double Tmax,G4int nbin,
G4int materialIndex,G4PhysicsLogVector* rangeVector);
static void BuildRangeVectorNew(const G4PhysicsTable*,G4int,
G4int,G4PhysicsLogVector*);
static G4double RangeIntLin(G4PhysicsVector* physicsVector
,G4int nbin);
static G4double RangeIntLog(G4PhysicsVector* physicsVector
,G4int nbin);
static void BuildLabTimeVector(G4PhysicsTable* theDEDXTable,
G4double Tmin,G4double Tmax,G4int nbin,
G4int materialIndex,G4PhysicsLogVector* rangeVector);
static void BuildProperTimeVector(G4PhysicsTable* theDEDXTable,
G4double Tmin,G4double Tmax,G4int nbin,
G4int materialIndex,G4PhysicsLogVector* rangeVector);
static G4double LabTimeIntLog(G4PhysicsVector* physicsVector
,G4int nbin);
static G4double ProperTimeIntLog(G4PhysicsVector* physicsVector,
G4int nbin);
static void InvertRangeVector(G4PhysicsTable* theRangeTable,
G4PhysicsTable* theRangeCoeffATable,
G4PhysicsTable* theRangeCoeffBTable,
G4PhysicsTable* theRangeCoeffCTable,
G4double Tmin,G4double Tmax,G4int nbin,
G4int materialIndex,G4PhysicsLogVector* rangeVector);
// data members
protected:
// variables for the integration routines
static G4double ParticleMass,taulow,tauhigh,ltaulow,ltauhigh;
static G4double dRoverRange; // dRoverRange is the maximum allowed
// deltarange/range in one Step
static G4double finalRange; // final step before stopping
static G4double c1lim,c2lim,c3lim ; // coeffs for computing steplimit
static G4bool rndmStepFlag; // control the randomization of the step
static G4bool EnlossFlucFlag; // control the energy loss fluctuation
};
#endif
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4VecpssrLiModel.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Haifa Ben Abdelouahed
//
@@ -1,85 +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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
//
// GEANT4 Class file
//
//
// File name: G4VhEnergyLossModel
//
// Author: Maria Grazia Pia (MariaGrazia.Pia@ge.infn.it)
//
// Creation date: 7 May 2000
//
// Modifications:
// 22/05/2000 MGP Version compliant with design
//
// Class Description:
//
// Abstract class for hadron energy loss model
// Further documentation available from http://www.ge.infn.it/geant4/lowE
// -------------------------------------------------------------------
//
#ifndef G4VHENERGYLOSSMODEL_HH
#define G4VHENERGYLOSSMODEL_HH
#include "globals.hh"
class G4ParticleDefinition;
class G4DynamicParticle;
class G4Material;
class G4VhEnergyLossModel
{
public:
G4VhEnergyLossModel() {};
virtual ~G4VhEnergyLossModel() {};
virtual G4double EnergyLoss(const G4DynamicParticle* particle,
const G4Material* material) const = 0;
virtual G4double LowEnergyLimit() const = 0;
virtual G4double HighEnergyLimit() const = 0;
virtual G4bool IsInCharge(G4double energy,
const G4ParticleDefinition* partDef,
const G4Material* material) const = 0;
protected:
private:
};
#endif
@@ -24,7 +24,6 @@
// ********************************************************************
//
// $Id: G4UAtomicDeexcitation.cc,v 1.11
// GEANT4 tag $Name: not supported by cvs2svn $
//
// -------------------------------------------------------------------
//
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4eBremsstrahlungSpectrum.hh 66241 2012-12-13 18:34:42Z gunter $
//
// -------------------------------------------------------------------
//
@@ -24,7 +24,6 @@
// ********************************************************************
//
// $Id: G4eCrossSectionHandler.cc,v 1.21 2009-09-27 10:47:42 sincerti Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
//
// Author: Vladimir Ivanchenko
//
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4eIonisationCrossSectionHandler.hh 66241 2012-12-13 18:34:42Z gunter $
//
// -------------------------------------------------------------------
//
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id$
// $Id: G4eIonisationParameters.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
// V. Ivanchenko
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4eIonisationSpectrum.hh 66241 2012-12-13 18:34:42Z gunter $
//
// -------------------------------------------------------------------
//
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4empCrossSection.hh 66241 2012-12-13 18:34:42Z gunter $
//
//
//
@@ -1,135 +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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
//
// GEANT4 Class file
//
//
// File name: G4hQAOModel
//
// Author: V.Ivanchenko (Vladimir.Ivanchenko@cern.ch)
//
// Creation date: 27 April 2004
//
// Modifications:
//
// Class Description:
//
// Electronic stopping power for negative heavy partiles
// Further documentation available from http://www.ge.infn.it/geant4/lowE//
// -------------------------------------------------------------------
//
#ifndef G4hQAOModel_h
#define G4hQAOModel_h 1
#include "globals.hh"
#include "G4VhElectronicStoppingPower.hh"
class G4Material;
class G4Element;
class G4hQAOModel : public G4VhElectronicStoppingPower
{
public:
G4hQAOModel();
~G4hQAOModel();
G4bool HasMaterial(const G4Material*) {return true;};
G4double StoppingPower(const G4Material* material,
G4double kineticEnergy);
G4double ElectronicStoppingPower(G4double z,
G4double kineticEnergy) const;
private:
// get number of shell, energy and oscillator strenghts for material
G4int GetNumberOfShell(G4int z) const;
G4double GetShellEnergy(G4int z, G4int nbOfTheShell) const;
G4double GetOscillatorEnergy(G4int z, G4int nbOfTheShell) const;
G4double GetShellStrength(G4int z, G4int nbOfTheShell) const;
G4double GetOccupationNumber(G4int z, G4int ShellNb) const;
// calculate stopping number for L's term
G4double GetL0(G4double normEnergy) const;
// terms in Z^2
G4double GetL1(G4double normEnergy) const;
// terms in Z^3
G4double GetL2(G4double normEnergy) const;
// terms in Z^4
// hide assignment operator
G4hQAOModel & operator=(const G4hQAOModel &right);
G4hQAOModel(const G4hQAOModel&);
// Z of element at now avaliable for the model
static const G4int materialAvailable[6];
// number, energy and oscillator strenghts
// for an harmonic oscillator model of material
static const G4int nbofShellForMaterial[6];
static const G4double alShellEnergy[3];
static const G4double alShellStrength[3];
static const G4double siShellEnergy[3];
static const G4double siShellStrength[3];
static const G4double cuShellEnergy[4];
static const G4double cuShellStrength[4];
static const G4double taShellEnergy[6];
static const G4double taShellStrength[6];
static const G4double auShellEnergy[6];
static const G4double auShellStrength[6];
static const G4double ptShellEnergy[6];
static const G4double ptShellStrength[6];
// variable for calculation of stopping number of L's term
static const G4double L0[67][2];
static const G4double L1[22][2];
static const G4double L2[14][2];
static const G4int nbOfElectronPerSubShell[1540];
static const G4int fNumberOfShells[101];
G4int numberOfMaterials;
G4int sizeL0;
G4int sizeL1;
G4int sizeL2;
const G4Material* currentMaterial;
const G4Element* currentElement;
G4double theZieglerFactor;
G4double thePlasmonFactor;
};
#endif
@@ -1,83 +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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
//
// GEANT4 Class file
//
//
// File name: G4hZiegler1977p
//
// Author: V.Ivanchenko (Vladimir.Ivanchenko@cern.ch)
//
// Creation date: 20 July 2000
//
// Modifications:
// 20/07/2000 V.Ivanchenko First implementation
//
// Class Description:
//
// Electronic stopping power parametrised according to
// H.H.Andersen & J.F.Ziegler, Hydrogen Stopping Powers and
// Ranges in All Elements, Vol.3, Pergamon Press, 1977
// Further documentation available from http://www.ge.infn.it/geant4/lowE//
// -------------------------------------------------------------------
//
#ifndef G4hZiegler1977p_h
#define G4hZiegler1977p_h 1
#include "globals.hh"
#include "G4VhElectronicStoppingPower.hh"
class G4Material;
class G4hZiegler1977p : public G4VhElectronicStoppingPower
{
public:
G4hZiegler1977p();
~G4hZiegler1977p();
G4bool HasMaterial(const G4Material* material);
G4double StoppingPower(const G4Material* material,
G4double kineticEnergy);
G4double ElectronicStoppingPower(G4double z,
G4double kineticEnergy) const;
protected:
private:
const G4double protonMassAMU;
};
#endif
@@ -77,7 +77,7 @@ protected:
private:
const G4double protonMassAMU;
static G4double a[92][8];
static const G4double a[92][8];
};
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4teoCrossSection.hh 66241 2012-12-13 18:34:42Z gunter $
//
//
//