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 "G4ExcitedXiConstructor.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 G4ExcitedXiConstructor::G4ExcitedXiConstructor():
00049 G4ExcitedBaryonConstructor(NStates, XiIsoSpin)
00050 {
00051
00052 }
00053
00054 G4ExcitedXiConstructor::~G4ExcitedXiConstructor()
00055 {
00056 }
00057
00058 G4DecayTable* G4ExcitedXiConstructor::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][XiPi]) >0.0) {
00070 AddXiPiMode( decayTable, parentName, br, iIso3, fAnti);
00071 }
00072
00073 if ( (br=bRatio[iState][XiGamma]) >0.0) {
00074 AddXiGammaMode( decayTable, parentName, br, iIso3, fAnti);
00075 }
00076
00077 if ( (br=bRatio[iState][LambdaK]) >0.0) {
00078 AddLambdaKMode( decayTable, parentName, br, iIso3, fAnti);
00079 }
00080
00081 if ( (br=bRatio[iState][SigmaK]) >0.0) {
00082 AddSigmaKMode( decayTable, parentName, br, iIso3, fAnti);
00083 }
00084
00085 return decayTable;
00086 }
00087
00088 G4DecayTable* G4ExcitedXiConstructor::AddXiGammaMode(
00089 G4DecayTable* decayTable, const G4String& nameParent,
00090 G4double br, G4int iIso3, G4bool fAnti)
00091 {
00092 G4VDecayChannel* mode;
00093
00094 G4String daughterH;
00095 if (iIso3== +1) {
00096 daughterH = "xi0";
00097 } else if (iIso3==-1) {
00098 daughterH = "xi-";
00099 }
00100 if (fAnti) daughterH = "anti_" + daughterH;
00101
00102
00103 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2,
00104 daughterH,"gamma");
00105
00106 decayTable->Insert(mode);
00107
00108 return decayTable;
00109 }
00110
00111 G4DecayTable* G4ExcitedXiConstructor::AddLambdaKMode(
00112 G4DecayTable* decayTable, const G4String& nameParent,
00113 G4double br, G4int iIso3, G4bool fAnti)
00114
00115
00116 {
00117 G4VDecayChannel* mode;
00118
00119 G4String lambda = "lambda";
00120 G4String daughterK;
00121 G4double r = 0.;
00122
00123
00124
00125 if (iIso3 == +1) {
00126 if (!fAnti) {
00127 daughterK = "kaon0";
00128 } else {
00129 daughterK = "anti_kaon0";
00130 }
00131 r = br;
00132 } else if (iIso3 == -1) {
00133 if (!fAnti) {
00134 daughterK = "kaon-";
00135 } else {
00136 daughterK = "kaon+";
00137 }
00138 r = br;
00139 }
00140 if (fAnti) lambda = "anti_" + lambda;
00141 if (r>0.) {
00142
00143 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00144 lambda,daughterK);
00145
00146 decayTable->Insert(mode);
00147 }
00148
00149 return decayTable;
00150 }
00151
00152 G4DecayTable* G4ExcitedXiConstructor::AddSigmaKMode(
00153 G4DecayTable* decayTable, const G4String& nameParent,
00154 G4double br, G4int iIso3, G4bool fAnti)
00155 {
00156 G4VDecayChannel* mode;
00157
00158 G4String daughterH;
00159 G4String daughterK;
00160 G4double r = 0.;
00161
00162
00163
00164 if (iIso3== +1) {
00165 daughterH = "sigma+";
00166 r= br/2.;
00167 } else if (iIso3== -1) {
00168 daughterH = "sigma0";
00169 r = br/2.;
00170 }
00171 if (!fAnti) {
00172 daughterK = "kaon-";
00173 } else {
00174 daughterK = "kaon+";
00175 }
00176 if (fAnti) daughterH = "anti_" + daughterH;
00177 if (r>0.) {
00178
00179 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00180 daughterH,daughterK);
00181
00182 decayTable->Insert(mode);
00183 }
00184
00185
00186
00187 if (iIso3 == +1) {
00188 daughterH = "sigma0";
00189 r= br/2.;
00190 } else if (iIso3 == -1) {
00191 daughterH = "sigma-";
00192 r = br/2.;
00193 }
00194 if (!fAnti) {
00195 daughterK = "anti_kaon0";
00196 } else {
00197 daughterK = "kaon0";
00198 }
00199 if (fAnti) daughterH = "anti_" + daughterH;
00200 if (r>0.) {
00201
00202 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00203 daughterH,daughterK);
00204
00205 decayTable->Insert(mode);
00206 }
00207
00208 return decayTable;
00209 }
00210
00211 G4DecayTable* G4ExcitedXiConstructor::AddXiPiMode(
00212 G4DecayTable* decayTable, const G4String& nameParent,
00213 G4double br, G4int iIso3, G4bool fAnti)
00214 {
00215 G4VDecayChannel* mode;
00216
00217 G4String daughterXi;
00218 G4String daughterPi;
00219 G4double r = 0.;
00220
00221
00222
00223 if (iIso3== +1) {
00224 r = 0.;
00225 } else if (iIso3 == -1) {
00226 daughterXi = "xi0";
00227 r = br/2.;
00228 }
00229 if (!fAnti) {
00230 daughterPi = "pi-";
00231 } else {
00232 daughterPi = "pi+";
00233 }
00234 if (fAnti) daughterXi = "anti_" + daughterXi;
00235 if (r>0.) {
00236
00237 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00238 daughterXi,daughterPi);
00239
00240 decayTable->Insert(mode);
00241 }
00242
00243
00244 if (iIso3== +1) {
00245 daughterXi = "xi0";
00246 r = br/2.;
00247 } else if (iIso3 == -1) {
00248 daughterXi = "xi-";
00249 r = br/2.;
00250 }
00251 daughterPi = "pi0";
00252 if (fAnti) daughterXi = "anti_" + daughterXi;
00253 if (r>0.) {
00254
00255 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00256 daughterXi,daughterPi);
00257
00258 decayTable->Insert(mode);
00259 }
00260
00261
00262
00263 if (iIso3== +1) {
00264 daughterXi = "xi-";
00265 r = br/2.;
00266 } else if (iIso3==-1) {
00267 r = 0.;
00268 }
00269 if (!fAnti) {
00270 daughterPi = "pi+";
00271 } else {
00272 daughterPi = "pi-";
00273 }
00274 if (fAnti) daughterXi = "anti_" + daughterXi;
00275 if (r>0.) {
00276
00277 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00278 daughterXi,daughterPi);
00279
00280 decayTable->Insert(mode);
00281 }
00282
00283 return decayTable;
00284 }
00285
00286 G4double G4ExcitedXiConstructor::GetMass(G4int iState, G4int iso3)
00287 {
00288 G4double fm = mass[iState];
00289 if ( iState==0 ) {
00290 if (iso3== -1) fm = 1.5350*GeV;
00291 }
00292 return fm;
00293 }
00294
00295 G4double G4ExcitedXiConstructor::GetWidth(G4int iState, G4int iso3)
00296 {
00297 G4double fw = width[iState];
00298 if ( iState==0 ) {
00299 if (iso3== -1) fw = 9.9*MeV;
00300 }
00301 return fw;
00302 }
00303
00304 const char* G4ExcitedXiConstructor::name[] = {
00305 "xi(1530)", "xi(1690)", "xi(1820)", "xi(1950)", "xi(2030)"
00306 };
00307
00308 const G4double G4ExcitedXiConstructor::mass[] = {
00309 1.5318*GeV, 1.690*GeV, 1.823*GeV, 1.950*GeV, 2.025*GeV
00310 };
00311
00312 const G4double G4ExcitedXiConstructor::width[] = {
00313 9.1*MeV, 50.0*MeV, 24.0*MeV, 60.0*MeV, 20.0*MeV
00314 };
00315
00316 const G4int G4ExcitedXiConstructor::iSpin[] = {
00317 3, 3, 3, 3, 5
00318 };
00319
00320 const G4int G4ExcitedXiConstructor::iParity[] = {
00321 +1, +1, -1, -1, +1
00322 };
00323
00324
00325 const G4int G4ExcitedXiConstructor::encodingOffset[] = {
00326 0, 20000, 10000, 30000, 10000
00327 };
00328
00329 const G4double G4ExcitedXiConstructor::bRatio[ G4ExcitedXiConstructor::NStates ][ G4ExcitedXiConstructor::NumberOfDecayModes] =
00330 {
00331 { 0.98, 0.02, 0.0, 0.0},
00332 { 0.10, 0.0, 0.70, 0.20},
00333 { 0.15, 0.0, 0.70, 0.15},
00334 { 0.25, 0.0, 0.50, 0.25},
00335 { 0.10, 0.0, 0.20, 0.70}
00336 };
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347