Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4VCrossSectionHandler.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27// $Id$
28//
29// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
30//
31// History:
32// -----------
33// 16 Sep 2001 MGP Created
34// 26 Sep 2001 V.Ivanchenko Hide copy constructor and assignement operator
35// 18 Apr 2002 V.Ivanchenko Move member function ValueForMaterial to public
36// 21 Jan 2003 V.Ivanchenko Cut per region
37// 15 Jul 2009 N.A.Karakatsanis New methods added for loading logarithmic data
38// to enhance computing performance of interpolation
39//
40// -------------------------------------------------------------------
41
42// Class description:
43// Low Energy Electromagnetic Physics
44// Base class for cross section manager for an electromagnetic physics process
45
46// -------------------------------------------------------------------
47
48#ifndef G4VCROSSSECTIONHANDLER_HH
49#define G4VCROSSSECTIONHANDLER_HH 1
50
51#include <map>
52#include <vector>
54
55#include "globals.hh"
56#include "G4DataVector.hh"
58
60class G4VEMDataSet;
61class G4Material;
62class G4Element;
63
65
66public:
67
69
71 G4double minE = 250*CLHEP::eV,
72 G4double maxE = 100*CLHEP::GeV,
73 G4int nBins = 200,
74 G4double unitE = CLHEP::MeV,
75 G4double unitData = CLHEP::barn,
76 G4int minZ = 1, G4int maxZ = 99);
77
79
80 void Initialise(G4VDataSetAlgorithm* interpolation = 0,
81 G4double minE = 250*CLHEP::eV,
82 G4double maxE = 100*CLHEP::GeV,
83 G4int numberOfBins = 200,
84 G4double unitE = CLHEP::MeV,
85 G4double unitData = CLHEP::barn,
86 G4int minZ = 1, G4int maxZ = 99);
87
89
91 G4double e) const;
92
94
96
97 G4double FindValue(G4int Z, G4double e) const;
98
99 G4double FindValue(G4int Z, G4double e, G4int shellIndex) const;
100
101 G4double ValueForMaterial(const G4Material* material, G4double e) const;
102
103 void LoadData(const G4String& dataFile);
104
105 void LoadNonLogData(const G4String& dataFile);
106
107 void LoadShellData(const G4String& dataFile);
108
109 void PrintData() const;
110
111 void Clear();
112
113protected:
114
116
117 void ActiveElements();
118
119 // Factory method
120 virtual std::vector<G4VEMDataSet*>* BuildCrossSectionsForMaterials(const G4DataVector& energyVector,
121 const G4DataVector* energyCuts = 0) = 0;
122
123 // Factory method
125
126 const G4VDataSetAlgorithm* GetInterpolation() const { return interpolation; }
127
128
129private:
130
131 // Hide copy constructor and assignment operator
133 G4VCrossSectionHandler & operator=(const G4VCrossSectionHandler &right);
134
135 G4VDataSetAlgorithm* interpolation;
136
137 G4double eMin;
138 G4double eMax;
139 G4int nBins;
140
141 G4double unit1;
142 G4double unit2;
143
144 G4int zMin;
145 G4int zMax;
146
147 G4DataVector activeZ;
148
149 std::map<G4int,G4VEMDataSet*,std::less<G4int> > dataMap;
150
151 std::vector<G4VEMDataSet*>* crossSections;
152};
153
154#endif
155
156
157
158
159
160
161
162
163
164
165
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
const G4VDataSetAlgorithm * GetInterpolation() const
G4VEMDataSet * BuildMeanFreePathForMaterials(const G4DataVector *energyCuts=0)
G4double ValueForMaterial(const G4Material *material, G4double e) const
void LoadShellData(const G4String &dataFile)
virtual std::vector< G4VEMDataSet * > * BuildCrossSectionsForMaterials(const G4DataVector &energyVector, const G4DataVector *energyCuts=0)=0
G4double FindValue(G4int Z, G4double e) const
G4int NumberOfComponents(G4int Z) const
void LoadData(const G4String &dataFile)
void LoadNonLogData(const G4String &dataFile)
G4int SelectRandomAtom(const G4MaterialCutsCouple *couple, G4double e) const
void Initialise(G4VDataSetAlgorithm *interpolation=0, 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 SelectRandomShell(G4int Z, G4double e) const
const G4Element * SelectRandomElement(const G4MaterialCutsCouple *material, G4double e) const
virtual G4VDataSetAlgorithm * CreateInterpolation()