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
G4SBBremTable.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4SBBremTable.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
//
29
// GEANT4 Class header file
30
//
31
//
32
// File name: G4SBBremTable
33
//
34
// Author: Mihaly Novak
35
//
36
// Creation date: 15.07.2018
37
//
38
// Modifications:
39
//
40
// Class description:
41
//
42
// Utility class to handle sampling tables for the Seltzer-Berger scalled brems-
43
// strahlung differential cross sections. It makes possible fast (significantly
44
// faster than the rejection) sampling of the emitted photon energy in case of
45
// interactions. An object from this class is supposed to be a member of the
46
// Seltzer-Berger model for e-/e+ bremsstrahlung photon emission model. Note,
47
// that one object from this class can handle both e- and e+ cases (containes
48
// e+ correction in the SampleEnergyTransfer method only).
49
//
50
// ----------------------------------------------------------------------------
51
52
#ifndef G4SBBremTable_h
53
#define G4SBBremTable_h 1
54
55
#include "
globals.hh
"
56
#include "G4String.hh"
57
58
#include <vector>
59
60
// forward declar
61
class
G4MaterialCutsCouple
;
62
63
class
G4SBBremTable
{
64
65
public
:
66
// CTR/DTR
67
G4SBBremTable
();
68
69
~G4SBBremTable
();
70
71
// loads and init sampling tables: lowe/highe are the low/high energy usage
72
// limits of the corresponding Seltzerberger-model.
73
void
Initialize
(
const
G4double
lowe,
const
G4double
highe);
74
75
// clean away all sampling tables and makes ready for re-initialisation
76
void
ClearSamplingTables
();
77
78
// run-time method to sample energy transferred to the emitted photon
79
double
SampleEnergyTransfer
(
const
G4double
eekin,
const
G4double
leekin,
80
const
G4double
gcut ,
const
G4double
dielSupConst,
81
const
G4int
izet ,
const
G4int
matCutIndx,
82
const
bool
iselectron);
83
84
// used only for development: print out table related information
85
// void Dump();
86
87
private
:
88
89
void
BuildSamplingTables
();
90
91
void
InitSamplingTables
();
92
93
void
LoadSTGrid
();
94
95
void
LoadSamplingTables
(
G4int
iz);
96
97
void
ReadCompressedFile
(
const
G4String
&
fname
, std::istringstream &iss);
98
99
private
:
100
101
// Sampling-Table point: describes one [E_i],[kappa_j] point
102
struct
STPoint
{
103
G4double
fCum
;
// value of the cumulative function
104
G4double
fParA
;
// rational function approximation based interp. parameter
105
G4double
fParB
;
// rational function approximation based interp. parameter
106
};
107
108
// Sampling-Table: describes one [E_j] e- energy point i.e. one Table
109
struct
STable
{
110
// cumulative values for the kappa-cuts: kappa_cut_i=E_gamma_cut_i/E_el_j
111
std::vector<G4double>
fCumCutValues
;
112
// as many STPoint-s as kappa values
113
std::vector<STPoint>
fSTable
;
114
};
115
116
// Sampling-Tables for a given Z:
117
// describes all tables (i.e. for all e- energies) for a given element (Z)
118
struct
SamplingTablePerZ
{
119
SamplingTablePerZ
() :
fNumGammaCuts
(0),
fMinElEnergyIndx
(-1),
fMaxElEnergyIndx
(-1) {}
120
size_t
fNumGammaCuts
;
// number of gamma-cut for this
121
G4int
fMinElEnergyIndx
;
// max(i) such E_i <= E for all E
122
G4int
fMaxElEnergyIndx
;
// min(i) such E_i >= E for all E
123
std::vector<STable*>
fTablesPerEnergy
;
// as many table as e-ekin grid point
124
//the different gamma-cut values that are defined for this element(Z) and ln
125
std::vector<G4double>
fGammaECuts
;
126
std::vector<G4double>
fLogGammaECuts
;
127
// the couple index element stores the corresponding (sorted) gamma-cut index
128
std::vector<size_t>
fMatCutIndxToGamCutIndx
;
129
// temporary vector to store some indecis during initialisation
130
std::vector< std::vector<size_t> >
fGamCutIndxToMatCutIndx
;
131
};
132
133
// simple linear search: most of the time faster than anything in our case
134
G4int
LinSearch
(
const
std::vector<STPoint>& vect,
135
const
G4int
size,
136
const
G4double
val);
137
138
private
:
139
140
// pre-prepared sampling tables are available:
141
G4int
fMaxZet
;
// max Z number
142
G4int
fNumElEnergy
;
// # e- kine (E_k) per Z
143
G4int
fNumKappa
;
// # red. photon eners per E_k
144
145
// min/max electron kinetic energy usage limits
146
G4double
fUsedLowEenergy
;
147
G4double
fUsedHighEenergy
;
148
G4double
fLogMinElEnergy
;
149
G4double
fILDeltaElEnergy
;
150
151
// e- kinetic energy and reduced photon energy grids and tehir logarithms
152
std::vector<G4double>
fElEnergyVect
;
153
std::vector<G4double>
fLElEnergyVect
;
154
std::vector<G4double>
fKappaVect
;
155
std::vector<G4double>
fLKappaVect
;
156
157
// container to store samplingtables per Z (size is fMaxZet+1)
158
std::vector<SamplingTablePerZ*>
fSBSamplingTables
;
159
160
};
161
162
#endif
geant4
tree
geant4-10.6-release
source
processes
electromagnetic
standard
include
G4SBBremTable.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:34
using
1.8.2 with
ECCE GitHub integration