Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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"
41 #include "G4ParticleDefinition.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 
104 G4DecayTable* 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 
129 G4DecayTable* 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 
195 G4DecayTable* 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 
263 G4DecayTable* 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 
328 G4DecayTable* 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 
414 G4DecayTable* 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 
500 G4DecayTable* 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 
535 G4DecayTable* 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 
592 const char* G4ExcitedSigmaConstructor::name[] = {
593  "sigma(1385)","sigma(1660)","sigma(1670)","sigma(1750)","sigma(1775)",
594  "sigma(1915)","sigma(1940)","sigma(2030)"
595 };
596 
597 const 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 
602 const 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 
607 const G4int G4ExcitedSigmaConstructor::iSpin[] = {
608  3, 1, 3, 1, 5,
609  5, 3, 7
610 };
611 
612 const G4int G4ExcitedSigmaConstructor::iParity[] = {
613  +1, +1, -1, -1, -1,
614  +1, -1, +1
615 };
616 
617 
618 const 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