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