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 // History: first implementation, based o 31 // History: first implementation, based on object model of 29 // 10 oct 1998 H.Kurashige 32 // 10 oct 1998 H.Kurashige 30 // << 31 // Update mass and width following PDG 20 << 32 // 4 nov 2023 S.Okada << 33 // ------------------------------------------- 33 // --------------------------------------------------------------- 34 34 >> 35 35 #include "G4ExcitedNucleonConstructor.hh" 36 #include "G4ExcitedNucleonConstructor.hh" 36 37 37 #include "G4DecayTable.hh" << 38 #include "G4PhaseSpaceDecayChannel.hh" << 39 #include "G4SystemOfUnits.hh" 38 #include "G4SystemOfUnits.hh" >> 39 #include "G4ParticleDefinition.hh" >> 40 #include "G4ParticleTable.hh" >> 41 #include "G4PhaseSpaceDecayChannel.hh" 40 #include "G4VDecayChannel.hh" 42 #include "G4VDecayChannel.hh" >> 43 #include "G4DecayTable.hh" 41 44 42 G4ExcitedNucleonConstructor::G4ExcitedNucleonC << 45 43 : G4ExcitedBaryonConstructor(NStates, Nucleo << 46 G4ExcitedNucleonConstructor::G4ExcitedNucleonConstructor(): 44 {} << 47 G4ExcitedBaryonConstructor(NStates, NucleonIsoSpin) >> 48 { >> 49 >> 50 } >> 51 >> 52 G4ExcitedNucleonConstructor::~G4ExcitedNucleonConstructor() >> 53 { >> 54 } 45 55 46 G4int G4ExcitedNucleonConstructor::GetEncoding 56 G4int G4ExcitedNucleonConstructor::GetEncoding(G4int iIsoSpin3, G4int idxState) 47 { 57 { 48 G4int encoding; 58 G4int encoding; 49 // Delta has exceptinal encoding 59 // Delta has exceptinal encoding 50 if ((idxState == 1) // N(1520) << 60 if ((idxState==1)||(idxState==6)||(idxState==8)||(idxState==9)||(idxState==12) ) { 51 || (idxState == 6) // N(1700) << 52 || (idxState == 8) // N(1720) << 53 || (idxState == 9) // N(1900) << 54 || (idxState == 12)) // N(2190) << 55 { << 56 encoding = GetEncodingOffset(idxState); 61 encoding = GetEncodingOffset(idxState); 57 if ((iIsoSpin3 == 3) || (iIsoSpin3 == -3)) << 62 if ((iIsoSpin3==3)||(iIsoSpin3==-3)) { 58 // normal encoding << 63 // normal encoding 59 encoding += 1000 * GetQuarkContents(0, i << 64 encoding += 1000*GetQuarkContents(0, iIsoSpin3); 60 encoding += 100 * GetQuarkContents(1, iI << 65 encoding += 100*GetQuarkContents(1, iIsoSpin3); 61 encoding += 10 * GetQuarkContents(2, iIs << 66 encoding += 10*GetQuarkContents(2, iIsoSpin3); 62 } << 67 } else if (iIsoSpin3== +1){ 63 else if (iIsoSpin3 == +1) { << 68 // 1st <--> 2nd quark 64 // 1st <--> 2nd quark << 69 encoding += 1000*GetQuarkContents(0, iIsoSpin3); 65 encoding += 1000 * GetQuarkContents(0, i << 70 encoding += 10*GetQuarkContents(1, iIsoSpin3); 66 encoding += 10 * GetQuarkContents(1, iIs << 71 encoding += 100*GetQuarkContents(2, iIsoSpin3); 67 encoding += 100 * GetQuarkContents(2, iI << 72 } else if (iIsoSpin3== -1){ 68 } << 73 // 1st <--> 0th quark 69 else if (iIsoSpin3 == -1) { << 74 encoding += 100*GetQuarkContents(0, iIsoSpin3); 70 // 1st <--> 0th quark << 75 encoding += 1000*GetQuarkContents(1, iIsoSpin3); 71 encoding += 100 * GetQuarkContents(0, iI << 76 encoding += 10*GetQuarkContents(2, iIsoSpin3); 72 encoding += 1000 * GetQuarkContents(1, i << 73 encoding += 10 * GetQuarkContents(2, iIs << 74 } 77 } 75 encoding += GetiSpin(idxState) + 1; << 78 encoding += GetiSpin(idxState) +1; 76 } << 79 } else { 77 else << 78 { << 79 encoding = G4ExcitedBaryonConstructor::Get 80 encoding = G4ExcitedBaryonConstructor::GetEncoding(iIsoSpin3, idxState); 80 } 81 } 81 return encoding; 82 return encoding; 82 } 83 } 83 84 84 G4DecayTable* G4ExcitedNucleonConstructor::Cre << 85 G4DecayTable* G4ExcitedNucleonConstructor::CreateDecayTable( 85 << 86 const G4String& parentName, >> 87 G4int iIso3, >> 88 G4int iState, >> 89 G4bool fAnti) 86 { 90 { 87 // create decay table 91 // create decay table 88 auto decayTable = new G4DecayTable(); << 92 G4DecayTable* decayTable = new G4DecayTable(); 89 93 90 G4double br; 94 G4double br; 91 if ((br = bRatio[iState][NGamma]) > 0.0) { << 95 if ( (br=bRatio[iState][NGamma]) >0.0) { 92 AddNGammaMode(decayTable, parentName, br, << 96 AddNGammaMode( decayTable, parentName, br, iIso3, fAnti); 93 } 97 } 94 98 95 if ((br = bRatio[iState][NPi]) > 0.0) { << 99 if ( (br=bRatio[iState][NPi]) >0.0) { 96 AddNPiMode(decayTable, parentName, br, iIs << 100 AddNPiMode( decayTable, parentName, br, iIso3, fAnti); 97 } 101 } 98 102 99 if ((br = bRatio[iState][NEta]) > 0.0) { << 103 if ( (br=bRatio[iState][NEta]) >0.0) { 100 AddNEtaMode(decayTable, parentName, br, iI << 104 AddNEtaMode( decayTable, parentName, br, iIso3, fAnti); 101 } 105 } 102 106 103 if ((br = bRatio[iState][NOmega]) > 0.0) { << 107 if ( (br=bRatio[iState][NOmega]) >0.0) { 104 AddNOmegaMode(decayTable, parentName, br, << 108 AddNOmegaMode( decayTable, parentName, br, iIso3, fAnti); 105 } 109 } 106 110 107 if ((br = bRatio[iState][NRho]) > 0.0) { << 111 if ( (br=bRatio[iState][NRho]) >0.0) { 108 AddNRhoMode(decayTable, parentName, br, iI << 112 AddNRhoMode( decayTable, parentName, br, iIso3, fAnti); 109 } 113 } 110 114 111 if ((br = bRatio[iState][N2Pi]) > 0.0) { << 115 if ( (br=bRatio[iState][N2Pi]) >0.0) { 112 AddN2PiMode(decayTable, parentName, br, iI << 116 AddN2PiMode( decayTable, parentName, br, iIso3, fAnti); 113 } 117 } 114 118 115 if ((br = bRatio[iState][DeltaPi]) > 0.0) { << 119 if ( (br=bRatio[iState][DeltaPi]) >0.0) { 116 AddDeltaPiMode(decayTable, parentName, br, << 120 AddDeltaPiMode( decayTable, parentName, br, iIso3, fAnti); 117 } 121 } 118 122 119 if ((br = bRatio[iState][NStarPi]) > 0.0) { << 123 if ( (br=bRatio[iState][NStarPi]) >0.0) { 120 AddNStarPiMode(decayTable, parentName, br, << 124 AddNStarPiMode( decayTable, parentName, br, iIso3, fAnti); 121 } 125 } 122 126 123 if ((br = bRatio[iState][LambdaK]) > 0.0) { << 127 if ( (br=bRatio[iState][LambdaK]) >0.0) { 124 AddLambdaKMode(decayTable, parentName, br, << 128 AddLambdaKMode( decayTable, parentName, br, iIso3, fAnti); 125 } 129 } 126 130 127 return decayTable; << 131 return decayTable; 128 } 132 } 129 133 130 G4DecayTable* G4ExcitedNucleonConstructor::Add << 134 G4DecayTable* G4ExcitedNucleonConstructor::AddNGammaMode( 131 << 135 G4DecayTable* decayTable, const G4String& nameParent, 132 << 136 G4double br, G4int iIso3, G4bool fAnti) 133 { 137 { 134 G4VDecayChannel* mode; 138 G4VDecayChannel* mode; 135 139 136 // << 140 // 137 G4String daughterN; 141 G4String daughterN; 138 if (iIso3 == +1) { << 142 if (iIso3 == +1) { 139 daughterN = "proton"; << 143 daughterN = "proton"; 140 } << 144 } else { 141 else { << 145 daughterN = "neutron"; 142 daughterN = "neutron"; << 146 } 143 } << 144 if (fAnti) daughterN = "anti_" + daughterN; 147 if (fAnti) daughterN = "anti_" + daughterN; 145 148 146 // create decay channel [parent BR # 149 // create decay channel [parent BR #daughters] 147 mode = new G4PhaseSpaceDecayChannel(namePare << 150 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2, >> 151 daughterN,"gamma"); 148 // add decay table 152 // add decay table 149 decayTable->Insert(mode); 153 decayTable->Insert(mode); 150 154 151 return decayTable; 155 return decayTable; 152 } 156 } 153 157 154 G4DecayTable* G4ExcitedNucleonConstructor::Add << 158 G4DecayTable* G4ExcitedNucleonConstructor::AddNPiMode( 155 << 159 G4DecayTable* decayTable, const G4String& nameParent, 156 << 160 G4double br, G4int iIso3, G4bool fAnti) 157 { 161 { 158 G4VDecayChannel* mode; 162 G4VDecayChannel* mode; 159 163 160 G4String daughterN; 164 G4String daughterN; 161 G4String daughterPi; 165 G4String daughterPi; 162 166 163 // ------------ N pi0 ------------ << 167 // ------------ N pi0 ------------ 164 // determine daughters 168 // determine daughters 165 if (iIso3 == +1) { 169 if (iIso3 == +1) { 166 daughterN = "proton"; << 170 daughterN = "proton"; 167 daughterPi = "pi0"; 171 daughterPi = "pi0"; 168 } << 172 } else { 169 else { << 173 daughterN = "neutron"; 170 daughterN = "neutron"; << 171 daughterPi = "pi0"; 174 daughterPi = "pi0"; 172 } 175 } 173 if (fAnti) daughterN = "anti_" + daughterN; 176 if (fAnti) daughterN = "anti_" + daughterN; 174 // create decay channel [parent BR # 177 // create decay channel [parent BR #daughters] 175 mode = new G4PhaseSpaceDecayChannel(namePare << 178 mode = new G4PhaseSpaceDecayChannel(nameParent, br/2.0, 2, >> 179 daughterN,daughterPi); 176 // add decay table 180 // add decay table 177 decayTable->Insert(mode); 181 decayTable->Insert(mode); 178 182 179 // -------------N pi +/- -------------- << 183 // -------------N pi +/- -------------- 180 // determine daughters 184 // determine daughters 181 if (iIso3 == +1) { 185 if (iIso3 == +1) { 182 daughterN = "neutron"; << 186 daughterN = "neutron"; 183 if (!fAnti) { 187 if (!fAnti) { 184 daughterPi = "pi+"; 188 daughterPi = "pi+"; 185 } << 189 } else { 186 else { << 187 daughterPi = "pi-"; 190 daughterPi = "pi-"; 188 } 191 } 189 } << 192 } else { 190 else { << 193 daughterN = "proton"; 191 daughterN = "proton"; << 192 if (!fAnti) { 194 if (!fAnti) { 193 daughterPi = "pi-"; 195 daughterPi = "pi-"; 194 } << 196 } else { 195 else { << 196 daughterPi = "pi+"; 197 daughterPi = "pi+"; 197 } 198 } 198 } 199 } 199 if (fAnti) daughterN = "anti_" + daughterN; 200 if (fAnti) daughterN = "anti_" + daughterN; 200 201 201 // create decay channel [parent BR # 202 // create decay channel [parent BR #daughters] 202 mode = new G4PhaseSpaceDecayChannel(namePare << 203 mode = new G4PhaseSpaceDecayChannel(nameParent, br/2.0, 2, >> 204 daughterN,daughterPi); 203 // add decay table 205 // add decay table 204 decayTable->Insert(mode); 206 decayTable->Insert(mode); 205 207 206 return decayTable; 208 return decayTable; 207 } 209 } 208 210 209 G4DecayTable* G4ExcitedNucleonConstructor::Add << 211 G4DecayTable* G4ExcitedNucleonConstructor::AddNEtaMode( 210 << 212 G4DecayTable* decayTable, const G4String& nameParent, 211 << 213 G4double br, G4int iIso3, G4bool fAnti) 212 { 214 { 213 G4VDecayChannel* mode; 215 G4VDecayChannel* mode; 214 216 215 G4String daughterN; 217 G4String daughterN; 216 218 217 // ------------ N eta------------ << 219 // ------------ N eta------------ 218 // determine daughters 220 // determine daughters 219 if (iIso3 == +1) { 221 if (iIso3 == +1) { 220 daughterN = "proton"; << 222 daughterN = "proton"; 221 } << 223 } else { 222 else { << 224 daughterN = "neutron"; 223 daughterN = "neutron"; << 224 } 225 } 225 if (fAnti) daughterN = "anti_" + daughterN; 226 if (fAnti) daughterN = "anti_" + daughterN; 226 // create decay channel [parent BR # 227 // create decay channel [parent BR #daughters] 227 mode = new G4PhaseSpaceDecayChannel(namePare << 228 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2, >> 229 daughterN, "eta"); 228 // add decay table 230 // add decay table 229 decayTable->Insert(mode); 231 decayTable->Insert(mode); 230 232 231 return decayTable; 233 return decayTable; 232 } 234 } 233 235 234 G4DecayTable* G4ExcitedNucleonConstructor::Add << 236 G4DecayTable* G4ExcitedNucleonConstructor::AddNOmegaMode( 235 << 237 G4DecayTable* decayTable, const G4String& nameParent, 236 << 238 G4double br, G4int iIso3, G4bool fAnti) 237 { 239 { 238 G4VDecayChannel* mode; 240 G4VDecayChannel* mode; 239 241 240 G4String daughterN; 242 G4String daughterN; 241 243 242 // ------------ N omega------------ << 244 // ------------ N omega------------ 243 // determine daughters 245 // determine daughters 244 if (iIso3 == +1) { 246 if (iIso3 == +1) { 245 daughterN = "proton"; << 247 daughterN = "proton"; 246 } << 248 } else { 247 else { << 249 daughterN = "neutron"; 248 daughterN = "neutron"; << 249 } 250 } 250 if (fAnti) daughterN = "anti_" + daughterN; 251 if (fAnti) daughterN = "anti_" + daughterN; 251 // create decay channel [parent BR # 252 // create decay channel [parent BR #daughters] 252 mode = new G4PhaseSpaceDecayChannel(namePare << 253 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2, >> 254 daughterN, "omega"); 253 // add decay table 255 // add decay table 254 decayTable->Insert(mode); 256 decayTable->Insert(mode); 255 257 256 return decayTable; 258 return decayTable; 257 } 259 } 258 260 259 G4DecayTable* G4ExcitedNucleonConstructor::Add << 261 G4DecayTable* G4ExcitedNucleonConstructor::AddNRhoMode( 260 << 262 G4DecayTable* decayTable, const G4String& nameParent, 261 << 263 G4double br, G4int iIso3, G4bool fAnti) 262 { 264 { 263 G4VDecayChannel* mode; 265 G4VDecayChannel* mode; 264 266 265 G4String daughterN; 267 G4String daughterN; 266 G4String daughterRho; 268 G4String daughterRho; 267 269 268 // ------------ N rho0 ------------ << 270 // ------------ N rho0 ------------ 269 // determine daughters 271 // determine daughters 270 if (iIso3 == +1) { 272 if (iIso3 == +1) { 271 daughterN = "proton"; << 273 daughterN = "proton"; 272 daughterRho = "rho0"; 274 daughterRho = "rho0"; 273 } << 275 } else { 274 else { << 276 daughterN = "neutron"; 275 daughterN = "neutron"; << 276 daughterRho = "rho0"; 277 daughterRho = "rho0"; 277 } 278 } 278 if (fAnti) daughterN = "anti_" + daughterN; 279 if (fAnti) daughterN = "anti_" + daughterN; 279 // create decay channel [parent BR # 280 // create decay channel [parent BR #daughters] 280 mode = new G4PhaseSpaceDecayChannel(namePare << 281 mode = new G4PhaseSpaceDecayChannel(nameParent, br/2.0, 2, >> 282 daughterN,daughterRho); 281 // add decay table 283 // add decay table 282 decayTable->Insert(mode); 284 decayTable->Insert(mode); 283 285 284 // -------------N rho+/- -------------- << 286 // -------------N rho+/- -------------- 285 // determine daughters 287 // determine daughters 286 if (iIso3 == +1) { 288 if (iIso3 == +1) { 287 daughterN = "neutron"; << 289 daughterN = "neutron"; 288 if (!fAnti) { 290 if (!fAnti) { 289 daughterRho = "rho+"; 291 daughterRho = "rho+"; 290 } << 292 } else { 291 else { << 292 daughterRho = "rho-"; 293 daughterRho = "rho-"; 293 } 294 } 294 } << 295 } else { 295 else { << 296 daughterN = "proton"; 296 daughterN = "proton"; << 297 if (!fAnti) { 297 if (!fAnti) { 298 daughterRho = "rho-"; 298 daughterRho = "rho-"; 299 } << 299 } else { 300 else { << 301 daughterRho = "rho+"; 300 daughterRho = "rho+"; 302 } 301 } 303 } 302 } 304 if (fAnti) daughterN = "anti_" + daughterN; 303 if (fAnti) daughterN = "anti_" + daughterN; 305 304 306 // create decay channel [parent BR # 305 // create decay channel [parent BR #daughters] 307 mode = new G4PhaseSpaceDecayChannel(namePare << 306 mode = new G4PhaseSpaceDecayChannel(nameParent, br/2.0, 2, >> 307 daughterN,daughterRho); 308 // add decay table 308 // add decay table 309 decayTable->Insert(mode); 309 decayTable->Insert(mode); 310 310 311 return decayTable; 311 return decayTable; 312 } 312 } 313 313 314 G4DecayTable* G4ExcitedNucleonConstructor::Add << 314 G4DecayTable* G4ExcitedNucleonConstructor::AddN2PiMode( 315 << 315 G4DecayTable* decayTable, const G4String& nameParent, 316 << 316 G4double br, G4int iIso3, G4bool fAnti) 317 { 317 { 318 // Decay Modes 318 // Decay Modes 319 // N* --> N + pi + pi 319 // N* --> N + pi + pi 320 // Only I=0 states are included for 2-pi << 320 // Only I=0 states are included for 2-pi system 321 << 321 322 G4VDecayChannel* mode; 322 G4VDecayChannel* mode; 323 323 324 G4String daughterN; 324 G4String daughterN; 325 G4String daughterPi1; 325 G4String daughterPi1; 326 G4String daughterPi2; 326 G4String daughterPi2; 327 327 328 // -------------N pi+ pi- -------------- << 328 // -------------N pi+ pi- -------------- 329 // determine daughters 329 // determine daughters 330 if (iIso3 == +1) { 330 if (iIso3 == +1) { 331 daughterN = "proton"; << 331 daughterN = "proton"; 332 daughterPi1 = "pi+"; 332 daughterPi1 = "pi+"; 333 daughterPi2 = "pi-"; 333 daughterPi2 = "pi-"; 334 } << 334 } else { 335 else { << 335 daughterN = "neutron"; 336 daughterN = "neutron"; << 337 daughterPi1 = "pi+"; 336 daughterPi1 = "pi+"; 338 daughterPi2 = "pi-"; 337 daughterPi2 = "pi-"; 339 } 338 } 340 if (fAnti) daughterN = "anti_" + daughterN; 339 if (fAnti) daughterN = "anti_" + daughterN; 341 340 342 // create decay channel [parent BR # 341 // create decay channel [parent BR #daughters] 343 mode = new G4PhaseSpaceDecayChannel(namePare << 342 mode = new G4PhaseSpaceDecayChannel(nameParent, br/2.0, 3, >> 343 daughterN,daughterPi1,daughterPi2); 344 // add decay table 344 // add decay table 345 decayTable->Insert(mode); 345 decayTable->Insert(mode); 346 346 347 // -------------N pi0 pi0 -------------- << 347 // -------------N pi0 pi0 -------------- 348 // determine daughters 348 // determine daughters 349 if (iIso3 == +1) { 349 if (iIso3 == +1) { 350 daughterN = "proton"; << 350 daughterN = "proton"; 351 daughterPi1 = "pi0"; 351 daughterPi1 = "pi0"; 352 daughterPi2 = "pi0"; 352 daughterPi2 = "pi0"; 353 } << 353 } else { 354 else { << 354 daughterN = "neutron"; 355 daughterN = "neutron"; << 356 daughterPi1 = "pi0"; 355 daughterPi1 = "pi0"; 357 daughterPi2 = "pi0"; 356 daughterPi2 = "pi0"; 358 } 357 } 359 if (fAnti) daughterN = "anti_" + daughterN; 358 if (fAnti) daughterN = "anti_" + daughterN; 360 359 361 // create decay channel [parent BR # 360 // create decay channel [parent BR #daughters] 362 mode = new G4PhaseSpaceDecayChannel(namePare << 361 mode = new G4PhaseSpaceDecayChannel(nameParent, br/2.0, 3, >> 362 daughterN,daughterPi1,daughterPi2); 363 // add decay table 363 // add decay table 364 decayTable->Insert(mode); 364 decayTable->Insert(mode); 365 365 366 return decayTable; 366 return decayTable; 367 } 367 } 368 368 369 G4DecayTable* G4ExcitedNucleonConstructor::Add << 369 G4DecayTable* G4ExcitedNucleonConstructor::AddNStarPiMode( 370 << 370 G4DecayTable* decayTable, const G4String& nameParent, 371 << 371 G4double br, G4int iIso3, G4bool fAnti) 372 { 372 { 373 G4VDecayChannel* mode; 373 G4VDecayChannel* mode; 374 374 375 G4String daughterN; 375 G4String daughterN; 376 G4String daughterPi; 376 G4String daughterPi; 377 377 378 // ------------ N pi0 ------------ << 378 // ------------ N pi0 ------------ 379 // determine daughters 379 // determine daughters 380 if (iIso3 == +1) { 380 if (iIso3 == +1) { 381 daughterN = "N(1440)+"; << 381 daughterN = "N(1440)+"; 382 daughterPi = "pi0"; 382 daughterPi = "pi0"; 383 } << 383 } else { 384 else { << 384 daughterN = "N(1440)0"; 385 daughterN = "N(1440)0"; << 386 daughterPi = "pi0"; 385 daughterPi = "pi0"; 387 } 386 } 388 if (fAnti) daughterN = "anti_" + daughterN; 387 if (fAnti) daughterN = "anti_" + daughterN; 389 // create decay channel [parent BR # 388 // create decay channel [parent BR #daughters] 390 mode = new G4PhaseSpaceDecayChannel(namePare << 389 mode = new G4PhaseSpaceDecayChannel(nameParent, br/2.0, 2, >> 390 daughterN,daughterPi); 391 // add decay table 391 // add decay table 392 decayTable->Insert(mode); 392 decayTable->Insert(mode); 393 393 394 // -------------N pi +/- -------------- << 394 // -------------N pi +/- -------------- 395 // determine daughters 395 // determine daughters 396 if (iIso3 == +1) { 396 if (iIso3 == +1) { 397 daughterN = "N(1440)0"; << 397 daughterN = "N(1440)0"; 398 if (!fAnti) { 398 if (!fAnti) { 399 daughterPi = "pi+"; 399 daughterPi = "pi+"; 400 } << 400 } else { 401 else { << 402 daughterPi = "pi-"; 401 daughterPi = "pi-"; 403 } 402 } 404 } << 403 } else { 405 else { << 404 daughterN = "N(1440)+"; 406 daughterN = "N(1440)+"; << 407 if (!fAnti) { 405 if (!fAnti) { 408 daughterPi = "pi-"; 406 daughterPi = "pi-"; 409 } << 407 } else { 410 else { << 411 daughterPi = "pi+"; 408 daughterPi = "pi+"; 412 } 409 } 413 } 410 } 414 if (fAnti) daughterN = "anti_" + daughterN; 411 if (fAnti) daughterN = "anti_" + daughterN; 415 412 416 // create decay channel [parent BR # 413 // create decay channel [parent BR #daughters] 417 mode = new G4PhaseSpaceDecayChannel(namePare << 414 mode = new G4PhaseSpaceDecayChannel(nameParent, br/2.0, 2, >> 415 daughterN,daughterPi); 418 // add decay table 416 // add decay table 419 decayTable->Insert(mode); 417 decayTable->Insert(mode); 420 418 421 return decayTable; 419 return decayTable; 422 } 420 } 423 421 424 G4DecayTable* G4ExcitedNucleonConstructor::Add << 422 G4DecayTable* G4ExcitedNucleonConstructor::AddDeltaPiMode( 425 << 423 G4DecayTable* decayTable, const G4String& nameParent, 426 << 424 G4double br, G4int iIso3, G4bool fAnti) 427 { 425 { 428 G4VDecayChannel* mode; 426 G4VDecayChannel* mode; 429 427 430 G4String daughterDelta; 428 G4String daughterDelta; 431 G4String daughterPi; 429 G4String daughterPi; 432 G4double r; 430 G4double r; 433 431 434 // ------------ Delta pi+/- ------------ << 432 // ------------ Delta pi+/- ------------ 435 // determine daughters 433 // determine daughters 436 if (iIso3 == +1) { 434 if (iIso3 == +1) { 437 daughterDelta = "delta0"; << 435 daughterDelta = "delta0"; 438 if (!fAnti) { 436 if (!fAnti) { 439 daughterPi = "pi+"; 437 daughterPi = "pi+"; 440 } << 438 } else { 441 else { << 442 daughterPi = "pi-"; 439 daughterPi = "pi-"; 443 } 440 } 444 r = br / 6.0; << 441 r = br/6.0; 445 } << 442 } else { 446 else { << 443 daughterDelta = "delta+"; 447 daughterDelta = "delta+"; << 448 if (!fAnti) { 444 if (!fAnti) { 449 daughterPi = "pi-"; 445 daughterPi = "pi-"; 450 } << 446 } else { 451 else { << 452 daughterPi = "pi+"; 447 daughterPi = "pi+"; 453 } 448 } 454 r = br / 6.0; << 449 r = br/6.0; 455 } 450 } 456 if (fAnti) daughterDelta = "anti_" + daughte 451 if (fAnti) daughterDelta = "anti_" + daughterDelta; 457 // create decay channel [parent BR # 452 // create decay channel [parent BR #daughters] 458 mode = new G4PhaseSpaceDecayChannel(namePare << 453 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, >> 454 daughterDelta,daughterPi); 459 // add decay table 455 // add decay table 460 decayTable->Insert(mode); 456 decayTable->Insert(mode); 461 457 462 // ------------ Delta pi+/- ------------ << 458 // ------------ Delta pi+/- ------------ 463 // determine daughters 459 // determine daughters 464 if (iIso3 == +1) { 460 if (iIso3 == +1) { 465 daughterDelta = "delta++"; << 461 daughterDelta = "delta++"; 466 if (!fAnti) { 462 if (!fAnti) { 467 daughterPi = "pi-"; 463 daughterPi = "pi-"; 468 } << 464 } else { 469 else { << 470 daughterPi = "pi+"; 465 daughterPi = "pi+"; 471 } 466 } 472 r = br / 2.0; << 467 r = br/2.0; 473 } << 468 } else { 474 else { << 469 daughterDelta = "delta-"; 475 daughterDelta = "delta-"; << 476 if (!fAnti) { 470 if (!fAnti) { 477 daughterPi = "pi+"; 471 daughterPi = "pi+"; 478 } << 472 } else { 479 else { << 480 daughterPi = "pi-"; 473 daughterPi = "pi-"; 481 } 474 } 482 r = br / 2.0; << 475 r = br/2.0; 483 } 476 } 484 if (fAnti) daughterDelta = "anti_" + daughte 477 if (fAnti) daughterDelta = "anti_" + daughterDelta; 485 // create decay channel [parent BR # 478 // create decay channel [parent BR #daughters] 486 mode = new G4PhaseSpaceDecayChannel(namePare << 479 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, >> 480 daughterDelta,daughterPi); 487 // add decay table 481 // add decay table 488 decayTable->Insert(mode); 482 decayTable->Insert(mode); 489 483 490 // ------------ Delta pi0 ------------ << 484 // ------------ Delta pi0 ------------ 491 // determine daughters 485 // determine daughters 492 if (iIso3 == +1) { 486 if (iIso3 == +1) { 493 daughterDelta = "delta+"; << 487 daughterDelta = "delta+"; 494 daughterPi = "pi0"; 488 daughterPi = "pi0"; 495 r = br / 3.0; << 489 r = br/3.0; 496 } << 490 } else { 497 else { << 491 daughterDelta = "delta0"; 498 daughterDelta = "delta0"; << 499 daughterPi = "pi0"; 492 daughterPi = "pi0"; 500 r = br / 3.0; << 493 r = br/3.0; 501 } 494 } 502 if (fAnti) daughterDelta = "anti_" + daughte 495 if (fAnti) daughterDelta = "anti_" + daughterDelta; 503 // create decay channel [parent BR # 496 // create decay channel [parent BR #daughters] 504 mode = new G4PhaseSpaceDecayChannel(namePare << 497 mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2, >> 498 daughterDelta,daughterPi); 505 // add decay table 499 // add decay table 506 decayTable->Insert(mode); 500 decayTable->Insert(mode); 507 501 >> 502 508 return decayTable; 503 return decayTable; 509 } 504 } 510 505 511 G4DecayTable* G4ExcitedNucleonConstructor::Add << 506 G4DecayTable* G4ExcitedNucleonConstructor::AddLambdaKMode( 512 << 507 G4DecayTable* decayTable, const G4String& nameParent, 513 << 508 G4double br, G4int iIso3, G4bool fAnti) 514 { 509 { 515 G4VDecayChannel* mode; 510 G4VDecayChannel* mode; 516 511 517 G4String lambda = "lambda"; 512 G4String lambda = "lambda"; 518 G4String daughterK; 513 G4String daughterK; 519 514 520 // ------------ N pi0 ------------ << 515 // ------------ N pi0 ------------ 521 // determine daughters 516 // determine daughters 522 if (iIso3 == +1) { 517 if (iIso3 == +1) { 523 if (!fAnti) { 518 if (!fAnti) { 524 daughterK = "kaon+"; 519 daughterK = "kaon+"; 525 } << 520 } else { 526 else { << 527 daughterK = "kaon-"; 521 daughterK = "kaon-"; 528 } 522 } 529 } << 523 } else { 530 else { << 531 if (!fAnti) { 524 if (!fAnti) { 532 daughterK = "kaon0"; 525 daughterK = "kaon0"; 533 } << 526 } else { 534 else { << 535 daughterK = "anti_kaon0"; 527 daughterK = "anti_kaon0"; 536 } 528 } 537 } 529 } 538 if (fAnti) lambda = "anti_" + lambda; 530 if (fAnti) lambda = "anti_" + lambda; 539 // create decay channel [parent BR # 531 // create decay channel [parent BR #daughters] 540 mode = new G4PhaseSpaceDecayChannel(namePare << 532 mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2, >> 533 lambda, daughterK); 541 // add decay table 534 // add decay table 542 decayTable->Insert(mode); 535 decayTable->Insert(mode); 543 536 544 return decayTable; 537 return decayTable; 545 } 538 } 546 539 547 // clang-format off << 548 << 549 // PDG2005 540 // PDG2005 550 // N(2090) is renamed to N(2080) << 541 // N(2090) is renamed to N(2080) 551 // but keep unchanged temporalily Apr 06 542 // but keep unchanged temporalily Apr 06 552 // << 553 // -> PDG2023: N(2090) is removed by S.Okada 4 << 554 543 555 const char* G4ExcitedNucleonConstructor::name[ 544 const char* G4ExcitedNucleonConstructor::name[] = { 556 "N(1440)", "N(1520)", "N(1535)", "N(1650)", 545 "N(1440)", "N(1520)", "N(1535)", "N(1650)", "N(1675)", 557 "N(1680)", "N(1700)", "N(1710)", "N(1720)", << 546 "N(1680)", "N(1700)", "N(1710)", "N(1720)", "N(1900)", 558 "N(1990)", "N(2090)", "N(2190)", "N(2220)", 547 "N(1990)", "N(2090)", "N(2190)", "N(2220)", "N(2250)" 559 }; 548 }; 560 549 561 const G4double G4ExcitedNucleonConstructor::ma 550 const G4double G4ExcitedNucleonConstructor::mass[] = { 562 1.440*GeV, 1.515*GeV, 1.535*GeV, 1.650*GeV, << 551 1.430*GeV, 1.515*GeV, 1.535*GeV, 1.655*GeV, 1.675*GeV, 563 1.685*GeV, 1.720*GeV, 1.710*GeV, 1.720*GeV, << 552 1.685*GeV, 1.700*GeV, 1.710*GeV, 1.720*GeV, 1.900*GeV, 564 2.020*GeV, 2.080*GeV, 2.180*GeV, 2.250*GeV, << 553 1.950*GeV, 2.080*GeV, 2.190*GeV, 2.250*GeV, 2.275*GeV 565 }; 554 }; 566 555 567 const G4double G4ExcitedNucleonConstructor::wi 556 const G4double G4ExcitedNucleonConstructor::width[] = { 568 350.0*MeV, 110.0*MeV, 150.0*MeV, 125.0*MeV, << 557 350.0*MeV, 115.0*MeV, 150.0*MeV, 140.0*MeV, 150.0*MeV, 569 120.0*MeV, 200.0*MeV, 140.0*MeV, 250.0*MeV, << 558 130.0*MeV, 150.0*MeV, 100.0*MeV, 250.0*MeV, 500.0*MeV, 570 300.0*MeV, 350.0*MeV, 400.0*MeV, 400.0*MeV, << 559 555.0*MeV, 350.0*MeV, 500.0*MeV, 400.0*MeV, 500.0*MeV 571 }; 560 }; 572 561 573 const G4int G4ExcitedNucleonConstructor::iSpin 562 const G4int G4ExcitedNucleonConstructor::iSpin[] = { 574 1, 3, 1, 1, 5, 563 1, 3, 1, 1, 5, 575 5, 3, 1, 3, 3, 564 5, 3, 1, 3, 3, 576 7, 3, 7, 9, 9 565 7, 3, 7, 9, 9 577 }; 566 }; 578 567 579 const G4int G4ExcitedNucleonConstructor::iPari 568 const G4int G4ExcitedNucleonConstructor::iParity[] = { 580 +1, -1, -1, -1, -1, 569 +1, -1, -1, -1, -1, 581 +1, -1, +1, +1, +1, 570 +1, -1, +1, +1, +1, 582 +1, -1, +1, -1, -1 << 571 +1, -1, +1, -1, -1 583 }; 572 }; 584 573 585 const G4int G4ExcitedNucleonConstructor::encod 574 const G4int G4ExcitedNucleonConstructor::encodingOffset[] = { 586 10000, 0, 20000, 30000, 0, 575 10000, 0, 20000, 30000, 0, 587 10000, 20000, 40000, 30000, 40000, << 576 10000, 20000, 40000, 30000, 40000, 588 10000, 50000, 0, 0, 10000 << 577 10000, 50000, 0, 0, 10000 589 }; 578 }; 590 579 591 const G4double G4ExcitedNucleonConstructor::bR << 580 const G4double G4ExcitedNucleonConstructor::bRatio[ G4ExcitedNucleonConstructor::NStates ][ G4ExcitedNucleonConstructor::NumberOfDecayModes] = 592 { 581 { 593 { 0.0, 0.70, 0.0, 0.0, 0.0, 0.05, 0.2 << 582 { 0.0, 0.70, 0.0, 0.0, 0.0, 0.05, 0.25, 0.0, 0.0}, 594 { 0.0, 0.60, 0.0, 0.0, 0.0, 0.15, 0.2 << 583 { 0.0, 0.60, 0.0, 0.0, 0.0, 0.15, 0.25, 0.0, 0.0}, 595 {0.001, 0.55, 0.35, 0.0, 0.0, 0.05, 0.0 584 {0.001, 0.55, 0.35, 0.0, 0.0, 0.05, 0.00, 0.05, 0.0}, 596 { 0.0, 0.65, 0.05, 0.0, 0.0, 0.05, 0.1 585 { 0.0, 0.65, 0.05, 0.0, 0.0, 0.05, 0.10, 0.05, 0.10}, 597 { 0.0, 0.45, 0.0, 0.0, 0.0, 0.00, 0.5 586 { 0.0, 0.45, 0.0, 0.0, 0.0, 0.00, 0.55, 0.0, 0.0}, 598 { 0.0, 0.65, 0.0, 0.0, 0.0, 0.20, 0.1 587 { 0.0, 0.65, 0.0, 0.0, 0.0, 0.20, 0.15, 0.0, 0.0}, 599 { 0.0, 0.10, 0.05, 0.0, 0.05, 0.45, 0.3 588 { 0.0, 0.10, 0.05, 0.0, 0.05, 0.45, 0.35, 0.0, 0.0}, 600 { 0.0, 0.15, 0.20, 0.0, 0.05, 0.20, 0.2 589 { 0.0, 0.15, 0.20, 0.0, 0.05, 0.20, 0.20, 0.10, 0.10}, 601 { 0.0, 0.15, 0.00, 0.0, 0.25, 0.45, 0.1 590 { 0.0, 0.15, 0.00, 0.0, 0.25, 0.45, 0.10, 0.00, 0.05}, 602 { 0.0, 0.35, 0.0, 0.55, 0.05, 0.00, 0.0 591 { 0.0, 0.35, 0.0, 0.55, 0.05, 0.00, 0.05, 0.0, 0.0}, 603 { 0.0, 0.05, 0.0, 0.0, 0.15, 0.25, 0.3 592 { 0.0, 0.05, 0.0, 0.0, 0.15, 0.25, 0.30, 0.15, 0.10}, 604 { 0.0, 0.60, 0.05, 0.0, 0.25, 0.05, 0.0 593 { 0.0, 0.60, 0.05, 0.0, 0.25, 0.05, 0.05, 0.0, 0.0}, 605 { 0.0, 0.35, 0.0, 0.00, 0.30, 0.15, 0.1 594 { 0.0, 0.35, 0.0, 0.00, 0.30, 0.15, 0.15, 0.05, 0.0}, 606 { 0.0, 0.35, 0.0, 0.0, 0.25, 0.20, 0.2 595 { 0.0, 0.35, 0.0, 0.0, 0.25, 0.20, 0.20, 0.0, 0.0}, 607 { 0.0, 0.30, 0.0, 0.00, 0.25, 0.20, 0.2 596 { 0.0, 0.30, 0.0, 0.00, 0.25, 0.20, 0.20, 0.05, 0.0} 608 }; 597 }; >> 598 >> 599 >> 600 >> 601 >> 602 >> 603 >> 604 >> 605 >> 606 >> 607 >> 608 >> 609 >> 610 >> 611 >> 612 >> 613 609 614