Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4CrossSectionHandler Class Reference

#include <G4CrossSectionHandler.hh>

+ Inheritance diagram for G4CrossSectionHandler:

Public Member Functions

 G4CrossSectionHandler ()
 
 ~G4CrossSectionHandler ()
 
- Public Member Functions inherited from G4VCrossSectionHandler
 G4VCrossSectionHandler ()
 
 G4VCrossSectionHandler (G4VDataSetAlgorithm *interpolation, G4double minE=250 *CLHEP::eV, G4double maxE=100 *CLHEP::GeV, G4int nBins=200, G4double unitE=CLHEP::MeV, G4double unitData=CLHEP::barn, G4int minZ=1, G4int maxZ=99)
 
virtual ~G4VCrossSectionHandler ()
 
void Initialise (G4VDataSetAlgorithm *interpolation=nullptr, G4double minE=250 *CLHEP::eV, G4double maxE=100 *CLHEP::GeV, G4int numberOfBins=200, G4double unitE=CLHEP::MeV, G4double unitData=CLHEP::barn, G4int minZ=1, G4int maxZ=99)
 
G4int SelectRandomAtom (const G4MaterialCutsCouple *couple, G4double e) const
 
const G4ElementSelectRandomElement (const G4MaterialCutsCouple *material, G4double e) const
 
G4int SelectRandomShell (G4int Z, G4double e) const
 
G4VEMDataSetBuildMeanFreePathForMaterials (const G4DataVector *energyCuts=nullptr)
 
G4double FindValue (G4int Z, G4double e) const
 
G4double FindValue (G4int Z, G4double e, G4int shellIndex) const
 
G4double ValueForMaterial (const G4Material *material, G4double e) const
 
void LoadData (const G4String &dataFile)
 
void LoadNonLogData (const G4String &dataFile)
 
void LoadShellData (const G4String &dataFile)
 
void PrintData () const
 
void Clear ()
 
 G4VCrossSectionHandler (const G4VCrossSectionHandler &)=delete
 
G4VCrossSectionHandleroperator= (const G4VCrossSectionHandler &right)=delete
 

Protected Member Functions

std::vector< G4VEMDataSet * > * BuildCrossSectionsForMaterials (const G4DataVector &energyVector, const G4DataVector *energyCuts=0) override
 
- Protected Member Functions inherited from G4VCrossSectionHandler
G4int NumberOfComponents (G4int Z) const
 
void ActiveElements ()
 
virtual G4VDataSetAlgorithmCreateInterpolation ()
 
const G4VDataSetAlgorithmGetInterpolation () const
 

Detailed Description

Definition at line 56 of file G4CrossSectionHandler.hh.

Constructor & Destructor Documentation

◆ G4CrossSectionHandler()

G4CrossSectionHandler::G4CrossSectionHandler ( )
explicit

Definition at line 65 of file G4CrossSectionHandler.cc.

66{ }

◆ ~G4CrossSectionHandler()

G4CrossSectionHandler::~G4CrossSectionHandler ( )

Definition at line 70 of file G4CrossSectionHandler.cc.

71{ }

Member Function Documentation

◆ BuildCrossSectionsForMaterials()

std::vector< G4VEMDataSet * > * G4CrossSectionHandler::BuildCrossSectionsForMaterials ( const G4DataVector & energyVector,
const G4DataVector * energyCuts = 0 )
overrideprotectedvirtual

Implements G4VCrossSectionHandler.

Definition at line 76 of file G4CrossSectionHandler.cc.

78{
79 G4DataVector* energies;
80 G4DataVector* data;
81
82 G4DataVector* log_energies;
83 G4DataVector* log_data;
84
85 std::vector<G4VEMDataSet*>* matCrossSections = new std::vector<G4VEMDataSet*>;
86
87 const G4ProductionCutsTable* theCoupleTable=
89 G4int numOfCouples = (G4int)theCoupleTable->GetTableSize();
90
91 std::size_t nOfBins = energyVector.size();
92 const G4VDataSetAlgorithm* interpolationAlgo = CreateInterpolation();
93
94 for (G4int mLocal=0; mLocal<numOfCouples; ++mLocal)
95 {
96 const G4MaterialCutsCouple* couple = theCoupleTable->GetMaterialCutsCouple(mLocal);
97 const G4Material* material= couple->GetMaterial();
98 G4int nElements = (G4int)material->GetNumberOfElements();
99 const G4ElementVector* elementVector = material->GetElementVector();
100 const G4double* nAtomsPerVolume = material->GetAtomicNumDensityVector();
101
102 G4VDataSetAlgorithm* algo = interpolationAlgo->Clone();
103
104 G4VEMDataSet* setForMat = new G4CompositeEMDataSet(algo,1.,1.);
105
106 for (G4int i=0; i<nElements; ++i) {
107
108 G4int Z = (G4int) (*elementVector)[i]->GetZ();
109 G4double density = nAtomsPerVolume[i];
110
111 energies = new G4DataVector;
112 data = new G4DataVector;
113
114 log_energies = new G4DataVector;
115 log_data = new G4DataVector;
116
117 for (std::size_t bin=0; bin<nOfBins; ++bin)
118 {
119 G4double e = energyVector[bin];
120 energies->push_back(e);
121 if (e==0.) e=1e-300;
122 log_energies->push_back(std::log10(e));
123 G4double cross = density*FindValue(Z,e);
124 data->push_back(cross);
125 if (cross==0.) cross=1e-300;
126 log_data->push_back(std::log10(cross));
127 }
128
129 G4VDataSetAlgorithm* algo1 = interpolationAlgo->Clone();
130 G4VEMDataSet* elSet = new G4EMDataSet(i,energies,data,log_energies,log_data,algo1,1.,1.);
131
132 setForMat->AddComponent(elSet);
133 }
134
135 matCrossSections->push_back(setForMat);
136 }
137 delete interpolationAlgo;
138 return matCrossSections;
139}
std::vector< const G4Element * > G4ElementVector
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
const G4Material * GetMaterial() const
const G4ElementVector * GetElementVector() const
const G4double * GetAtomicNumDensityVector() const
std::size_t GetNumberOfElements() const
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
std::size_t GetTableSize() const
static G4ProductionCutsTable * GetProductionCutsTable()
G4double FindValue(G4int Z, G4double e) const
virtual G4VDataSetAlgorithm * CreateInterpolation()
virtual G4VDataSetAlgorithm * Clone() const =0
virtual void AddComponent(G4VEMDataSet *dataSet)=0

The documentation for this class was generated from the following files: