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