Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // >> 26 // >> 27 // >> 28 // 26 // ------------------------------------------- 29 // -------------------------------------------------------------- 27 // GEANT 4 class implementation file << 30 // GEANT 4 class implementation file 28 // 31 // 29 // History: first implementation, based o 32 // History: first implementation, based on object model of 30 // 10 oct 1998 H.Kurashige 33 // 10 oct 1998 H.Kurashige 31 // << 32 // Update mass and width following PDG 20 << 33 // 4 nov 2023 S.Okada << 34 // ------------------------------------------- 34 // --------------------------------------------------------------- 35 35 >> 36 36 #include "G4ExcitedXiConstructor.hh" 37 #include "G4ExcitedXiConstructor.hh" 37 38 38 #include "G4DecayTable.hh" << 39 #include "G4PhaseSpaceDecayChannel.hh" << 40 #include "G4SystemOfUnits.hh" 39 #include "G4SystemOfUnits.hh" >> 40 #include "G4ParticleDefinition.hh" >> 41 #include "G4ParticleTable.hh" >> 42 #include "G4PhaseSpaceDecayChannel.hh" 41 #include "G4VDecayChannel.hh" 43 #include "G4VDecayChannel.hh" >> 44 #include "G4DecayTable.hh" >> 45 >> 46 G4ExcitedXiConstructor::G4ExcitedXiConstructor(): >> 47 G4ExcitedBaryonConstructor(NStates, XiIsoSpin) >> 48 { >> 49 >> 50 } 42 51 43 G4ExcitedXiConstructor::G4ExcitedXiConstructor << 52 G4ExcitedXiConstructor::~G4ExcitedXiConstructor() >> 53 { >> 54 } 44 55 45 G4DecayTable* G4ExcitedXiConstructor::CreateDe << 56 G4DecayTable* G4ExcitedXiConstructor::CreateDecayTable( 46 << 57 const G4String& parentName, >> 58 G4int iIso3, >> 59 G4int iState, >> 60 G4bool fAnti) 47 { 61 { >> 62 48 // create decay table 63 // create decay table 49 auto decayTable = new G4DecayTable(); << 64 G4DecayTable* decayTable = new G4DecayTable(); 50 65 51 G4double br; 66 G4double br; 52 if ((br = bRatio[iState][XiPi]) > 0.0) { << 67 if ( (br=bRatio[iState][XiPi]) >0.0) { 53 AddXiPiMode(decayTable, parentName, br, iI << 68 AddXiPiMode( decayTable, parentName, br, iIso3, fAnti); 54 } 69 } 55 70 56 if ((br = bRatio[iState][XiGamma]) > 0.0) { << 71 if ( (br=bRatio[iState][XiGamma]) >0.0) { 57 AddXiGammaMode(decayTable, parentName, br, << 72 AddXiGammaMode( decayTable, parentName, br, iIso3, fAnti); 58 } 73 } 59 74 60 if ((br = bRatio[iState][LambdaK]) > 0.0) { << 75 if ( (br=bRatio[iState][LambdaK]) >0.0) { 61 AddLambdaKMode(decayTable, parentName, br, << 76 AddLambdaKMode( decayTable, parentName, br, iIso3, fAnti); 62 } 77 } 63 78 64 if ((br = bRatio[iState][SigmaK]) > 0.0) { << 79 if ( (br=bRatio[iState][SigmaK]) >0.0) { 65 AddSigmaKMode(decayTable, parentName, br, << 80 AddSigmaKMode( decayTable, parentName, br, iIso3, fAnti); 66 } 81 } 67 82 68 return decayTable; << 83 return decayTable; 69 } 84 } 70 85 71 G4DecayTable* G4ExcitedXiConstructor::AddXiGam << 86 G4DecayTable* G4ExcitedXiConstructor::AddXiGammaMode( 72 << 87 G4DecayTable* decayTable, const G4String& nameParent, 73 << 88 G4double br, G4int iIso3, G4bool fAnti) 74 { 89 { 75 G4VDecayChannel* mode; 90 G4VDecayChannel* mode; 76 G4String daughterH; << 91 // 77 if (iIso3 == +1) { << 92 G4String daughterH; 78 daughterH = "xi0"; << 93 if (iIso3== +1) { 79 } << 94 daughterH = "xi0"; 80 else if (iIso3 == -1) { << 95 } else if (iIso3==-1) { 81 daughterH = "xi-"; << 96 daughterH = "xi-"; 82 } << 97 } 83 if (fAnti) daughterH = "anti_" + daughterH; 98 if (fAnti) daughterH = "anti_" + daughterH; 84 99 85 // create decay channel [parent BR # 100 // create decay channel [parent BR #daughters] 86 mode = new G4PhaseSpaceDecayChannel(namePare << 101 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2, >> 102 daughterH,"gamma"); 87 // add decay table 103 // add decay table 88 decayTable->Insert(mode); 104 decayTable->Insert(mode); 89 105 90 return decayTable; 106 return decayTable; 91 } 107 } 92 108 93 G4DecayTable* G4ExcitedXiConstructor::AddLambd << 109 G4DecayTable* G4ExcitedXiConstructor::AddLambdaKMode( 94 << 110 G4DecayTable* decayTable, const G4String& nameParent, 95 << 111 G4double br, G4int iIso3, G4bool fAnti) >> 112 96 113 97 { 114 { 98 G4VDecayChannel* mode; 115 G4VDecayChannel* mode; 99 116 100 G4String lambda = "lambda"; 117 G4String lambda = "lambda"; 101 G4String daughterK; 118 G4String daughterK; 102 G4double r = 0.; 119 G4double r = 0.; 103 120 104 // ------------ Lambda K- ------------ << 121 // ------------ Lambda K- ------------ 105 // determine daughters 122 // determine daughters 106 if (iIso3 == +1) { 123 if (iIso3 == +1) { 107 if (!fAnti) { 124 if (!fAnti) { 108 daughterK = "kaon0"; 125 daughterK = "kaon0"; 109 } << 126 } else { 110 else { << 111 daughterK = "anti_kaon0"; 127 daughterK = "anti_kaon0"; 112 } << 128 } 113 r = br; 129 r = br; 114 } << 130 } else if (iIso3 == -1) { 115 else if (iIso3 == -1) { << 116 if (!fAnti) { 131 if (!fAnti) { 117 daughterK = "kaon-"; 132 daughterK = "kaon-"; 118 } << 133 } else { 119 else { << 120 daughterK = "kaon+"; 134 daughterK = "kaon+"; 121 } << 135 } 122 r = br; 136 r = br; 123 } 137 } 124 if (fAnti) lambda = "anti_" + lambda; 138 if (fAnti) lambda = "anti_" + lambda; 125 if (r > 0.) { << 139 if (r>0.) { 126 // create decay channel [parent BR 140 // create decay channel [parent BR #daughters] 127 mode = new G4PhaseSpaceDecayChannel(namePa << 141 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, >> 142 lambda,daughterK); 128 // add decay table 143 // add decay table 129 decayTable->Insert(mode); 144 decayTable->Insert(mode); 130 } 145 } 131 146 132 return decayTable; 147 return decayTable; 133 } 148 } 134 149 135 G4DecayTable* G4ExcitedXiConstructor::AddSigma << 150 G4DecayTable* G4ExcitedXiConstructor::AddSigmaKMode( 136 << 151 G4DecayTable* decayTable, const G4String& nameParent, 137 << 152 G4double br, G4int iIso3, G4bool fAnti) 138 { 153 { 139 G4VDecayChannel* mode; 154 G4VDecayChannel* mode; 140 155 141 G4String daughterH; 156 G4String daughterH; 142 G4String daughterK; 157 G4String daughterK; 143 G4double r = 0.; 158 G4double r = 0.; 144 159 145 // ------------ Sigma K- ------------ << 160 // ------------ Sigma K- ------------ 146 // determine daughters 161 // determine daughters 147 if (iIso3 == +1) { << 162 if (iIso3== +1) { 148 daughterH = "sigma+"; << 163 daughterH = "sigma+"; 149 r = br / 2.; << 164 r= br/2.; 150 } << 165 } else if (iIso3== -1) { 151 else if (iIso3 == -1) { << 166 daughterH = "sigma0"; 152 daughterH = "sigma0"; << 167 r = br/2.; 153 r = br / 2.; << 154 } 168 } 155 if (!fAnti) { 169 if (!fAnti) { 156 daughterK = "kaon-"; 170 daughterK = "kaon-"; 157 } << 171 } else { 158 else { << 159 daughterK = "kaon+"; 172 daughterK = "kaon+"; 160 } 173 } 161 if (fAnti) daughterH = "anti_" + daughterH; 174 if (fAnti) daughterH = "anti_" + daughterH; 162 if (r > 0.) { << 175 if (r>0.) { 163 // create decay channel [parent BR 176 // create decay channel [parent BR #daughters] 164 mode = new G4PhaseSpaceDecayChannel(namePa << 177 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, >> 178 daughterH,daughterK); 165 // add decay table 179 // add decay table 166 decayTable->Insert(mode); 180 decayTable->Insert(mode); 167 } 181 } 168 182 169 // ------------ Sigma K0 ------------ << 183 // ------------ Sigma K0 ------------ 170 // determine daughters 184 // determine daughters 171 if (iIso3 == +1) { 185 if (iIso3 == +1) { 172 daughterH = "sigma0"; << 186 daughterH = "sigma0"; 173 r = br / 2.; << 187 r= br/2.; 174 } << 188 } else if (iIso3 == -1) { 175 else if (iIso3 == -1) { << 189 daughterH = "sigma-"; 176 daughterH = "sigma-"; << 190 r = br/2.; 177 r = br / 2.; << 178 } 191 } 179 if (!fAnti) { 192 if (!fAnti) { 180 daughterK = "anti_kaon0"; 193 daughterK = "anti_kaon0"; 181 } << 194 } else { 182 else { << 183 daughterK = "kaon0"; 195 daughterK = "kaon0"; 184 } 196 } 185 if (fAnti) daughterH = "anti_" + daughterH; 197 if (fAnti) daughterH = "anti_" + daughterH; 186 if (r > 0.) { << 198 if (r>0.) { 187 // create decay channel [parent BR 199 // create decay channel [parent BR #daughters] 188 mode = new G4PhaseSpaceDecayChannel(namePa << 200 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, >> 201 daughterH,daughterK); 189 // add decay table 202 // add decay table 190 decayTable->Insert(mode); 203 decayTable->Insert(mode); 191 } 204 } 192 205 193 return decayTable; 206 return decayTable; 194 } 207 } 195 208 196 G4DecayTable* G4ExcitedXiConstructor::AddXiPiM << 209 G4DecayTable* G4ExcitedXiConstructor::AddXiPiMode( 197 << 210 G4DecayTable* decayTable, const G4String& nameParent, 198 << 211 G4double br, G4int iIso3, G4bool fAnti) 199 { 212 { 200 G4VDecayChannel* mode; 213 G4VDecayChannel* mode; 201 214 202 G4String daughterXi; 215 G4String daughterXi; 203 G4String daughterPi; 216 G4String daughterPi; 204 G4double r = 0.; 217 G4double r = 0.; 205 218 206 // ------------ Xi pi- ------------ << 219 // ------------ Xi pi- ------------ 207 // determine daughters 220 // determine daughters 208 if (iIso3 == +1) { << 221 if (iIso3== +1) { 209 r = 0.; 222 r = 0.; 210 } << 223 } else if (iIso3 == -1) { 211 else if (iIso3 == -1) { << 212 daughterXi = "xi0"; 224 daughterXi = "xi0"; 213 r = br / 2.; << 225 r = br/2.; 214 } 226 } 215 if (!fAnti) { 227 if (!fAnti) { 216 daughterPi = "pi-"; 228 daughterPi = "pi-"; 217 } << 229 } else { 218 else { << 219 daughterPi = "pi+"; 230 daughterPi = "pi+"; 220 } 231 } 221 if (fAnti) daughterXi = "anti_" + daughterXi 232 if (fAnti) daughterXi = "anti_" + daughterXi; 222 if (r > 0.) { << 233 if (r>0.) { 223 // create decay channel [parent BR 234 // create decay channel [parent BR #daughters] 224 mode = new G4PhaseSpaceDecayChannel(namePa << 235 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, >> 236 daughterXi,daughterPi); 225 // add decay table 237 // add decay table 226 decayTable->Insert(mode); 238 decayTable->Insert(mode); 227 } 239 } 228 // ------------ Xi Pi0 ------------ << 240 // ------------ Xi Pi0 ------------ 229 // determine daughters 241 // determine daughters 230 if (iIso3 == +1) { << 242 if (iIso3== +1) { 231 daughterXi = "xi0"; 243 daughterXi = "xi0"; 232 r = br / 2.; << 244 r = br/2.; 233 } << 245 } else if (iIso3 == -1) { 234 else if (iIso3 == -1) { << 235 daughterXi = "xi-"; 246 daughterXi = "xi-"; 236 r = br / 2.; << 247 r = br/2.; 237 } 248 } 238 daughterPi = "pi0"; 249 daughterPi = "pi0"; 239 if (fAnti) daughterXi = "anti_" + daughterXi 250 if (fAnti) daughterXi = "anti_" + daughterXi; 240 if (r > 0.) { << 251 if (r>0.) { 241 // create decay channel [parent BR 252 // create decay channel [parent BR #daughters] 242 mode = new G4PhaseSpaceDecayChannel(namePa << 253 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, >> 254 daughterXi,daughterPi); 243 // add decay table 255 // add decay table 244 decayTable->Insert(mode); 256 decayTable->Insert(mode); 245 } 257 } 246 258 247 // ------------ XI pi + ------------ << 259 // ------------ XI pi + ------------ 248 // determine daughters 260 // determine daughters 249 if (iIso3 == +1) { << 261 if (iIso3== +1) { 250 daughterXi = "xi-"; 262 daughterXi = "xi-"; 251 r = br / 2.; << 263 r = br/2.; 252 } << 264 } else if (iIso3==-1) { 253 else if (iIso3 == -1) { << 254 r = 0.; 265 r = 0.; 255 } 266 } 256 if (!fAnti) { 267 if (!fAnti) { 257 daughterPi = "pi+"; 268 daughterPi = "pi+"; 258 } << 269 } else { 259 else { << 260 daughterPi = "pi-"; 270 daughterPi = "pi-"; 261 } 271 } 262 if (fAnti) daughterXi = "anti_" + daughterXi 272 if (fAnti) daughterXi = "anti_" + daughterXi; 263 if (r > 0.) { << 273 if (r>0.) { 264 // create decay channel [parent BR 274 // create decay channel [parent BR #daughters] 265 mode = new G4PhaseSpaceDecayChannel(namePa << 275 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, >> 276 daughterXi,daughterPi); 266 // add decay table 277 // add decay table 267 decayTable->Insert(mode); 278 decayTable->Insert(mode); 268 } 279 } 269 280 270 return decayTable; 281 return decayTable; 271 } 282 } 272 283 273 G4double G4ExcitedXiConstructor::GetMass(G4int 284 G4double G4ExcitedXiConstructor::GetMass(G4int iState, G4int iso3) 274 { << 285 { 275 G4double fm = mass[iState]; 286 G4double fm = mass[iState]; 276 if (iState == 0) { << 287 if ( iState==0 ) { 277 if (iso3 == -1) fm = 1.5350 * GeV; // xi- << 288 if (iso3== -1) fm = 1.5350*GeV; // xi- 278 } 289 } 279 return fm; 290 return fm; 280 } 291 } 281 292 282 G4double G4ExcitedXiConstructor::GetWidth(G4in 293 G4double G4ExcitedXiConstructor::GetWidth(G4int iState, G4int iso3) 283 { 294 { 284 G4double fw = width[iState]; 295 G4double fw = width[iState]; 285 if (iState == 0) { << 296 if ( iState==0 ) { 286 if (iso3 == -1) fw = 9.9 * MeV; // xi- << 297 if (iso3== -1) fw = 9.9*MeV; // xi- 287 } 298 } 288 return fw; 299 return fw; 289 } 300 } 290 301 291 // clang-format off << 292 << 293 const char* G4ExcitedXiConstructor::name[] = { 302 const char* G4ExcitedXiConstructor::name[] = { 294 "xi(1530)", "xi(1690)", "xi(1820)", "xi(195 303 "xi(1530)", "xi(1690)", "xi(1820)", "xi(1950)", "xi(2030)" 295 }; 304 }; 296 305 297 const G4double G4ExcitedXiConstructor::mass[] 306 const G4double G4ExcitedXiConstructor::mass[] = { 298 1.5318*GeV, 1.690*GeV, 1.823*GeV, 1.950*GeV, << 307 1.5318*GeV, 1.690*GeV, 1.823*GeV, 1.950*GeV, 2.025*GeV 299 }; 308 }; 300 309 301 const G4double G4ExcitedXiConstructor::width[] 310 const G4double G4ExcitedXiConstructor::width[] = { 302 9.1*MeV, 20.0*MeV, 24.0*MeV, 60.0*MeV, << 311 9.1*MeV, 50.0*MeV, 24.0*MeV, 60.0*MeV, 20.0*MeV 303 }; 312 }; 304 313 305 const G4int G4ExcitedXiConstructor::iSpin[] = 314 const G4int G4ExcitedXiConstructor::iSpin[] = { 306 3, 3, 3, 3, 5 315 3, 3, 3, 3, 5 307 }; 316 }; 308 317 309 const G4int G4ExcitedXiConstructor::iParity[] 318 const G4int G4ExcitedXiConstructor::iParity[] = { 310 +1, +1, -1, -1, +1 319 +1, +1, -1, -1, +1 311 }; 320 }; 312 321 313 322 314 const G4int G4ExcitedXiConstructor::encodingOf 323 const G4int G4ExcitedXiConstructor::encodingOffset[] = { 315 0, 20000, 10000, 30000, 10000 324 0, 20000, 10000, 30000, 10000 316 }; 325 }; 317 326 318 const G4double G4ExcitedXiConstructor::bRatio[ << 327 const G4double G4ExcitedXiConstructor::bRatio[ G4ExcitedXiConstructor::NStates ][ G4ExcitedXiConstructor::NumberOfDecayModes] = 319 { 328 { 320 { 0.98, 0.02, 0.0, 0.0}, << 329 { 0.98, 0.02, 0.0, 0.0}, 321 { 0.10, 0.0, 0.70, 0.20}, << 330 { 0.10, 0.0, 0.70, 0.20}, 322 { 0.15, 0.0, 0.70, 0.15}, << 331 { 0.15, 0.0, 0.70, 0.15}, 323 { 0.25, 0.0, 0.50, 0.25}, << 332 { 0.25, 0.0, 0.50, 0.25}, 324 { 0.10, 0.0, 0.20, 0.70} 333 { 0.10, 0.0, 0.20, 0.70} 325 }; 334 }; >> 335 >> 336 >> 337 >> 338 >> 339 >> 340 >> 341 >> 342 >> 343 >> 344 >> 345 326 346