Geant4 9.6.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// $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)