Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ExcitedSigmaConstructor.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// Update mass and width following PDG 2025
36// 4 nov 2025 S.Okada
37// ---------------------------------------------------------------
38
40
41#include "G4DecayTable.hh"
43#include "G4SystemOfUnits.hh"
44#include "G4VDecayChannel.hh"
45
49
51 G4int iState, G4bool fAnti)
52{
53 // create decay table
54 auto decayTable = new G4DecayTable();
55
56 G4double br;
57 if ((br = bRatio[iState][NK]) > 0.0) {
58 AddNKMode(decayTable, parentName, br, iIso3, fAnti);
59 }
60
61 if ((br = bRatio[iState][NKStar]) > 0.0) {
62 AddNKStarMode(decayTable, parentName, br, iIso3, fAnti);
63 }
64
65 if ((br = bRatio[iState][SigmaPi]) > 0.0) {
66 AddSigmaPiMode(decayTable, parentName, br, iIso3, fAnti);
67 }
68
69 if ((br = bRatio[iState][SigmaStarPi]) > 0.0) {
70 AddSigmaStarPiMode(decayTable, parentName, br, iIso3, fAnti);
71 }
72
73 if ((br = bRatio[iState][LambdaPi]) > 0.0) {
74 AddLambdaPiMode(decayTable, parentName, br, iIso3, fAnti);
75 }
76
77 if ((br = bRatio[iState][SigmaEta]) > 0.0) {
78 AddSigmaEtaMode(decayTable, parentName, br, iIso3, fAnti);
79 }
80
81 if ((br = bRatio[iState][LambdaStarPi]) > 0.0) {
82 AddLambdaStarPiMode(decayTable, parentName, br, iIso3, fAnti);
83 }
84
85 if ((br = bRatio[iState][DeltaK]) > 0.0) {
86 AddDeltaKMode(decayTable, parentName, br, iIso3, fAnti);
87 }
88
89 return decayTable;
90}
91
92G4DecayTable* G4ExcitedSigmaConstructor::AddSigmaEtaMode(G4DecayTable* decayTable,
93 const G4String& nameParent, G4double br,
94 G4int iIso3, G4bool fAnti)
95{
96 G4VDecayChannel* mode;
97 //
98 G4String daughterH;
99 if (iIso3 == +2) {
100 daughterH = "sigma+";
101 }
102 else if (iIso3 == 0) {
103 daughterH = "sigma0";
104 }
105 else if (iIso3 == -2) {
106 daughterH = "sigma-";
107 }
108 if (fAnti) daughterH = "anti_" + daughterH;
109
110 // create decay channel [parent BR #daughters]
111 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2, daughterH, "eta");
112 // add decay table
113 decayTable->Insert(mode);
114
115 return decayTable;
116}
117
118G4DecayTable* G4ExcitedSigmaConstructor::AddNKMode(G4DecayTable* decayTable,
119 const G4String& nameParent, G4double br,
120 G4int iIso3, G4bool fAnti)
121
122{
123 G4VDecayChannel* mode;
124
125 G4String daughterN;
126 G4String daughterK;
127 G4double r = 0.;
128
129 // ------------ N K- ------------
130 // determine daughters
131 if (iIso3 == +2) {
132 r = 0.;
133 }
134 else if (iIso3 == 0) {
135 daughterN = "proton";
136 r = br / 2.;
137 }
138 else if (iIso3 == -2) {
139 daughterN = "neutron";
140 r = br;
141 }
142 if (!fAnti) {
143 daughterK = "kaon-";
144 }
145 else {
146 daughterK = "kaon+";
147 }
148 if (fAnti) daughterN = "anti_" + daughterN;
149 if (r > 0.) {
150 // create decay channel [parent BR #daughters]
151 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterN, daughterK);
152 // add decay table
153 decayTable->Insert(mode);
154 }
155
156 // ------------ N K0 ------------
157 // determine daughters
158 if (iIso3 == +2) {
159 daughterN = "proton";
160 r = br;
161 }
162 else if (iIso3 == 0) {
163 daughterN = "neutron";
164 r = br / 2.;
165 }
166 else if (iIso3 == -2) {
167 r = 0.;
168 }
169 if (!fAnti) {
170 daughterK = "anti_kaon0";
171 }
172 else {
173 daughterK = "kaon0";
174 }
175 if (fAnti) daughterN = "anti_" + daughterN;
176 if (r > 0.) {
177 // create decay channel [parent BR #daughters]
178 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterN, daughterK);
179 // add decay table
180 decayTable->Insert(mode);
181 }
182
183 return decayTable;
184}
185
186G4DecayTable* G4ExcitedSigmaConstructor::AddDeltaKMode(G4DecayTable* decayTable,
187 const G4String& nameParent, G4double br,
188 G4int iIso3, G4bool fAnti)
189{
190 G4VDecayChannel* mode;
191
192 G4String daughterN;
193 G4String daughterK;
194 G4double r = 0.;
195
196 // ------------ N K- ------------
197 // determine daughters
198 if (iIso3 == +2) {
199 daughterN = "delta++";
200 r = 0.75 * br;
201 }
202 else if (iIso3 == 0) {
203 daughterN = "delta+";
204 r = br / 2.;
205 }
206 else if (iIso3 == -2) {
207 daughterN = "delta0";
208 r = 0.25 * br;
209 }
210 if (!fAnti) {
211 daughterK = "kaon-";
212 }
213 else {
214 daughterK = "kaon+";
215 }
216 if (fAnti) daughterN = "anti_" + daughterN;
217 if (r > 0.) {
218 // create decay channel [parent BR #daughters]
219 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterN, daughterK);
220 // add decay table
221 decayTable->Insert(mode);
222 }
223
224 // ------------ N K0 ------------
225 // determine daughters
226 if (iIso3 == +2) {
227 daughterN = "delta+";
228 r = 0.25 * br;
229 }
230 else if (iIso3 == 0) {
231 daughterN = "delta0";
232 r = br / 2.;
233 }
234 else if (iIso3 == -2) {
235 daughterN = "delta-";
236 r = 0.75 * br;
237 }
238 if (!fAnti) {
239 daughterK = "anti_kaon0";
240 }
241 else {
242 daughterK = "kaon0";
243 }
244 if (fAnti) daughterN = "anti_" + daughterN;
245 if (r > 0.) {
246 // create decay channel [parent BR #daughters]
247 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterN, daughterK);
248 // add decay table
249 decayTable->Insert(mode);
250 }
251
252 return decayTable;
253}
254
255G4DecayTable* G4ExcitedSigmaConstructor::AddNKStarMode(G4DecayTable* decayTable,
256 const G4String& nameParent, G4double br,
257 G4int iIso3, G4bool fAnti)
258{
259 G4VDecayChannel* mode;
260
261 G4String daughterN;
262 G4String daughterK;
263 G4double r = 0.;
264
265 // ------------ N K- ------------
266 // determine daughters
267 if (iIso3 == +2) {
268 r = 0.;
269 }
270 else if (iIso3 == 0) {
271 daughterN = "proton";
272 r = br / 2.;
273 }
274 else if (iIso3 == -2) {
275 daughterN = "neutron";
276 r = br;
277 }
278 if (!fAnti) {
279 daughterK = "k_star-";
280 }
281 else {
282 daughterK = "k_star+";
283 }
284 if (fAnti) daughterN = "anti_" + daughterN;
285 if (r > 0.) {
286 // create decay channel [parent BR #daughters]
287 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterN, daughterK);
288 // add decay table
289 decayTable->Insert(mode);
290 }
291
292 // ------------ N K0 ------------
293
294 // determine daughters
295 if (iIso3 == +2) {
296 daughterN = "proton";
297 r = br;
298 }
299 else if (iIso3 == 0) {
300 daughterN = "neutron";
301 r = br / 2.;
302 }
303 else if (iIso3 == -2) {
304 r = 0.;
305 }
306 if (!fAnti) {
307 daughterK = "anti_k_star0";
308 }
309 else {
310 daughterK = "k_star0";
311 }
312 if (fAnti) daughterN = "anti_" + daughterN;
313 // create decay channel [parent BR #daughters]
314 if (r > 0.) {
315 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterN, daughterK);
316 // add decay table
317 decayTable->Insert(mode);
318 }
319
320 return decayTable;
321}
322
323G4DecayTable* G4ExcitedSigmaConstructor::AddSigmaPiMode(G4DecayTable* decayTable,
324 const G4String& nameParent, G4double br,
325 G4int iIso3, G4bool fAnti)
326{
327 G4VDecayChannel* mode;
328
329 G4String daughterSigma;
330 G4String daughterPi;
331 G4double r = 0.;
332
333 // ------------ Sigma+ pi - ------------
334 // determine daughters
335 if (iIso3 == +2) {
336 r = 0.;
337 }
338 else if (iIso3 == 0) {
339 daughterSigma = "sigma+";
340 r = br / 2.;
341 }
342 else if (iIso3 == -2) {
343 daughterSigma = "sigma0";
344 r = br / 2.;
345 }
346 if (!fAnti) {
347 daughterPi = "pi-";
348 }
349 else {
350 daughterPi = "pi+";
351 }
352 if (fAnti) daughterSigma = "anti_" + daughterSigma;
353 if (r > 0.) {
354 // create decay channel [parent BR #daughters]
355 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterSigma, daughterPi);
356 // add decay table
357 decayTable->Insert(mode);
358 }
359 // ------------ Sigma0 Pi0 ------------
360 // determine daughters
361 if (iIso3 == +2) {
362 daughterSigma = "sigma+";
363 r = br / 2.;
364 }
365 else if (iIso3 == 0) {
366 r = 0.;
367 }
368 else if (iIso3 == -2) {
369 daughterSigma = "sigma-";
370
371 r = br / 2.;
372 }
373 daughterPi = "pi0";
374 if (fAnti) daughterSigma = "anti_" + daughterSigma;
375 if (r > 0.) {
376 // create decay channel [parent BR #daughters]
377 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterSigma, daughterPi);
378 // add decay table
379 decayTable->Insert(mode);
380 }
381
382 // ------------ Sigma- pi + ------------
383 // determine daughters
384 if (iIso3 == +2) {
385 daughterSigma = "sigma0";
386 r = br / 2.;
387 }
388 else if (iIso3 == 0) {
389 daughterSigma = "sigma-";
390 r = br / 2.;
391 }
392 else if (iIso3 == -2) {
393 r = 0.;
394 }
395 if (!fAnti) {
396 daughterPi = "pi+";
397 }
398 else {
399 daughterPi = "pi-";
400 }
401 if (fAnti) daughterSigma = "anti_" + daughterSigma;
402 if (r > 0.) {
403 // create decay channel [parent BR #daughters]
404 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterSigma, daughterPi);
405 // add decay table
406 decayTable->Insert(mode);
407 }
408
409 return decayTable;
410}
411
412G4DecayTable* G4ExcitedSigmaConstructor::AddSigmaStarPiMode(G4DecayTable* decayTable,
413 const G4String& nameParent, G4double br,
414 G4int iIso3, G4bool fAnti)
415{
416 G4VDecayChannel* mode;
417
418 G4String daughterSigma;
419 G4String daughterPi;
420 G4double r = 0.;
421
422 // ------------ Sigma+ pi - ------------
423 // determine daughters
424 if (iIso3 == +2) {
425 r = 0.;
426 }
427 else if (iIso3 == 0) {
428 daughterSigma = "sigma(1385)+";
429 r = br / 2.;
430 }
431 else if (iIso3 == -2) {
432 daughterSigma = "sigma(1385)0";
433 r = br / 2.;
434 }
435 if (!fAnti) {
436 daughterPi = "pi-";
437 }
438 else {
439 daughterPi = "pi+";
440 }
441 if (fAnti) daughterSigma = "anti_" + daughterSigma;
442 if (r > 0.) {
443 // create decay channel [parent BR #daughters]
444 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterSigma, daughterPi);
445 // add decay table
446 decayTable->Insert(mode);
447 }
448 // ------------ Sigma0 Pi0 ------------
449 // determine daughters
450 if (iIso3 == +2) {
451 daughterSigma = "sigma(1385)+";
452 r = br / 2.;
453 }
454 else if (iIso3 == 0) {
455 r = 0.;
456 }
457 else if (iIso3 == -2) {
458 daughterSigma = "sigma(1385)-";
459 r = br / 2.;
460 }
461 daughterPi = "pi0";
462 if (fAnti) daughterSigma = "anti_" + daughterSigma;
463 if (r > 0.) {
464 // create decay channel [parent BR #daughters]
465 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterSigma, daughterPi);
466
467 // add decay table
468 decayTable->Insert(mode);
469 }
470
471 // ------------ Sigma- pi + ------------
472 // determine daughters
473 if (iIso3 == +2) {
474 daughterSigma = "sigma(1385)0";
475 r = br / 2.;
476 }
477 else if (iIso3 == 0) {
478 daughterSigma = "sigma(1385)-";
479 r = br / 2.;
480 }
481 else if (iIso3 == -2) {
482 r = 0.;
483 }
484 if (!fAnti) {
485 daughterPi = "pi+";
486 }
487 else {
488 daughterPi = "pi-";
489 }
490 if (fAnti) daughterSigma = "anti_" + daughterSigma;
491 if (r > 0.) {
492 // create decay channel [parent BR #daughters]
493
494 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterSigma, daughterPi);
495 // add decay table
496 decayTable->Insert(mode);
497 }
498
499 return decayTable;
500}
501
502G4DecayTable* G4ExcitedSigmaConstructor::AddLambdaPiMode(G4DecayTable* decayTable,
503 const G4String& nameParent, G4double br,
504 G4int iIso3, G4bool fAnti)
505{
506 G4VDecayChannel* mode;
507
508 G4String daughterLambda = "lambda";
509 G4String daughterPi;
510
511 // determine daughters
512 if (iIso3 == +2) {
513 if (!fAnti) {
514 daughterPi = "pi+";
515 }
516 else {
517 daughterPi = "pi-";
518 }
519 }
520 else if (iIso3 == 0) {
521 daughterPi = "pi0";
522 }
523 else if (iIso3 == -2) {
524 if (!fAnti) {
525 daughterPi = "pi-";
526 }
527 else {
528 daughterPi = "pi+";
529 }
530 }
531 if (fAnti) daughterLambda = "anti_" + daughterLambda;
532 // create decay channel [parent BR #daughters]
533 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2, daughterLambda, daughterPi);
534 // add decay table
535 decayTable->Insert(mode);
536
537 return decayTable;
538}
539
540G4DecayTable* G4ExcitedSigmaConstructor::AddLambdaStarPiMode(G4DecayTable* decayTable,
541 const G4String& nameParent,
542 G4double br, G4int iIso3, G4bool fAnti)
543{
544 G4VDecayChannel* mode;
545
546 G4String daughterLambda = "lambda(1405)";
547 G4String daughterPi;
548
549 // determine daughters
550 if (iIso3 == +2) {
551 if (!fAnti) {
552 daughterPi = "pi+";
553 }
554 else {
555 daughterPi = "pi-";
556 }
557 }
558 else if (iIso3 == 0) {
559 daughterPi = "pi0";
560 }
561 else if (iIso3 == -2) {
562 if (!fAnti) {
563 daughterPi = "pi-";
564 }
565 else {
566 daughterPi = "pi+";
567 }
568 }
569
570 if (fAnti) daughterLambda = "anti_" + daughterLambda;
571 // create decay channel [parent BR #daughters]
572 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2, daughterLambda, daughterPi);
573 // add decay table
574 decayTable->Insert(mode);
575
576 return decayTable;
577}
578
580{
581 G4double fmass = mass[iState];
582 if (iState == 0) {
583 if (iso3 == +2)
584 fmass -= 0.9 * MeV; // sigma+ (1.3828 GeV from PDG 2025)
585 else if (iso3 == -2)
586 fmass -= 0.9 * MeV; // sigma- (1.3828 GeV from PDG 2025)
587 }
588 return fmass;
589}
590
592{
593 G4double fw = width[iState];
594 if (iState == 0) {
595 if (iso3 == +2)
596 fw = 36.2 * MeV; // sigma+ (modified based on PDG 2025)
597 else if (iso3 == -2)
598 fw = 36.2 * MeV; // sigma- (modified based on PDG 2025)
599 }
600 return fw;
601}
602
603// clang-format off
604
605const char* G4ExcitedSigmaConstructor::name[] = {
606 "sigma(1385)","sigma(1660)","sigma(1670)","sigma(1750)","sigma(1775)",
607 "sigma(1915)","sigma(1940)","sigma(2030)"
608};
609
610const G4double G4ExcitedSigmaConstructor::mass[] = {
611 1.3837*GeV, 1.660*GeV, 1.675*GeV, 1.750*GeV, 1.775*GeV,
612 1.915*GeV, 1.940*GeV, 2.030*GeV
613};
614
615const G4double G4ExcitedSigmaConstructor::width[] = {
616 36.0*MeV, 200.0*MeV, 70.0*MeV, 150.0*MeV, 120.0*MeV,
617 120.0*MeV, 250.0*MeV, 180.0*MeV
618};
619
620const G4int G4ExcitedSigmaConstructor::iSpin[] = {
621 3, 1, 3, 1, 5,
622 5, 3, 7
623};
624
625const G4int G4ExcitedSigmaConstructor::iParity[] = {
626 +1, +1, -1, -1, -1,
627 +1, -1, +1
628};
629
630
631const G4int G4ExcitedSigmaConstructor::encodingOffset[] = {
632 0, 10000, 10000, 20000, 0,
633 10000, 20000, 0
634};
635
637{
638 { 0.0, 0.0, 0.12, 0.0, 0.88, 0.0, 0.0, 0.0},
639 { 0.30, 0.0, 0.35, 0.0, 0.35, 0.0, 0.0, 0.0},
640 { 0.15, 0.0, 0.70, 0.0, 0.15, 0.0, 0.0, 0.0},
641 { 0.40, 0.0, 0.05, 0.0, 0.0, 0.55, 0.0, 0.0},
642 { 0.40, 0.0, 0.04, 0.10, 0.23, 0.0, 0.23, 0.0},
643 { 0.15, 0.0, 0.40, 0.05, 0.40, 0.0, 0.0, 0.0},
644 { 0.10, 0.15, 0.15, 0.15, 0.15, 0.0, 0.15, 0.15},
645 { 0.20, 0.04, 0.10, 0.10, 0.20, 0.0, 0.18, 0.18}
646
647};
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 GetWidth(G4int state, G4int iso) override
G4DecayTable * CreateDecayTable(const G4String &name, G4int iIso3, G4int iState, G4bool fAnti=false) override
G4double GetMass(G4int state, G4int iso) override