Import Geant4 5.1.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 10:15:15 +02:00
parent 37fff30d2e
commit fbd4999cf7
4396 changed files with 56662 additions and 52446 deletions
@@ -22,7 +22,7 @@
//
//
// $Id: G4AtomicTransitionManager.hh,v 1.2 ????
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Authors: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
// Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
@@ -22,7 +22,7 @@
//
//
// $Id: G4AtomicShell.hh,v 1.2 ????
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Authors: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
// Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
@@ -22,7 +22,7 @@
//
//
// $Id: G4AtomicTransition.hh,v 1.2 ????
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4AtomicTransitionManager.hh,v 1.2 ????
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Authors: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
// Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
@@ -23,7 +23,7 @@
//
//
// $Id: G4AugerData.hh
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
//
@@ -21,8 +21,8 @@
// ********************************************************************
//
//
// $Id: G4BremsstrahlungParameters.hh,v 1.6 2001/11/29 19:01:44 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-00 $
// $Id: G4BremsstrahlungParameters.hh,v 1.8 2003/02/28 08:41:47 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
// V. Ivanchenko (Vladimir.Ivantchenko@cern.ch)
@@ -34,6 +34,8 @@
// 12.09.01 V.Ivanchenko Add activeZ and paramA
// 25.09.01 V.Ivanchenko Add parameter C and change interface to B
// 29.11.01 V.Ivanchenko Parametrisation is updated
// 21.02.03 V.Ivanchenko Number of parameters is defined in the constructor
// 28.02.03 V.Ivanchenko Filename is defined in the constructor
//
// -------------------------------------------------------------------
@@ -56,32 +58,32 @@ class G4VEMDataSet;
class G4VDataSetAlgorithm;
class G4BremsstrahlungParameters {
public:
G4BremsstrahlungParameters(G4int minZ = 1, G4int maxZ = 99);
G4BremsstrahlungParameters(const G4String& name, size_t num, G4int minZ = 1, G4int maxZ = 99);
~G4BremsstrahlungParameters();
G4double Parameter(G4int parameterIndex, G4int Z, G4double energy) const;
G4double ParameterC(G4int index) const;
void PrintData() const;
private:
// hide assignment operator
// hide assignment operator
G4BremsstrahlungParameters(const G4BremsstrahlungParameters&);
G4BremsstrahlungParameters & operator=(const G4BremsstrahlungParameters &right);
void LoadData();
void LoadData(const G4String& name);
G4std::map<G4int,G4VEMDataSet*,G4std::less<G4int> > param;
G4DataVector paramC;
G4DataVector activeZ;
G4int zMin;
G4int zMax;
@@ -90,7 +92,7 @@ private:
};
#endif
@@ -22,7 +22,7 @@
//
//
// $Id: G4CompositeEMDataSet.hh,v 1.4 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4CrossSectionHandler.hh,v 1.7 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4EMDataSet.hh,v 1.3 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4FluoTransition.hh,v 1.2 ????
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4LinInterpolation.hh,v 1.2 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4LogLogInterpolation.hh,v 1.3 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,8 +22,8 @@
//
//
// -------------------------------------------------------------------
// $Id: G4LowEnergyBremsstrahlung.hh,v 1.30 2002/07/19 17:44:43 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-00 $
// $Id: G4LowEnergyBremsstrahlung.hh,v 1.31 2003/02/21 17:05:30 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: A. Forti
//
@@ -34,6 +34,7 @@
// 10 Oct 2001 M.G. Pia Revision to improve code quality
// and consistency with design
// 29 Nov 2001 V.Ivanchenko New parametrisation of EEDL data
// 21 Feb 2003 V.Ivanchenko Energy bins for spectrum are defined here
//
// -------------------------------------------------------------------
@@ -73,7 +74,7 @@ public:
void BuildPhysicsTable(const G4ParticleDefinition& particleType);
G4VParticleChange* PostStepDoIt(const G4Track& track,
const G4Step& step);
const G4Step& step);
void SetCutForLowEnSecPhotons(G4double cut);
@@ -96,6 +97,7 @@ private:
G4VCrossSectionHandler* crossSectionHandler;
G4VEMDataSet* theMeanFreePath;
G4VEnergySpectrum* energySpectrum;
G4DataVector energyBins;
// Lower limit for generation of gamma in this model
G4DataVector cutForSecondaryPhotons;
@@ -103,9 +105,9 @@ private:
};
#endif
@@ -21,7 +21,7 @@
// ********************************************************************
// $Id: G4LowEnergyCompton.hh,v 1.19 2001/12/13 12:04:13 gunter Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: A. Forti
// Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
@@ -22,7 +22,7 @@
//
//
// $Id: G4LowEnergyGammaConversion.hh,v 1.14 2001/10/08 07:45:33 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: A. Forti
// Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
@@ -21,8 +21,8 @@
// ********************************************************************
//
// -------------------------------------------------------------------
// $Id: G4LowEnergyIonisation.hh,v 1.38 2002/07/19 17:44:43 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-00 $
// $Id: G4LowEnergyIonisation.hh,v 1.39 2003/02/07 15:39:02 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: A. Forti
//
@@ -36,6 +36,7 @@
// consistency with design
// 29 Nov 2001 V.Ivanchenko New parametrisation of EEDL data
// 31 May 2002 V.Ivanchenko Add Auger flag
// 06 Feb 2003 V.Ivanchenko Change signature of deexcitation for cut per region
//
// -------------------------------------------------------------------
@@ -95,7 +96,7 @@ protected:
protected:
virtual G4std::vector<G4DynamicParticle*>* DeexciteAtom(const G4Material* material,
virtual G4std::vector<G4DynamicParticle*>* DeexciteAtom(const G4MaterialCutsCouple* couple,
G4double incidentEnergy,
G4double eLoss);
@@ -22,7 +22,7 @@
//
//
// $Id: G4LowEnergyPhotoElectric.hh,v 1.25 2002/06/01 03:14:18 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: A. Forti
// Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
@@ -22,7 +22,7 @@
//
//
// $Id: G4LowEnergyPolarizedCompton.hh,v 1.8 2002/05/31 18:11:45 flongo Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// ------------------------------------------------------------
// GEANT 4 class header file
@@ -22,7 +22,7 @@
//
//
// $Id: G4LowEnergyRayleigh.hh,v 1.15 2001/10/08 07:45:35 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
//
//
@@ -0,0 +1,123 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * 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. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
// $Id: G4PenelopeBremsstrahlung.hh,v 1.2 2003/03/19 10:27:44 pandola Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: L.Pandola
//
// History:
// -----------
// 03 Feb 2003 L. Pandola 1st implementation
// 18 Mar 2003 L. Pandola positrons added
// Class description:
// Penelope electromagnetic process, electron and positron Bremsstrahlung
// --------------------------------------------------------------
#ifndef G4PENELOPEBREMSSTRAHLUNG_HH
#define G4PENELOPEBREMSSTRAHLUNG_HH 1
#include "G4eLowEnergyLoss.hh"
#include "G4DataVector.hh"
#include "globals.hh"
#include "G4PenelopeBremsstrahlungAngular.hh"
class G4Track;
class G4Step;
class G4ParticleDefinition;
class G4VParticleChange;
class G4VEMDataSet;
class G4VEnergySpectrum;
class G4VCrossSectionHandler;
class G4PenelopeBremsstrahlung : public G4eLowEnergyLoss
{
typedef G4std::vector<G4PenelopeBremsstrahlungAngular*> G4AngularData;
//vector of pointers to the angular factors of the elements in each material
public:
G4PenelopeBremsstrahlung(const G4String& processName = "PenelopeBrem");
~G4PenelopeBremsstrahlung();
G4bool IsApplicable(const G4ParticleDefinition&);
void BuildPhysicsTable(const G4ParticleDefinition& particleType);
G4VParticleChange* PostStepDoIt(const G4Track& track,
const G4Step& step);
void SetCutForLowEnSecPhotons(G4double cut);
void PrintInfoDefinition();
//For testing purpose only
G4double DumpMeanFreePath(const G4Track& aTrack,
G4double previousStepSize,
G4ForceCondition* condition)
{ return GetMeanFreePath(aTrack, previousStepSize, condition); }
protected:
G4double GetMeanFreePath(const G4Track& track,
G4double previousStepSize,
G4ForceCondition* condition );
private:
// Hide copy constructor and assignment operator as private
G4PenelopeBremsstrahlung(const G4PenelopeBremsstrahlung& );
G4PenelopeBremsstrahlung& operator = (const G4PenelopeBremsstrahlung& right);
void BuildLossTable(const G4ParticleDefinition& ParticleType);
void LoadAngularData();
G4VCrossSectionHandler* crossSectionHandler;
G4VEMDataSet* theMeanFreePath;
G4VEnergySpectrum* energySpectrum;
G4std::vector<G4AngularData*> materialAngularData;
//Vector of pointers to the vectors containing tha angular data
//one element=one material
// Lower limit for generation of gamma in this model
G4DataVector cutForSecondaryPhotons;
G4double cutForPhotons;
};
#endif
@@ -0,0 +1,73 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * 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. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
// $Id: G4PenelopeBremsstrahlungAngular.hh,v 1.1 2003/03/13 17:23:03 pandola Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: L.Pandola
//
// History:
// -----------
// 04 Feb 2003 L. Pandola 1st implementation
// Class description:
// Calculation of angular distribution for Penelope Bremsstrahlung
// --------------------------------------------------------------
#ifndef G4PENELOPEBREMSSTRAHLUNGANGULAR_HH
#define G4PENELOPEBREMSSTRAHLUNGANGULAR_HH 1
#include "globals.hh"
class G4PenelopeBremsstrahlungAngular
{
private:
enum{NumberofZPoints=6,
NumberofEPoints=6,
NumberofKPoints=4,
reducedEnergyGrid=21};
public:
G4PenelopeBremsstrahlungAngular(G4int Zmat);
~G4PenelopeBremsstrahlungAngular();
G4double ExtractCosTheta(G4double PrimaryEnergy,G4double GammaEnergy);
private:
void InterpolationTableForZ(); //Initialization of tables (part 1)
void InterpolationForK(); //Initialization of tables (part 2)
G4double betas[NumberofEPoints]; //betas for interpolation
//tables for interpolation
G4double Q1[NumberofEPoints][NumberofKPoints],Q2[NumberofEPoints][NumberofKPoints];
//expanded tables for interpolation
G4double Q1E[NumberofEPoints][reducedEnergyGrid],Q2E[NumberofEPoints][reducedEnergyGrid];
//Z of the element
G4int Zmat;
};
#endif
@@ -0,0 +1,79 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * 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. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
// $Id: G4PenelopeBremsstrahlungContinuous.hh,v 1.2 2003/03/19 10:28:28 pandola Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: L.Pandola
//
// History:
// -----------
// 20 Feb 2003 L. Pandola 1st implementation
// 17 Mar 2003 L. Pandola Added the correction for positrons
// Class description:
// Calculation of continuous energy loss for Penelope Bremsstrahlung
// It is used both for electrons and positrons
// --------------------------------------------------------------
#ifndef G4PENELOPEBREMSSTRAHLUNGCONTINUOUS_HH
#define G4PENELOPEBREMSSTRAHLUNGCONTINUOUS_HH 1
#include "globals.hh"
class G4PenelopeBremsstrahlungContinuous
{
private:
enum{ NumberofEPoints=57,
NumberofKPoints=32,
NumberofExtendedEGrid=200};
public:
G4PenelopeBremsstrahlungContinuous(G4int Zmat,G4double tCut, G4double emin, G4double emax,
const G4String partName);
~G4PenelopeBremsstrahlungContinuous();
G4double CalculateStopping(G4double PrimaryEnergy);
private:
void PrepareInterpolationTable();
void LoadFromFile();
G4double PositronCorrection(G4double energy); //correction function for positrons
G4int Zmat;
G4double tCut;
G4double MinE,MaxE;
const G4String partName;
G4double DLFC; //needed for calculation of extended energy grid
G4double Energies[NumberofEPoints];
G4double ReducedCS[NumberofEPoints][NumberofKPoints];
G4double TotalCS[NumberofEPoints];
G4double ExtendedLogEnergy[NumberofExtendedEGrid];
G4double p0[NumberofExtendedEGrid][NumberofKPoints];
//G4double Pbcut[NumberofExtendedEGrid]; //serve?
};
#endif
@@ -0,0 +1,116 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * 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. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// $Id: G4PenelopeCompton.hh,v 1.5 2003/02/24 00:36:10 pia Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Luciano Pandola
//
// History:
// -----------
// 05 Dec 2002 L. Pandola 1st implementation
// 12 Feb 2003 MG Pia const argument in SelectRandomAtomForCompton
// 14 Feb 2003 MG Pia Modified some variables to lowercase initial
//
// -------------------------------------------------------------------
// Class description:
// Low Energy Electromagnetic Physics, Compton Scattering
// Penelope Model
// -------------------------------------------------------------------
#ifndef G4PENELOPECOMPTON_HH
#define G4PENELOPECOMPTON_HH 1
#include "globals.hh"
#include "G4VDiscreteProcess.hh"
class G4Track;
class G4Step;
class G4ParticleDefinition;
class G4VParticleChange;
class G4VEMDataSet;
class G4VRangeTest;
class G4Material;
class G4PenelopeCompton : public G4VDiscreteProcess {
public:
G4PenelopeCompton(const G4String& processName ="PenCompton");
~G4PenelopeCompton();
G4bool IsApplicable(const G4ParticleDefinition& definition);
void BuildPhysicsTable(const G4ParticleDefinition& photon);
G4VParticleChange* PostStepDoIt(const G4Track& aTrack, const G4Step& aStep);
// For testing purpose only
G4double DumpMeanFreePath(const G4Track& aTrack,
G4double previousStepSize,
G4ForceCondition* condition)
{ return GetMeanFreePath(aTrack, previousStepSize, condition); }
protected:
G4double GetMeanFreePath(const G4Track& aTrack,
G4double previousStepSize,
G4ForceCondition* condition);
private:
// Hide copy constructor and assignment operator as private
G4PenelopeCompton& operator=(const G4PenelopeCompton& right);
G4PenelopeCompton(const G4PenelopeCompton& );
void ReadData();
G4double CrossSection(G4double energy,G4int Z);
G4double DifferentialCrossSection (G4double cdt);
G4double lowEnergyLimit; // low energy limit applied to the process
G4double highEnergyLimit; // high energy limit applied to the process
G4VEMDataSet* meanFreePathTable;
G4VRangeTest* rangeTest;
const G4double intrinsicLowEnergyLimit; // intrinsic validity range
const G4double intrinsicHighEnergyLimit;
G4double energyForIntegration; //for numerical integration of
G4int ZForIntegration;// analytical cross section
G4std::vector<G4DataVector*> *ionizationEnergy;
G4std::vector<G4DataVector*> *hartreeFunction;
G4std::vector<G4DataVector*> *occupationNumber;
G4int SelectRandomAtomForCompton(const G4Material* material,G4double e) const;
const G4int nBins; //for building cross section table
G4std::vector<G4VEMDataSet*>* matCrossSections; //for random choice of atom
};
#endif
@@ -0,0 +1,117 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * 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. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//
// $Id: G4PenelopeGammaConversion.hh,v 1.1 2002/12/06 16:25:00 pandola Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: L. Pandola
//
// History:
// -----------
// 02 Dec 2002 L.Pandola 1st implementation
// -------------------------------------------------------------------
// Class description:
// Low Energy process, Photon conversion
// Penelope model
// -------------------------------------------------------------------
#ifndef G4PENELOPEGAMMACONVERSION_HH
#define G4PENELOPEGAMMACONVERSION_HH 1
#include "G4VDiscreteProcess.hh"
#include "globals.hh"
#include "G4VDiscreteProcess.hh"
class G4Track;
class G4Step;
class G4ParticleDefinition;
class G4VParticleChange;
class G4VEMDataSet;
class G4VCrossSectionHandler;
class G4VRangeTest;
class G4PenelopeGammaConversion : public G4VDiscreteProcess {
public:
G4PenelopeGammaConversion(const G4String& processName ="PenConversion");
~G4PenelopeGammaConversion();
G4bool IsApplicable(const G4ParticleDefinition& photon);
void BuildPhysicsTable(const G4ParticleDefinition& photon);
G4VParticleChange* PostStepDoIt(const G4Track& aTrack, const G4Step& aStep);
// For testing purpose only
G4double DumpMeanFreePath(const G4Track& aTrack,
G4double previousStepSize,
G4ForceCondition* condition)
{ return GetMeanFreePath(aTrack, previousStepSize, condition); }
protected:
G4double GetMeanFreePath(const G4Track& aTrack,
G4double previousStepSize,
G4ForceCondition* condition);
private:
// Hide copy constructor and assignment operator as private
G4PenelopeGammaConversion& operator=(const G4PenelopeGammaConversion &right);
G4PenelopeGammaConversion(const G4PenelopeGammaConversion& );
G4double GetScreeningRadius(G4double Z);
G4double ScreenFunction(G4double screenVariable,G4int icase);
G4double CoulombCorrection(G4double ZAlpha);
G4double LowEnergyCorrection(G4double ZAlpha,G4double eki);
G4double lowEnergyLimit; // low energy limit applied to the process
G4double highEnergyLimit; // high energy limit applied to the process
G4VEMDataSet* meanFreePathTable;
G4VCrossSectionHandler* crossSectionHandler;
G4VRangeTest* rangeTest;
const G4double intrinsicLowEnergyLimit; // intrinsic validity range
const G4double intrinsicHighEnergyLimit;
const G4double smallEnergy;
};
#endif
@@ -0,0 +1,63 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * 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. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//
//
// Author: Luciano Pandola (Luciano.Pandola@cern.ch)
//
// History:
// -----------
// 30 Nov 2002 LP Created
//
// -------------------------------------------------------------------
// Class description:
// Numerical quadrature of a function
// G4double function (G4double x)
// using Gauss adaptive-bipartition formula.
// -------------------------------------------------------------------
#ifndef G4PENELOPEINTEGRATOR_HH
#define G4PENELOPEINTEGRATOR_HH 1
#include "globals.hh"
#include <math.h>
template <class T,class F>
class G4PenelopeIntegrator
{
public:
G4PenelopeIntegrator(){;}
~G4PenelopeIntegrator(){;}
G4double Calculate(T& typeT,F f,G4double LowPoint,G4double HighPoint,
G4double MaxError);
G4double Calculate(T* ptrT,F f,G4double LowPoint,G4double HighPoint,
G4double MaxError);
};
#include "G4PenelopeIntegrator.icc"
#endif
@@ -0,0 +1,150 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * 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. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//
//
// Author: Luciano Pandola (Luciano.Pandola@cern.ch)
//
// History:
// -----------
// 30 Nov 2002 LP Created
// 14 Feb 2003 MGP Corrected compilation errors from SUN
//
// -------------------------------------------------------------------
template <class T,class F>
G4double G4PenelopeIntegrator<T,F>::Calculate(T& typeT, F f,
G4double LowPoint,G4double HighPoint,
G4double MaxError)
{
const G4int npoints=10;
const G4int ncallsmax=20000;
const G4int nst=256;
static G4double Abscissas[10] = {7.652651133497334e-02,2.2778585114164508e-01,3.7370608871541956e-01,
5.1086700195082710e-01,6.3605368072651503e-01,7.4633190646015079e-01,
8.3911697182221882e-01,9.1223442825132591e-01,9.6397192727791379e-01,
9.9312859918509492e-01};
static G4double Weights[10] = {1.5275338713072585e-01,1.4917298647260375e-01,1.4209610931838205e-01,
1.3168863844917663e-01,1.1819453196151842e-01,1.0193011981724044e-01,
8.3276741576704749e-02,6.2672048334109064e-02,4.0601429800386941e-02,
1.7614007139152118e-02};
//Error control
G4double Ctol = G4std::min(G4std::max(MaxError,1e-13),1e-02);
G4double Ptol = 0.01*Ctol;
G4double Err=1e35;
//Gauss integration from LowPoint to HighPoint
G4double h,sumga,a,b,c,d;
h=HighPoint-LowPoint;
sumga=0.0;
a=0.5*(HighPoint-LowPoint);
b=0.5*(HighPoint+LowPoint);
c=a*Abscissas[0];
d=Weights[0]*((typeT.*f)(b+c)+(typeT.*f)(b-c));
G4int i;
for (i=2;i<=npoints;i++){
c=a*Abscissas[i-1];
d=d+Weights[i-1]*((typeT.*f)(b+c)+(typeT.*f)(b-c));
}
G4int icall = 2*npoints;
G4int LH=1;
G4double S[nst],x[nst],sn[nst],xrn[nst];
S[0]=d*a;
x[0]=LowPoint;
//Adaptive bipartition scheme
do{
G4double h0=h;
h=0.5*h; //bipartition
G4double sumr=0;
G4int LHN=0;
G4double si,xa,xb,xc;
for (i=1;i<=LH;i++){
si=S[i-1];
xa=x[i-1];
xb=xa+h;
xc=xa+h0;
a=0.5*(xb-xa);
b=0.5*(xb+xa);
c=a*Abscissas[0];
d=Weights[0]*((typeT.*f)(b+c)+(typeT.*f)(b-c));
G4int j;
for (j=1;j<npoints;j++){
c=a*Abscissas[j];
d=d+Weights[j]*((typeT.*f)(b+c)+(typeT.*f)(b-c));
}
G4double s1,s2,s12;
s1=d*a;
a=0.5*(xc-xb);
b=0.5*(xc+xb);
c=a*Abscissas[0];
d=Weights[0]*((typeT.*f)(b+c)+(typeT.*f)(b-c));
for (j=1;j<npoints;j++){
c=a*Abscissas[j];
d=d+Weights[j]*((typeT.*f)(b+c)+(typeT.*f)(b-c));
}
s2=d*a;
icall=icall+4*npoints;
s12=s1+s2;
if (abs(s12-si)<G4std::max(Ptol*abs(s12),1e-35)){
sumga=sumga+s12;
}
else
{
sumr=sumr+s12;
LHN=LHN+2;
sn[LHN-1]=s2;
xrn[LHN-1]=xb;
sn[LHN-2]=s1;
xrn[LHN-2]=xa;
}
if (icall>ncallsmax || LHN>nst)
{
G4cout << "G4PenelopeIntegrator: " << G4endl;
G4cout << "LowPoint: " << LowPoint << ", High Point: " << HighPoint << G4endl;
G4cout << "Tolerance: " << MaxError << G4endl;
G4cout << "Calls: " << icall << ", Integral: " << sumga << ", Error: " << Err << G4cout;
G4cout << "Number of open subintervals: " << LHN << G4endl;
G4cout << "WARNING: the required accuracy has not been attained" << G4endl;
return sumga;
}
}
Err=abs(sumr)/G4std::max(abs(sumr+sumga),1e-35);
if (Err < Ctol || LHN == 0) return sumga; //end of cycle
LH=LHN;
for (G4int i=0;i<LH;i++){
S[i]=sn[i];
x[i]=xrn[i];
}
}while(Ctol < 1.0); //infinite loop
return 0; //It should never get here
}
template <class T,class F>
G4double G4PenelopeIntegrator<T,F>::Calculate(T* ptrT, F f,
G4double LowPoint,G4double HighPoint,
G4double MaxError)
{
return Calculate(*ptrT,f,LowPoint,HighPoint,MaxError);
}
@@ -21,56 +21,48 @@
// ********************************************************************
//
//
// $Id: G4CutsPerMaterialWarning.hh,v 1.1 2001/11/07 22:38:47 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
// Author: Luciano Pandola (Luciano.Pandola@cern.ch)
//
// History:
// -----------
// 7 Nov 2001 MGP Created
// 17 Feb 2003 LP Created
//
// -------------------------------------------------------------------
// Class description:
// Functor class to print a warning if the deprecated, unsupported feature
// of having different range cuts for different materials is used
// Will be removed when properly designed "range cuts by region"
// will be available in Geant4
// Further documentation available from http://www.ge.infn.it/geant4/lowE/
// Cubic spline interpolation and momentum calculation of given order
// obtained by linear interpolation
// -------------------------------------------------------------------
#ifndef G4CUTSPERMATERIALWARNING_HH
#define G4CUTSPERMATERIALWARNING_HH 1
#ifndef G4PENELOPEINTERPOLATOR_HH
#define G4PENELOPEINTERPOLATOR_HH 1
#include "globals.hh"
class G4ParticleDefinition;
class G4Material;
class G4CutsPerMaterialWarning
{
class G4DataVector;
class G4PenelopeInterpolator
{
public:
G4CutsPerMaterialWarning() { }
G4PenelopeInterpolator(G4double* pX, G4double* pY, G4int nbOfData, G4double S1=0, G4double SN=0);
~G4CutsPerMaterialWarning() { }
~G4PenelopeInterpolator(){;}
void PrintWarning(const G4ParticleDefinition* particle) const;
G4double CubicSplineInterpolation(G4double xx);
G4double FirstDerivative(G4double xx);
G4double CalculateMomentum(G4double UpperLimit,G4int MomentumOrder);
private:
G4int FindBin(G4double xx);
//coefficients
G4DataVector* a;
G4DataVector* b;
G4DataVector* c;
G4DataVector* d;
//stored data
G4DataVector* x;
G4DataVector* y;
};
#endif
@@ -0,0 +1,114 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * 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. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//
// $Id: G4PenelopePhotoElectric.hh,v 1.2 2003/02/23 23:42:52 pia Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: L.Pandola
//
// History:
// -----------
// 07 Jan 2003 L.Pandola 1st implementation
// -------------------------------------------------------------------
// Class description:
// Low Energy Electromagnetic process, Photoelectric effect with
// Penelope model and tables
// -------------------------------------------------------------------
#ifndef G4PENELOPEPHOTOELECTRIC_HH
#define G4PENELOPEPHOTOELECTRIC_HH 1
#include "globals.hh"
#include "G4VDiscreteProcess.hh"
#include "G4AtomicDeexcitation.hh"
class G4Track;
class G4Step;
class G4ParticleDefinition;
class G4VParticleChange;
class G4VEMDataSet;
class G4VCrossSectionHandler;
class G4VRangeTest;
class G4PenelopePhotoElectric : public G4VDiscreteProcess {
public:
G4PenelopePhotoElectric(const G4String& processName ="PenPhotoElec");
~G4PenelopePhotoElectric();
G4bool IsApplicable(const G4ParticleDefinition&);
void BuildPhysicsTable(const G4ParticleDefinition& photon);
G4VParticleChange* PostStepDoIt(const G4Track& aTrack, const G4Step& aStep);
void SetCutForLowEnSecPhotons(G4double);
void SetCutForLowEnSecElectrons(G4double);
void ActivateAuger(G4bool);
// For testing purpose only
G4double DumpMeanFreePath(const G4Track& aTrack,
G4double previousStepSize,
G4ForceCondition* condition)
{ return GetMeanFreePath(aTrack, previousStepSize, condition); }
protected:
G4double GetMeanFreePath(const G4Track& aTrack,
G4double previousStepSize,
G4ForceCondition* condition);
private:
// Hide copy constructor and assignment operator as private
G4PenelopePhotoElectric& operator=(const G4PenelopePhotoElectric& right);
G4PenelopePhotoElectric(const G4PenelopePhotoElectric& );
G4double lowEnergyLimit; // low energy limit applied to the process
G4double highEnergyLimit; // high energy limit applied to the process
G4VEMDataSet* meanFreePathTable;
G4VCrossSectionHandler* crossSectionHandler;
G4VCrossSectionHandler* shellCrossSectionHandler;
G4VRangeTest* rangeTest;
const G4double intrinsicLowEnergyLimit; // intrinsic validity range
const G4double intrinsicHighEnergyLimit;
G4double cutForLowEnergySecondaryPhotons;
G4double cutForLowEnergySecondaryElectrons;
G4AtomicDeexcitation deexcitationManager;
};
#endif
@@ -0,0 +1,125 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * 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. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//
// $Id: G4PenelopeRayleigh.hh,v 1.3 2003/03/13 16:53:50 pandola Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Luciano Pandola
//
// History:
// -----------
// 01 Dec 2002 L.Pandola 1st implementation
// 14 Feb 2003 MG Pia Removed data member material
//
// -------------------------------------------------------------------
// Class description:
// Low Energy Electromagnetic process, Rayleigh effect
// Penelope model
// -------------------------------------------------------------------
#ifndef G4PENELOPERAYLEIGH_HH
#define G4PENELOPERAYLEIGH_HH 1
#include "globals.hh"
#include "G4VDiscreteProcess.hh"
#include "G4PenelopeIntegrator.hh"
class G4Track;
class G4Step;
class G4ParticleDefinition;
class G4VParticleChange;
class G4VEMDataSet;
class G4Material;
class G4DataVector;
class G4PenelopeRayleigh : public G4VDiscreteProcess {
public:
G4PenelopeRayleigh(const G4String& processName ="PenRayleigh");
~G4PenelopeRayleigh();
G4bool IsApplicable(const G4ParticleDefinition&);
void BuildPhysicsTable(const G4ParticleDefinition& photon);
G4VParticleChange* PostStepDoIt(const G4Track& aTrack, const G4Step& aStep);
G4double MolecularFormFactor(G4double x);
G4double DifferentialCrossSection (G4double e);
// For testing purpose only
G4double DumpMeanFreePath(const G4Track& aTrack,
G4double previousStepSize,
G4ForceCondition* condition)
{ return GetMeanFreePath(aTrack, previousStepSize, condition); }
protected:
G4double GetMeanFreePath(const G4Track& aTrack,
G4double previousStepSize,
G4ForceCondition* condition);
private:
// Hide copy constructor and assignment operator as private
G4PenelopeRayleigh& operator=(const G4PenelopeRayleigh &right);
G4PenelopeRayleigh(const G4PenelopeRayleigh& );
G4double lowEnergyLimit; // low energy limit applied to the process
G4double highEnergyLimit; // high energy limit applied to the process
//void InizialiseSampling(const G4Material* material);
void InizialiseSampling();
G4DataVector* samplingFunction_x;
G4DataVector* samplingFunction_y;
G4double samplingConstant;
G4double facte; //cross section factor
G4VEMDataSet* meanFreePathTable;
const G4Material* material;
const G4int nBins;
const G4double intrinsicLowEnergyLimit; // intrinsic validity range
const G4double intrinsicHighEnergyLimit;
};
#endif
@@ -21,14 +21,15 @@
// ********************************************************************
//
//
// $Id: G4RangeNoTest.hh,v 1.1 2001/10/08 07:51:41 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// $Id: G4RangeNoTest.hh,v 1.2 2003/01/22 18:42:22 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
// History:
// -----------
// 5 Oct 2001 MGP Created
// 5 Oct 2001 MGP Created
// 22 Jan 2003 V.Ivanchenko Cut per region
//
// -------------------------------------------------------------------
// Class description:
@@ -45,27 +46,27 @@
#include "G4VRangeTest.hh"
class G4ParticleDefinition;
class G4Material;
class G4MaterialCutsCouple;
class G4RangeNoTest : public G4VRangeTest {
public:
G4RangeNoTest() { }
virtual ~G4RangeNoTest() { }
virtual G4bool Escape(const G4ParticleDefinition* particle,
const G4Material* material,
G4double energy,
virtual G4bool Escape(const G4ParticleDefinition* particle,
const G4MaterialCutsCouple* couple,
G4double energy,
G4double safety) const { return true; }
private:
};
#endif
@@ -21,14 +21,15 @@
// ********************************************************************
//
//
// $Id: G4RangeTest.hh,v 1.2 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// $Id: G4RangeTest.hh,v 1.3 2003/01/22 18:42:23 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
// History:
// -----------
// 5 Oct 2001 MGP Created
// 5 Oct 2001 MGP Created
// 21 Jan 2003 VI Cuts per region
//
// -------------------------------------------------------------------
// Class description:
@@ -48,16 +49,16 @@ class G4ParticleDefinition;
class G4Material;
class G4RangeTest : public G4VRangeTest {
public:
G4RangeTest() { }
virtual ~G4RangeTest();
virtual G4bool Escape(const G4ParticleDefinition* particle,
const G4Material* material,
G4double energy,
virtual G4bool Escape(const G4ParticleDefinition* particle,
const G4MaterialCutsCouple* couple,
G4double energy,
G4double safety) const;
private:
@@ -22,7 +22,7 @@
//
//
// $Id: G4SemiLogInterpolation.hh,v 1.3 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4ShellData.hh,v 1.2 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4ShellEMDataSet.hh,v 1.4 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -29,7 +29,8 @@
// History:
// -----------
// 21 Sept 2001 Elena Guardincerri Created
// 25 Mar 2002 V.Ivanchenko Change AverageNOfIonisations int->double
// 25 Mar 2002 V.Ivanchenko Change AverageNOfIonisations int->double
// 12 Apr 2003 V.Ivanchenko Migrade to cut per region
//
// -------------------------------------------------------------------
@@ -46,25 +47,25 @@
#include "g4std/vector"
class G4VEMDataSet;
class G4Material;
class G4MaterialCutsCouple;
class G4Element;
class G4ShellVacancy
{
public:
G4ShellVacancy();
~G4ShellVacancy();
G4std::vector<G4int> GenerateNumberOfIonisations(const G4Material* material,
G4double incidentEnergy,
G4std::vector<G4int> GenerateNumberOfIonisations(const G4MaterialCutsCouple* couple,
G4double incidentEnergy,
G4double eLoss) const;
void AddXsiTable(G4VEMDataSet* set);
private:
G4double AverageNOfIonisations(const G4Material* material,
G4double AverageNOfIonisations(const G4MaterialCutsCouple* couple,
G4int index,
G4double energy,
G4double eLoss) const;
@@ -21,8 +21,8 @@
// ********************************************************************
//
//
// $Id: G4VCrossSectionHandler.hh,v 1.11 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// $Id: G4VCrossSectionHandler.hh,v 1.12 2003/01/22 18:42:23 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -31,6 +31,7 @@
// 16 Sep 2001 MGP Created
// 26 Sep 2001 V.Ivanchenko Hide copy constructor and assignement operator
// 18 Apr 2002 V.Ivanchenko Move member function ValueForMaterial to public
// 21 Jan 2003 V.Ivanchenko Cut per region
//
// -------------------------------------------------------------------
@@ -48,6 +49,7 @@
#include "G4DataVector.hh"
#include "g4std/map"
#include "g4std/vector"
#include "G4MaterialCutsCouple.hh"
class G4VDataSetAlgorithm;
class G4VEMDataSet;
@@ -55,34 +57,34 @@ class G4Material;
class G4Element;
class G4VCrossSectionHandler {
public:
G4VCrossSectionHandler();
G4VCrossSectionHandler(G4VDataSetAlgorithm* interpolation,
G4double minE = 250*eV, G4double maxE = 100*GeV,
G4double minE = 250*eV, G4double maxE = 100*GeV,
G4int nBins = 200,
G4double unitE = MeV, G4double unitData = barn,
G4int minZ = 1, G4int maxZ = 99);
virtual ~G4VCrossSectionHandler();
void Initialise(G4VDataSetAlgorithm* interpolation = 0,
G4double minE = 250*eV, G4double maxE = 100*GeV,
G4double minE = 250*eV, G4double maxE = 100*GeV,
G4int numberOfBins = 200,
G4double unitE = MeV, G4double unitData = barn,
G4int minZ = 1, G4int maxZ = 99);
G4int SelectRandomAtom(const G4Material* material, G4double e) const;
G4int SelectRandomAtom(const G4MaterialCutsCouple* couple, G4double e) const;
const G4Element* SelectRandomElement(const G4Material* material,
G4double e) const;
const G4Element* SelectRandomElement(const G4MaterialCutsCouple* material,
G4double e) const;
G4int SelectRandomShell(G4int Z, G4double e) const;
G4VEMDataSet* BuildMeanFreePathForMaterials(const G4DataVector* energyCuts = 0);
G4double FindValue(G4int Z, G4double e) const;
G4double FindValue(G4int Z, G4double e, G4int shellIndex) const;
@@ -94,21 +96,21 @@ public:
void LoadShellData(const G4String& dataFile);
void PrintData() const;
void Clear();
protected:
protected:
G4int NumberOfComponents(G4int Z) const;
void ActiveElements();
// Factory method
virtual G4std::vector<G4VEMDataSet*>* BuildCrossSectionsForMaterials(const G4DataVector& energyVector,
virtual G4std::vector<G4VEMDataSet*>* BuildCrossSectionsForMaterials(const G4DataVector& energyVector,
const G4DataVector* energyCuts = 0) = 0;
// Factory method
virtual G4VDataSetAlgorithm* CreateInterpolation();
virtual G4VDataSetAlgorithm* CreateInterpolation();
const G4VDataSetAlgorithm* GetInterpolation() const { return interpolation; }
@@ -120,7 +122,7 @@ private:
G4VCrossSectionHandler & operator=(const G4VCrossSectionHandler &right);
G4VDataSetAlgorithm* interpolation;
G4double eMin;
G4double eMax;
G4int nBins;
@@ -129,15 +131,15 @@ private:
G4double unit2;
G4int zMin;
G4int zMax;
G4int zMax;
G4DataVector activeZ;
G4std::map<G4int,G4VEMDataSet*,G4std::less<G4int> > dataMap;
G4std::vector<G4VEMDataSet*>* crossSections;
};
#endif
@@ -22,7 +22,7 @@
//
//
// $Id: G4VDataSetAlgorithm.hh,v 1.6 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4VEMDataSet.hh,v 1.6 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -21,14 +21,15 @@
// ********************************************************************
//
//
// $Id: G4VRangeTest.hh,v 1.1 2001/10/08 07:51:42 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// $Id: G4VRangeTest.hh,v 1.2 2003/01/22 18:42:23 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
// History:
// -----------
// 5 Oct 2001 MGP Created
// 5 Oct 2001 MGP Created
// 22 Jan 2003 V.Ivanchenko Cut per region
//
// -------------------------------------------------------------------
// Class description:
@@ -43,27 +44,27 @@
#include "globals.hh"
class G4ParticleDefinition;
class G4Material;
class G4MaterialCutsCouple;
class G4VRangeTest {
public:
G4VRangeTest() { }
virtual ~G4VRangeTest() { }
virtual G4bool Escape(const G4ParticleDefinition* particle,
const G4Material* material,
G4double energy,
virtual G4bool Escape(const G4ParticleDefinition* particle,
const G4MaterialCutsCouple* couple,
G4double energy,
G4double safety) const = 0;
private:
};
#endif
@@ -21,8 +21,8 @@
// ********************************************************************
//
//
// $Id: G4VeLowEnergyLoss.hh,v 1.7 2001/11/23 11:45:20 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-00 $
// $Id: G4VeLowEnergyLoss.hh,v 1.8 2003/01/22 18:42:24 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// 3.4.2000 Veronique Lefebure:
// Move utils/include/G4VEnergyLoss.hh to
@@ -45,12 +45,13 @@
// class.
//
// -----------------------------------------------------------
// created on 28 January 2000 by L. Urban
// created on 28 January 2000 by L. Urban
// -----------------------------------------------------------
//
// Modifications:
// 20/09/00 V.Ivanchenko update fluctuations
// 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
@@ -69,11 +70,11 @@
#include "G4VContinuousDiscreteProcess.hh"
#include "G4PhysicsLogVector.hh"
#include "G4PhysicsLinearVector.hh"
#include "G4MaterialCutsCouple.hh"
class G4VeLowEnergyLoss : public G4VContinuousDiscreteProcess
class G4VeLowEnergyLoss : public G4VContinuousDiscreteProcess
{
public:
public:
G4VeLowEnergyLoss(const G4String& ,
G4ProcessType aType = fNotDefined );
@@ -103,28 +104,28 @@ class G4VeLowEnergyLoss : public G4VContinuousDiscreteProcess
// code for the energy loss fluctuation
G4double GetLossWithFluct(const G4DynamicParticle* aParticle,
G4Material* aMaterial,
const G4MaterialCutsCouple* couple,
G4double MeanLoss,
G4double step);
private:
// hide default constructor and assignment operator as private
// hide default constructor and assignment operator as private
G4VeLowEnergyLoss();
G4VeLowEnergyLoss & operator=(const G4VeLowEnergyLoss &right);
protected:
// data members to speed up the fluctuation calculation
G4Material* lastMaterial;
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
// static part of the class
public: // With description
@@ -20,8 +20,8 @@
// * statement, and all its terms. *
// ********************************************************************
//
// $Id: G4eBremsstrahlungSpectrum.hh,v 1.3 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// $Id: G4eBremsstrahlungSpectrum.hh,v 1.5 2003/02/28 08:41:47 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// -------------------------------------------------------------------
//
@@ -31,17 +31,19 @@
// File name: G4EBremsstrahlungSpectrum
//
// Author: V.Ivanchenko (Vladimir.Ivantchenko@cern.ch)
//
//
// Creation date: 27 September 2001
//
// Modifications:
// Modifications:
// 10.10.01 MGP Revision to improve code quality and consistency with design
// 29.11.01 V.Ivanchenko Parametrisation is updated
// 21.02.03 V.Ivanchenko Energy bins are defined in the constructor
// 28.02.03 V.Ivanchenko Filename is defined in the constructor
//
// -------------------------------------------------------------------
// Class Description:
// Provides various integration over gamma spectrum of e- Bremsstrahlung.
// Class Description:
// Provides various integration over gamma spectrum of e- Bremsstrahlung.
// Parametrisation is described in Physics Reference Manual based on
// data from EEDL database.
// Further documentation available from http://www.ge.infn.it/geant4/lowE
@@ -53,7 +55,7 @@
#include "globals.hh"
#include "G4DataVector.hh"
#include "G4VEnergySpectrum.hh"
#include "G4VEnergySpectrum.hh"
class G4BremsstrahlungParameters;
@@ -61,51 +63,51 @@ class G4eBremsstrahlungSpectrum : public G4VEnergySpectrum
{
public:
G4eBremsstrahlungSpectrum();
G4eBremsstrahlungSpectrum(const G4DataVector& bins,const G4String& name);
~G4eBremsstrahlungSpectrum();
G4double Probability(G4int Z,
G4double tMin,
G4double tMax,
G4double kineticEnergy,
G4int shell=0,
G4double Probability(G4int Z,
G4double tMin,
G4double tMax,
G4double kineticEnergy,
G4int shell=0,
const G4ParticleDefinition* pd=0) const;
G4double AverageEnergy(G4int Z,
G4double tMin,
G4double AverageEnergy(G4int Z,
G4double tMin,
G4double tMax,
G4double kineticEnergy,
G4int shell=0,
G4int shell=0,
const G4ParticleDefinition* pd=0) const;
G4double SampleEnergy(G4int Z,
G4double tMin,
G4double SampleEnergy(G4int Z,
G4double tMin,
G4double tMax,
G4double kineticEnergy,
G4int shell=0,
G4int shell=0,
const G4ParticleDefinition* pd=0) const;
G4double MaxEnergyOfSecondaries(G4double kineticEnergy,
G4int Z = 0,
const G4ParticleDefinition* pd=0) const;
G4double Excitation(G4int Z, G4double kineticEnergy) const;
G4double Excitation(G4int Z, G4double kineticEnergy) const;
void PrintData() const;
private:
G4double IntSpectrum(G4double xMin, G4double xMax,
const G4DataVector& p) const;
const G4DataVector& p) const;
G4double AverageValue(G4double xMin, G4double xMax,
const G4DataVector& p) const;
G4double Function(G4double x, const G4DataVector& p) const;
const G4DataVector& p) const;
G4double Function(G4double x, const G4DataVector& p) const;
// Hide copy constructor and assignment operator
// Hide copy constructor and assignment operator
G4eBremsstrahlungSpectrum(const G4eBremsstrahlungSpectrum&);
G4eBremsstrahlungSpectrum & operator = (const G4eBremsstrahlungSpectrum &right);
@@ -113,7 +115,7 @@ private:
G4double lowestE;
size_t length;
G4int verbose;
G4DataVector xp;
const G4DataVector& xp;
};
#endif
@@ -21,7 +21,7 @@
// ********************************************************************
//
// $Id: G4eIonisationCrossSectionHandler.hh,v 1.4 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// -------------------------------------------------------------------
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4eIonisationParameters.hh,v 1.6 2001/11/29 19:01:45 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
// V. Ivanchenko
@@ -21,7 +21,7 @@
// ********************************************************************
//
// $Id: G4eIonisationSpectrum.hh,v 1.4 2002/05/30 19:52:23 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// -------------------------------------------------------------------
//
@@ -21,8 +21,8 @@
// ********************************************************************
//
//
// $Id: G4eLowEnergyLoss.hh,v 1.8 2002/03/28 11:48:56 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-00 $
// $Id: G4eLowEnergyLoss.hh,v 1.10 2003/02/07 15:39:03 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// -------------------------------------------------------------------
@@ -57,11 +57,12 @@
// 18.10.01 Revision to improve code quality and consistency with design
// 23.11.01 V.Ivanchenko Move static member-functions from header to source
// 28.03.02 V.Ivanchenko add fluorescence flag
// 21.01.03 V.Ivanchenko cut per region
// ------------------------------------------------------------
#ifndef G4eLowEnergyLoss_h
#define G4eLowEnergyLoss_h 1
#include "G4ios.hh"
#include "globals.hh"
#include "Randomize.hh"
@@ -79,19 +80,19 @@
#include "G4EnergyLossTables.hh"
class G4EnergyLossMessenger;
class G4eLowEnergyLoss : public G4VeLowEnergyLoss
{
public:
G4eLowEnergyLoss(const G4String& );
~G4eLowEnergyLoss();
G4bool IsApplicable(const G4ParticleDefinition&);
// true for e+/e- , false otherwise
void BuildDEDXTable(const G4ParticleDefinition& aParticleType);
// It builds dE/dx and range tables for aParticleType and
// for every material contained in the materialtable.
@@ -117,42 +118,43 @@ class G4eLowEnergyLoss : public G4VeLowEnergyLoss
const G4Step& step) = 0;
// Virtual function to be overridden in the derived classes
// ( ionisation and bremsstrahlung) .
static void SetNbOfProcesses(G4int nb);
// Sets number of processes giving contribution to the energy loss
static void PlusNbOfProcesses();
// Increases number of processes giving contribution to the energy loss
static void MinusNbOfProcesses();
static void MinusNbOfProcesses();
// Decreases number of processes giving contribution to the energy loss
static G4int GetNbOfProcesses();
// Gets number of processes giving contribution to the energy loss
// ( default value = 2)
static void SetLowerBoundEloss(G4double val);
static void SetUpperBoundEloss(G4double val);
static void SetLowerBoundEloss(G4double val);
static void SetUpperBoundEloss(G4double val);
static void SetNbinEloss(G4int nb);
static G4double GetLowerBoundEloss();
static G4double GetUpperBoundEloss();
static G4int GetNbinEloss();
static G4double GetLowerBoundEloss();
static G4double GetUpperBoundEloss();
static G4int GetNbinEloss();
void ActivateFluorescence(G4bool val);
// Set fluorescence flag on/off
G4bool Fluorescence() const;
// Get flurescence flag
// Get flurescence flag
protected:
virtual G4std::vector<G4DynamicParticle*>* DeexciteAtom(const G4Material* material,
G4double incidentEnergy,
G4double eLoss) { return 0; }
virtual G4std::vector<G4DynamicParticle*>* DeexciteAtom(
const G4MaterialCutsCouple* couple,
G4double incidentEnergy,
G4double eLoss) { return 0; };
G4PhysicsTable* theLossTable;
G4double MinKineticEnergy ; // particle with kinetic energy
// smaller than MinKineticEnergy
// is stopped in AlongStepDoIt
@@ -168,31 +170,31 @@ class G4eLowEnergyLoss : public G4VeLowEnergyLoss
//inverse tables of the range tables
static G4PhysicsTable* theInverseRangeElectronTable;
static G4PhysicsTable* theInverseRangePositronTable;
// lab and proper time tables
static G4PhysicsTable* theLabTimeElectronTable ;
static G4PhysicsTable* theLabTimePositronTable ;
static G4PhysicsTable* theProperTimeElectronTable ;
static G4PhysicsTable* theProperTimePositronTable ;
//processes inherited from G4eLowEnergyLoss
//processes inherited from G4eLowEnergyLoss
//register themselves in the static array Recorder
//for electrons/positrons separately
//nb of contributing processes = NbOfProcesses
static G4int NbOfProcesses;
static G4int CounterOfElectronProcess;
static G4int CounterOfPositronProcess ;
static G4int CounterOfPositronProcess ;
static G4PhysicsTable** RecorderOfElectronProcess;
static G4PhysicsTable** RecorderOfPositronProcess;
private:
G4double GetConstraints(const G4DynamicParticle* aParticle,
G4Material* aMaterial);
const G4MaterialCutsCouple* couple);
// hide assignment operator
G4eLowEnergyLoss (G4eLowEnergyLoss &);
G4eLowEnergyLoss (G4eLowEnergyLoss &);
G4eLowEnergyLoss & operator=(const G4eLowEnergyLoss &right);
@@ -200,21 +202,21 @@ class G4eLowEnergyLoss : public G4VeLowEnergyLoss
G4int CounterOfProcess;
G4PhysicsTable** RecorderOfProcess;
G4double fdEdx; // computed in GetConstraints
G4double fRangeNow; // computed in GetConstraints
G4double linLossLimit ; // used in AlongStepDoIt
//New ParticleChange
G4ParticleChangeForLoss fParticleChange ;
//
//
// static part of the class
//
static G4int NbinEloss; // number of bins in table,
static G4int NbinEloss; // number of bins in table,
// calculated in BuildPhysicTable
static G4double LowerBoundEloss;
static G4double UpperBoundEloss;
@@ -229,14 +231,14 @@ class G4eLowEnergyLoss : public G4VeLowEnergyLoss
static G4PhysicsTable* thepRangeCoeffATable;
static G4PhysicsTable* thepRangeCoeffBTable;
static G4PhysicsTable* thepRangeCoeffCTable;
static G4EnergyLossMessenger* eLossMessenger;
G4bool theFluo; // Fluorescence flag
G4bool theFluo; // Fluorescence flag
};
#include "G4eLowEnergyLoss.icc"
#endif
@@ -21,8 +21,8 @@
// ********************************************************************
//
//
// $Id: G4eLowEnergyLoss.icc,v 1.4 2002/03/28 11:48:58 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-00 $
// $Id: G4eLowEnergyLoss.icc,v 1.6 2003/04/18 17:50:32 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// ---------------------------------------------------------------
// GEANT 4 class inlined methods file
@@ -32,18 +32,20 @@
// ------------ G4eLowEnergyLoss physics process ------------
// by Laszlo Urban, 20 March 1997
// ***************************************************************
// It is the first implementation of the NEW UNIFIED ENERGY LOSS PROCESS.
// It is the first implementation of the NEW UNIFIED ENERGY LOSS PROCESS.
// It calculates the energy loss of e+/e-.
// -------------------------------------------------------------
//
// 08-09-98: cleanup
// 08-09-98 cleanup
// 28-03-02 V.Ivanchenko add fluorescence flag
// 21-01-03 V.Ivanchenko cut per region
// 18-04-03 V.Ivanchenko finalRange redefinition
//
// ---------------------------------------------------------------
inline G4double G4eLowEnergyLoss::GetConstraints(
const G4DynamicParticle* aParticle,
G4Material* aMaterial)
const G4MaterialCutsCouple* couple)
{
G4double StepLimit;
// returns the Step limit
@@ -53,25 +55,21 @@ inline G4double G4eLowEnergyLoss::GetConstraints(
const G4ParticleDefinition* ParticleType=aParticle->GetDefinition();
Charge = aParticle->GetDefinition()->GetPDGCharge();
if(Charge != lastCharge)
{
lastCharge = Charge ;
}
if(Charge != lastCharge) lastCharge = Charge ;
G4double KineticEnergy = aParticle->GetKineticEnergy();
fdEdx = G4EnergyLossTables::GetDEDX(ParticleType,KineticEnergy,aMaterial);
fdEdx = G4EnergyLossTables::GetDEDX(ParticleType,KineticEnergy,couple);
fRangeNow =
G4EnergyLossTables::GetRange(ParticleType,KineticEnergy,aMaterial);
G4EnergyLossTables::GetRange(ParticleType,KineticEnergy,couple);
// compute the (random) Step limit
if (fRangeNow>finalRange)
{
StepLimit = c1lim*fRangeNow+c2lim+c3lim/fRangeNow;
G4double r = G4std::min(finalRange, couple->GetProductionCuts()
->GetProductionCut(idxG4ElectronCut));
if (fRangeNow > r) {
StepLimit = dRoverRange*fRangeNow + r*(1.0 - dRoverRange)*(2.0 - r/fRangeNow);
//randomise this value
if (rndmStepFlag) StepLimit = finalRange +
(StepLimit-finalRange)*G4UniformRand();
if (rndmStepFlag) StepLimit = finalRange + (StepLimit-finalRange)*G4UniformRand();
if (StepLimit > fRangeNow) StepLimit = fRangeNow;
}
else StepLimit = fRangeNow;
@@ -79,7 +77,7 @@ inline G4double G4eLowEnergyLoss::GetConstraints(
return StepLimit;
}
//
//
inline G4double G4eLowEnergyLoss::GetContinuousStepLimit(
const G4Track& track,
@@ -87,16 +85,16 @@ inline G4double G4eLowEnergyLoss::GetContinuousStepLimit(
G4double currentMinimumStep,
G4double&)
{
G4double Step =
GetConstraints(track.GetDynamicParticle(),track.GetMaterial());
GetConstraints(track.GetDynamicParticle(),track.GetMaterialCutsCouple());
if ((Step>0.0)&&(Step<currentMinimumStep)) currentMinimumStep = Step;
return Step ;
}
//
//
inline G4bool G4eLowEnergyLoss::IsApplicable(const G4ParticleDefinition&
particle)
{
@@ -37,7 +37,7 @@
// 17 August 1999 G.Mancinelli implemented ICRU parametrization (protons)
// 20 August 1999 G.Mancinelli implemented ICRU parametrization (alpha)
// 31 August 1999 V.Ivanchenko update and cleen up
// 23 May 2000 MG Pia Clean up for QAO model
// 23 May 2000 MG Pia Clean up for QAO model
// 25 July 2000 V.Ivanchenko New design iteration
// 09 August 2000 V.Ivanchenko Add GetContinuousStepLimit
// 17 August 2000 V.Ivanchenko Add IonFluctuationModel
@@ -45,6 +45,7 @@
// 30 Oct 2001 V.Ivanchenko Add minGammaEnergy and minElectronEnergy
// 07 Dec 2001 V.Ivanchenko Add SetFluorescence method
// 26 Feb 2002 V.Ivanchenko Add initialMass for GenericIons
// 21 Jan 2003 V.Ivanchenko Cut per region
// ------------------------------------------------------------
// Class Description:
@@ -83,6 +84,7 @@
#include "G4IonChuFluctuationModel.hh"
#include "G4IonYangFluctuationModel.hh"
#include "G4AtomicDeexcitation.hh"
#include "G4MaterialCutsCouple.hh"
class G4VEMDataSet;
class G4ShellVacancy;
@@ -158,31 +160,31 @@ public: // With description
void SetNuclearStoppingOff() {nStopping = false;};
// This method switch off calculation of the nuclear stopping power.
void SetBarkasOn() {theBarkas = true;};
// This method switch on calculation of the Barkas and Bloch effects.
// This method switch on calculation of the Barkas and Bloch effects.
void SetBarkasOff() {theBarkas = false;};
// This method switch off calculation of the Barkas and Bloch effects.
void SetFluorescence(const G4bool val) {theFluo = val;};
// This method switch on/off simulation of the fluorescence of the media.
G4VParticleChange* AlongStepDoIt(const G4Track& trackData ,
// This method switch on/off simulation of the fluorescence of the media.
G4VParticleChange* AlongStepDoIt(const G4Track& trackData ,
const G4Step& stepData ) ;
// Function to determine total energy deposition on the step
G4VParticleChange* PostStepDoIt(const G4Track& track,
const G4Step& Step ) ;
const G4Step& Step ) ;
// Simulation of delta rays production.
G4double ComputeDEDX(const G4ParticleDefinition* aParticle,
const G4Material* material,
const G4MaterialCutsCouple* couple,
G4double kineticEnergy);
// This method returns electronic dE/dx for protons or antiproton.
void SetCutForSecondaryPhotons(G4double cut);
// Set threshold energy for fluorescence
// Set threshold energy for fluorescence
void SetCutForAugerElectrons(G4double cut);
// Set threshold energy for Auger electron production
@@ -204,14 +206,14 @@ private:
void BuildDataForFluorescence(const G4ParticleDefinition& aParticleType);
void BuildLambdaTable(const G4ParticleDefinition& aParticleType);
void SetProtonElectronicStoppingPowerModel(const G4String& dedxTable)
{theProtonTable = dedxTable ;};
// This method defines the ionisation parametrisation method via its name
void SetAntiProtonElectronicStoppingPowerModel(const G4String& dedxTable)
void SetProtonElectronicStoppingPowerModel(const G4String& dedxTable)
{theProtonTable = dedxTable ;};
// This method defines the ionisation parametrisation method via its name
void SetAntiProtonElectronicStoppingPowerModel(const G4String& dedxTable)
{theAntiProtonTable = dedxTable ;};
G4double ComputeMicroscopicCrossSection(
const G4ParticleDefinition& aParticleType,
G4double kineticEnergy,
@@ -219,48 +221,48 @@ private:
G4double deltaCutInEnergy) const;
G4double GetConstraints(const G4DynamicParticle* particle,
const G4Material* material);
const G4MaterialCutsCouple* couple);
// Function to determine StepLimit
G4double ProtonParametrisedDEDX(const G4Material* material,
G4double ProtonParametrisedDEDX(const G4MaterialCutsCouple* couple,
G4double kineticEnergy) const;
G4double AntiProtonParametrisedDEDX(const G4Material* material,
G4double AntiProtonParametrisedDEDX(const G4MaterialCutsCouple* couple,
G4double kineticEnergy) const;
G4double DeltaRaysEnergy(const G4Material* material,
G4double DeltaRaysEnergy(const G4MaterialCutsCouple* couple,
G4double kineticEnergy,
G4double particleMass) const;
// This method returns average energy loss due to delta-rays emission with
// This method returns average energy loss due to delta-rays emission with
// energy higher than the cut energy for given material.
G4double BarkasTerm(const G4Material* material,
G4double BarkasTerm(const G4Material* material,
G4double kineticEnergy) const;
// Function to compute the Barkas term for protons
// Function to compute the Barkas term for protons
G4double BlochTerm(const G4Material* material,
G4double kineticEnergy,
G4double cSquare) const;
G4double cSquare) const;
// Function to compute the Bloch term for protons
G4double ElectronicLossFluctuation(const G4DynamicParticle* particle,
const G4Material* material,
const G4MaterialCutsCouple* material,
G4double meanLoss,
G4double step) const;
// Function to sample electronic losses
G4std::vector<G4DynamicParticle*>* DeexciteAtom(const G4Material* material,
G4std::vector<G4DynamicParticle*>* DeexciteAtom(const G4MaterialCutsCouple* couple,
G4double incidentEnergy,
G4double hMass,
G4double eLoss);
G4int SelectRandomAtom(const G4Material* material,
G4int SelectRandomAtom(const G4MaterialCutsCouple* couple,
G4double kineticEnergy) const;
// hide assignment operator
// hide assignment operator
G4hLowEnergyIonisation & operator=(const G4hLowEnergyIonisation &right);
G4hLowEnergyIonisation(const G4hLowEnergyIonisation&);
private:
// private data members ...............................
G4VLowEnergyModel* theBetheBlochModel;
@@ -276,7 +278,7 @@ private:
G4String theAntiProtonTable;
G4String theNuclearTable;
// interval of parametrisation of electron stopping power
// interval of parametrisation of electron stopping power
G4double protonLowEnergy;
G4double protonHighEnergy;
G4double antiProtonLowEnergy;
@@ -291,15 +293,15 @@ private:
G4double minGammaEnergy;
G4double minElectronEnergy;
G4PhysicsTable* theMeanFreePathTable;
const G4double paramStepLimit; // parameter limits the step at low energy
G4double fdEdx; // computed in GetContraints
G4double fRangeNow ; //
G4double fRangeNow ; //
G4double charge; //
G4double chargeSquare; //
G4double initialMass; // mass to calculate Lambda tables
G4AtomicDeexcitation deexcitationManager;
G4ShellVacancy* shellVacancy;
G4VhShellCrossSection* shellCS;
@@ -309,15 +311,15 @@ private:
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline G4double G4hLowEnergyIonisation::GetContinuousStepLimit(
const G4Track& track,
G4double,
G4double currentMinimumStep,
G4double&)
{
{
G4double Step =
GetConstraints(track.GetDynamicParticle(),track.GetMaterial()) ;
GetConstraints(track.GetDynamicParticle(),track.GetMaterialCutsCouple()) ;
if((Step>0.0)&&(Step<currentMinimumStep))
currentMinimumStep = Step ;
@@ -328,16 +330,16 @@ inline G4double G4hLowEnergyIonisation::GetContinuousStepLimit(
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline G4bool G4hLowEnergyIonisation::IsApplicable(
const G4ParticleDefinition& particle)
const G4ParticleDefinition& particle)
{
return(particle.GetPDGCharge() != 0.0
return(particle.GetPDGCharge() != 0.0
&& particle.GetPDGMass() > proton_mass_c2*0.1);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -21,8 +21,8 @@
// ********************************************************************
//
//
// $Id: G4hLowEnergyLoss.hh,v 1.13 2001/11/23 11:45:20 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-00 $
// $Id: G4hLowEnergyLoss.hh,v 1.15 2003/04/18 17:50:32 vnivanch Exp $
// GEANT4 tag $Name: geant4-05-01 $
//
// $Id:
// ------------------------------------------------------------
@@ -50,16 +50,18 @@
// 31/03/00 V.Ivanchenko rename to lowenergy as G4hLowEnergyLoss.hh
// 09/08/00 V.Ivanchenko remove GetContinuousStepLimit and IsApplicable
// 23/11/01 V.Ivanchenko Move static member-functions from header to source
// 22/01/03 V.Ivanchenko Cuts per region
// 18/04/03 V.Ivanchenko Make dRoverRange protected
//
// Class description:
// Class for Low Energy electromagnetic energy loss of hadrons
// Class for Low Energy electromagnetic energy loss of hadrons
// Further documentation available from http://www.ge.infn.it/geant4/lowE
// ****************************************************************************
#ifndef G4hLowEnergyLoss_h
#define G4hLowEnergyLoss_h 1
#include "G4ios.hh"
#include "globals.hh"
#include "Randomize.hh"
@@ -74,11 +76,11 @@
#include "G4Step.hh"
#include "G4PhysicsLogVector.hh"
#include "G4PhysicsLinearVector.hh"
class G4EnergyLossMessenger;
class G4hLowEnergyLoss : public G4VContinuousDiscreteProcess
{
public:
@@ -98,9 +100,11 @@ class G4hLowEnergyLoss : public G4VContinuousDiscreteProcess
protected:
G4bool CutsWhereModified();
private:
// hide assignment operator
// hide assignment operator
G4hLowEnergyLoss(G4hLowEnergyLoss &);
G4hLowEnergyLoss & operator=(const G4hLowEnergyLoss &right);
@@ -116,18 +120,18 @@ class G4hLowEnergyLoss : public G4VContinuousDiscreteProcess
static G4double Mass,taulow,tauhigh,ltaulow,ltauhigh;
protected:
G4Material *lastMaterial ;
// G4Material *lastMaterial ;
const G4double MaxExcitationNumber ;
const G4double probLimFluct ;
const long nmaxDirectFluct,nmaxCont1,nmaxCont2 ;
// ====================================================================
// static part of the class
public:
// get the number of processes contributing to the cont.energy loss
static G4int GetNumberOfProcesses();
static G4int GetNumberOfProcesses();
// set the number of processes contributing to the cont.energy loss
static void SetNumberOfProcesses(G4int number);
@@ -209,7 +213,7 @@ class G4hLowEnergyLoss : public G4VContinuousDiscreteProcess
static G4PhysicsTable* theProperTimepTable ;
static G4PhysicsTable* theProperTimepbarTable ;
// processes inherited from G4hLowEnergyLoss
// processes inherited from G4hLowEnergyLoss
// register themselves in the static array Recorder
static G4PhysicsTable** RecorderOfpProcess;
static G4PhysicsTable** RecorderOfpbarProcess;
@@ -230,7 +234,7 @@ class G4hLowEnergyLoss : public G4VContinuousDiscreteProcess
static G4double HighestKineticEnergy;
static G4int TotBin; // number of bins in table,
// calculated in BuildPhysicsTable
static G4double RTable,LOGRTable; // LOGRTable=log(HighestKineticEnergy
// /LowestKineticEnergy)/TotBin
// RTable = exp(LOGRTable)
@@ -259,16 +263,16 @@ class G4hLowEnergyLoss : public G4VContinuousDiscreteProcess
static G4PhysicsTable* theRangeCoeffCTable;
static G4int NumberOfProcesses ;
static G4double dRoverRange ; // maximum allowed deltarange/range
// in one step
protected:
G4PhysicsTable* theLossTable ;
G4double linLossLimit ;
G4double MinKineticEnergy ;
static G4double dRoverRange ; // maximum allowed deltarange/range
// in one step
static G4double finalRange ; // last step before stop
static G4double c1lim,c2lim,c3lim ; // coeffs for computing steplimit
@@ -278,6 +282,6 @@ class G4hLowEnergyLoss : public G4VContinuousDiscreteProcess
};
#endif
@@ -22,7 +22,7 @@
//
//
// $Id: G4hLowEnergyLoss.icc,v 1.2 2001/07/11 10:02:40 gunter Exp $
// GEANT4 tag $Name: geant4-05-00 $
// GEANT4 tag $Name: geant4-05-01 $
//
// $Id:
// ---------------------------------------------------------------
@@ -0,0 +1,80 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * 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. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
//
// GEANT4 Class file
//
//
// File name: G4hSRIM2000p
//
// Author: V.Ivanchenko (Vladimir.Ivanchenko@cern.ch)
//
// Creation date: 7 Jan 2003
//
// Modifications:
// 07/01/2003 V.Ivanchenko First implementation
//
// Class Description:
//
// Electronic stopping power parametrised according to
// J. F. Ziegler, SRIM-2000 software package from www.SRIM.org
//
// -------------------------------------------------------------------
//
#ifndef G4hSRIM2000p_h
#define G4hSRIM2000p_h 1
#include "globals.hh"
#include "G4VhElectronicStoppingPower.hh"
class G4Material;
class G4hSRIM2000p : public G4VhElectronicStoppingPower
{
public:
G4hSRIM2000p();
~G4hSRIM2000p();
G4bool HasMaterial(const G4Material* material);
G4double StoppingPower(const G4Material* material,
G4double kineticEnergy);
G4double ElectronicStoppingPower(G4double z,
G4double kineticEnergy) const;
protected:
private:
const G4double protonMassAMU;
static G4double a[92][8];
};
#endif