source: trunk/source/particles/shortlived/src/G4ExcitedSigmaConstructor.cc @ 1340

Last change on this file since 1340 was 1340, checked in by garnier, 14 years ago

update ti head

File size: 17.2 KB
Line 
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: G4ExcitedSigmaConstructor.cc,v 1.12 2010/10/01 02:41:44 kurasige Exp $
28// GEANT4 tag $Name: particles-V09-03-15 $
29//
30//
31// --------------------------------------------------------------
32//      GEANT 4 class implementation file
33//
34//      History: first implementation, based on object model of
35//      10 oct 1998  H.Kurashige
36// ---------------------------------------------------------------
37
38
39#include "G4ExcitedSigmaConstructor.hh"
40
41#include "G4ParticleDefinition.hh"
42#include "G4ParticleTable.hh"
43#include "G4ShortLivedTable.hh"
44#include "G4PhaseSpaceDecayChannel.hh"
45#include "G4VDecayChannel.hh"
46#include "G4DecayTable.hh"
47
48G4ExcitedSigmaConstructor::G4ExcitedSigmaConstructor():
49    G4ExcitedBaryonConstructor(NStates, SigmaIsoSpin)
50{
51
52}
53
54G4ExcitedSigmaConstructor::~G4ExcitedSigmaConstructor()
55{
56}
57
58G4DecayTable* G4ExcitedSigmaConstructor::CreateDecayTable(
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
572G4double G4ExcitedSigmaConstructor::GetMass(G4int iState, G4int iso3)
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
582G4double G4ExcitedSigmaConstructor::GetWidth(G4int iState, G4int iso3)
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
623const G4double G4ExcitedSigmaConstructor::bRatio[ G4ExcitedSigmaConstructor::NStates ][ G4ExcitedSigmaConstructor::NumberOfDecayModes] = 
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
Note: See TracBrowser for help on using the repository browser.