Import Geant4 9.4.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 16:25:56 +02:00
parent 74cad5e589
commit 89a9605df1
4440 changed files with 379508 additions and 189225 deletions
@@ -0,0 +1,92 @@
//
// ********************************************************************
// * 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: G4AnalyticalEcpssrKCrossSection.hh,v 1.1 2010/06/06 23:40:35 mantero Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
#ifndef G4ANALYTICALECPSSRKCROSSSECTION_HH
#define G4ANALYTICALECPSSRKCROSSSECTION_HH 1
#include "G4VecpssrKModel.hh"
#include "globals.hh"
#include <map>
#include <vector>
#include "G4DNACrossSectionDataSet.hh"
class G4AnalyticalEcpssrKCrossSection : public G4VecpssrKModel
{
public:
G4AnalyticalEcpssrKCrossSection();
~G4AnalyticalEcpssrKCrossSection();
G4double CalculateCrossSection(G4int, G4double, G4double);//according to W.Brandt and G.Lapicki, Phys.Rev.A23(1981)
G4double ExpIntFunction(G4int n,G4double x);//Exponential Integral Function
private:
G4AnalyticalEcpssrKCrossSection(const G4AnalyticalEcpssrKCrossSection&);
G4AnalyticalEcpssrKCrossSection & operator = (const G4AnalyticalEcpssrKCrossSection &right);
G4double FunctionFK(G4double k, G4double theta);
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 FKData;
std::vector<double> dummyVec;
typedef std::map<double, std::vector<double> > VecMap;
VecMap aVecMap;
G4int verboseLevel;
G4DNACrossSectionDataSet* tableC1;
G4DNACrossSectionDataSet* tableC2;
G4DNACrossSectionDataSet* tableC3;
};
#endif
@@ -0,0 +1,125 @@
//
// ********************************************************************
// * 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: G4AnalyticalEcpssrLiCrossSection.hh,v 1.2 2010/06/25 09:41:09 gunter Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
// Author: Haifa Ben Abdelouahed
//
//
// History:
// -----------
// 23 Apr 2008 H. Ben Abdelouahed 1st implementation
// 28 Apr 2008 MGP Major revision according to a design iteration
// 29 Apr 2009 ALF Updated Desing for Integration
// 01 Sep 2009 ALF Updated to G4AnalyticalEcpssrLiCrossSection
//
// -------------------------------------------------------------------
// Class description:
// Low Energy Electromagnetic Physics, Cross section, p and alpha ionisation, L shell
// Further documentation available from http://www.ge.infn.it/geant4/lowE
// -------------------------------------------------------------------
#ifndef G4ANALYTICALECPSSRLICROSSSECTION_HH
#define G4ANALYTICALECPSSRLICROSSSECTION_HH 1
#include "G4VecpssrLiModel.hh"
#include "globals.hh"
#include <map>
#include <vector>
class G4AnalyticalEcpssrLiCrossSection : public G4VecpssrLiModel
{
public:
G4AnalyticalEcpssrLiCrossSection();
~G4AnalyticalEcpssrLiCrossSection();
G4double CalculateL1CrossSection(G4int zTarget,G4double massIncident, G4double energyIncident);//according to W.Brandt and G.Lapicki, Phys.Rev.A23(1981)
G4double CalculateL2CrossSection(G4int zTarget,G4double massIncident, G4double energyIncident);//according to W.Brandt and G.Lapicki, Phys.Rev.A23(1981)
G4double CalculateL3CrossSection(G4int zTarget,G4double massIncident, G4double energyIncident);//according to W.Brandt and G.Lapicki, Phys.Rev.A23(1981)
G4double CalculateVelocity(G4int subShell, G4int zTarget,G4double massIncident, G4double energyIncident);
G4double ExpIntFunction(G4int n,G4double x);//Exponential Integral Function
private:
G4AnalyticalEcpssrLiCrossSection(const G4AnalyticalEcpssrLiCrossSection&);
G4AnalyticalEcpssrLiCrossSection & operator = (const G4AnalyticalEcpssrLiCrossSection &right);
G4double FunctionFL1(G4double k, G4double theta);
G4double FunctionFL2(G4double k, G4double theta);
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 LinLinInterpolate(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 FL1Data;
TriDimensionMap FL2Data;
std::vector<double> dummyVec1;
std::vector<double> dummyVec2;
typedef std::map<double, std::vector<double> > VecMap;
VecMap aVecMap1;
VecMap aVecMap2;
G4int verboseLevel;
};
#endif
@@ -0,0 +1,95 @@
//
// ********************************************************************
// * 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: G4BoldyshevTripletModel.hh,v 1.1 2010/11/10 17:09:16 flongo Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
#ifndef G4BoldyshevTripletModel_h
#define G4BoldyshevTripletModel_h 1
#include "G4VEmModel.hh"
#include "G4Electron.hh"
#include "G4Positron.hh"
#include "G4ParticleChangeForGamma.hh"
#include "G4CrossSectionHandler.hh"
#include "G4ForceCondition.hh"
#include "G4CompositeEMDataSet.hh"
#include "G4Gamma.hh"
class G4BoldyshevTripletModel : public G4VEmModel
{
public:
G4BoldyshevTripletModel(const G4ParticleDefinition* p = 0,
const G4String& nam = "BoldyshevTriplet");
virtual ~G4BoldyshevTripletModel();
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 SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy);
protected:
G4ParticleChangeForGamma* fParticleChange;
G4double GetMeanFreePath(const G4Track& aTrack,
G4double previousStepSize,
G4ForceCondition* condition);
private:
const G4double smallEnergy;
G4double lowEnergyLimit;
G4double highEnergyLimit;
G4int verboseLevel;
G4bool isInitialised;
G4VCrossSectionHandler* crossSectionHandler;
G4VEMDataSet* meanFreePathTable;
G4BoldyshevTripletModel & operator=(const G4BoldyshevTripletModel &right);
G4BoldyshevTripletModel(const G4BoldyshevTripletModel&);
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -0,0 +1,68 @@
//
// ********************************************************************
// * 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: G4DNAAttachment.hh,v 1.1 2010/09/08 13:46:45 sincerti Exp $
// GEANT4 tag $Name: geant4-09-04 $
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
// Created by Z. Francis
#ifndef G4DNAAttachment_h
#define G4DNAAttachment_h 1
#include "G4VEmProcess.hh"
// Available models
#include "G4DNAMeltonAttachmentModel.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4DNAAttachment : public G4VEmProcess
{
public:
G4DNAAttachment(const G4String& processName ="DNAAttachment",
G4ProcessType type = fElectromagnetic);
virtual ~G4DNAAttachment();
virtual G4bool IsApplicable(const G4ParticleDefinition&);
virtual void PrintInfo();
protected:
virtual void InitialiseProcess(const G4ParticleDefinition*);
private:
G4bool isInitialised;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4DNABornExcitationModel.hh,v 1.1 2009/01/12 14:26:02 sincerti Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4DNABornExcitationModel.hh,v 1.4 2010/03/27 12:46:51 sincerti Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
#ifndef G4DNABornExcitationModel_h
@@ -36,6 +36,7 @@
#include "G4DNACrossSectionDataSet.hh"
#include "G4LogLogInterpolation.hh"
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4WaterExcitationStructure.hh"
@@ -49,7 +50,7 @@ public:
virtual ~G4DNABornExcitationModel();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector& = *(new G4DataVector()) );
virtual G4double CrossSectionPerVolume(const G4Material* material,
const G4ParticleDefinition* p,
@@ -69,30 +70,30 @@ protected:
private:
G4double lowEnergyLimit;
G4double highEnergyLimit;
std::map<G4String,G4double,std::less<G4String> > lowEnergyLimit;
std::map<G4String,G4double,std::less<G4String> > highEnergyLimit;
G4bool isInitialised;
G4int verboseLevel;
// Cross section
G4DNACrossSectionDataSet* table;
typedef std::map<G4String,G4String,std::less<G4String> > MapFile;
MapFile tableFile;
typedef std::map<G4String,G4DNACrossSectionDataSet*,std::less<G4String> > MapData;
MapData tableData;
// Partial cross section
G4int RandomSelect(G4double energy);
G4int RandomSelect(G4double energy,const G4String& particle );
// Final state
G4WaterExcitationStructure waterStructure;
// Test water material
G4bool flagMaterialIsWater;
G4double densityWater;
//
G4DNABornExcitationModel & operator=(const G4DNABornExcitationModel &right);
G4DNABornExcitationModel(const G4DNABornExcitationModel&);
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4DNABornIonisationModel.hh,v 1.3 2009/06/26 10:15:19 mantero Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4DNABornIonisationModel.hh,v 1.5 2010/03/28 18:33:19 sincerti Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
#ifndef G4DNABornIonisationModel_h
@@ -54,7 +54,7 @@ public:
virtual ~G4DNABornIonisationModel();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector& = *(new G4DataVector()));
virtual G4double CrossSectionPerVolume( const G4Material* material,
const G4ParticleDefinition* p,
@@ -67,6 +67,8 @@ public:
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy);
double DifferentialCrossSection(G4ParticleDefinition * aParticleDefinition, G4double k, G4double energyTransfer, G4int shell);
protected:
@@ -97,8 +99,6 @@ private:
void RandomizeEjectedElectronDirection(G4ParticleDefinition * aParticleDefinition, G4double incomingParticleEnergy, G4double
outgoingParticleEnergy, G4double & cosTheta, G4double & phi );
double DifferentialCrossSection(G4ParticleDefinition * aParticleDefinition, G4double k, G4double energyTransfer, G4int shell);
G4double LogLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2);
G4double QuadInterpolator( G4double e11,
@@ -128,11 +128,6 @@ private:
G4int RandomSelect(G4double energy,const G4String& particle );
// Test water material
G4bool flagMaterialIsWater;
G4double densityWater;
//
G4DNABornIonisationModel & operator=(const G4DNABornIonisationModel &right);
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4DNAChampionElasticModel.hh,v 1.1 2009/01/12 14:26:02 sincerti Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4DNAChampionElasticModel.hh,v 1.4 2010/11/11 22:32:22 sincerti Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
#ifndef G4DNAChampionElasticModel_h
@@ -44,23 +44,26 @@ class G4DNAChampionElasticModel : public G4VEmModel
public:
G4DNAChampionElasticModel(const G4ParticleDefinition* p = 0,
const G4String& nam = "DNAChampionElasticModel");
const G4String& nam = "DNAChampionElasticModel");
virtual ~G4DNAChampionElasticModel();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual G4double CrossSectionPerVolume(const G4Material* material,
const G4ParticleDefinition* p,
G4double ekin,
G4double emin,
G4double emax);
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:
@@ -70,7 +73,6 @@ private:
G4double killBelowEnergy;
G4double lowEnergyLimit;
G4double lowEnergyLimitOfModel;
G4double highEnergyLimit;
G4bool isInitialised;
G4int verboseLevel;
@@ -85,12 +87,16 @@ private:
// Final state
G4double DifferentialCrossSection(G4ParticleDefinition * aParticleDefinition, G4double k, G4double theta);
//G4double DifferentialCrossSection(G4ParticleDefinition * aParticleDefinition, G4double k, G4double theta);
G4double Theta(G4ParticleDefinition * aParticleDefinition, G4double k, G4double integrDiff);
G4double LinLinInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2);
G4double LogLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2);
G4double LinLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2);
G4double LogLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2);
G4double QuadInterpolator(G4double e11,
G4double e12,
G4double e21,
@@ -114,11 +120,6 @@ private:
G4double RandomizeCosTheta(G4double k);
// Test water material
G4bool flagMaterialIsWater;
G4double densityWater;
//
G4DNAChampionElasticModel & operator=(const G4DNAChampionElasticModel &right);
@@ -126,6 +127,18 @@ private:
};
inline void G4DNAChampionElasticModel::SetKillBelowThreshold (G4double threshold)
{
killBelowEnergy = threshold;
if (threshold < 1*eV)
G4Exception ("*** WARNING : the G4DNAChampionElasticModel class is not validated below 1 eV !","",JustWarning,"") ;
if (threshold < 0.025*eV) threshold = 0.025*eV;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4DNADingfelderChargeDecreaseModel.hh,v 1.1 2009/01/12 14:26:02 sincerti Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4DNADingfelderChargeDecreaseModel.hh,v 1.2 2010/01/07 18:10:19 sincerti Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
#ifndef G4DNADingfelderChargeDecreaseModel_h
@@ -103,11 +103,6 @@ private:
G4double OutgoingParticleBindingEnergyConstant(G4ParticleDefinition* particleDefinition, G4int finalStateIndex);
// Test water material
G4bool flagMaterialIsWater;
G4double densityWater;
//
G4DNADingfelderChargeDecreaseModel & operator=(const G4DNADingfelderChargeDecreaseModel &right);
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4DNADingfelderChargeIncreaseModel.hh,v 1.1 2009/01/12 14:26:02 sincerti Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4DNADingfelderChargeIncreaseModel.hh,v 1.2 2010/01/07 18:10:19 sincerti Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
#ifndef G4DNADingfelderChargeIncreaseModel_h
@@ -106,11 +106,6 @@ private:
G4double IncomingParticleBindingEnergyConstant(G4ParticleDefinition* particleDefinition, G4int finalStateIndex);
// Test water material
G4bool flagMaterialIsWater;
G4double densityWater;
//
G4DNADingfelderChargeIncreaseModel & operator=(const G4DNADingfelderChargeIncreaseModel &right);
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4DNAEmfietzoglouExcitationModel.hh,v 1.1 2009/01/12 14:26:02 sincerti Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4DNAEmfietzoglouExcitationModel.hh,v 1.3 2010/03/26 19:52:44 sincerti Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
#ifndef G4DNAEmfietzoglouExcitationModel_h
@@ -49,7 +49,7 @@ public:
virtual ~G4DNAEmfietzoglouExcitationModel();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector& = *(new G4DataVector()) );
virtual G4double CrossSectionPerVolume(const G4Material* material,
const G4ParticleDefinition* p,
@@ -88,11 +88,6 @@ private:
G4WaterExcitationStructure waterExcitation;
// Test water material
G4bool flagMaterialIsWater;
G4double densityWater;
//
G4DNAEmfietzoglouExcitationModel & operator=(const G4DNAEmfietzoglouExcitationModel &right);
@@ -0,0 +1,97 @@
//
// ********************************************************************
// * 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: G4DNAMeltonAttachmentModel.hh,v 1.1 2010/09/08 13:46:45 sincerti Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
// Created by Z. Francis
#ifndef G4DNAMeltonAttachmentModel_h
#define G4DNAMeltonAttachmentModel_h 1
#include "G4VEmModel.hh"
#include "G4ParticleChangeForGamma.hh"
#include "G4DNAGenericIonsManager.hh"
#include "G4DNACrossSectionDataSet.hh"
#include "G4Electron.hh"
#include "G4LogLogInterpolation.hh"
class G4DNAMeltonAttachmentModel : public G4VEmModel
{
public:
G4DNAMeltonAttachmentModel(const G4ParticleDefinition* p = 0,
const G4String& nam = "DNAMeltonAttachmentModel");
virtual ~G4DNAMeltonAttachmentModel();
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);
protected:
G4ParticleChangeForGamma* fParticleChangeForGamma;
private:
G4double lowEnergyLimit;
G4double highEnergyLimit;
G4double lowEnergyLimitOfModel;
G4bool isInitialised;
G4int verboseLevel;
// Cross section
typedef std::map<G4String,G4String,std::less<G4String> > MapFile;
MapFile tableFile;
typedef std::map<G4String,G4DNACrossSectionDataSet*,std::less<G4String> > MapData;
MapData tableData;
//
G4DNAMeltonAttachmentModel & operator=(const G4DNAMeltonAttachmentModel &right);
G4DNAMeltonAttachmentModel(const G4DNAMeltonAttachmentModel&);
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4DNAMillerGreenExcitationModel.hh,v 1.1 2009/01/12 14:26:03 sincerti Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4DNAMillerGreenExcitationModel.hh,v 1.2 2010/01/07 18:10:19 sincerti Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
#ifndef G4DNAMillerGreenExcitationModel_h
@@ -114,13 +114,6 @@ private:
G4double slaterEffectiveCharge[3][4];
G4double sCoefficient[3][4];
// Final state
// Test water material
G4bool flagMaterialIsWater;
G4double densityWater;
//
G4DNAMillerGreenExcitationModel & operator=(const G4DNAMillerGreenExcitationModel &right);
@@ -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. *
// ********************************************************************
//
// $Id: G4DNARuddIonisationExtendedModel.hh,v 1.1 2010/11/03 10:44:26 sincerti Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
#ifndef G4DNARuddIonisationExtendedModel_h
#define G4DNARuddIonisationExtendedModel_h 1
#include "G4VEmModel.hh"
#include "G4ParticleChangeForGamma.hh"
#include "G4ProductionCutsTable.hh"
#include "G4DNAGenericIonsManager.hh"
#include "G4DNACrossSectionDataSet.hh"
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4LogLogInterpolation.hh"
#include "G4WaterIonisationStructure.hh"
class G4DNARuddIonisationExtendedModel : public G4VEmModel
{
public:
G4DNARuddIonisationExtendedModel(const G4ParticleDefinition* p = 0,
const G4String& nam = "DNARuddIonisationExtendedModel");
virtual ~G4DNARuddIonisationExtendedModel();
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);
protected:
G4ParticleChangeForGamma* fParticleChangeForGamma;
private:
std::map<G4String,G4double,std::less<G4String> > lowEnergyLimit;
std::map<G4String,G4double,std::less<G4String> > highEnergyLimit;
// ZF 26-10-2010
std::map<G4double,G4double> lowEnergyLimitForA, lowEnergyLimitOfModelForA, killBelowEnergyForA;
G4bool isInitialised;
G4int verboseLevel;
// Cross section
typedef std::map<G4String,G4String,std::less<G4String> > MapFile;
MapFile tableFile;
typedef std::map<G4String,G4DNACrossSectionDataSet*,std::less<G4String> > MapData;
MapData tableData;
// Final state
G4WaterIonisationStructure waterStructure;
G4double RandomizeEjectedElectronEnergy(G4ParticleDefinition* particleDefinition,
G4double incomingParticleEnergy,
G4int shell);
void RandomizeEjectedElectronDirection(G4ParticleDefinition* particleDefinition,
G4double incomingParticleEnergy,
G4double outgoingParticleEnergy,
G4double & cosTheta,
G4double & phi, G4int shell);
G4double RejectionFunction(G4ParticleDefinition* particle,
G4double k,
G4double proposed_ws,
G4int ionizationLevelIndex);
G4double ProposedSampledEnergy(G4ParticleDefinition* particle,
G4double k,
G4int ionizationLevelIndex);
G4double CorrectionFactor(G4ParticleDefinition* particleDefinition, G4double k, G4int shell);
G4double S_1s(G4double t,
G4double energyTransferred,
G4double slaterEffectiveChg,
G4double shellNumber);
G4double S_2s(G4double t,
G4double energyTransferred,
G4double slaterEffectiveChg,
G4double shellNumber);
G4double S_2p(G4double t,
G4double energyTransferred,
G4double slaterEffectiveChg,
G4double shellNumber);
G4double R(G4double t,
G4double energyTransferred,
G4double slaterEffectiveChg,
G4double shellNumber) ;
G4double slaterEffectiveCharge[3];
G4double sCoefficient[3];
// Partial cross section
G4double PartialCrossSection(const G4Track& track);
G4double Sum(G4double energy, const G4String& particle);
G4int RandomSelect(G4double energy,const G4String& particle );
// Test water material
G4bool flagMaterialIsWater;
G4double densityWater;
//
G4DNARuddIonisationExtendedModel & operator=(const G4DNARuddIonisationExtendedModel &right);
G4DNARuddIonisationExtendedModel(const G4DNARuddIonisationExtendedModel&);
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4DNARuddIonisationModel.hh,v 1.3 2009/06/26 09:42:32 mantero Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4DNARuddIonisationModel.hh,v 1.4 2010/01/07 18:10:19 sincerti Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
#ifndef G4DNARuddIonisationModel_h
@@ -147,11 +147,6 @@ private:
G4int RandomSelect(G4double energy,const G4String& particle );
// Test water material
G4bool flagMaterialIsWater;
G4double densityWater;
//
G4DNARuddIonisationModel & operator=(const G4DNARuddIonisationModel &right);
@@ -0,0 +1,116 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4DNASancheExcitationModel.hh,v 1.3 2010/11/11 23:43:35 sincerti Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
// Created by Z. Francis
#ifndef G4DNASancheExcitationModel_h
#define G4DNASancheExcitationModel_h 1
#include "G4VEmModel.hh"
#include "G4ParticleChangeForGamma.hh"
#include <deque>
#include "G4Electron.hh"
class G4DNASancheExcitationModel : public G4VEmModel
{
public:
G4DNASancheExcitationModel(const G4ParticleDefinition* p = 0,
const G4String& nam = "DNASancheExcitationModel");
virtual ~G4DNASancheExcitationModel();
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);
// Cross section
G4double PartialCrossSection(G4double energy,G4int level);
inline void ExtendLowEnergyLimit (G4double /*threshold*/);
protected:
G4ParticleChangeForGamma* fParticleChangeForGamma;
private:
G4double killBelowEnergy;
G4double lowEnergyLimit;
G4double highEnergyLimit;
G4bool isInitialised;
G4int verboseLevel;
// Cross section
G4int RandomSelect(G4double energy);
G4int nLevels;
G4double VibrationEnergy(G4int level);
G4double Sum(G4double k);
G4double LinInterpolate(G4double e1,
G4double e2,
G4double e,
G4double xs1,
G4double xs2);
//
typedef std::map<double, std::map<double, double> > TriDimensionMap;
TriDimensionMap map1;
std::vector<double> tdummyVec;
//
G4DNASancheExcitationModel & operator=(const G4DNASancheExcitationModel &right);
G4DNASancheExcitationModel(const G4DNASancheExcitationModel&);
};
inline void G4DNASancheExcitationModel::ExtendLowEnergyLimit (G4double threshold)
{
lowEnergyLimit = threshold;
if (lowEnergyLimit < 2*eV)
G4Exception ("*** WARNING : the G4DNASancheExcitationModel class is not validated below 2 eV !","",JustWarning,"") ;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4DNAScreenedRutherfordElasticModel.hh,v 1.1 2009/01/12 14:26:03 sincerti Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4DNAScreenedRutherfordElasticModel.hh,v 1.4 2010/11/11 22:32:22 sincerti Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
#ifndef G4DNAScreenedRutherfordElasticModel_h
@@ -58,6 +58,9 @@ public:
G4double tmin,
G4double maxEnergy);
inline void SetKillBelowThreshold (G4double threshold);
G4double GetKillBelowThreshold () { return killBelowEnergy; }
protected:
G4ParticleChangeForGamma* fParticleChangeForGamma;
@@ -66,8 +69,7 @@ private:
G4double killBelowEnergy;
G4double lowEnergyLimit;
G4double lowEnergyLimitOfModel;
G4double intermediateEnergyLimit;
G4double intermediateEnergyLimit;
G4double highEnergyLimit;
G4bool isInitialised;
G4int verboseLevel;
@@ -92,11 +94,6 @@ private:
G4double ScreenedRutherfordRandomizeCosTheta(G4double k, G4double z);
// Test water material
G4bool flagMaterialIsWater;
G4double densityWater;
//
G4DNAScreenedRutherfordElasticModel & operator=(const G4DNAScreenedRutherfordElasticModel &right);
@@ -104,6 +101,13 @@ private:
};
inline void G4DNAScreenedRutherfordElasticModel::SetKillBelowThreshold (G4double threshold)
{
killBelowEnergy = threshold;
if (threshold < 9*eV)
G4Exception ("*** WARNING : the G4DNAScreenedRutherfordElasticModel class is not validated below 9 eV !","",JustWarning,"") ;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -0,0 +1,67 @@
//
// ********************************************************************
// * 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: G4DNAVibExcitation.hh,v 1.1 2010/09/08 13:46:45 sincerti Exp $
// GEANT4 tag $Name: geant4-09-04 $
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
// Created by Z. Francis
#ifndef G4DNAVibExcitation_h
#define G4DNAVibExcitation_h 1
#include "G4VEmProcess.hh"
// Available models
#include "G4DNASancheExcitationModel.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4DNAVibExcitation : public G4VEmProcess
{
public:
G4DNAVibExcitation(const G4String& processName ="DNAVibrationalExcitation",
G4ProcessType type = fElectromagnetic);
virtual ~G4DNAVibExcitation();
virtual G4bool IsApplicable(const G4ParticleDefinition&);
virtual void PrintInfo();
protected:
virtual void InitialiseProcess(const G4ParticleDefinition*);
private:
G4bool isInitialised;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -23,6 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4Generator2BN.hh,v 1.4 2010/10/14 14:00:29 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
// -------------------------------------------------------------------
//
@@ -62,9 +64,9 @@ class G4Generator2BN : public G4VBremAngularDistribution
public:
G4Generator2BN(const G4String& name);
G4Generator2BN(const G4String& name = "");
~G4Generator2BN();
virtual ~G4Generator2BN();
G4double PolarAngle(const G4double initial_energy,
const G4double final_energy,
@@ -23,6 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4Generator2BS.hh,v 1.5 2010/10/14 14:00:29 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
// -------------------------------------------------------------------
//
@@ -38,13 +40,15 @@
// Creation date: 2 June 2003
//
// Modifications:
// 02 Jun 2003 First implementation acording with new design
// 02 Jun 2003 First implementation acording with new design
// 12 Oct 2010 V.Ivanchenko moved RejectionFunction inline
//
//
// Class Description:
//
// Concrete class for Bremsstrahlung Angular Distribution Generation - 2BS Distribution
// Further documentation available from http://www.ge.infn.it/geant4/lowE
// Concrete class for Bremsstrahlung Angular Distribution Generation
// 2BS Distribution
//
// -------------------------------------------------------------------
//
@@ -56,14 +60,16 @@
#include "globals.hh"
#include "G4VBremAngularDistribution.hh"
class G4Pow;
class G4Generator2BS : public G4VBremAngularDistribution
{
public:
G4Generator2BS(const G4String& name);
G4Generator2BS(const G4String& name="");
~G4Generator2BS();
virtual ~G4Generator2BS();
G4double PolarAngle(const G4double initial_energy,
const G4double final_energy,
@@ -73,18 +79,28 @@ public:
protected:
G4double RejectionFunction(G4double value) const;
inline G4double RejectionFunction(G4double value) const;
private:
G4double z;
G4double rejection_argument1, rejection_argument2, rejection_argument3;
G4double EnergyRatio;
G4Pow* g4pow;
// hide assignment operator
G4Generator2BS & operator=(const G4Generator2BS &right);
G4Generator2BS(const G4Generator2BS&);
G4Generator2BS & operator=(const G4Generator2BS &right);
G4Generator2BS(const G4Generator2BS&);
};
inline G4double G4Generator2BS::RejectionFunction(G4double value) const
{
G4double argument = (1+value)*(1+value);
return (4+std::log(rejection_argument3+(z/argument)))*
((4*EnergyRatio*value/argument)-rejection_argument1)+rejection_argument2;
}
#endif
@@ -23,7 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
// $Id: G4IonParametrisedLossModel.hh,v 1.8 2010/11/04 12:21:47 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
// ===========================================================================
// GEANT4 class header file
@@ -135,7 +136,7 @@ class G4IonParametrisedLossModel : public G4VEmModel {
G4double); // Length of current step
// Function, which computes the mean energy transfer rate to delta rays
G4double DeltaRayMeanEnergyTransferRate(
inline G4double DeltaRayMeanEnergyTransferRate(
const G4Material*, // Target Material
const G4ParticleDefinition*, // Projectile
G4double, // Kinetic energy of projectile
@@ -182,7 +183,7 @@ class G4IonParametrisedLossModel : public G4VEmModel {
// Function checking the applicability of physics tables to ion-material
// combinations (Note: the energy range of tables is not checked)
LossTableList::iterator IsApplicable(
inline LossTableList::iterator IsApplicable(
const G4ParticleDefinition*, // Projectile (ion)
const G4Material*); // Target material
@@ -207,9 +208,11 @@ class G4IonParametrisedLossModel : public G4VEmModel {
G4bool); // Logarithmic scaling of energy
// Function for setting energy loss limit for stopping power integration
void SetEnergyLossLimit(G4double ionEnergyLossLimit);
inline void SetEnergyLossLimit(G4double ionEnergyLossLimit);
protected:
virtual
G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
G4double); // Kinetic energy of projectile
@@ -230,7 +233,7 @@ class G4IonParametrisedLossModel : public G4VEmModel {
const G4MaterialCutsCouple*); // Target material
// Function, which updates parameters concering particle properties
void UpdateCache(
inline void UpdateCache(
const G4ParticleDefinition*); // Projectile (ion)
// Function, which builds range vs energy (and energy vs range) vectors
@@ -286,13 +289,10 @@ class G4IonParametrisedLossModel : public G4VEmModel {
// ######################################################################
// Pointer to particle change object, which is used to set e.g. the
// energy loss due to nuclear stopping
// energy loss and secondary delta-electron
// used indicating if model is initialized
G4ParticleChangeForLoss* particleChangeLoss;
// Flag indicating if model is initialized (i.e. if
// G4ParticleChangeForLoss was created)
G4bool modelIsInitialised;
// ######################################################################
// # Corrections and energy loss limit
// #
@@ -23,7 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
// $Id: G4IonParametrisedLossModel.icc,v 1.7 2010/11/04 12:21:47 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
// ===========================================================================
// GEANT4 class
@@ -42,6 +43,7 @@
// (tables are now built in initialisation phase),
// Minor bug fix in ComputeDEDXPerVolume (AL)
// 20. 11. 2009 - Added set-method for energy loss limit (AL)
// 04. 11. 2010 - Moved virtual methods to the source (VI)
//
// Class description:
// Model for computing the energy loss of ions by employing a
@@ -54,7 +56,6 @@
//
// ===========================================================================
inline G4double G4IonParametrisedLossModel::DeltaRayMeanEnergyTransferRate(
const G4Material* material,
const G4ParticleDefinition* particle,
@@ -115,35 +116,6 @@ inline G4double G4IonParametrisedLossModel::DeltaRayMeanEnergyTransferRate(
return meanRate;
}
inline
G4double G4IonParametrisedLossModel::MaxSecondaryEnergy(
const G4ParticleDefinition* particle,
G4double kineticEnergy) {
// ############## Maximum energy of secondaries ##########################
// Function computes maximum energy of secondary electrons which are
// released by an ion
//
// See Geant4 physics reference manual (version 9.1), section 9.1.1
//
// Ref.: W.M. Yao et al, Jour. of Phys. G 33 (2006) 1.
// C.Caso et al. (Part. Data Group), Europ. Phys. Jour. C 3 1 (1998).
// B. Rossi, High energy particles, New York, NY: Prentice-Hall (1952).
//
// (Implementation adapted from G4BraggIonModel)
if(particle != cacheParticle) UpdateCache(particle);
G4double tau = kineticEnergy/cacheMass;
G4double tmax = 2.0 * electron_mass_c2 * tau * (tau + 2.) /
(1. + 2.0 * (tau + 1.) * cacheElecMassRatio +
cacheElecMassRatio * cacheElecMassRatio);
return tmax;
}
inline
void G4IonParametrisedLossModel::UpdateCache(
const G4ParticleDefinition* particle) {
@@ -155,35 +127,6 @@ void G4IonParametrisedLossModel::UpdateCache(
cacheChargeSquare = q * q;
}
inline
G4double G4IonParametrisedLossModel::GetChargeSquareRatio(
const G4ParticleDefinition* particle,
const G4Material* material,
G4double kineticEnergy) { // Kinetic energy
G4double chargeSquareRatio = corrections ->
EffectiveChargeSquareRatio(particle,
material,
kineticEnergy);
corrFactor = chargeSquareRatio *
corrections -> EffectiveChargeCorrection(particle,
material,
kineticEnergy);
return corrFactor;
}
inline
G4double G4IonParametrisedLossModel::GetParticleCharge(
const G4ParticleDefinition* particle,
const G4Material* material,
G4double kineticEnergy) { // Kinetic energy
return corrections -> GetParticleCharge(particle, material, kineticEnergy);
}
inline
LossTableList::iterator G4IonParametrisedLossModel::IsApplicable(
const G4ParticleDefinition* particle, // Projectile (ion)
@@ -0,0 +1,97 @@
//
// ********************************************************************
// * 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: G4LivermoreGammaConversionModelRC.hh,v 1.1 2010/11/10 17:12:21 flongo Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
#ifndef G4LivermoreGammaConversionModelRC_h
#define G4LivermoreGammaConversionModelRC_h 1
#include "G4VEmModel.hh"
#include "G4Electron.hh"
#include "G4Positron.hh"
#include "G4ParticleChangeForGamma.hh"
#include "G4CrossSectionHandler.hh"
#include "G4ForceCondition.hh"
#include "G4CompositeEMDataSet.hh"
#include "G4Gamma.hh"
class G4LivermoreGammaConversionModelRC : public G4VEmModel
{
public:
G4LivermoreGammaConversionModelRC(const G4ParticleDefinition* p = 0,
const G4String& nam = "LivermoreConversion");
virtual ~G4LivermoreGammaConversionModelRC();
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 SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy);
protected:
G4ParticleChangeForGamma* fParticleChange;
G4double GetMeanFreePath(const G4Track& aTrack,
G4double previousStepSize,
G4ForceCondition* condition);
private:
const G4double smallEnergy;
G4double lowEnergyLimit;
G4double highEnergyLimit;
G4int verboseLevel;
G4bool isInitialised;
G4double ScreenFunction1(G4double screenVariable);
G4double ScreenFunction2(G4double screenVariable);
G4VCrossSectionHandler* crossSectionHandler;
G4VEMDataSet* meanFreePathTable;
G4LivermoreGammaConversionModelRC & operator=(const G4LivermoreGammaConversionModelRC &right);
G4LivermoreGammaConversionModelRC(const G4LivermoreGammaConversionModelRC&);
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -0,0 +1,97 @@
//
// ********************************************************************
// * 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: G4LivermoreNuclearGammaConversionModel.hh,v 1.1 2010/11/10 17:09:16 flongo Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
#ifndef G4LivermoreNuclearGammaConversionModel_h
#define G4LivermoreNuclearGammaConversionModel_h 1
#include "G4VEmModel.hh"
#include "G4Electron.hh"
#include "G4Positron.hh"
#include "G4ParticleChangeForGamma.hh"
#include "G4CrossSectionHandler.hh"
#include "G4ForceCondition.hh"
#include "G4CompositeEMDataSet.hh"
#include "G4Gamma.hh"
class G4LivermoreNuclearGammaConversionModel : public G4VEmModel
{
public:
G4LivermoreNuclearGammaConversionModel(const G4ParticleDefinition* p = 0,
const G4String& nam = "LivermoreNuclearGammaConversion");
virtual ~G4LivermoreNuclearGammaConversionModel();
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 SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy);
protected:
G4ParticleChangeForGamma* fParticleChange;
G4double GetMeanFreePath(const G4Track& aTrack,
G4double previousStepSize,
G4ForceCondition* condition);
private:
const G4double smallEnergy;
G4double lowEnergyLimit;
G4double highEnergyLimit;
G4int verboseLevel;
G4bool isInitialised;
G4double ScreenFunction1(G4double screenVariable);
G4double ScreenFunction2(G4double screenVariable);
G4VCrossSectionHandler* crossSectionHandler;
G4VEMDataSet* meanFreePathTable;
G4LivermoreNuclearGammaConversionModel & operator=(const G4LivermoreNuclearGammaConversionModel &right);
G4LivermoreNuclearGammaConversionModel(const G4LivermoreNuclearGammaConversionModel&);
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -23,9 +23,13 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4LivermorePhotoElectricModel.hh,v 1.3 2009/04/17 10:29:20 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4LivermorePhotoElectricModel.hh,v 1.4 2010/03/15 09:02:29 pandola Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
// 15-Mar-2010 L. Pandola, removed methods to set explicitely fluorescence cuts.
// Main cuts from G4ProductionCutsTable are always used
//
#ifndef G4LivermorePhotoElectricModel_h
#define G4LivermorePhotoElectricModel_h 1
@@ -75,10 +79,6 @@ public:
G4double tmin,
G4double maxEnergy);
void SetCutForLowEnSecPhotons(G4double);
void SetCutForLowEnSecElectrons(G4double);
void ActivateAuger(G4bool);
void SetAngularGenerator(G4VPhotoElectricAngularDistribution* distribution);
@@ -88,11 +88,8 @@ public:
protected:
G4ParticleChangeForGamma* fParticleChange;
/*
G4double GetMeanFreePath(const G4Track& aTrack,
G4double previousStepSize,
G4ForceCondition* condition);
*/
private:
G4double lowEnergyLimit;
@@ -106,9 +103,6 @@ private:
G4VCrossSectionHandler* crossSectionHandler;
G4VCrossSectionHandler* shellCrossSectionHandler;
G4double cutForLowEnergySecondaryPhotons;
G4double cutForLowEnergySecondaryElectrons;
G4AtomicDeexcitation deexcitationManager;
G4VPhotoElectricAngularDistribution* ElectronAngularGenerator;
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4LivermorePolarizedPhotoElectricModel.hh,v 1.1 2009/10/30 14:52:05 flongo Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4LivermorePolarizedPhotoElectricModel.hh,v 1.2 2010/11/23 16:42:15 flongo Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
#ifndef G4LivermorePolarizedPhotoElectricModel_h
@@ -43,7 +43,7 @@
#include "G4AtomicShell.hh"
#include "G4ProductionCutsTable.hh"
#include "G4ForceCondition.hh"
#include "G4Gamma.hh"
class G4LivermorePolarizedPhotoElectricModel : public G4VEmModel
{
@@ -72,10 +72,9 @@ public:
G4double maxEnergy);
void SetCutForLowEnSecPhotons(G4double);
void SetCutForLowEnSecElectrons(G4double);
// void SetCutForLowEnSecPhotons(G4double);
// void SetCutForLowEnSecElectrons(G4double);
void ActivateAuger(G4bool);
@@ -84,9 +83,10 @@ protected:
G4ParticleChangeForGamma* fParticleChange;
G4double GetMeanFreePath(const G4Track& aTrack,
G4double previousStepSize,
G4ForceCondition* condition);
//G4double GetMeanFreePath(const G4Track& aTrack,
//G4double previousStepSize,
// G4ForceCondition* condition);
private:
G4double lowEnergyLimit;
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4OrlicLCrossSection.hh,v 1.3 2008/06/03 07:29:15 gcosmo Exp $
// GEANT4 tag $Name: geant4-09-02 $
// $Id: G4OrlicLiCrossSection.hh,v 1.2 2009/06/11 15:46:18 mantero Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
// Author: Haifa Ben Abdelouahed
//
@@ -33,6 +33,8 @@
// -----------
// 23 Apr 2008 H. Ben Abdelouahed 1st implementation
// 28 Apr 2008 MGP Major revision according to a design iteration
// 21 Apr 2009 ALF Some correction for compatibility to G4VShellCrossSection
// and changed name to G4OrlicLiCrossSection
//
// -------------------------------------------------------------------
@@ -43,20 +45,20 @@
// -------------------------------------------------------------------
#ifndef G4ORLICLCROSSSECTION_HH
#define G4ORLICLCROSSSECTION_HH 1
#ifndef G4ORLICLICROSSSECTION_HH
#define G4ORLICLICROSSSECTION_HH 1
#include "globals.hh"
#include "G4AtomicTransitionManager.hh"
class G4OrlicLCrossSection
class G4OrlicLiCrossSection
{
public:
G4OrlicLCrossSection();
G4OrlicLiCrossSection();
virtual ~G4OrlicLCrossSection();
virtual ~G4OrlicLiCrossSection();
//according to I.ORLIC, C.H.SOW and S.M.TANG,International Journal of PIXE.Vol.4(1997) 217-230
@@ -70,8 +72,10 @@ public:
private:
G4OrlicLCrossSection(const G4OrlicLCrossSection&);
G4OrlicLCrossSection & operator = (const G4OrlicLCrossSection &right);
G4OrlicLiCrossSection(const G4OrlicLiCrossSection&);
G4OrlicLiCrossSection & operator = (const G4OrlicLiCrossSection &right);
G4AtomicTransitionManager* transitionManager;
};
@@ -24,13 +24,29 @@
// ********************************************************************
//
//
// History:
// -----------
// 21 Apr 2008 H. Abdelohauwed - 1st implementation
// 29 Apr 2009 ALF Major Design Revision
//
// -------------------------------------------------------------------
// Class description:
// Low Energy Electromagnetic Physics, Cross section, p ionisation, K shell
// Further documentation available from http://www.ge.infn.it/geant4/lowE
// -------------------------------------------------------------------
#ifndef G4PAULKCROSSSECTION_HH
#define G4PAULKCROSSSECTION_HH 1
//#include "G4VDataSetAlgorithm.hh"
#include "globals.hh"
#include <map>
class G4VDataSetAlgorithm;
class G4VEMDataSet;
class G4PaulKCrossSection
@@ -41,18 +57,22 @@ public:
virtual ~G4PaulKCrossSection();
G4double CalculateKCrossSection(G4int zTarget,G4int zIncident, G4double energyIncident);
G4double CalculateKCrossSection(G4int zTarget,G4double massIncident, G4double energyIncident);
private:
G4PaulKCrossSection(const G4PaulKCrossSection&);
G4PaulKCrossSection & operator = (const G4PaulKCrossSection &right);
G4VDataSetAlgorithm* interpolation;
std::map< G4int , G4VEMDataSet* > protonDataSetMap;
std::map< G4int , G4VEMDataSet* > alphaDataSetMap;
};
#endif
@@ -0,0 +1,132 @@
//
// ********************************************************************
// * 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: G4Penelope08ComptonModel.hh,v 1.2 2010/03/19 11:33:24 pandola Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
// Author: Luciano Pandola
//
// History:
// -----------
// 15 Feb 2010 L. Pandola 1st implementation.
// 18 Mar 2010 L. Pandola Removed GetAtomsPerMolecule(), now demanded
// to G4PenelopeOscillatorManager
//
// -------------------------------------------------------------------
//*
// Class description:
// Low Energy Electromagnetic Physics, Compton Scattering
// with Penelope Model, version 2008
// -------------------------------------------------------------------
#ifndef G4PENELOPE08COMPTONMODEL_HH
#define G4PENELOPE08COMPTONMODEL_HH 1
#include "globals.hh"
#include "G4VEmModel.hh"
#include "G4DataVector.hh"
#include "G4ParticleChangeForGamma.hh"
#include "G4AtomicDeexcitation.hh"
class G4ParticleDefinition;
class G4DynamicParticle;
class G4MaterialCutsCouple;
class G4Material;
class G4PenelopeOscillatorManager;
class G4PenelopeOscillator;
class G4Penelope08ComptonModel : public G4VEmModel
{
public:
G4Penelope08ComptonModel(const G4ParticleDefinition* p=0,
const G4String& processName ="PenCompton");
virtual ~G4Penelope08ComptonModel();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
virtual G4double CrossSectionPerVolume(const G4Material*,
const G4ParticleDefinition*,
G4double kineticEnergy,
G4double cutEnergy = 0.0,
G4double maxEnergy = DBL_MAX);
//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
//G4EmCalculator.
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
G4double,
G4double,
G4double,
G4double,
G4double);
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy);
void SetVerbosityLevel(G4int lev){verboseLevel = lev;};
G4int GetVerbosityLevel(){return verboseLevel;};
void ActivateAuger(G4bool);
protected:
G4ParticleChangeForGamma* fParticleChange;
private:
//Differential cross section which is numerically integrated
G4double DifferentialCrossSection (G4double cdt,G4double energy,
G4PenelopeOscillator* osc);
G4double OscillatorTotalCrossSection(G4double energy,
G4PenelopeOscillator* osc);
G4double KleinNishinaCrossSection(G4double energy,const G4Material*);
G4Penelope08ComptonModel & operator=(const G4Penelope08ComptonModel &right);
G4Penelope08ComptonModel(const G4Penelope08ComptonModel&);
//Intrinsic energy limits of the model:
//cannot be extended by the parent process
G4double fIntrinsicLowEnergyLimit;
G4double fIntrinsicHighEnergyLimit;
G4int verboseLevel;
G4bool isInitialised;
G4AtomicDeexcitation deexcitationManager;
G4PenelopeOscillatorManager* oscManager;
};
#endif
@@ -0,0 +1,124 @@
//
// ********************************************************************
// * 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: G4Penelope08GammaConversionModel.hh,v 1.1 2010/03/17 14:19:04 pandola Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
// Author: Luciano Pandola
//
// History:
// -----------
// 13 Jan 2010 L. Pandola First implementation
//
// -------------------------------------------------------------------
//
// Class description:
// Low Energy Electromagnetic Physics, Gamma Conversion
// with Penelope Model, version 2008
// -------------------------------------------------------------------
#ifndef G4PENELOPE08GAMMACONVERSIONMODEL_HH
#define G4PENELOPE08GAMMACONVERSIONMODEL_HH 1
#include "globals.hh"
#include "G4VEmModel.hh"
#include "G4DataVector.hh"
#include "G4ParticleChangeForGamma.hh"
class G4ParticleDefinition;
class G4DynamicParticle;
class G4MaterialCutsCouple;
class G4Material;
class G4PhysicsFreeVector;
class G4Penelope08GammaConversionModel : public G4VEmModel
{
public:
G4Penelope08GammaConversionModel(const G4ParticleDefinition* p=0,
const G4String& processName ="PenConversion");
virtual ~G4Penelope08GammaConversionModel();
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 SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy);
void SetVerbosityLevel(G4int lev){verboseLevel = lev;};
G4int GetVerbosityLevel(){return verboseLevel;};
protected:
G4ParticleChangeForGamma* fParticleChange;
private:
G4Penelope08GammaConversionModel & operator=(const
G4Penelope08GammaConversionModel &right);
G4Penelope08GammaConversionModel(const G4Penelope08GammaConversionModel&);
//Intrinsic energy limits of the model: cannot be extended by the parent process
G4double fIntrinsicLowEnergyLimit;
G4double fIntrinsicHighEnergyLimit;
//Use a quicker sampling algorithm if E < smallEnergy
G4double fSmallEnergy;
std::map<const G4int,G4PhysicsFreeVector*> *logAtomicCrossSection;
void ReadDataFile(const G4int Z);
void InitializeScreeningRadii();
G4double fAtomicScreeningRadius[99];
void InitializeScreeningFunctions(const G4Material*);
//Effective (scalar) properties attached to materials:
// effective charge
std::map<const G4Material*,G4double> *fEffectiveCharge;
// 2/Rs (Rs = screening radius), BCB array in Penelope
std::map<const G4Material*,G4double> *fMaterialInvScreeningRadius;
// Parameters of screening functions
std::map<const G4Material*,std::pair<G4double,G4double> > *fScreeningFunction;
std::pair<G4double,G4double> GetScreeningFunctions(G4double);
G4int verboseLevel;
G4bool isInitialised;
};
#endif
@@ -0,0 +1,172 @@
//
// ********************************************************************
// * 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: G4Penelope08IonisationModel.hh,v 1.1 2010/07/28 07:12:13 pandola Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
// Author: Luciano Pandola
//
// History:
// -----------
// 30 Mar 2010 L. Pandola 1st implementation.
//
// -------------------------------------------------------------------
//
// Class description:
// Low Energy Electromagnetic Physics, e+ and e- ionisation
// with Penelope Model, version 2008
// -------------------------------------------------------------------
#ifndef G4PENELOPE08IONISATIONMODEL_HH
#define G4PENELOPE08IONISATIONMODEL_HH 1
#include "globals.hh"
#include "G4VEmModel.hh"
#include "G4DataVector.hh"
#include "G4ParticleChangeForLoss.hh"
#include "G4AtomicDeexcitation.hh"
class G4PhysicsFreeVector;
class G4PhysicsLogVector;
class G4ParticleDefinition;
class G4DynamicParticle;
class G4MaterialCutsCouple;
class G4Material;
class G4PenelopeOscillatorManager;
class G4PenelopeOscillator;
class G4PenelopeCrossSection;
class G4Penelope08IonisationModel : public G4VEmModel
{
public:
G4Penelope08IonisationModel(const G4ParticleDefinition* p=0,
const G4String& processName ="PenIoni");
virtual ~G4Penelope08IonisationModel();
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
//*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
//*G4EmCalculator.
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
G4double,
G4double,
G4double,
G4double,
G4double);
virtual G4double CrossSectionPerVolume(const G4Material* material,
const G4ParticleDefinition* theParticle,
G4double kineticEnergy,
G4double cutEnergy,
G4double maxEnergy = DBL_MAX);
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
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 SetVerbosityLevel(G4int lev){verboseLevel = lev;};
G4int GetVerbosityLevel(){return verboseLevel;};
void ActivateAuger(G4bool);
G4double GetDensityCorrection(const G4Material*,G4double energy);
protected:
G4ParticleChangeForLoss* fParticleChange;
private:
void ClearTables();
G4Penelope08IonisationModel & operator=(const G4Penelope08IonisationModel &right);
G4Penelope08IonisationModel(const G4Penelope08IonisationModel&);
G4PenelopeCrossSection* GetCrossSectionTableForCouple(const G4ParticleDefinition*,
const G4Material*,G4double cut);
void BuildXSTable(const G4Material*,G4double cut,
const G4ParticleDefinition*);
void BuildDeltaTable(const G4Material*);
G4DataVector* ComputeShellCrossSectionsElectron(G4PenelopeOscillator* ,
G4double energy,G4double cut,
G4double delta);
G4DataVector* ComputeShellCrossSectionsPositron(G4PenelopeOscillator* ,
G4double energy,G4double cut,
G4double delta);
void SampleFinalStateElectron(const G4Material*,G4double cutEnergy,G4double kineticEnergy);
void SampleFinalStatePositron(const G4Material*,G4double cutEnergy,G4double kineticEnergy);
//Intrinsic energy limits of the model: cannot be extended by the parent process
G4double fIntrinsicLowEnergyLimit;
G4double fIntrinsicHighEnergyLimit;
G4int verboseLevel;
G4bool isInitialised;
G4AtomicDeexcitation deexcitationManager;
G4double kineticEnergy1;
G4double cosThetaPrimary;
G4double energySecondary;
G4double cosThetaSecondary;
G4int targetOscillator;
G4PenelopeOscillatorManager* oscManager;
//G4PenelopeCrossSection takes care of the logs
std::map< std::pair<const G4Material*,G4double>, G4PenelopeCrossSection*> *XSTableElectron;
std::map< std::pair<const G4Material*,G4double>, G4PenelopeCrossSection*> *XSTablePositron;
//delta vs. log(energy)
std::map<const G4Material*,G4PhysicsFreeVector*> *theDeltaTable;
G4PhysicsLogVector* energyGrid;
size_t nBins;
};
#endif
@@ -0,0 +1,125 @@
//
// ********************************************************************
// * 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: G4Penelope08PhotoElectricModel.hh,v 1.1 2010/03/17 14:19:04 pandola Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
// Author: Luciano Pandola
//
// History:
// -----------
// 08 Jan 2010 L. Pandola 1st implementation.
//
// -------------------------------------------------------------------
//
// Class description:
// Low Energy Electromagnetic Physics, Photo-electric effect
// with Penelope Model, version 2008
// -------------------------------------------------------------------
#ifndef G4PENELOPE08PHOTOELECTRICMODEL_HH
#define G4PENELOPE08PHOTOELECTRICMODEL_HH 1
#include "globals.hh"
#include "G4VEmModel.hh"
#include "G4DataVector.hh"
#include "G4ParticleChangeForGamma.hh"
#include "G4AtomicDeexcitation.hh"
class G4ParticleDefinition;
class G4DynamicParticle;
class G4MaterialCutsCouple;
class G4Material;
class G4Penelope08PhotoElectricModel : public G4VEmModel
{
public:
G4Penelope08PhotoElectricModel(const G4ParticleDefinition* p=0,
const G4String& processName ="PenPhotoElec");
virtual ~G4Penelope08PhotoElectricModel();
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 SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy);
void SetVerbosityLevel(G4int lev){verboseLevel = lev;};
G4int GetVerbosityLevel(){return verboseLevel;};
void ActivateAuger(G4bool);
//testing purposes
size_t GetNumberOfShellXS(G4int);
G4double GetShellCrossSection(G4int Z,size_t shellID,G4double energy);
protected:
G4ParticleChangeForGamma* fParticleChange;
private:
G4Penelope08PhotoElectricModel & operator=(const G4Penelope08PhotoElectricModel &right);
G4Penelope08PhotoElectricModel(const G4Penelope08PhotoElectricModel&);
G4double SampleElectronDirection(G4double energy);
//Intrinsic energy limits of the model: cannot be extended by the parent process
G4double fIntrinsicLowEnergyLimit;
G4double fIntrinsicHighEnergyLimit;
G4int verboseLevel;
G4bool isInitialised;
G4AtomicDeexcitation deexcitationManager;
void ReadDataFile(G4int Z);
//For each Z, the PhysicsTable contains nShell+1 physics vectors
//with log(E) vs. log(XS)
//Element [0] of the table is the total XS, element [iS] is the
//partial cross section for shell iS-1
std::map<const G4int,G4PhysicsTable*> *logAtomicShellXS;
size_t SelectRandomShell(G4int Z,G4double energy);
G4String WriteTargetShell(size_t shellID);
};
#endif
@@ -0,0 +1,127 @@
//
// ********************************************************************
// * 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: G4Penelope08RayleighModel.hh,v 1.1 2010/03/17 14:19:04 pandola Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
// Author: Luciano Pandola
//
// History:
// -----------
// 03 Dec 2009 L. Pandola 1st implementation.
//
// -------------------------------------------------------------------
//
// Class description:
// Low Energy Electromagnetic Physics, Rayleigh Scattering
// with the model from Penelope, version 2008
// -------------------------------------------------------------------
#ifndef G4PENELOPE08RAYLEIGHMODEL_HH
#define G4PENELOPE08RAYLEIGHMODEL_HH 1
#include "globals.hh"
#include "G4VEmModel.hh"
#include "G4DataVector.hh"
#include "G4ParticleChangeForGamma.hh"
class G4ParticleDefinition;
class G4DynamicParticle;
class G4MaterialCutsCouple;
class G4Material;
class G4PhysicsFreeVector;
class G4PenelopeSamplingData;
class G4Penelope08RayleighModel : public G4VEmModel
{
public:
G4Penelope08RayleighModel(const G4ParticleDefinition* p=0,
const G4String& processName ="PenRayleigh");
virtual ~G4Penelope08RayleighModel();
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 SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
G4double tmin,
G4double maxEnergy);
void SetVerbosityLevel(G4int lev){verboseLevel = lev;};
G4int GetVerbosityLevel(){return verboseLevel;};
//Testing purposes
void DumpFormFactorTable(const G4Material*);
protected:
G4ParticleChangeForGamma* fParticleChange;
private:
G4Penelope08RayleighModel& operator=(const G4Penelope08RayleighModel &right);
G4Penelope08RayleighModel(const G4Penelope08RayleighModel&);
//Intrinsic energy limits of the model: cannot be extended by
//the parent process
G4double fIntrinsicLowEnergyLimit;
G4double fIntrinsicHighEnergyLimit;
G4int verboseLevel;
G4bool isInitialised;
//Internal tables and manager methods
std::map<const G4int,G4PhysicsFreeVector*> *logAtomicCrossSection;
std::map<const G4int,G4PhysicsFreeVector*> *atomicFormFactor;
G4DataVector logQSquareGrid; //log(Q^2) grid for interpolation
std::map<const G4Material*,G4PhysicsFreeVector*> *logFormFactorTable; //log(Q^2) vs. log(F^2)
G4DataVector logEnergyGridPMax; //energy grid for PMac (and originally for the x-section)
std::map<const G4Material*,G4PhysicsFreeVector*> *pMaxTable; //E vs. Pmax
std::map<const G4Material*,G4PenelopeSamplingData*> *samplingTable;
//Helper methods
void ReadDataFile(G4int);
void ClearTables();
void BuildFormFactorTable(const G4Material*);
void GetPMaxTable(const G4Material*);
G4double GetFSquared(const G4Material*,const G4double);
void InitializeSamplingAlgorithm(const G4Material*);
};
#endif
@@ -0,0 +1,124 @@
//
// ********************************************************************
// * 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: G4PenelopeCrossSection.hh,v 1.1 2010/07/26 09:56:42 pandola Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
// Author: Luciano Pandola
//
// History:
// -----------
// 18 Mar 2010 L. Pandola 1st implementation.
//
// -------------------------------------------------------------------
//
// Class description:
// This class is a container for cross sections and transport momenta
// calculated by Penelope models (ionisation, bremsstrahlung). It stores
// PhysicsTables/PhysicsVectors of
// a) the "hard quantities" (above the threshold), 0-th order (cross section)
// 1-st order (= stopping XS), 2-nd order (= straggling XS)
// b) the "soft quantities" (below threshold), 0-th order (cross section)
// 1-st order (= stopping XS), 2-nd order (= straggling XS)
// c) total hard cross sections for individual oscillators
// vs. energy.
//
// The interface *always* uses energy and cross sections, while internally
// log(energy) and log(XS) are used.
//
// One instance per each cut-material couple should be created by the
// calling class.
//
// Public method to retrieve hard cross section, soft stopping power,
// total cross section and hard shell cross sections.
//
// The method NormalizeShellCrossSections() normalizes the
// shell cross sections by retrieving the total hard cross section.
// Used for sampling.
//
// Notice: all quantities stored here are *per molecule*
//
// -------------------------------------------------------------------
#ifndef G4PENELOPECROSSSECTION_HH
#define G4PENELOPECROSSSECTION_HH 1
#include "globals.hh"
class G4PhysicsTable;
class G4DataVector;
class G4PenelopeCrossSection
{
public:
//constructor: one has to give the number of points in each PhysicsVector
//(= dimension of the energy grid) and the number of shells (0 is the
//default).
G4PenelopeCrossSection(size_t nOfEnergyPoints,size_t nOfShells=0);
//
~G4PenelopeCrossSection();
G4double GetTotalCrossSection(G4double energy);
G4double GetHardCrossSection(G4double energy);
G4double GetSoftStoppingPower(G4double energy);
G4double GetShellCrossSection(size_t shellID,G4double energy);
size_t GetNumberOfShells(){return numberOfShells;};
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&);
G4bool isNormalized;
size_t numberOfEnergyPoints;
size_t numberOfShells;
//all tables are log. XS vs. log E
//XS0, XS1, XS2 in Penelope nomenclature
G4PhysicsTable* softCrossSections;
//XH0, XH1, XH2 in Penelope nomenclature
G4PhysicsTable* hardCrossSections;
//XS for individual shells
G4PhysicsTable* shellCrossSections;
};
#endif
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PenelopeIonisationModel.hh,v 1.3 2009/10/21 14:56:47 pandola Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4PenelopeIonisationModel.hh,v 1.5 2010/04/15 10:02:10 pandola Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
// Author: Luciano Pandola
//
@@ -35,6 +35,10 @@
// 21 Oct 2009 L. Pandola Remove un-necessary methods and variables to handle
// AtomicDeexcitationFlag - now demanded to G4VEmModel
// Add ActivateAuger() method
// 29 Mar 2010 L. Pandola Added a dummy ComputeCrossSectioPerAtom() method issueing a
// warning if users try to access atomic cross sections via
// G4EmCalculator
// 15 Apr 2010 L. Pandola Implemented model's own version of MinEnergyCut()
//
// -------------------------------------------------------------------
//
@@ -72,6 +76,16 @@ public:
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
//*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
//*G4EmCalculator.
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
G4double,
G4double,
G4double,
G4double,
G4double);
virtual G4double CrossSectionPerVolume(const G4Material* material,
const G4ParticleDefinition* theParticle,
G4double kineticEnergy,
@@ -89,6 +103,10 @@ public:
G4double kineticEnergy,
G4double cutEnergy);
// Min cut in kinetic energy allowed by the model
virtual G4double MinEnergyCut(const G4ParticleDefinition*,
const G4MaterialCutsCouple*);
void SetVerbosityLevel(G4int lev){verboseLevel = lev;};
G4int GetVerbosityLevel(){return verboseLevel;};
@@ -0,0 +1,107 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// Author: Luciano Pandola
//
// History:
// -----------
// 18 Dec 2008 L. Pandola First implementation
//
//
// -------------------------------------------------------------------
//
// Class description:
// Class designed to contain data of atomic oscillators that are used by
// several Penelope models. Objects of G4PenelopeOscillators are managed
// by a dedicated G4PenelopeOscillatorManager.
// -------------------------------------------------------------------
#ifndef G4PENELOPEOSCILLATOR_HH
#define G4PENELOPEOSCILLATOR_HH 1
#include "globals.hh"
class G4PenelopeOscillator
{
public:
G4PenelopeOscillator();
G4PenelopeOscillator(const G4PenelopeOscillator&);
~G4PenelopeOscillator(){;};
//I need to overload the following operators: > < == =
const G4PenelopeOscillator& operator=(const G4PenelopeOscillator&);
int operator==(const G4PenelopeOscillator&) const;
int operator>(const G4PenelopeOscillator&) const;
int operator<(const G4PenelopeOscillator&) const;
//Setters and getters
G4double GetHartreeFactor() {return hartreeFactor;};
void SetHartreeFactor(G4double hf) {hartreeFactor = hf;};
//
G4double GetIonisationEnergy() {return ionisationEnergy;};
void SetIonisationEnergy(G4double ie) {ionisationEnergy = ie;};
//
G4double GetResonanceEnergy() const {return resonanceEnergy;};
void SetResonanceEnergy(G4double re) {resonanceEnergy = re;};
//
G4double GetOscillatorStrength() {return oscillatorStrength;};
void SetOscillatorStrength(G4double ostr) {oscillatorStrength=ostr;};
//
G4int GetShellFlag() {return shellFlag;};
void SetShellFlag(G4int theflag) {shellFlag=theflag;};
//
G4double GetParentZ() {return parentZ;};
void SetParentZ(G4double parZ) {parentZ = parZ;};
//
G4int GetParentShellID() {return parentShellID;};
void SetParentShellID(G4int psID) {parentShellID = psID;};
//
G4double GetCutoffRecoilResonantEnergy(){return cutoffRecoilResonantEnergy;};
void SetCutoffRecoilResonantEnergy(G4double ene){cutoffRecoilResonantEnergy = ene;};
private:
G4double hartreeFactor;
G4double ionisationEnergy;
G4double resonanceEnergy;
G4double oscillatorStrength;
G4int shellFlag;
G4double parentZ;
G4int parentShellID; //necessary for interface to AtomicDeexcitationManager
G4double cutoffRecoilResonantEnergy;
};
struct G4PenelopeOscillatorResEnergyComparator
{
public:
int operator()(const G4PenelopeOscillator& left,
const G4PenelopeOscillator& right)
{return ((left.GetResonanceEnergy() < right.GetResonanceEnergy()) ? 1 : 0);};
};
#endif
@@ -0,0 +1,137 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
//
// Authors: Luciano Pandola (luciano.pandola at lngs.infn.it)
//
// History:
// -----------
//
// 03 Dec 2009 First implementation, Luciano Pandola
// 16 Feb 2010 Added methods to calculate and store also A and Z
// for molecules. Luciano Pandola
// 16 Mar 2010 Added methods to calculate and store mean exc energy
// and plasma energy (used for Ionisation). L Pandola
// 18 Mar 2010 Added method to retrieve number of atoms per
// molecule. L. Pandola
//
// -------------------------------------------------------------------
//
//! Class description:
//! Fills and manages G4PenelopeOscillator objects and takes care of
//! building and managing the G4PenelopeOscillatorTables for the materials
//! in the geometry. G4PenelopeOscillatorManager is a singleton.
//! This is compliant with Penelope2008, so different tables (with different
//! grouping factors) are created for Ionisation and Compton processes.
//
// -------------------------------------------------------------------
#ifndef G4PenelopeOscillatorManager_h
#define G4PenelopeOscillatorManager_h 1
#include "globals.hh"
#include "G4PenelopeOscillator.hh"
#include <vector>
#include <map>
class G4Material;
typedef std::vector<G4PenelopeOscillator*> G4PenelopeOscillatorTable ;
// This class is a singleton
class G4PenelopeOscillatorManager {
public:
// The only way to get an instance of this class is to call the
// function GetOscillatorManager()
static G4PenelopeOscillatorManager* GetOscillatorManager();
//Clear() is invoked by Initialise() of the processes, if required
void Clear();
void Dump(const G4Material*);
//For ionisation
G4PenelopeOscillatorTable* GetOscillatorTableIonisation(const G4Material*);
G4PenelopeOscillator* GetOscillatorIonisation(const G4Material*,G4int);
//For Compton
G4PenelopeOscillatorTable* GetOscillatorTableCompton(const G4Material*);
G4PenelopeOscillator* GetOscillatorCompton(const G4Material*,G4int);
void SetVerbosityLevel(G4int vl){verbosityLevel = vl;};
G4int GetVerbosityLevel(){return verbosityLevel;};
//These are cumulative for the molecule
G4double GetTotalZ(const G4Material*);
G4double GetTotalA(const G4Material*);
G4double GetMeanExcitationEnergy(const G4Material*);
G4double GetPlasmaEnergySquared(const G4Material*);
G4double GetAtomsPerMolecule(const G4Material*);
protected:
G4PenelopeOscillatorManager();
~G4PenelopeOscillatorManager();
private:
// Hide copy constructor and assignment operator
G4PenelopeOscillatorManager& operator=(const
G4PenelopeOscillatorManager& right);
G4PenelopeOscillatorManager(const G4PenelopeOscillatorManager&);
static G4PenelopeOscillatorManager* instance;
//In Penelope2008, the Ionisation and Compton oscillator tables are
//slightly different!
std::map<const G4Material*,G4PenelopeOscillatorTable*>
*oscillatorStoreIonisation;
std::map<const G4Material*,G4PenelopeOscillatorTable*>
*oscillatorStoreCompton;
std::map<const G4Material*,G4double> *atomicNumber;
std::map<const G4Material*,G4double> *atomicMass;
std::map<const G4Material*,G4double> *excitationEnergy;
std::map<const G4Material*,G4double> *plasmaSquared;
std::map<const G4Material*,G4double> *atomsPerMolecule;
//create both tables simultaneously
void CheckForTablesCreated();
void ReadElementData();
G4double elementData[5][2000];
G4bool fReadElementData;
void BuildOscillatorTable(const G4Material*);
G4int verbosityLevel;
};
#endif
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PenelopeRayleighModel.hh,v 1.1 2008/10/28 08:50:21 pandola Exp $
// GEANT4 tag $Name: geant4-09-02 $
// $Id: G4PenelopeRayleighModel.hh,v 1.3 2010/04/15 10:02:25 pandola Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
// Author: Luciano Pandola
//
@@ -32,12 +32,15 @@
// -----------
// 13 Oct 2008 L. Pandola 1st implementation. Migration from EM process
// to EM model
// 18 Dec 2009 L. Pandola Added a dummy ComputeCrossSectioPerAtom() method issueing a
// warning if users try to access atomic cross sections via
// G4EmCalculator
//
// -------------------------------------------------------------------
//
// Class description:
// Low Energy Electromagnetic Physics, Rayleigh Scattering
// with Penelope Model
// with Penelope v2001 Model
// -------------------------------------------------------------------
#ifndef G4PENELOPERAYLEIGHMODEL_HH
@@ -70,6 +73,16 @@ public:
G4double cutEnergy = 0.0,
G4double maxEnergy = DBL_MAX);
//*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
//*G4EmCalculator.
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
G4double,
G4double,
G4double,
G4double,
G4double);
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
const G4MaterialCutsCouple*,
const G4DynamicParticle*,
@@ -0,0 +1,92 @@
//
// ********************************************************************
// * 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: G4PenelopeSamplingData.hh,v 1.1 2010/03/17 14:19:04 pandola Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
// Author: Luciano Pandola
//
// History:
// -----------
// 09 Dec 2009 L. Pandola 1st implementation.
//
// -------------------------------------------------------------------
//
// Class description:
// This is a container of data that are used for sampling algorithm
// of Penelope08 Rayleigh scattering
// -------------------------------------------------------------------
#ifndef G4PENELOPESAMPLINGDATA_HH
#define G4PENELOPESAMPLINGDATA_HH 1
#include "globals.hh"
#include "G4DataVector.hh"
//
//This is a container of data that are used for sampling algoritm
//
class G4PenelopeSamplingData
{
public:
G4PenelopeSamplingData(G4int npoints=150);
~G4PenelopeSamplingData();
void AddPoint(G4double x0,G4double pac0,G4double a0,G4double b0,size_t ITTL0,
size_t ITTU0);
size_t GetNumberOfStoredPoints();
void Clear();
void DumpTable();
G4double GetX(size_t index);
G4double GetPAC(size_t index);
G4double GetA(size_t index);
G4double GetB(size_t index);
G4double SampleValue(G4double rndm);
private:
G4PenelopeSamplingData & operator=(const G4PenelopeSamplingData &right);
G4PenelopeSamplingData(const G4PenelopeSamplingData&);
//G4double xlow;
//G4double xhigh;
G4DataVector* x; //grid points, in increasing order
G4DataVector* pac; //value of the cumulative pdf at x_i
G4DataVector* a; // rational inverse cumulative inverse distribution parameters
G4DataVector* b;
std::vector<size_t> *ITTL; //largest j for which pac(j) < (i-1)/(np-1)
std::vector<size_t> *ITTU; //smallest k for which pac(k) > i/(np-1)
G4int np; //number of grid points
};
#endif
@@ -0,0 +1,159 @@
//
// ********************************************************************
// * 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: G4AtomicTransitionManager.hh,v 1.2 ????
// GEANT4 tag $Name: geant4-09-04 $
//
// -------------------------------------------------------------------
//
// Geant4 Header G4UAtomicDeexcitation
//
// Authors: Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
//
// Created 22 April 2010 from old G4AtomicDeexcitation class
//
// Modified:
// ---------
//
//
// -------------------------------------------------------------------
//
// Class description:
// Implementation of atomic deexcitation
//
// -------------------------------------------------------------------
#ifndef G4UAtomicDeexcitation_h
#define G4UAtomicDeexcitation_h 1
#include "G4VAtomDeexcitation.hh"
#include "G4AtomicShell.hh"
#include "globals.hh"
#include <vector>
#include "G4DynamicParticle.hh"
//#include "G4VhShellCrossSection.hh"
#include "G4teoCrossSection.hh"
#include "G4empCrossSection.hh"
class G4AtomicTransitionManager;
class G4VhShellCrossSection;
//class G4teoCrossSection;
//class G4empCrossSection;
class G4UAtomicDeexcitation : public G4VAtomDeexcitation
{
public:
G4UAtomicDeexcitation();
virtual ~G4UAtomicDeexcitation();
//=================================================================
// methods that are requested to be implemented by the interface
//=================================================================
// initialisation methods
virtual void InitialiseForNewRun();
virtual void InitialiseForExtraAtom(G4int Z);
// Set threshold energy for fluorescence
void SetCutForSecondaryPhotons(G4double cut);
// Set threshold energy for Auger electron production
void SetCutForAugerElectrons(G4double cut);
// Get atomic shell by shell index, used by discrete processes
// (for example, photoelectric), when shell vacancy sampled by the model
virtual
const G4AtomicShell* GetAtomicShell(G4int Z,
G4AtomicShellEnumerator shell);
// generation of deexcitation for given atom, shell vacancy and cuts
virtual void GenerateParticles(std::vector<G4DynamicParticle*>* secVect,
const G4AtomicShell*,
G4int Z,
G4double gammaCut,
G4double eCut);
// access or compute PIXE cross section
virtual
G4double GetShellIonisationCrossSectionPerAtom(const G4ParticleDefinition*,
G4int Z,
G4AtomicShellEnumerator shell,
G4double kinE);
// access or compute PIXE cross section
virtual
G4double ComputeShellIonisationCrossSectionPerAtom(const G4ParticleDefinition*,
G4int Z,
G4AtomicShellEnumerator shell,
G4double kinE);
//=================================================================
// concrete methods of the deextation class
//=================================================================
private:
// Decides wether a radiative transition is possible and, if it is,
// returns the identity of the starting shell for the transition
G4int SelectTypeOfTransition(G4int Z, G4int shellId);
// Generates a particle from a radiative transition and returns it
G4DynamicParticle* GenerateFluorescence(G4int Z, G4int shellId,
G4int provShellId);
// Generates a particle from a non-radiative transition and returns it
G4DynamicParticle* GenerateAuger(G4int Z, G4int shellId);
// copy constructor and hide assignment operator
G4UAtomicDeexcitation(G4UAtomicDeexcitation &);
G4UAtomicDeexcitation & operator=(const G4UAtomicDeexcitation &right);
const G4AtomicTransitionManager* transitionManager;
// Data member which stores the shells to be filled by
// the radiative transition
G4int newShellId;
G4double minGammaEnergy;
G4double minElectronEnergy;
// G4bool fAuger;
// Data member wich stores the id of the shell where is the vacancy
// left from the Auger electron
G4int augerVacancyId;
// Data member for the calculation of the proton and alpha ionisation XS
G4VhShellCrossSection* PIXEshellCS;
};
#endif
@@ -58,7 +58,7 @@ class G4VIonDEDXScalingAlgorithm {
public:
G4VIonDEDXScalingAlgorithm();
~G4VIonDEDXScalingAlgorithm();
virtual ~G4VIonDEDXScalingAlgorithm();
// Function for scaling the kinetic energy (no scaling by default).
// Returns scaling factor for a given ion.
@@ -23,54 +23,45 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4ecpssrCrossSection.hh,v 1.3 2008/06/03 07:29:15 gcosmo Exp $
// GEANT4 tag $Name: geant4-09-02 $
//
// Author: Haifa Ben Abdelouahed
// Author: Alfonso Mantero
//
//
// History:
// -----------
// 21 Apr 2008 H. Ben Abdelouahed 1st implementation
// 21 Apr 2008 MGP Major revision according to a design iteration
// 01 Sep 2009 Alf Created
//
// -------------------------------------------------------------------
// Class description:
// Low Energy Electromagnetic Physics, Cross section, p ionisation, K shell
// Low Energy Electromagnetic Physics, Cross section, p and alpha ionisation, L shell
// Further documentation available from http://www.ge.infn.it/geant4/lowE
// -------------------------------------------------------------------
#ifndef G4ECPSSRCROSSSECTION_HH
#define G4ECPSSRCROSSSECTION_HH 1
#ifndef G4VECPSSRKMODEL_HH
#define G4VECPSSRKMODEL_HH 1
#include "globals.hh"
class G4ecpssrCrossSection
class G4VecpssrKModel
{
public:
G4ecpssrCrossSection();
G4VecpssrKModel();
virtual ~G4ecpssrCrossSection();
virtual ~G4VecpssrKModel();
G4double CalculateCrossSection(G4int zTarget,G4int zIncident, G4double energyIncident);//according to W.Brandt and G.Lapicki, Phys.Rev.A23(1981)
G4double CalculateVelocity(G4int zTarget,G4int zIncident, G4double energyIncident);
G4double ExpIntFunction(G4int n,G4double x);//Exponential Integral Function
virtual G4double CalculateCrossSection(G4int zTarget,G4double massIncident, G4double energyIncident) = 0;
private:
G4ecpssrCrossSection(const G4ecpssrCrossSection&);
G4ecpssrCrossSection & operator = (const G4ecpssrCrossSection &right);
G4VecpssrKModel(const G4VecpssrKModel&);
G4VecpssrKModel & operator = (const G4VecpssrKModel &right);
};
@@ -0,0 +1,78 @@
//
// ********************************************************************
// * 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: G4VecpssrLiModel.hh,v 1.4 2010/06/25 09:41:13 gunter Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
// Author: Haifa Ben Abdelouahed
//
//
// History:
// -----------
// 23 Apr 2008 H. Ben Abdelouahed 1st implementation
// 28 Apr 2008 MGP Major revision according to a design iteration
// 29 Apr 2009 ALF Updated Desing for Integration
//
// -------------------------------------------------------------------
// Class description:
// Low Energy Electromagnetic Physics, Cross section, p and alpha ionisation, L shell
// Further documentation available from http://www.ge.infn.it/geant4/lowE
// -------------------------------------------------------------------
#ifndef G4VECPSSRLIMODEL_HH
#define G4VECPSSRLIMODEL_HH 1
#include "globals.hh"
class G4VecpssrLiModel
{
public:
G4VecpssrLiModel();
virtual ~G4VecpssrLiModel();
virtual G4double CalculateL1CrossSection(G4int zTarget,G4double massIncident, G4double energyIncident) = 0;//according to W.Brandt and G.Lapicki, Phys.Rev.A23(1981)
virtual G4double CalculateL2CrossSection(G4int zTarget,G4double massIncident, G4double energyIncident) = 0;//according to W.Brandt and G.Lapicki, Phys.Rev.A23(1981)
virtual G4double CalculateL3CrossSection(G4int zTarget,G4double massIncident, G4double energyIncident) = 0;//according to W.Brandt and G.Lapicki, Phys.Rev.A23(1981)
private:
G4VecpssrLiModel(const G4VecpssrLiModel&);
G4VecpssrLiModel & operator = (const G4VecpssrLiModel &right);
};
#endif
@@ -23,64 +23,68 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4empCrossSection.hh,v 1.1 2009/06/17 16:39:55 mantero Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//
//
// History:
// -----------
// 21 Apr 2009 ALF 1st implementation
//
// -------------------------------------------------------------------
//
// GEANT4 Class file
//
//
// File name: G4ModifiedTsai
//
// Author: Andreia Trindade (andreia@lip.pt)
// Pedro Rodrigues (psilva@lip.pt)
// Luis Peralta (luis@lip.pt)
//
// Creation date: 21 March 2003
//
// Modifications:
// 21 Mar 2003 A. Trindade First implementation acording with new design
// 24 Mar 2003 & Fix in Tsai generator in order to prevent theta generation above pi
//
//
// Class Description:
//
// Concrete class for Bremsstrahlung Angular Distribution Generation - Tsai Model
// Class description:
// Low Energy Electromagnetic Physics, Cross section, p ionisation, K shell
// Further documentation available from http://www.ge.infn.it/geant4/lowE
// -------------------------------------------------------------------
//
#ifndef G4ModifiedTsai_h
#define G4ModifiedTsai_h 1
#include "G4ios.hh"
#ifndef G4EMPCROSSSECTION_HH
#define G4EMPCROSSSECTION_HH 1
#include "globals.hh"
#include "G4VBremAngularDistribution.hh"
#include "G4VhShellCrossSection.hh"
#include "G4PaulKCrossSection.hh"
#include "G4OrlicLiCrossSection.hh"
class G4ModifiedTsai : public G4VBremAngularDistribution
class G4empCrossSection : public G4VhShellCrossSection
{
public:
G4ModifiedTsai(const G4String& name);
G4empCrossSection();
~G4ModifiedTsai();
~G4empCrossSection();
G4double PolarAngle(const G4double initial_energy,
const G4double final_energy,
const G4int Z);
void PrintGeneratorInformation() const;
protected:
std::vector<G4double> GetCrossSection(G4int Z,
G4double incidentEnergy,
G4double mass,
G4double deltaEnergy,
G4bool testFlag = false) const;
std::vector<G4double> Probabilities(G4int Z,
G4double incidentEnergy,
G4double mass,
G4double deltaEnergy) const;
void SetTotalCS(G4double);
private:
// hide assignment operator
G4ModifiedTsai & operator=(const G4ModifiedTsai &right);
G4ModifiedTsai(const G4ModifiedTsai&);
G4double totalCS;
G4PaulKCrossSection* paulShellK;
G4OrlicLiCrossSection* orlicShellLi;
G4empCrossSection(const G4empCrossSection&);
G4empCrossSection & operator = (const G4empCrossSection &right);
};
#endif
@@ -49,6 +49,7 @@
// 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
// 03 Oct 2009 ALF added SelectShellIonisationCS
// ------------------------------------------------------------
// Class Description:
@@ -86,7 +87,7 @@
#include "G4hIonEffChargeSquare.hh"
#include "G4IonChuFluctuationModel.hh"
#include "G4IonYangFluctuationModel.hh"
#include "G4AtomicDeexcitation.hh"
#include "G4UAtomicDeexcitation.hh"
#include "G4MaterialCutsCouple.hh"
#include <map>
@@ -174,6 +175,9 @@ public: // With description
void SetFluorescence(const G4bool val) {theFluo = val;};
// This method switch on/off simulation of the fluorescence of the media.
void SelectShellIonisationCS(G4String);
G4VParticleChange* AlongStepDoIt(const G4Track& trackData ,
const G4Step& stepData ) ;
// Function to determine total energy deposition on the step
@@ -260,6 +264,7 @@ private:
G4double hMass,
G4double eLoss);
G4int SelectRandomAtom(const G4MaterialCutsCouple* couple,
G4double kineticEnergy) const;
@@ -308,12 +313,11 @@ private:
G4double initialMass; // mass to calculate Lambda tables
G4double fBarkas;
G4AtomicDeexcitation deexcitationManager;
G4UAtomicDeexcitation deexcitationManager;
G4ShellVacancy* shellVacancy;
G4VhShellCrossSection* shellCS;
std::vector<G4VEMDataSet*> zFluoDataVector;
G4bool theFluo;
G4bool expFlag;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -23,63 +23,70 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4teoCrossSection.hh,v 1.6 2010/11/12 18:09:44 mantero Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//
//
// History:
// -----------
// 21 Apr 2008 ALF 1st implementation
// 29 Apr 2009 ALF Updated Desing for Integration
//
// -------------------------------------------------------------------
//
// GEANT4 Class file
//
//
// File name: G4VBremAngularDistribution
//
// Author: Pedro Rodrigues (psilva@lip.pt)
// Andreia Trindade (andreia@lip.pt)
// Luis Peralta (luis@lip.pt)
// Design from Maria Grazia Pia (MariaGrazia.Pia@ge.infn.it)
//
//
// Creation date: 21 March 2003
//
// Modifications:
// 21 Mar 2003 A. Trindade First implementation acording with new design
//
// Class Description:
//
// Abstract class for Bremsstrahlung Angular Distribution Generation
// Class description:
// Low Energy Electromagnetic Physics, Cross section, p ionisation, K shell
// Further documentation available from http://www.ge.infn.it/geant4/lowE
// -------------------------------------------------------------------
//
#ifndef G4VBremAngularDistribution_h
#define G4VBremAngularDistribution_h 1
#include "G4ios.hh"
#ifndef G4TEOCROSSSECTION_HH
#define G4TEOCROSSSECTION_HH 1
#include "globals.hh"
#include "G4VhShellCrossSection.hh"
class G4VBremAngularDistribution
#include "G4AnalyticalEcpssrKCrossSection.hh"
#include "G4AnalyticalEcpssrLiCrossSection.hh"
class G4teoCrossSection : public G4VhShellCrossSection
{
public:
G4VBremAngularDistribution(const G4String& name);
G4teoCrossSection(G4String);
virtual ~G4VBremAngularDistribution();
~G4teoCrossSection();
virtual G4double PolarAngle(const G4double initial_energy,
const G4double final_energy,
const G4int Z) = 0;
virtual void PrintGeneratorInformation() const = 0;
protected:
std::vector<G4double> GetCrossSection(G4int Z,
G4double incidentEnergy,
G4double mass,
G4double deltaEnergy = 0,
G4bool testFlag = false) const;
std::vector<G4double> Probabilities(G4int Z,
G4double incidentEnergy,
G4double mass,
G4double deltaEnergy = 0) const;
void SetTotalCS(G4double);
private:
// hide assignment operator
G4VBremAngularDistribution & operator=(const G4VBremAngularDistribution &right);
G4VBremAngularDistribution(const G4VBremAngularDistribution&);
G4double totalCS;
G4VecpssrKModel* ecpssrShellK;
G4VecpssrLiModel* ecpssrShellLi;
G4teoCrossSection(const G4teoCrossSection&);
G4teoCrossSection & operator = (const G4teoCrossSection &right);
};
#endif