Geant4 11.3.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4ExcitedXiConstructor.cc
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// GEANT 4 class implementation file
28//
29// History: first implementation, based on object model of
30// 10 oct 1998 H.Kurashige
31//
32// Update mass and width following PDG 2023
33// 4 nov 2023 S.Okada
34// ---------------------------------------------------------------
35
37
38#include "G4DecayTable.hh"
40#include "G4SystemOfUnits.hh"
41#include "G4VDecayChannel.hh"
42
44
46 G4int iState, G4bool fAnti)
47{
48 // create decay table
49 auto decayTable = new G4DecayTable();
50
51 G4double br;
52 if ((br = bRatio[iState][XiPi]) > 0.0) {
53 AddXiPiMode(decayTable, parentName, br, iIso3, fAnti);
54 }
55
56 if ((br = bRatio[iState][XiGamma]) > 0.0) {
57 AddXiGammaMode(decayTable, parentName, br, iIso3, fAnti);
58 }
59
60 if ((br = bRatio[iState][LambdaK]) > 0.0) {
61 AddLambdaKMode(decayTable, parentName, br, iIso3, fAnti);
62 }
63
64 if ((br = bRatio[iState][SigmaK]) > 0.0) {
65 AddSigmaKMode(decayTable, parentName, br, iIso3, fAnti);
66 }
67
68 return decayTable;
69}
70
71G4DecayTable* G4ExcitedXiConstructor::AddXiGammaMode(G4DecayTable* decayTable,
72 const G4String& nameParent, G4double br,
73 G4int iIso3, G4bool fAnti)
74{
75 G4VDecayChannel* mode;
76 G4String daughterH;
77 if (iIso3 == +1) {
78 daughterH = "xi0";
79 }
80 else if (iIso3 == -1) {
81 daughterH = "xi-";
82 }
83 if (fAnti) daughterH = "anti_" + daughterH;
84
85 // create decay channel [parent BR #daughters]
86 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2, daughterH, "gamma");
87 // add decay table
88 decayTable->Insert(mode);
89
90 return decayTable;
91}
92
93G4DecayTable* G4ExcitedXiConstructor::AddLambdaKMode(G4DecayTable* decayTable,
94 const G4String& nameParent, G4double br,
95 G4int iIso3, G4bool fAnti)
96
97{
98 G4VDecayChannel* mode;
99
100 G4String lambda = "lambda";
101 G4String daughterK;
102 G4double r = 0.;
103
104 // ------------ Lambda K- ------------
105 // determine daughters
106 if (iIso3 == +1) {
107 if (!fAnti) {
108 daughterK = "kaon0";
109 }
110 else {
111 daughterK = "anti_kaon0";
112 }
113 r = br;
114 }
115 else if (iIso3 == -1) {
116 if (!fAnti) {
117 daughterK = "kaon-";
118 }
119 else {
120 daughterK = "kaon+";
121 }
122 r = br;
123 }
124 if (fAnti) lambda = "anti_" + lambda;
125 if (r > 0.) {
126 // create decay channel [parent BR #daughters]
127 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, lambda, daughterK);
128 // add decay table
129 decayTable->Insert(mode);
130 }
131
132 return decayTable;
133}
134
135G4DecayTable* G4ExcitedXiConstructor::AddSigmaKMode(G4DecayTable* decayTable,
136 const G4String& nameParent, G4double br,
137 G4int iIso3, G4bool fAnti)
138{
139 G4VDecayChannel* mode;
140
141 G4String daughterH;
142 G4String daughterK;
143 G4double r = 0.;
144
145 // ------------ Sigma K- ------------
146 // determine daughters
147 if (iIso3 == +1) {
148 daughterH = "sigma+";
149 r = br / 2.;
150 }
151 else if (iIso3 == -1) {
152 daughterH = "sigma0";
153 r = br / 2.;
154 }
155 if (!fAnti) {
156 daughterK = "kaon-";
157 }
158 else {
159 daughterK = "kaon+";
160 }
161 if (fAnti) daughterH = "anti_" + daughterH;
162 if (r > 0.) {
163 // create decay channel [parent BR #daughters]
164 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterH, daughterK);
165 // add decay table
166 decayTable->Insert(mode);
167 }
168
169 // ------------ Sigma K0 ------------
170 // determine daughters
171 if (iIso3 == +1) {
172 daughterH = "sigma0";
173 r = br / 2.;
174 }
175 else if (iIso3 == -1) {
176 daughterH = "sigma-";
177 r = br / 2.;
178 }
179 if (!fAnti) {
180 daughterK = "anti_kaon0";
181 }
182 else {
183 daughterK = "kaon0";
184 }
185 if (fAnti) daughterH = "anti_" + daughterH;
186 if (r > 0.) {
187 // create decay channel [parent BR #daughters]
188 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterH, daughterK);
189 // add decay table
190 decayTable->Insert(mode);
191 }
192
193 return decayTable;
194}
195
196G4DecayTable* G4ExcitedXiConstructor::AddXiPiMode(G4DecayTable* decayTable,
197 const G4String& nameParent, G4double br,
198 G4int iIso3, G4bool fAnti)
199{
200 G4VDecayChannel* mode;
201
202 G4String daughterXi;
203 G4String daughterPi;
204 G4double r = 0.;
205
206 // ------------ Xi pi- ------------
207 // determine daughters
208 if (iIso3 == +1) {
209 r = 0.;
210 }
211 else if (iIso3 == -1) {
212 daughterXi = "xi0";
213 r = br / 2.;
214 }
215 if (!fAnti) {
216 daughterPi = "pi-";
217 }
218 else {
219 daughterPi = "pi+";
220 }
221 if (fAnti) daughterXi = "anti_" + daughterXi;
222 if (r > 0.) {
223 // create decay channel [parent BR #daughters]
224 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterXi, daughterPi);
225 // add decay table
226 decayTable->Insert(mode);
227 }
228 // ------------ Xi Pi0 ------------
229 // determine daughters
230 if (iIso3 == +1) {
231 daughterXi = "xi0";
232 r = br / 2.;
233 }
234 else if (iIso3 == -1) {
235 daughterXi = "xi-";
236 r = br / 2.;
237 }
238 daughterPi = "pi0";
239 if (fAnti) daughterXi = "anti_" + daughterXi;
240 if (r > 0.) {
241 // create decay channel [parent BR #daughters]
242 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterXi, daughterPi);
243 // add decay table
244 decayTable->Insert(mode);
245 }
246
247 // ------------ XI pi + ------------
248 // determine daughters
249 if (iIso3 == +1) {
250 daughterXi = "xi-";
251 r = br / 2.;
252 }
253 else if (iIso3 == -1) {
254 r = 0.;
255 }
256 if (!fAnti) {
257 daughterPi = "pi+";
258 }
259 else {
260 daughterPi = "pi-";
261 }
262 if (fAnti) daughterXi = "anti_" + daughterXi;
263 if (r > 0.) {
264 // create decay channel [parent BR #daughters]
265 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterXi, daughterPi);
266 // add decay table
267 decayTable->Insert(mode);
268 }
269
270 return decayTable;
271}
272
274{
275 G4double fm = mass[iState];
276 if (iState == 0) {
277 if (iso3 == -1) fm = 1.5350 * GeV; // xi-
278 }
279 return fm;
280}
281
283{
284 G4double fw = width[iState];
285 if (iState == 0) {
286 if (iso3 == -1) fw = 9.9 * MeV; // xi-
287 }
288 return fw;
289}
290
291// clang-format off
292
293const char* G4ExcitedXiConstructor::name[] = {
294 "xi(1530)", "xi(1690)", "xi(1820)", "xi(1950)", "xi(2030)"
295};
296
297const G4double G4ExcitedXiConstructor::mass[] = {
298 1.5318*GeV, 1.690*GeV, 1.823*GeV, 1.950*GeV, 2.025*GeV
299};
300
301const G4double G4ExcitedXiConstructor::width[] = {
302 9.1*MeV, 20.0*MeV, 24.0*MeV, 60.0*MeV, 20.0*MeV
303};
304
305const G4int G4ExcitedXiConstructor::iSpin[] = {
306 3, 3, 3, 3, 5
307};
308
309const G4int G4ExcitedXiConstructor::iParity[] = {
310 +1, +1, -1, -1, +1
311};
312
313
314const G4int G4ExcitedXiConstructor::encodingOffset[] = {
315 0, 20000, 10000, 30000, 10000
316};
317
319{
320 { 0.98, 0.02, 0.0, 0.0},
321 { 0.10, 0.0, 0.70, 0.20},
322 { 0.15, 0.0, 0.70, 0.15},
323 { 0.25, 0.0, 0.50, 0.25},
324 { 0.10, 0.0, 0.20, 0.70}
325};
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
void Insert(G4VDecayChannel *aChannel)
G4ExcitedBaryonConstructor(G4int nStates=0, G4int isoSpin=0)
G4double GetMass(G4int state, G4int iso) override
G4double GetWidth(G4int state, G4int iso) override
G4DecayTable * CreateDecayTable(const G4String &name, G4int iIso3, G4int iState, G4bool fAnti=false) override