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