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