ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
G4CrossSectionDataStore.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4CrossSectionDataStore.hh
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
// -------------------------------------------------------------------
28
// File name: G4CrossSectionDataStore
29
//
30
// Modifications:
31
// 23.01.2009 V.Ivanchenko move constructor and destructor to source,
32
// use STL vector instead of C-array
33
//
34
// August 2011 Re-designed
35
// by G. Folger, V. Ivantchenko, T. Koi and D.H. Wright
36
37
// Class Description
38
// This is the class to which cross section data sets may be registered.
39
// An instance of it is contained in each hadronic process, allowing
40
// the use of the AddDataSet() method to tailor the cross sections to
41
// your application.
42
// Class Description - End
43
44
#ifndef G4CrossSectionDataStore_h
45
#define G4CrossSectionDataStore_h 1
46
47
#include "
globals.hh
"
48
#include "
G4VCrossSectionDataSet.hh
"
49
#include "
G4FastPathHadronicCrossSection.hh
"
50
#include "
G4DynamicParticle.hh
"
51
#include "
G4PhysicsVector.hh
"
52
#include <vector>
53
#include <iostream>
54
55
class
G4Nucleus
;
56
class
G4ParticleDefinition
;
57
class
G4Isotope
;
58
class
G4Element
;
59
class
G4Material
;
60
class
G4NistManager
;
61
62
class
G4CrossSectionDataStore
63
{
64
public
:
65
66
G4CrossSectionDataStore
();
67
68
~G4CrossSectionDataStore
();
69
70
// Cross section per unit volume is computed (inverse mean free path)
71
inline
G4double
GetCrossSection
(
const
G4DynamicParticle
*,
const
G4Material
*);
72
G4double
ComputeCrossSection
(
const
G4DynamicParticle
*,
const
G4Material
*);
73
74
// Cross section per element is computed
75
G4double
GetCrossSection
(
const
G4DynamicParticle
*,
76
const
G4Element
*,
const
G4Material
*);
77
78
// Cross section per isotope is computed
79
G4double
GetCrossSection
(
const
G4DynamicParticle
*,
G4int
Z
,
G4int
A
,
80
const
G4Isotope
*,
81
const
G4Element
*,
const
G4Material
*);
82
83
// Sample Z and A of a target nucleus and upload into G4Nucleus
84
const
G4Element
*
SampleZandA
(
const
G4DynamicParticle
*,
const
G4Material
*,
85
G4Nucleus
&
target
);
86
87
// Initialisation before run
88
void
BuildPhysicsTable
(
const
G4ParticleDefinition
&);
89
90
// Dump store to G4cout
91
void
DumpPhysicsTable
(
const
G4ParticleDefinition
&);
92
93
// Dump store as html
94
void
DumpHtml
(
const
G4ParticleDefinition
&, std::ofstream&)
const
;
95
void
PrintCrossSectionHtml
(
const
G4VCrossSectionDataSet
*cs)
const
;
96
97
void
AddDataSet
(
G4VCrossSectionDataSet
*);
98
void
AddDataSet
(
G4VCrossSectionDataSet
*,
size_t
);
99
100
inline
void
SetVerboseLevel
(
G4int
value
);
101
102
private
:
103
104
G4double
GetIsoCrossSection
(
const
G4DynamicParticle
*,
G4int
Z,
G4int
A,
105
const
G4Isotope
*,
106
const
G4Element
*,
const
G4Material
* aMaterial,
107
G4int
index);
108
109
G4CrossSectionDataStore
&
operator=
(
const
G4CrossSectionDataStore
&
right
);
110
G4CrossSectionDataStore
(
const
G4CrossSectionDataStore
&);
111
112
G4String
HtmlFileName
(
const
G4String
&
in
)
const
;
113
114
G4NistManager
*
nist
;
115
116
std::vector<G4VCrossSectionDataSet*>
dataSetList
;
117
std::vector<G4double>
xsecelm
;
118
std::vector<G4double>
xseciso
;
119
120
const
G4Material
*
currentMaterial
;
121
const
G4ParticleDefinition
*
matParticle
;
122
G4double
matKinEnergy
;
123
G4double
matCrossSection
;
124
125
const
G4Material
*
elmMaterial
;
126
const
G4Element
*
currentElement
;
127
const
G4ParticleDefinition
*
elmParticle
;
128
G4double
elmKinEnergy
;
129
G4double
elmCrossSection
;
130
131
G4int
nDataSetList
;
132
G4int
verboseLevel
;
133
//Fast path: caching
134
public
:
135
inline
const
G4FastPathHadronicCrossSection::fastPathParameters
&
136
GetFastPathParameters
()
const
{
return
fastPathParams
; }
137
inline
const
G4FastPathHadronicCrossSection::controlFlag
&
138
GetFastPathControlFlags
()
const
{
return
fastPathFlags
; }
139
void
DumpFastPath
(
const
G4ParticleDefinition
* ,
const
G4Material
* , std::ostream& os);
140
void
ActivateFastPath
(
const
G4ParticleDefinition
*,
const
G4Material
* ,
G4double
);
141
private
:
142
friend
struct
G4FastPathHadronicCrossSection::fastPathEntry
;
143
//The following method is called by the public one GetCrossSection(const G4DynamicParticle*, const G4Material*)
144
//The third parameter is used to force the calculation of cross-sections skipping the fast-path mechanism
145
G4double
GetCrossSection
(
const
G4DynamicParticle
*,
const
G4Material
*,
G4bool
requiresSlowPath);
146
G4FastPathHadronicCrossSection::controlFlag
fastPathFlags
;
147
G4FastPathHadronicCrossSection::fastPathParameters
fastPathParams
;
148
//Counters
149
G4FastPathHadronicCrossSection::getCrossSectionCount
counters
;
150
//TODO: share this among threads
151
G4FastPathHadronicCrossSection::G4CrossSectionDataStore_Cache
fastPathCache
;
152
G4FastPathHadronicCrossSection::timing
timing
;
153
G4FastPathHadronicCrossSection::G4CrossSectionDataStore_Requests
requests
;
154
};
155
156
inline
G4double
G4CrossSectionDataStore::GetCrossSection
(
const
G4DynamicParticle
*
particle
,
const
G4Material
*
material
) {
157
//By default tries to use the fast-path mechanism
158
return
GetCrossSection
( particle , material ,
false
);
159
}
160
161
inline
void
G4CrossSectionDataStore::SetVerboseLevel
(
G4int
value
)
162
{
163
verboseLevel
=
value
;
164
}
165
166
#endif
geant4
tree
geant4-10.6-release
source
processes
hadronic
cross_sections
include
G4CrossSectionDataStore.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:36
using
1.8.2 with
ECCE GitHub integration