Geant4 Cross Reference |
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 // GEANT 4 class implementation file 28 // 29 // History: first implementation, based on object model of 30 // 10 oct 1998 H.Kurashige 31 // 32 // Update mass and width following PDG 2023 33 // 4 nov 2023 S.Okada 34 // --------------------------------------------------------------- 35 36 #include "G4ExcitedXiConstructor.hh" 37 38 #include "G4DecayTable.hh" 39 #include "G4PhaseSpaceDecayChannel.hh" 40 #include "G4SystemOfUnits.hh" 41 #include "G4VDecayChannel.hh" 42 43 G4ExcitedXiConstructor::G4ExcitedXiConstructor() : G4ExcitedBaryonConstructor(NStates, XiIsoSpin) {} 44 45 G4DecayTable* G4ExcitedXiConstructor::CreateDecayTable(const G4String& parentName, G4int iIso3, 46 G4int iState, G4bool fAnti) 47 { 48 // create decay table 49 auto decayTable = new G4DecayTable(); 50 51 G4double br; 52 if ((br = bRatio[iState][XiPi]) > 0.0) { 53 AddXiPiMode(decayTable, parentName, br, iIso3, fAnti); 54 } 55 56 if ((br = bRatio[iState][XiGamma]) > 0.0) { 57 AddXiGammaMode(decayTable, parentName, br, iIso3, fAnti); 58 } 59 60 if ((br = bRatio[iState][LambdaK]) > 0.0) { 61 AddLambdaKMode(decayTable, parentName, br, iIso3, fAnti); 62 } 63 64 if ((br = bRatio[iState][SigmaK]) > 0.0) { 65 AddSigmaKMode(decayTable, parentName, br, iIso3, fAnti); 66 } 67 68 return decayTable; 69 } 70 71 G4DecayTable* G4ExcitedXiConstructor::AddXiGammaMode(G4DecayTable* decayTable, 72 const G4String& nameParent, G4double br, 73 G4int iIso3, G4bool fAnti) 74 { 75 G4VDecayChannel* mode; 76 G4String daughterH; 77 if (iIso3 == +1) { 78 daughterH = "xi0"; 79 } 80 else if (iIso3 == -1) { 81 daughterH = "xi-"; 82 } 83 if (fAnti) daughterH = "anti_" + daughterH; 84 85 // create decay channel [parent BR #daughters] 86 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2, daughterH, "gamma"); 87 // add decay table 88 decayTable->Insert(mode); 89 90 return decayTable; 91 } 92 93 G4DecayTable* G4ExcitedXiConstructor::AddLambdaKMode(G4DecayTable* decayTable, 94 const G4String& nameParent, G4double br, 95 G4int iIso3, G4bool fAnti) 96 97 { 98 G4VDecayChannel* mode; 99 100 G4String lambda = "lambda"; 101 G4String daughterK; 102 G4double r = 0.; 103 104 // ------------ Lambda K- ------------ 105 // determine daughters 106 if (iIso3 == +1) { 107 if (!fAnti) { 108 daughterK = "kaon0"; 109 } 110 else { 111 daughterK = "anti_kaon0"; 112 } 113 r = br; 114 } 115 else if (iIso3 == -1) { 116 if (!fAnti) { 117 daughterK = "kaon-"; 118 } 119 else { 120 daughterK = "kaon+"; 121 } 122 r = br; 123 } 124 if (fAnti) lambda = "anti_" + lambda; 125 if (r > 0.) { 126 // create decay channel [parent BR #daughters] 127 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, lambda, daughterK); 128 // add decay table 129 decayTable->Insert(mode); 130 } 131 132 return decayTable; 133 } 134 135 G4DecayTable* G4ExcitedXiConstructor::AddSigmaKMode(G4DecayTable* decayTable, 136 const G4String& nameParent, G4double br, 137 G4int iIso3, G4bool fAnti) 138 { 139 G4VDecayChannel* mode; 140 141 G4String daughterH; 142 G4String daughterK; 143 G4double r = 0.; 144 145 // ------------ Sigma K- ------------ 146 // determine daughters 147 if (iIso3 == +1) { 148 daughterH = "sigma+"; 149 r = br / 2.; 150 } 151 else if (iIso3 == -1) { 152 daughterH = "sigma0"; 153 r = br / 2.; 154 } 155 if (!fAnti) { 156 daughterK = "kaon-"; 157 } 158 else { 159 daughterK = "kaon+"; 160 } 161 if (fAnti) daughterH = "anti_" + daughterH; 162 if (r > 0.) { 163 // create decay channel [parent BR #daughters] 164 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterH, daughterK); 165 // add decay table 166 decayTable->Insert(mode); 167 } 168 169 // ------------ Sigma K0 ------------ 170 // determine daughters 171 if (iIso3 == +1) { 172 daughterH = "sigma0"; 173 r = br / 2.; 174 } 175 else if (iIso3 == -1) { 176 daughterH = "sigma-"; 177 r = br / 2.; 178 } 179 if (!fAnti) { 180 daughterK = "anti_kaon0"; 181 } 182 else { 183 daughterK = "kaon0"; 184 } 185 if (fAnti) daughterH = "anti_" + daughterH; 186 if (r > 0.) { 187 // create decay channel [parent BR #daughters] 188 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterH, daughterK); 189 // add decay table 190 decayTable->Insert(mode); 191 } 192 193 return decayTable; 194 } 195 196 G4DecayTable* G4ExcitedXiConstructor::AddXiPiMode(G4DecayTable* decayTable, 197 const G4String& nameParent, G4double br, 198 G4int iIso3, G4bool fAnti) 199 { 200 G4VDecayChannel* mode; 201 202 G4String daughterXi; 203 G4String daughterPi; 204 G4double r = 0.; 205 206 // ------------ Xi pi- ------------ 207 // determine daughters 208 if (iIso3 == +1) { 209 r = 0.; 210 } 211 else if (iIso3 == -1) { 212 daughterXi = "xi0"; 213 r = br / 2.; 214 } 215 if (!fAnti) { 216 daughterPi = "pi-"; 217 } 218 else { 219 daughterPi = "pi+"; 220 } 221 if (fAnti) daughterXi = "anti_" + daughterXi; 222 if (r > 0.) { 223 // create decay channel [parent BR #daughters] 224 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterXi, daughterPi); 225 // add decay table 226 decayTable->Insert(mode); 227 } 228 // ------------ Xi Pi0 ------------ 229 // determine daughters 230 if (iIso3 == +1) { 231 daughterXi = "xi0"; 232 r = br / 2.; 233 } 234 else if (iIso3 == -1) { 235 daughterXi = "xi-"; 236 r = br / 2.; 237 } 238 daughterPi = "pi0"; 239 if (fAnti) daughterXi = "anti_" + daughterXi; 240 if (r > 0.) { 241 // create decay channel [parent BR #daughters] 242 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterXi, daughterPi); 243 // add decay table 244 decayTable->Insert(mode); 245 } 246 247 // ------------ XI pi + ------------ 248 // determine daughters 249 if (iIso3 == +1) { 250 daughterXi = "xi-"; 251 r = br / 2.; 252 } 253 else if (iIso3 == -1) { 254 r = 0.; 255 } 256 if (!fAnti) { 257 daughterPi = "pi+"; 258 } 259 else { 260 daughterPi = "pi-"; 261 } 262 if (fAnti) daughterXi = "anti_" + daughterXi; 263 if (r > 0.) { 264 // create decay channel [parent BR #daughters] 265 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, daughterXi, daughterPi); 266 // add decay table 267 decayTable->Insert(mode); 268 } 269 270 return decayTable; 271 } 272 273 G4double G4ExcitedXiConstructor::GetMass(G4int iState, G4int iso3) 274 { 275 G4double fm = mass[iState]; 276 if (iState == 0) { 277 if (iso3 == -1) fm = 1.5350 * GeV; // xi- 278 } 279 return fm; 280 } 281 282 G4double G4ExcitedXiConstructor::GetWidth(G4int iState, G4int iso3) 283 { 284 G4double fw = width[iState]; 285 if (iState == 0) { 286 if (iso3 == -1) fw = 9.9 * MeV; // xi- 287 } 288 return fw; 289 } 290 291 // clang-format off 292 293 const char* G4ExcitedXiConstructor::name[] = { 294 "xi(1530)", "xi(1690)", "xi(1820)", "xi(1950)", "xi(2030)" 295 }; 296 297 const G4double G4ExcitedXiConstructor::mass[] = { 298 1.5318*GeV, 1.690*GeV, 1.823*GeV, 1.950*GeV, 2.025*GeV 299 }; 300 301 const G4double G4ExcitedXiConstructor::width[] = { 302 9.1*MeV, 20.0*MeV, 24.0*MeV, 60.0*MeV, 20.0*MeV 303 }; 304 305 const G4int G4ExcitedXiConstructor::iSpin[] = { 306 3, 3, 3, 3, 5 307 }; 308 309 const G4int G4ExcitedXiConstructor::iParity[] = { 310 +1, +1, -1, -1, +1 311 }; 312 313 314 const G4int G4ExcitedXiConstructor::encodingOffset[] = { 315 0, 20000, 10000, 30000, 10000 316 }; 317 318 const G4double G4ExcitedXiConstructor::bRatio[ G4ExcitedXiConstructor::NStates ][ G4ExcitedXiConstructor::NumberOfDecayModes] = 319 { 320 { 0.98, 0.02, 0.0, 0.0}, 321 { 0.10, 0.0, 0.70, 0.20}, 322 { 0.15, 0.0, 0.70, 0.15}, 323 { 0.25, 0.0, 0.50, 0.25}, 324 { 0.10, 0.0, 0.20, 0.70} 325 }; 326