00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 #ifndef G4_CASCADE_DATA_HH
00045 #define G4_CASCADE_DATA_HH
00046
00047 #include "globals.hh"
00048 #include "G4CascadeSampler.hh"
00049 #include "G4String.hh"
00050
00051
00052 template <int NE,int N2,int N3,int N4,int N5,int N6,int N7,int N8=0,int N9=0>
00053 struct G4CascadeData
00054 {
00055
00056 enum { N02=N2, N23=N2+N3, N24=N23+N4, N25=N24+N5, N26=N25+N6, N27=N26+N7,
00057 N28=N27+N8, N29=N28+N9 };
00058
00059 enum { N8D=N8?N8:1, N9D=N9?N9:1 };
00060
00061 enum { NM=N9?8:N8?7:6, NXS=N29 };
00062
00063 G4int index[9];
00064 G4double multiplicities[NM][NE];
00065
00066 const G4int (&x2bfs)[N2][2];
00067 const G4int (&x3bfs)[N3][3];
00068 const G4int (&x4bfs)[N4][4];
00069 const G4int (&x5bfs)[N5][5];
00070 const G4int (&x6bfs)[N6][6];
00071 const G4int (&x7bfs)[N7][7];
00072 const G4int (&x8bfs)[N8D][8];
00073 const G4int (&x9bfs)[N9D][9];
00074 const G4double (&crossSections)[NXS][NE];
00075
00076 G4double sum[NE];
00077 const G4double (&tot)[NE];
00078
00079 G4double inelastic[NE];
00080
00081 static const G4int empty8bfs[1][8];
00082 static const G4int empty9bfs[1][9];
00083
00084 const G4String name;
00085 const G4int initialState;
00086
00087 G4int maxMultiplicity() const { return NM+1; }
00088
00089
00090 void print(std::ostream& os=G4cout) const;
00091 void print(G4int mult, std::ostream& os) const;
00092 void printXsec(const G4double (&xsec)[NE], std::ostream& os) const;
00093
00094
00095 G4CascadeData(const G4int (&the2bfs)[N2][2], const G4int (&the3bfs)[N3][3],
00096 const G4int (&the4bfs)[N4][4], const G4int (&the5bfs)[N5][5],
00097 const G4int (&the6bfs)[N6][6], const G4int (&the7bfs)[N7][7],
00098 const G4double (&xsec)[NXS][NE], G4int ini,
00099 const G4String& aName="G4CascadeData")
00100 : x2bfs(the2bfs), x3bfs(the3bfs), x4bfs(the4bfs), x5bfs(the5bfs),
00101 x6bfs(the6bfs), x7bfs(the7bfs), x8bfs(empty8bfs), x9bfs(empty9bfs),
00102 crossSections(xsec), tot(sum), name(aName), initialState(ini) {
00103 initialize();
00104 }
00105
00106
00107 G4CascadeData(const G4int (&the2bfs)[N2][2], const G4int (&the3bfs)[N3][3],
00108 const G4int (&the4bfs)[N4][4], const G4int (&the5bfs)[N5][5],
00109 const G4int (&the6bfs)[N6][6], const G4int (&the7bfs)[N7][7],
00110 const G4double (&xsec)[NXS][NE], const G4double (&theTot)[NE],
00111 G4int ini, const G4String& aName="G4CascadeData")
00112 : x2bfs(the2bfs), x3bfs(the3bfs), x4bfs(the4bfs), x5bfs(the5bfs),
00113 x6bfs(the6bfs), x7bfs(the7bfs), x8bfs(empty8bfs), x9bfs(empty9bfs),
00114 crossSections(xsec), tot(theTot), name(aName), initialState(ini) {
00115 initialize();
00116 }
00117
00118
00119 G4CascadeData(const G4int (&the2bfs)[N2][2], const G4int (&the3bfs)[N3][3],
00120 const G4int (&the4bfs)[N4][4], const G4int (&the5bfs)[N5][5],
00121 const G4int (&the6bfs)[N6][6], const G4int (&the7bfs)[N7][7],
00122 const G4int (&the8bfs)[N8D][8], const G4int (&the9bfs)[N9D][9],
00123 const G4double (&xsec)[NXS][NE], G4int ini,
00124 const G4String& aName="G4CascadeData")
00125 : x2bfs(the2bfs), x3bfs(the3bfs), x4bfs(the4bfs), x5bfs(the5bfs),
00126 x6bfs(the6bfs), x7bfs(the7bfs), x8bfs(the8bfs), x9bfs(the9bfs),
00127 crossSections(xsec), tot(sum), name(aName), initialState(ini) {
00128 initialize();
00129 }
00130
00131
00132 G4CascadeData(const G4int (&the2bfs)[N2][2], const G4int (&the3bfs)[N3][3],
00133 const G4int (&the4bfs)[N4][4], const G4int (&the5bfs)[N5][5],
00134 const G4int (&the6bfs)[N6][6], const G4int (&the7bfs)[N7][7],
00135 const G4int (&the8bfs)[N8D][8], const G4int (&the9bfs)[N9D][9],
00136 const G4double (&xsec)[NXS][NE], const G4double (&theTot)[NE],
00137 G4int ini, const G4String& aName="G4CascadeData")
00138 : x2bfs(the2bfs), x3bfs(the3bfs), x4bfs(the4bfs), x5bfs(the5bfs),
00139 x6bfs(the6bfs), x7bfs(the7bfs), x8bfs(the8bfs), x9bfs(the9bfs),
00140 crossSections(xsec), tot(theTot), name(aName), initialState(ini) {
00141 initialize();
00142 }
00143
00144 void initialize();
00145 };
00146
00147
00148 template <int NE,int N2,int N3,int N4,int N5,int N6,int N7,int N8,int N9>
00149 const G4int G4CascadeData<NE,N2,N3,N4,N5,N6,N7,N8,N9>::empty8bfs[1][8] = {{0}};
00150
00151 template <int NE,int N2,int N3,int N4,int N5,int N6,int N7,int N8,int N9>
00152 const G4int G4CascadeData<NE,N2,N3,N4,N5,N6,N7,N8,N9>::empty9bfs[1][9] = {{0}};
00153
00154
00155 #include "G4CascadeData.icc"
00156
00157 #endif