Geant4
9.6.p02
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
geant4_9_6_p02
source
processes
hadronic
models
cascade
cascade
include
G4CascadeData.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
// $Id$
27
//
28
// 20100507 M. Kelsey -- Use template arguments to dimension const-refs
29
// to arrays,for use in passing to functions as dimensioned.
30
// Add two additional optional(!) template args for piN/NN.
31
// Add new data member "sum" to separate summed xsec values
32
// from measured inclusive (tot) cross-sections. Add two
33
// ctors to pass inclusive xsec array as input (for piN/NN).
34
// 20100611 M. Kelsey -- Work around Intel ICC compiler warning about
35
// index[] subscripts out of range. Dimension to full [9].
36
// 20100803 M. Kelsey -- Add printing function for debugging, split
37
// implementation code to .icc file. Add name argument.
38
// 20110718 M. Kelsey -- Add inelastic cross-section sum to deal with
39
// suppressing elastic scattering off free nucleons (hydrogen)
40
// 20110719 M. Kelsey -- Add ctor argument for two-body initial state
41
// 20110725 M. Kelsey -- Save initial state as data member
42
// 20110923 M. Kelsey -- Add optional ostream& argument to print() fns
43
44
#ifndef G4_CASCADE_DATA_HH
45
#define G4_CASCADE_DATA_HH
46
47
#include "
globals.hh
"
48
#include "
G4CascadeSampler.hh
"
/* To get number of energy bins */
49
#include "G4String.hh"
50
51
52
template
<
int
NE,
int
N2,
int
N3,
int
N4,
int
N5,
int
N6,
int
N7,
int
N8=0,
int
N9=0>
53
struct
G4CascadeData
54
{
55
// NOTE: Need access to N2 by value to initialize index array
56
enum
{
N02
=N2,
N23
=N2+N3,
N24
=N23+N4,
N25
=N24+N5,
N26
=N25+N6,
N27
=N26+N7,
57
N28
=N27+N8,
N29
=
N28
+N9 };
58
59
enum
{
N8D
=N8?N8:1,
N9D
=N9?N9:1 };
// SPECIAL: Can't dimension arrays [0]
60
61
enum
{
NM
=N9?8:N8?7:6,
NXS
=
N29
};
// Multiplicity and cross-section bins
62
63
G4int
index
[9];
// Start and stop indices to xsec's
64
G4double
multiplicities
[
NM
][
NE
];
// Multiplicity distributions
65
66
const
G4int
(&
x2bfs
)[N2][2];
// Initialized from file-scope inputs
67
const
G4int
(&
x3bfs
)[N3][3];
68
const
G4int
(&
x4bfs
)[N4][4];
69
const
G4int
(&
x5bfs
)[N5][5];
70
const
G4int
(&
x6bfs
)[N6][6];
71
const
G4int
(&
x7bfs
)[N7][7];
72
const
G4int
(&
x8bfs
)[
N8D
][8];
// These may not be used if mult==7
73
const
G4int
(&
x9bfs
)[
N9D
][9];
74
const
G4double
(&
crossSections
)[
NXS
][
NE
];
75
76
G4double
sum
[
NE
];
// Summed cross-sections, computed
77
const
G4double
(&
tot
)[
NE
];
// Inclusive cross-sections (from input)
78
79
G4double
inelastic
[
NE
];
// Sum of only inelastic channels
80
81
static
const
G4int
empty8bfs
[1][8];
// For multiplicity==7 case
82
static
const
G4int
empty9bfs
[1][9];
83
84
const
G4String
name
;
// For diagnostic purposes
85
const
G4int
initialState
;
// For registration in lookup table
86
87
G4int
maxMultiplicity
()
const
{
return
NM
+1; }
// Used by G4CascadeFunctions
88
89
// Dump multiplicty tables to specified stream
90
void
print
(std::ostream& os=G4cout)
const
;
91
void
print
(
G4int
mult, std::ostream& os)
const
;
92
void
printXsec
(
const
G4double
(&xsec)[
NE
], std::ostream& os)
const
;
93
94
// Constructor for kaon/hyperon channels, with multiplicity <= 7
95
G4CascadeData
(
const
G4int
(&the2bfs)[N2][2],
const
G4int
(&the3bfs)[N3][3],
96
const
G4int
(&the4bfs)[N4][4],
const
G4int
(&the5bfs)[N5][5],
97
const
G4int
(&the6bfs)[N6][6],
const
G4int
(&the7bfs)[N7][7],
98
const
G4double
(&xsec)[
NXS
][
NE
],
G4int
ini,
99
const
G4String
& aName=
"G4CascadeData"
)
100
:
x2bfs
(the2bfs),
x3bfs
(the3bfs),
x4bfs
(the4bfs),
x5bfs
(the5bfs),
101
x6bfs
(the6bfs),
x7bfs
(the7bfs),
x8bfs
(
empty8bfs
),
x9bfs
(
empty9bfs
),
102
crossSections
(xsec),
tot
(
sum
),
name
(aName),
initialState
(ini) {
103
initialize
();
104
}
105
106
// Constructor for kaon/hyperon channels, with multiplicity <= 7 and inclusive
107
G4CascadeData
(
const
G4int
(&the2bfs)[N2][2],
const
G4int
(&the3bfs)[N3][3],
108
const
G4int
(&the4bfs)[N4][4],
const
G4int
(&the5bfs)[N5][5],
109
const
G4int
(&the6bfs)[N6][6],
const
G4int
(&the7bfs)[N7][7],
110
const
G4double
(&xsec)[
NXS
][
NE
],
const
G4double
(&theTot)[NE],
111
G4int
ini,
const
G4String
& aName=
"G4CascadeData"
)
112
:
x2bfs
(the2bfs),
x3bfs
(the3bfs),
x4bfs
(the4bfs),
x5bfs
(the5bfs),
113
x6bfs
(the6bfs),
x7bfs
(the7bfs),
x8bfs
(
empty8bfs
),
x9bfs
(
empty9bfs
),
114
crossSections
(xsec),
tot
(theTot),
name
(aName),
initialState
(ini) {
115
initialize
();
116
}
117
118
// Constructor for pion/nucleon channels, with multiplicity > 7
119
G4CascadeData
(
const
G4int
(&the2bfs)[N2][2],
const
G4int
(&the3bfs)[N3][3],
120
const
G4int
(&the4bfs)[N4][4],
const
G4int
(&the5bfs)[N5][5],
121
const
G4int
(&the6bfs)[N6][6],
const
G4int
(&the7bfs)[N7][7],
122
const
G4int
(&the8bfs)[
N8D
][8],
const
G4int
(&the9bfs)[
N9D
][9],
123
const
G4double
(&xsec)[
NXS
][NE],
G4int
ini,
124
const
G4String
& aName=
"G4CascadeData"
)
125
:
x2bfs
(the2bfs),
x3bfs
(the3bfs),
x4bfs
(the4bfs),
x5bfs
(the5bfs),
126
x6bfs
(the6bfs),
x7bfs
(the7bfs),
x8bfs
(the8bfs),
x9bfs
(the9bfs),
127
crossSections
(xsec),
tot
(
sum
),
name
(aName),
initialState
(ini) {
128
initialize
();
129
}
130
131
// Constructor for pion/nucleon channels, with multiplicity > 7 and inclusive
132
G4CascadeData
(
const
G4int
(&the2bfs)[N2][2],
const
G4int
(&the3bfs)[N3][3],
133
const
G4int
(&the4bfs)[N4][4],
const
G4int
(&the5bfs)[N5][5],
134
const
G4int
(&the6bfs)[N6][6],
const
G4int
(&the7bfs)[N7][7],
135
const
G4int
(&the8bfs)[N8D][8],
const
G4int
(&the9bfs)[N9D][9],
136
const
G4double
(&xsec)[
NXS
][NE],
const
G4double
(&theTot)[NE],
137
G4int
ini,
const
G4String
& aName=
"G4CascadeData"
)
138
:
x2bfs
(the2bfs),
x3bfs
(the3bfs),
x4bfs
(the4bfs),
x5bfs
(the5bfs),
139
x6bfs
(the6bfs),
x7bfs
(the7bfs),
x8bfs
(the8bfs),
x9bfs
(the9bfs),
140
crossSections
(xsec),
tot
(theTot),
name
(aName),
initialState
(ini) {
141
initialize
();
142
}
143
144
void
initialize
();
// Fill summed arrays from input
145
};
146
147
// Dummy arrays for use when optional template arguments are skipped
148
template
<
int
NE,
int
N2,
int
N3,
int
N4,
int
N5,
int
N6,
int
N7,
int
N8,
int
N9>
149
const
G4int
G4CascadeData<NE,N2,N3,N4,N5,N6,N7,N8,N9>::empty8bfs
[1][8] = {{0}};
150
151
template
<
int
NE,
int
N2,
int
N3,
int
N4,
int
N5,
int
N6,
int
N7,
int
N8,
int
N9>
152
const
G4int
G4CascadeData<NE,N2,N3,N4,N5,N6,N7,N8,N9>::empty9bfs
[1][9] = {{0}};
153
154
// GCC and other compilers require template implementations here
155
#include "G4CascadeData.icc"
156
157
#endif
Generated on Sat May 25 2013 14:33:43 for Geant4 by
1.8.4