00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include "G4ExcitedSigmaConstructor.hh"
00039
00040 #include "G4SystemOfUnits.hh"
00041 #include "G4ParticleDefinition.hh"
00042 #include "G4ParticleTable.hh"
00043 #include "G4ShortLivedTable.hh"
00044 #include "G4PhaseSpaceDecayChannel.hh"
00045 #include "G4VDecayChannel.hh"
00046 #include "G4DecayTable.hh"
00047
00048 G4ExcitedSigmaConstructor::G4ExcitedSigmaConstructor():
00049 G4ExcitedBaryonConstructor(NStates, SigmaIsoSpin)
00050 {
00051
00052 }
00053
00054 G4ExcitedSigmaConstructor::~G4ExcitedSigmaConstructor()
00055 {
00056 }
00057
00058 G4DecayTable* G4ExcitedSigmaConstructor::CreateDecayTable(
00059 const G4String& parentName,
00060 G4int iIso3,
00061 G4int iState,
00062 G4bool fAnti)
00063 {
00064
00065
00066 G4DecayTable* decayTable = new G4DecayTable();
00067
00068 G4double br;
00069 if ( (br=bRatio[iState][NK]) >0.0) {
00070 AddNKMode( decayTable, parentName, br, iIso3, fAnti);
00071 }
00072
00073 if ( (br=bRatio[iState][NKStar]) >0.0) {
00074 AddNKStarMode( decayTable, parentName, br, iIso3, fAnti);
00075 }
00076
00077 if ( (br=bRatio[iState][SigmaPi]) >0.0) {
00078 AddSigmaPiMode( decayTable, parentName, br, iIso3, fAnti);
00079 }
00080
00081 if ( (br=bRatio[iState][SigmaStarPi]) >0.0) {
00082 AddSigmaStarPiMode( decayTable, parentName, br, iIso3, fAnti);
00083 }
00084
00085 if ( (br=bRatio[iState][LambdaPi]) >0.0) {
00086 AddLambdaPiMode( decayTable, parentName, br, iIso3, fAnti);
00087 }
00088
00089 if ( (br=bRatio[iState][SigmaEta]) >0.0) {
00090 AddSigmaEtaMode( decayTable, parentName, br, iIso3, fAnti);
00091 }
00092
00093 if ( (br=bRatio[iState][LambdaStarPi]) >0.0) {
00094 AddLambdaStarPiMode( decayTable, parentName, br, iIso3, fAnti);
00095 }
00096
00097 if ( (br=bRatio[iState][DeltaK]) >0.0) {
00098 AddDeltaKMode( decayTable, parentName, br, iIso3, fAnti);
00099 }
00100
00101 return decayTable;
00102 }
00103
00104 G4DecayTable* G4ExcitedSigmaConstructor::AddSigmaEtaMode(
00105 G4DecayTable* decayTable, const G4String& nameParent,
00106 G4double br, G4int iIso3, G4bool fAnti)
00107 {
00108 G4VDecayChannel* mode;
00109
00110 G4String daughterH;
00111 if (iIso3== +2) {
00112 daughterH = "sigma+";
00113 } else if (iIso3== 0) {
00114 daughterH = "sigma0";
00115 } else if (iIso3== -2) {
00116 daughterH = "sigma-";
00117 }
00118 if (fAnti) daughterH = "anti_" + daughterH;
00119
00120
00121 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2,
00122 daughterH,"eta");
00123
00124 decayTable->Insert(mode);
00125
00126 return decayTable;
00127 }
00128
00129 G4DecayTable* G4ExcitedSigmaConstructor::AddNKMode(
00130 G4DecayTable* decayTable, const G4String& nameParent,
00131 G4double br, G4int iIso3, G4bool fAnti)
00132
00133
00134 {
00135 G4VDecayChannel* mode;
00136
00137 G4String daughterN;
00138 G4String daughterK;
00139 G4double r = 0.;
00140
00141
00142
00143 if (iIso3== +2) {
00144 r=0.;
00145 } else if (iIso3== 0) {
00146 daughterN = "proton";
00147 r = br/2.;
00148 } else if (iIso3== -2) {
00149 daughterN = "neutron";
00150 r = br;
00151 }
00152 if (!fAnti) {
00153 daughterK = "kaon-";
00154 } else {
00155 daughterK = "kaon+";
00156 }
00157 if (fAnti) daughterN = "anti_" + daughterN;
00158 if (r>0.) {
00159
00160 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00161 daughterN,daughterK);
00162
00163 decayTable->Insert(mode);
00164 }
00165
00166
00167
00168 if (iIso3== +2) {
00169 daughterN = "proton";
00170 r=br;
00171 } else if (iIso3== 0) {
00172 daughterN = "neutron";
00173 r = br/2.;
00174 } else if (iIso3== -2) {
00175 r = 0.;
00176 }
00177 if (!fAnti) {
00178 daughterK = "anti_kaon0";
00179 } else {
00180
00181 daughterK = "kaon0";
00182 }
00183 if (fAnti) daughterN = "anti_" + daughterN;
00184 if (r>0.) {
00185
00186 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00187 daughterN,daughterK);
00188
00189 decayTable->Insert(mode);
00190 }
00191
00192 return decayTable;
00193 }
00194
00195 G4DecayTable* G4ExcitedSigmaConstructor::AddDeltaKMode(
00196 G4DecayTable* decayTable, const G4String& nameParent,
00197 G4double br, G4int iIso3, G4bool fAnti)
00198 {
00199 G4VDecayChannel* mode;
00200
00201 G4String daughterN;
00202 G4String daughterK;
00203 G4double r = 0.;
00204
00205
00206
00207 if (iIso3== +2) {
00208 daughterN = "delta++";
00209 r=0.75*br;
00210 } else if (iIso3== 0) {
00211 daughterN = "delta+";
00212 r = br/2.;
00213 } else if (iIso3== -2) {
00214 daughterN = "delta0";
00215 r = 0.25*br;
00216 }
00217 if (!fAnti) {
00218 daughterK = "kaon-";
00219 } else {
00220 daughterK = "kaon+";
00221 }
00222 if (fAnti) daughterN = "anti_" + daughterN;
00223 if (r>0.) {
00224
00225 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00226 daughterN,daughterK);
00227
00228 decayTable->Insert(mode);
00229 }
00230
00231
00232
00233 if (iIso3== +2) {
00234 daughterN = "delta+";
00235 r=0.25*br;
00236 } else if (iIso3== 0) {
00237 daughterN = "delta0";
00238 r = br/2.;
00239 } else if (iIso3== -2) {
00240 daughterN = "delta-";
00241 r=0.75*br;
00242 }
00243 if (!fAnti) {
00244 daughterK = "anti_kaon0";
00245 } else {
00246 daughterK = "kaon0";
00247 }
00248 if (fAnti) daughterN = "anti_" + daughterN;
00249 if (r>0.) {
00250
00251
00252
00253 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00254 daughterN,daughterK);
00255
00256 decayTable->Insert(mode);
00257 }
00258
00259 return decayTable;
00260 }
00261
00262
00263 G4DecayTable* G4ExcitedSigmaConstructor::AddNKStarMode(
00264 G4DecayTable* decayTable, const G4String& nameParent,
00265 G4double br, G4int iIso3, G4bool fAnti)
00266 {
00267 G4VDecayChannel* mode;
00268
00269 G4String daughterN;
00270 G4String daughterK;
00271 G4double r = 0.;
00272
00273
00274
00275 if (iIso3== +2) {
00276
00277 r=0.;
00278 } else if (iIso3== 0) {
00279 daughterN = "proton";
00280 r = br/2.;
00281 } else if (iIso3== -2) {
00282 daughterN = "neutron";
00283 r = br;
00284 }
00285 if (!fAnti) {
00286 daughterK = "k_star-";
00287 } else {
00288 daughterK = "k_star+";
00289 }
00290 if (fAnti) daughterN = "anti_" + daughterN;
00291 if (r>0.) {
00292
00293 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00294 daughterN,daughterK);
00295
00296 decayTable->Insert(mode);
00297 }
00298
00299
00300
00301
00302 if (iIso3== +2) {
00303 daughterN = "proton";
00304 r=br;
00305 } else if (iIso3== 0) {
00306 daughterN = "neutron";
00307 r = br/2.;
00308 } else if (iIso3== -2) {
00309 r = 0.;
00310 }
00311 if (!fAnti) {
00312 daughterK = "anti_k_star0";
00313 } else {
00314 daughterK = "k_star0";
00315 }
00316 if (fAnti) daughterN = "anti_" + daughterN;
00317
00318 if (r>0.) {
00319 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00320 daughterN,daughterK);
00321
00322 decayTable->Insert(mode);
00323 }
00324
00325 return decayTable;
00326 }
00327
00328 G4DecayTable* G4ExcitedSigmaConstructor::AddSigmaPiMode(
00329 G4DecayTable* decayTable, const G4String& nameParent,
00330 G4double br, G4int iIso3, G4bool fAnti)
00331 {
00332 G4VDecayChannel* mode;
00333
00334 G4String daughterSigma;
00335 G4String daughterPi;
00336 G4double r = 0.;
00337
00338
00339
00340 if (iIso3== +2) {
00341 r = 0.;
00342 } else if (iIso3== 0) {
00343 daughterSigma = "sigma+";
00344 r = br/2.;
00345 } else if (iIso3== -2) {
00346 daughterSigma = "sigma0";
00347 r = br/2.;
00348 }
00349 if (!fAnti) {
00350 daughterPi = "pi-";
00351 } else {
00352 daughterPi = "pi+";
00353 }
00354 if (fAnti) daughterSigma = "anti_" + daughterSigma;
00355 if (r>0.) {
00356
00357 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00358 daughterSigma,daughterPi);
00359
00360 decayTable->Insert(mode);
00361 }
00362
00363
00364 if (iIso3== +2) {
00365 daughterSigma = "sigma+";
00366 r = br/2.;
00367 } else if (iIso3== 0) {
00368 r = 0.;
00369 } else if (iIso3== -2) {
00370 daughterSigma = "sigma-";
00371
00372
00373 r = br/2.;
00374 }
00375 daughterPi = "pi0";
00376 if (fAnti) daughterSigma = "anti_" + daughterSigma;
00377 if (r>0.) {
00378
00379 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00380 daughterSigma,daughterPi);
00381
00382 decayTable->Insert(mode);
00383 }
00384
00385
00386
00387 if (iIso3== +2) {
00388 daughterSigma = "sigma0";
00389 r = br/2.;
00390 } else if (iIso3== 0) {
00391 daughterSigma = "sigma-";
00392 r = br/2.;
00393 } else if (iIso3== -2) {
00394 r = 0.;
00395 }
00396 if (!fAnti) {
00397 daughterPi = "pi+";
00398 } else {
00399 daughterPi = "pi-";
00400 }
00401 if (fAnti) daughterSigma = "anti_" + daughterSigma;
00402 if (r>0.) {
00403
00404 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00405 daughterSigma,daughterPi);
00406
00407 decayTable->Insert(mode);
00408 }
00409
00410 return decayTable;
00411 }
00412
00413
00414 G4DecayTable* G4ExcitedSigmaConstructor::AddSigmaStarPiMode(
00415 G4DecayTable* decayTable, const G4String& nameParent,
00416 G4double br, G4int iIso3, G4bool fAnti)
00417 {
00418 G4VDecayChannel* mode;
00419
00420
00421 G4String daughterSigma;
00422 G4String daughterPi;
00423 G4double r = 0.;
00424
00425
00426
00427 if (iIso3== +2) {
00428 r = 0.;
00429 } else if (iIso3== 0) {
00430 daughterSigma = "sigma(1385)+";
00431 r = br/2.;
00432 } else if (iIso3== -2) {
00433 daughterSigma = "sigma(1385)0";
00434 r = br/2.;
00435 }
00436 if (!fAnti) {
00437 daughterPi = "pi-";
00438 } else {
00439 daughterPi = "pi+";
00440 }
00441 if (fAnti) daughterSigma = "anti_" + daughterSigma;
00442 if (r>0.) {
00443
00444 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00445 daughterSigma,daughterPi);
00446
00447 decayTable->Insert(mode);
00448 }
00449
00450
00451 if (iIso3== +2) {
00452 daughterSigma = "sigma(1385)+";
00453 r = br/2.;
00454 } else if (iIso3== 0) {
00455 r = 0.;
00456 } else if (iIso3== -2) {
00457 daughterSigma = "sigma(1385)-";
00458 r = br/2.;
00459 }
00460 daughterPi = "pi0";
00461 if (fAnti) daughterSigma = "anti_" + daughterSigma;
00462 if (r>0.) {
00463
00464 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00465 daughterSigma,daughterPi);
00466
00467
00468 decayTable->Insert(mode);
00469 }
00470
00471
00472
00473 if (iIso3== +2) {
00474 daughterSigma = "sigma(1385)0";
00475 r = br/2.;
00476 } else if (iIso3== 0) {
00477 daughterSigma = "sigma(1385)-";
00478 r = br/2.;
00479 } else if (iIso3== -2) {
00480 r = 0.;
00481 }
00482 if (!fAnti) {
00483 daughterPi = "pi+";
00484 } else {
00485 daughterPi = "pi-";
00486 }
00487 if (fAnti) daughterSigma = "anti_" + daughterSigma;
00488 if (r>0.) {
00489
00490
00491 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00492 daughterSigma,daughterPi);
00493
00494 decayTable->Insert(mode);
00495 }
00496
00497 return decayTable;
00498 }
00499
00500 G4DecayTable* G4ExcitedSigmaConstructor::AddLambdaPiMode(
00501 G4DecayTable* decayTable, const G4String& nameParent,
00502 G4double br, G4int iIso3, G4bool fAnti)
00503 {
00504 G4VDecayChannel* mode;
00505
00506 G4String daughterLambda = "lambda";
00507 G4String daughterPi;
00508
00509
00510 if (iIso3== +2) {
00511 if (!fAnti) {
00512 daughterPi = "pi+";
00513 } else {
00514 daughterPi = "pi-";
00515 }
00516 } else if (iIso3== 0) {
00517 daughterPi = "pi0";
00518 } else if (iIso3== -2) {
00519 if (!fAnti) {
00520 daughterPi = "pi-";
00521 } else {
00522 daughterPi = "pi+";
00523 }
00524 }
00525 if (fAnti) daughterLambda = "anti_" + daughterLambda;
00526
00527 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2,
00528 daughterLambda, daughterPi);
00529
00530 decayTable->Insert(mode);
00531
00532 return decayTable;
00533 }
00534
00535 G4DecayTable* G4ExcitedSigmaConstructor::AddLambdaStarPiMode(
00536 G4DecayTable* decayTable, const G4String& nameParent,
00537 G4double br, G4int iIso3, G4bool fAnti)
00538 {
00539 G4VDecayChannel* mode;
00540
00541 G4String daughterLambda = "lambda(1405)";
00542 G4String daughterPi;
00543
00544
00545 if (iIso3== +2) {
00546 if (!fAnti) {
00547 daughterPi = "pi+";
00548 } else {
00549 daughterPi = "pi-";
00550 }
00551 } else if (iIso3== 0) {
00552 daughterPi = "pi0";
00553 } else if (iIso3== -2) {
00554 if (!fAnti) {
00555 daughterPi = "pi-";
00556 } else {
00557 daughterPi = "pi+";
00558 }
00559 }
00560
00561 if (fAnti) daughterLambda = "anti_" + daughterLambda;
00562
00563 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2,
00564 daughterLambda,daughterPi);
00565
00566 decayTable->Insert(mode);
00567
00568 return decayTable;
00569 }
00570
00571
00572 G4double G4ExcitedSigmaConstructor::GetMass(G4int iState, G4int iso3)
00573 {
00574 G4double fmass = mass[iState];
00575 if (iState == 0 ) {
00576 if (iso3== +2) fmass -= 0.9*MeV;
00577 else if (iso3== -2) fmass += 3.5*MeV;
00578 }
00579 return fmass;
00580 }
00581
00582 G4double G4ExcitedSigmaConstructor::GetWidth(G4int iState, G4int iso3)
00583 {
00584 G4double fw=width[iState];
00585 if (iState == 0 ) {
00586 if (iso3== +2) fw = 35.8*MeV;
00587 else if (iso3== -2) fw = 39.4*MeV;
00588 }
00589 return fw;
00590 }
00591
00592 const char* G4ExcitedSigmaConstructor::name[] = {
00593 "sigma(1385)","sigma(1660)","sigma(1670)","sigma(1750)","sigma(1775)",
00594 "sigma(1915)","sigma(1940)","sigma(2030)"
00595 };
00596
00597 const G4double G4ExcitedSigmaConstructor::mass[] = {
00598 1.3837*GeV, 1.660*GeV, 1.670*GeV, 1.750*GeV, 1.775*GeV,
00599 1.915*GeV, 1.940*GeV, 2.030*GeV
00600 };
00601
00602 const G4double G4ExcitedSigmaConstructor::width[] = {
00603 36.0*MeV, 100.0*MeV, 60.0*MeV, 90.0*MeV, 120.0*MeV,
00604 120.0*MeV, 220.0*MeV, 180.0*MeV
00605 };
00606
00607 const G4int G4ExcitedSigmaConstructor::iSpin[] = {
00608 3, 1, 3, 1, 5,
00609 5, 3, 7
00610 };
00611
00612 const G4int G4ExcitedSigmaConstructor::iParity[] = {
00613 +1, +1, -1, -1, -1,
00614 +1, -1, +1
00615 };
00616
00617
00618 const G4int G4ExcitedSigmaConstructor::encodingOffset[] = {
00619 0, 10000, 10000, 20000, 0,
00620 10000, 20000, 0
00621 };
00622
00623 const G4double G4ExcitedSigmaConstructor::bRatio[ G4ExcitedSigmaConstructor::NStates ][ G4ExcitedSigmaConstructor::NumberOfDecayModes] =
00624 {
00625 { 0.0, 0.0, 0.12, 0.0, 0.88, 0.0, 0.0, 0.0},
00626 { 0.30, 0.0, 0.35, 0.0, 0.35, 0.0, 0.0, 0.0},
00627 { 0.15, 0.0, 0.70, 0.0, 0.15, 0.0, 0.0, 0.0},
00628 { 0.40, 0.0, 0.05, 0.0, 0.0, 0.55, 0.0, 0.0},
00629 { 0.40, 0.0, 0.04, 0.10, 0.23, 0.0, 0.23, 0.0},
00630 { 0.15, 0.0, 0.40, 0.05, 0.40, 0.0, 0.0, 0.0},
00631 { 0.10, 0.15, 0.15, 0.15, 0.15, 0.0, 0.15, 0.15},
00632 { 0.20, 0.04, 0.10, 0.10, 0.20, 0.0, 0.18, 0.18}
00633
00634 };
00635
00636
00637
00638
00639
00640
00641
00642
00643
00644
00645