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 "G4ExcitedDeltaConstructor.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
00049 G4ExcitedDeltaConstructor::G4ExcitedDeltaConstructor():
00050 G4ExcitedBaryonConstructor(NStates, DeltaIsoSpin)
00051 {
00052
00053 }
00054
00055 G4ExcitedDeltaConstructor::~G4ExcitedDeltaConstructor()
00056 {
00057 }
00058
00059 G4int G4ExcitedDeltaConstructor::GetEncoding(G4int iIsoSpin3, G4int idxState)
00060 {
00061 G4int encoding;
00062
00063 if ((idxState==1)||(idxState==3)||(idxState==4)||(idxState==5)||(idxState==7)) {
00064 encoding = GetEncodingOffset(idxState);
00065 if ((iIsoSpin3==3)||(iIsoSpin3==-3)) {
00066
00067 encoding += 1000*GetQuarkContents(0, iIsoSpin3);
00068 encoding += 100*GetQuarkContents(1, iIsoSpin3);
00069 encoding += 10*GetQuarkContents(2, iIsoSpin3);
00070 } else if (iIsoSpin3== +1){
00071
00072 encoding += 1000*GetQuarkContents(0, iIsoSpin3);
00073 encoding += 10*GetQuarkContents(1, iIsoSpin3);
00074 encoding += 100*GetQuarkContents(2, iIsoSpin3);
00075 } else if (iIsoSpin3== -1){
00076
00077 encoding += 100*GetQuarkContents(0, iIsoSpin3);
00078 encoding += 1000*GetQuarkContents(1, iIsoSpin3);
00079 encoding += 10*GetQuarkContents(2, iIsoSpin3);
00080 }
00081 encoding += GetiSpin(idxState) +1;
00082 } else {
00083 encoding = G4ExcitedBaryonConstructor::GetEncoding(iIsoSpin3, idxState);
00084 }
00085 return encoding;
00086 }
00087 G4DecayTable* G4ExcitedDeltaConstructor::CreateDecayTable(
00088 const G4String& parentName,
00089 G4int iIso3,
00090 G4int iState,
00091 G4bool fAnti)
00092 {
00093
00094 G4DecayTable* decayTable = new G4DecayTable();
00095
00096 G4double br;
00097 if ( (br=bRatio[iState][NGamma]) >0.0) {
00098 AddNGammaMode( decayTable, parentName, br, iIso3, fAnti);
00099 }
00100
00101 if ( (br=bRatio[iState][NPi]) >0.0) {
00102 AddNPiMode( decayTable, parentName, br, iIso3, fAnti);
00103 }
00104
00105 if ( (br=bRatio[iState][NRho]) >0.0) {
00106 AddNRhoMode( decayTable, parentName, br, iIso3, fAnti);
00107 }
00108
00109 if ( (br=bRatio[iState][DeltaPi]) >0.0) {
00110 AddDeltaPiMode( decayTable, parentName, br, iIso3, fAnti);
00111 }
00112
00113 if ( (br=bRatio[iState][NStarPi]) >0.0) {
00114 AddNStarPiMode( decayTable, parentName, br, iIso3, fAnti);
00115 }
00116
00117 return decayTable;
00118 }
00119
00120 G4DecayTable* G4ExcitedDeltaConstructor::AddNGammaMode(
00121 G4DecayTable* decayTable, const G4String& nameParent,
00122 G4double br, G4int iIso3, G4bool fAnti)
00123 {
00124 G4VDecayChannel* mode;
00125
00126
00127 G4String daughterN;
00128 if (iIso3 == +1) {
00129 daughterN = "proton";
00130 } else if (iIso3 == -1) {
00131 daughterN = "neutron";
00132 } else {
00133
00134 return decayTable;
00135 }
00136
00137 if (fAnti) daughterN = "anti_" + daughterN;
00138
00139
00140 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2,
00141 daughterN,"gamma");
00142
00143 decayTable->Insert(mode);
00144
00145 return decayTable;
00146 }
00147
00148 G4DecayTable* G4ExcitedDeltaConstructor::AddNPiMode(
00149 G4DecayTable* decayTable, const G4String& nameParent,
00150 G4double br, G4int iIso3, G4bool fAnti)
00151 {
00152 G4VDecayChannel* mode;
00153
00154 G4String daughterN;
00155 G4String daughterPi;
00156 G4double r = 0.;
00157
00158
00159
00160 if ((iIso3 == +1)||(iIso3 == -1)) {
00161 if (iIso3 == +1) {
00162 daughterN = "proton";
00163 daughterPi = "pi0";
00164 r = br*2./3.;
00165 } else if (iIso3 == -1) {
00166 daughterN = "neutron";
00167 daughterPi = "pi0";
00168 r = br/3.;
00169 }
00170 if (fAnti) daughterN = "anti_" + daughterN;
00171
00172 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00173 daughterN,daughterPi);
00174
00175 decayTable->Insert(mode);
00176 }
00177
00178
00179
00180 if (iIso3 == +3) {
00181 daughterN = "proton";
00182 if (!fAnti) {
00183 daughterPi = "pi+";
00184 } else {
00185 daughterPi = "pi-";
00186 }
00187 r = br;
00188 } else if (iIso3 == +1) {
00189 daughterN = "neutron";
00190 if (!fAnti) {
00191 daughterPi = "pi+";
00192 } else {
00193 daughterPi = "pi-";
00194 }
00195 r = br/3.;
00196 } else if (iIso3 == -1) {
00197 daughterN = "proton";
00198 if (!fAnti) {
00199 daughterPi = "pi-";
00200 } else {
00201 daughterPi = "pi+";
00202 }
00203 r = br*2./3.;
00204 } else if (iIso3 == -3) {
00205 daughterN = "neutron";
00206 if (!fAnti) {
00207 daughterPi = "pi-";
00208 } else {
00209 daughterPi = "pi+";
00210 }
00211 r = br;
00212 }
00213 if (fAnti) daughterN = "anti_" + daughterN;
00214
00215
00216 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00217 daughterN,daughterPi);
00218
00219 decayTable->Insert(mode);
00220
00221 return decayTable;
00222 }
00223
00224
00225 G4DecayTable* G4ExcitedDeltaConstructor::AddNRhoMode(
00226 G4DecayTable* decayTable, const G4String& nameParent,
00227 G4double br, G4int iIso3, G4bool fAnti)
00228 {
00229 G4VDecayChannel* mode;
00230
00231 G4String daughterN;
00232 G4String daughterRho;
00233 G4double r = 0.;
00234
00235
00236
00237 if ((iIso3 == +1)||(iIso3 == -1)) {
00238 if (iIso3 == +1) {
00239 daughterN = "proton";
00240 daughterRho = "rho0";
00241 r = br*2./3.;
00242 } else if (iIso3 == -1) {
00243 daughterN = "neutron";
00244 daughterRho = "rho0";
00245 r = br/3.;
00246 }
00247 if (fAnti) daughterN = "anti_" + daughterN;
00248
00249 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00250 daughterN,daughterRho);
00251
00252 decayTable->Insert(mode);
00253 }
00254
00255
00256
00257 if (iIso3 == +3) {
00258 daughterN = "proton";
00259 if (!fAnti) {
00260 daughterRho = "rho+";
00261 } else {
00262 daughterRho = "rho-";
00263 }
00264 r = br;
00265 } else if (iIso3 == +1) {
00266 daughterN = "neutron";
00267 if (!fAnti) {
00268 daughterRho = "rho+";
00269 } else {
00270 daughterRho = "rho-";
00271 }
00272 r = br/3.;
00273 } else if (iIso3 == -1) {
00274 daughterN = "proton";
00275 if (!fAnti) {
00276 daughterRho = "rho-";
00277 } else {
00278 daughterRho = "rho+";
00279 }
00280 r = br*2./3.;
00281 } else if (iIso3 == -3) {
00282 daughterN = "neutron";
00283 if (!fAnti) {
00284 daughterRho = "rho-";
00285 } else {
00286 daughterRho = "rho+";
00287 }
00288 r = br;
00289 }
00290 if (fAnti) daughterN = "anti_" + daughterN;
00291
00292
00293 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00294 daughterN,daughterRho);
00295
00296 decayTable->Insert(mode);
00297
00298 return decayTable;
00299 }
00300
00301 G4DecayTable* G4ExcitedDeltaConstructor::AddNStarPiMode(
00302 G4DecayTable* decayTable, const G4String& nameParent,
00303 G4double br, G4int iIso3, G4bool fAnti)
00304 {
00305 G4VDecayChannel* mode;
00306
00307 G4String daughterN;
00308 G4String daughterPi;
00309 G4double r = 0.;
00310
00311
00312
00313 if ((iIso3 == +1)||(iIso3 == -1)) {
00314 if (iIso3 == +1) {
00315 daughterN = "N(1440)+";
00316 daughterPi = "pi0";
00317 r = br*2./3.;
00318 } else if (iIso3 == -1) {
00319 daughterN = "N(1440)0";
00320 daughterPi = "pi0";
00321 r = br/3.;
00322 }
00323 if (fAnti) daughterN = "anti_" + daughterN;
00324
00325 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00326 daughterN,daughterPi);
00327
00328 decayTable->Insert(mode);
00329 }
00330
00331
00332
00333 if (iIso3 == +3) {
00334 daughterN = "N(1440)+";
00335 if (!fAnti) {
00336 daughterPi = "pi+";
00337 } else {
00338 daughterPi = "pi-";
00339 }
00340 r = br;
00341 } else if (iIso3 == +1) {
00342 daughterN = "N(1440)0";
00343 if (!fAnti) {
00344 daughterPi = "pi+";
00345 } else {
00346 daughterPi = "pi-";
00347 }
00348 r = br/3.;
00349 } else if (iIso3 == -1) {
00350 daughterN = "N(1440)+";
00351 if (!fAnti) {
00352 daughterPi = "pi-";
00353 } else {
00354 daughterPi = "pi+";
00355 }
00356 r = br*2./3.;
00357 } else if (iIso3 == -3) {
00358 daughterN = "N(1440)0";
00359 if (!fAnti) {
00360 daughterPi = "pi-";
00361 } else {
00362 daughterPi = "pi+";
00363 }
00364 r = br;
00365 }
00366 if (fAnti) daughterN = "anti_" + daughterN;
00367
00368
00369 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00370 daughterN,daughterPi);
00371
00372 decayTable->Insert(mode);
00373
00374 return decayTable;
00375 }
00376
00377 G4DecayTable* G4ExcitedDeltaConstructor::AddDeltaPiMode(
00378 G4DecayTable* decayTable, const G4String& nameParent,
00379 G4double br, G4int iIso3, G4bool fAnti)
00380 {
00381 G4VDecayChannel* mode;
00382
00383 G4String daughterDelta;
00384 G4String daughterPi;
00385 G4double r;
00386
00387
00388
00389 if (iIso3 == +3) {
00390 daughterDelta = "delta+";
00391 r = br*0.4;
00392 } else if (iIso3 == +1) {
00393 daughterDelta = "delta0";
00394 r = br*8./15.0;
00395 } else if (iIso3 == -1) {
00396 daughterDelta = "delta-";
00397 r = br*6./15.;
00398 } else {
00399 r = 0.;
00400 }
00401 if (!fAnti) {
00402 daughterPi = "pi+";
00403 } else {
00404 daughterPi = "pi-";
00405 }
00406 if (fAnti) daughterDelta = "anti_" + daughterDelta;
00407 if (r>0.0) {
00408
00409 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00410 daughterDelta,daughterPi);
00411
00412 decayTable->Insert(mode);
00413 }
00414
00415
00416
00417 if (iIso3 == +3) {
00418 daughterDelta = "delta++";
00419 r = br*0.6;
00420 } else if (iIso3 == +1) {
00421 daughterDelta = "delta+";
00422 r = br*1./15.0;
00423 } else if (iIso3 == -1) {
00424 daughterDelta = "delta0";
00425 r = br*1./15.;
00426 } else {
00427 daughterDelta = "delta-";
00428 r = br*0.6;
00429 }
00430 daughterPi = "pi0";
00431 if (fAnti) daughterDelta = "anti_" + daughterDelta;
00432
00433
00434 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00435 daughterDelta,daughterPi);
00436
00437 decayTable->Insert(mode);
00438
00439
00440
00441 if (iIso3 == +3) {
00442 r= 0.;
00443 } else if (iIso3 == +1) {
00444 daughterDelta = "delta++";
00445 r = br*6./15.0;
00446 } else if (iIso3 == -1) {
00447 daughterDelta = "delta+";
00448 r = br*8./15.;
00449 } else {
00450 daughterDelta = "delta0";
00451 r = br*0.4;
00452 }
00453 if (!fAnti) {
00454 daughterPi = "pi-";
00455 } else {
00456 daughterPi = "pi+";
00457 }
00458 if (fAnti) daughterDelta = "anti_" + daughterDelta;
00459 if (r>0.0) {
00460
00461 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00462 daughterDelta,daughterPi);
00463
00464 decayTable->Insert(mode);
00465 }
00466
00467 return decayTable;
00468 }
00469
00470 const char* G4ExcitedDeltaConstructor::name[] =
00471 {
00472 "delta(1600)", "delta(1620)", "delta(1700)", "delta(1900)", "delta(1905)",
00473 "delta(1910)", "delta(1920)", "delta(1930)", "delta(1950)"
00474 };
00475
00476 const G4double G4ExcitedDeltaConstructor::mass[] =
00477 {
00478 1.600*GeV, 1.630*GeV, 1.700*GeV, 1.900*GeV, 1.890*GeV,
00479 1.910*GeV, 1.920*GeV, 1.960*GeV, 1.930*GeV
00480 };
00481
00482 const G4double G4ExcitedDeltaConstructor::width[] = {
00483 350.0*MeV, 145.0*MeV, 300.0*MeV, 200.0*MeV, 330.0*MeV,
00484 250.0*MeV, 200.0*MeV, 360.0*MeV, 280.0*MeV
00485 };
00486
00487 const G4int G4ExcitedDeltaConstructor::iSpin[] =
00488 {
00489 3, 1, 3, 1, 5,
00490 1, 3, 5, 7
00491 };
00492
00493 const G4int G4ExcitedDeltaConstructor::iParity[] = {
00494 +1, -1, -1, -1, +1,
00495 +1, +1, -1, +1
00496 };
00497
00498 const G4int G4ExcitedDeltaConstructor::encodingOffset[] = {
00499 30000, 0, 10000, 10000, 0,
00500 20000, 20000, 10000, 0
00501 };
00502
00503 const G4double G4ExcitedDeltaConstructor::bRatio[ G4ExcitedDeltaConstructor::NStates ][ G4ExcitedDeltaConstructor::NumberOfDecayModes] =
00504 {
00505
00506 { 0.0, 0.15, 0.0, 0.55, 0.30 },
00507 { 0.0, 0.25, 0.0, 0.60, 0.15 },
00508 { 0.0, 0.20, 0.10, 0.55, 0.15 },
00509 { 0.0, 0.30, 0.15, 0.30, 0.25 },
00510 { 0.0, 0.20, 0.60, 0.10, 0.10 },
00511 { 0.0, 0.35, 0.40, 0.15, 0.10 },
00512 { 0.0, 0.15, 0.30, 0.30, 0.25 },
00513 { 0.0, 0.20, 0.25, 0.25, 0.30 },
00514 { 0.01, 0.44, 0.15, 0.20, 0.20 }
00515 };
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531