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 /// \file biasing/B03/src/B03PhysicsList.cc 26 /// \file biasing/B03/src/B03PhysicsList.cc 27 /// \brief Implementation of the B03PhysicsLis 27 /// \brief Implementation of the B03PhysicsList class 28 // 28 // 29 // 29 // >> 30 // $Id: B03PhysicsList.cc 75089 2013-10-25 23:25:21Z dwright $ 30 // 31 // 31 32 >> 33 #include "globals.hh" >> 34 #include <iomanip> >> 35 32 #include "B03PhysicsList.hh" 36 #include "B03PhysicsList.hh" 33 37 34 #include "G4BaryonConstructor.hh" << 35 #include "G4BosonConstructor.hh" << 36 #include "G4HadronicParameters.hh" << 37 #include "G4IonConstructor.hh" << 38 #include "G4LeptonConstructor.hh" << 39 #include "G4Material.hh" << 40 #include "G4MaterialTable.hh" << 41 #include "G4MesonConstructor.hh" << 42 #include "G4ParticleDefinition.hh" 38 #include "G4ParticleDefinition.hh" 43 #include "G4ParticleTable.hh" << 44 #include "G4ParticleTypes.hh" << 45 #include "G4ParticleWithCuts.hh" 39 #include "G4ParticleWithCuts.hh" 46 #include "G4ProcessManager.hh" 40 #include "G4ProcessManager.hh" 47 #include "G4ProcessVector.hh" 41 #include "G4ProcessVector.hh" >> 42 #include "G4ParticleTypes.hh" >> 43 #include "G4ParticleTable.hh" >> 44 #include "G4BosonConstructor.hh" >> 45 #include "G4LeptonConstructor.hh" >> 46 #include "G4MesonConstructor.hh" >> 47 #include "G4BaryonConstructor.hh" >> 48 #include "G4IonConstructor.hh" 48 #include "G4ShortLivedConstructor.hh" 49 #include "G4ShortLivedConstructor.hh" >> 50 #include "G4Material.hh" >> 51 #include "G4MaterialTable.hh" 49 #include "G4SystemOfUnits.hh" 52 #include "G4SystemOfUnits.hh" 50 #include "globals.hh" << 51 << 52 #include <iomanip> << 53 53 54 //....oooOO0OOooo........oooOO0OOooo........oo 54 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 55 55 56 B03PhysicsList::B03PhysicsList(G4String parall << 56 B03PhysicsList::B03PhysicsList(): G4VUserPhysicsList() 57 : G4VUserPhysicsList(), fBiasWorldName(paral << 58 { 57 { 59 fParaWorldName.clear(); 58 fParaWorldName.clear(); 60 SetVerboseLevel(1); << 59 SetVerboseLevel(1); 61 } 60 } 62 61 63 //....oooOO0OOooo........oooOO0OOooo........oo 62 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 64 63 65 B03PhysicsList::~B03PhysicsList() 64 B03PhysicsList::~B03PhysicsList() 66 { 65 { 67 fParaWorldName.clear(); 66 fParaWorldName.clear(); 68 } 67 } 69 68 70 //....oooOO0OOooo........oooOO0OOooo........oo 69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 71 70 72 void B03PhysicsList::ConstructParticle() 71 void B03PhysicsList::ConstructParticle() 73 { 72 { 74 // In this method, static member functions s 73 // In this method, static member functions should be called 75 // for all particles which you want to use. 74 // for all particles which you want to use. 76 // This ensures that objects of these partic 75 // This ensures that objects of these particle types will be 77 // created in the program. << 76 // created in the program. 78 77 79 ConstructAllBosons(); 78 ConstructAllBosons(); 80 ConstructAllLeptons(); 79 ConstructAllLeptons(); 81 ConstructAllMesons(); 80 ConstructAllMesons(); 82 ConstructAllBaryons(); 81 ConstructAllBaryons(); 83 ConstructAllIons(); 82 ConstructAllIons(); 84 ConstructAllShortLiveds(); 83 ConstructAllShortLiveds(); 85 } 84 } 86 85 87 //....oooOO0OOooo........oooOO0OOooo........oo 86 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 88 87 89 void B03PhysicsList::ConstructAllBosons() 88 void B03PhysicsList::ConstructAllBosons() 90 { 89 { 91 // Construct all bosons 90 // Construct all bosons 92 G4BosonConstructor pConstructor; 91 G4BosonConstructor pConstructor; 93 pConstructor.ConstructParticle(); 92 pConstructor.ConstructParticle(); 94 } 93 } 95 94 96 //....oooOO0OOooo........oooOO0OOooo........oo 95 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 97 96 98 void B03PhysicsList::ConstructAllLeptons() 97 void B03PhysicsList::ConstructAllLeptons() 99 { 98 { 100 // Construct all leptons 99 // Construct all leptons 101 G4LeptonConstructor pConstructor; 100 G4LeptonConstructor pConstructor; 102 pConstructor.ConstructParticle(); 101 pConstructor.ConstructParticle(); 103 } 102 } 104 103 105 //....oooOO0OOooo........oooOO0OOooo........oo 104 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 106 105 107 void B03PhysicsList::ConstructAllMesons() 106 void B03PhysicsList::ConstructAllMesons() 108 { 107 { 109 // Construct all mesons 108 // Construct all mesons 110 G4MesonConstructor pConstructor; 109 G4MesonConstructor pConstructor; 111 pConstructor.ConstructParticle(); 110 pConstructor.ConstructParticle(); 112 } 111 } 113 112 114 //....oooOO0OOooo........oooOO0OOooo........oo 113 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 115 114 116 void B03PhysicsList::ConstructAllBaryons() 115 void B03PhysicsList::ConstructAllBaryons() 117 { 116 { 118 // Construct all barions 117 // Construct all barions 119 G4BaryonConstructor pConstructor; 118 G4BaryonConstructor pConstructor; 120 pConstructor.ConstructParticle(); 119 pConstructor.ConstructParticle(); 121 } 120 } 122 121 123 //....oooOO0OOooo........oooOO0OOooo........oo 122 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 124 123 125 void B03PhysicsList::ConstructAllIons() 124 void B03PhysicsList::ConstructAllIons() 126 { 125 { 127 // Construct light ions 126 // Construct light ions 128 G4IonConstructor pConstructor; 127 G4IonConstructor pConstructor; 129 pConstructor.ConstructParticle(); << 128 pConstructor.ConstructParticle(); 130 } 129 } 131 130 132 //....oooOO0OOooo........oooOO0OOooo........oo 131 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 133 132 134 void B03PhysicsList::ConstructAllShortLiveds() 133 void B03PhysicsList::ConstructAllShortLiveds() 135 { 134 { 136 // Construct resonaces and quarks 135 // Construct resonaces and quarks 137 G4ShortLivedConstructor pConstructor; 136 G4ShortLivedConstructor pConstructor; 138 pConstructor.ConstructParticle(); << 137 pConstructor.ConstructParticle(); 139 } 138 } 140 139 141 //....oooOO0OOooo........oooOO0OOooo........oo 140 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 142 141 143 void B03PhysicsList::ConstructProcess() 142 void B03PhysicsList::ConstructProcess() 144 { 143 { 145 AddTransportation(); 144 AddTransportation(); 146 AddScoringProcess(); 145 AddScoringProcess(); 147 AddBiasingProcess(); 146 AddBiasingProcess(); 148 ConstructEM(); 147 ConstructEM(); 149 ConstructLeptHad(); 148 ConstructLeptHad(); 150 ConstructHad(); 149 ConstructHad(); 151 ConstructGeneral(); 150 ConstructGeneral(); 152 } 151 } 153 152 154 //....oooOO0OOooo........oooOO0OOooo........oo 153 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 155 154 156 #include "G4ComptonScattering.hh" 155 #include "G4ComptonScattering.hh" 157 #include "G4GammaConversion.hh" 156 #include "G4GammaConversion.hh" 158 #include "G4MuBremsstrahlung.hh" << 159 #include "G4MuIonisation.hh" << 160 #include "G4MuMultipleScattering.hh" << 161 #include "G4MuPairProduction.hh" << 162 #include "G4PhotoElectricEffect.hh" 157 #include "G4PhotoElectricEffect.hh" 163 #include "G4eBremsstrahlung.hh" << 158 164 #include "G4eIonisation.hh" << 165 #include "G4eMultipleScattering.hh" 159 #include "G4eMultipleScattering.hh" >> 160 #include "G4MuMultipleScattering.hh" >> 161 #include "G4hMultipleScattering.hh" >> 162 >> 163 #include "G4eIonisation.hh" >> 164 #include "G4eBremsstrahlung.hh" 166 #include "G4eplusAnnihilation.hh" 165 #include "G4eplusAnnihilation.hh" >> 166 >> 167 #include "G4MuIonisation.hh" >> 168 #include "G4MuBremsstrahlung.hh" >> 169 #include "G4MuPairProduction.hh" >> 170 167 #include "G4hIonisation.hh" 171 #include "G4hIonisation.hh" 168 #include "G4hMultipleScattering.hh" << 169 172 170 void B03PhysicsList::ConstructEM() 173 void B03PhysicsList::ConstructEM() 171 { 174 { 172 auto particleIterator = GetParticleIterator( << 175 theParticleIterator->reset(); 173 particleIterator->reset(); << 176 while( (*theParticleIterator)() ){ 174 while ((*particleIterator)()) { << 177 G4ParticleDefinition* particle = theParticleIterator->value(); 175 G4ParticleDefinition* particle = particleI << 176 G4ProcessManager* pmanager = particle->Get 178 G4ProcessManager* pmanager = particle->GetProcessManager(); 177 G4String particleName = particle->GetParti 179 G4String particleName = particle->GetParticleName(); 178 << 180 179 if (particleName == "gamma") { 181 if (particleName == "gamma") { 180 // gamma << 182 // gamma 181 // Construct processes for gamma 183 // Construct processes for gamma 182 pmanager->AddDiscreteProcess(new G4Gamma 184 pmanager->AddDiscreteProcess(new G4GammaConversion()); 183 pmanager->AddDiscreteProcess(new G4Compt << 185 pmanager->AddDiscreteProcess(new G4ComptonScattering()); 184 pmanager->AddDiscreteProcess(new G4Photo 186 pmanager->AddDiscreteProcess(new G4PhotoElectricEffect()); 185 } << 187 186 else if (particleName == "e-") { << 188 } else if (particleName == "e-") { 187 // electron << 189 //electron 188 // Construct processes for electron << 190 // Construct processes for electron 189 pmanager->AddProcess(new G4eMultipleScat << 191 pmanager->AddProcess(new G4eMultipleScattering(),-1,1,1); 190 pmanager->AddProcess(new G4eIonisation() << 192 pmanager->AddProcess(new G4eIonisation(),-1,2,2); 191 pmanager->AddProcess(new G4eBremsstrahlu << 193 pmanager->AddProcess(new G4eBremsstrahlung(),-1,-1,3); 192 } << 194 193 else if (particleName == "e+") { << 195 } else if (particleName == "e+") { 194 // positron << 196 //positron 195 // Construct processes for positron << 197 // Construct processes for positron 196 pmanager->AddProcess(new G4eMultipleScat << 198 pmanager->AddProcess(new G4eMultipleScattering(),-1,1,1); 197 << 199 198 pmanager->AddProcess(new G4eIonisation() << 200 pmanager->AddProcess(new G4eIonisation(),-1,2,2); 199 pmanager->AddProcess(new G4eBremsstrahlu << 201 pmanager->AddProcess(new G4eBremsstrahlung(),-1,-1,3); 200 pmanager->AddProcess(new G4eplusAnnihila << 202 pmanager->AddProcess(new G4eplusAnnihilation(),0,-1,4); 201 } << 203 202 else if (particleName == "mu+" || particle << 204 } else if( particleName == "mu+" || 203 // muon << 205 particleName == "mu-" ) { 204 // Construct processes for muon+ << 206 //muon 205 pmanager->AddProcess(new G4MuMultipleSca << 207 // Construct processes for muon+ 206 pmanager->AddProcess(new G4MuIonisation( << 208 pmanager->AddProcess(new G4MuMultipleScattering(),-1,1,1); 207 pmanager->AddProcess(new G4MuBremsstrahl << 209 pmanager->AddProcess(new G4MuIonisation(),-1,2,2); 208 pmanager->AddProcess(new G4MuPairProduct << 210 pmanager->AddProcess(new G4MuBremsstrahlung(),-1,-1,3); 209 } << 211 pmanager->AddProcess(new G4MuPairProduction(),-1,-1,4); 210 else if (particleName == "GenericIon") { << 212 211 pmanager->AddProcess(new G4hMultipleScat << 213 } else if( particleName == "GenericIon" ) { 212 pmanager->AddProcess(new G4hIonisation() << 214 pmanager->AddProcess(new G4hMultipleScattering(),-1,1,1); 213 } << 215 pmanager->AddProcess(new G4hIonisation(),-1,2,2); 214 else { << 216 } else { 215 if ((particle->GetPDGCharge() != 0.0) && << 217 if ((particle->GetPDGCharge() != 0.0) && 216 && (!particle->IsShortLived())) << 218 (particle->GetParticleName() != "chargedgeantino")&& 217 { << 219 (!particle->IsShortLived()) ) { 218 // all others charged particles except << 220 // all others charged particles except geantino 219 pmanager->AddProcess(new G4hMultipleSc << 221 pmanager->AddProcess(new G4hMultipleScattering(),-1,1,1); 220 pmanager->AddProcess(new G4hIonisation << 222 pmanager->AddProcess(new G4hIonisation(),-1,2,2); 221 } << 223 } 222 } 224 } 223 } 225 } 224 } 226 } 225 227 226 //....oooOO0OOooo........oooOO0OOooo........oo 228 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 227 229 228 // Hadron Processes 230 // Hadron Processes 229 231 230 #include "G4HadronElasticProcess.hh" 232 #include "G4HadronElasticProcess.hh" 231 #include "G4HadronInelasticProcess.hh" << 233 #include "G4HadronFissionProcess.hh" 232 #include "G4NeutronCaptureProcess.hh" << 234 #include "G4HadronCaptureProcess.hh" 233 #include "G4NeutronFissionProcess.hh" << 235 >> 236 #include "G4PionPlusInelasticProcess.hh" >> 237 #include "G4PionMinusInelasticProcess.hh" >> 238 #include "G4KaonPlusInelasticProcess.hh" >> 239 #include "G4KaonZeroSInelasticProcess.hh" >> 240 #include "G4KaonZeroLInelasticProcess.hh" >> 241 #include "G4KaonMinusInelasticProcess.hh" >> 242 #include "G4ProtonInelasticProcess.hh" >> 243 #include "G4AntiProtonInelasticProcess.hh" >> 244 #include "G4NeutronInelasticProcess.hh" >> 245 #include "G4AntiNeutronInelasticProcess.hh" >> 246 #include "G4LambdaInelasticProcess.hh" >> 247 #include "G4AntiLambdaInelasticProcess.hh" >> 248 #include "G4SigmaPlusInelasticProcess.hh" >> 249 #include "G4SigmaMinusInelasticProcess.hh" >> 250 #include "G4AntiSigmaPlusInelasticProcess.hh" >> 251 #include "G4AntiSigmaMinusInelasticProcess.hh" >> 252 #include "G4XiZeroInelasticProcess.hh" >> 253 #include "G4XiMinusInelasticProcess.hh" >> 254 #include "G4AntiXiZeroInelasticProcess.hh" >> 255 #include "G4AntiXiMinusInelasticProcess.hh" >> 256 #include "G4DeuteronInelasticProcess.hh" >> 257 #include "G4TritonInelasticProcess.hh" >> 258 #include "G4AlphaInelasticProcess.hh" >> 259 #include "G4OmegaMinusInelasticProcess.hh" >> 260 #include "G4AntiOmegaMinusInelasticProcess.hh" 234 261 235 // Low-energy Models 262 // Low-energy Models 236 263 237 #include "G4HadronElastic.hh" 264 #include "G4HadronElastic.hh" 238 #include "G4LFission.hh" << 239 #include "G4NeutronRadCapture.hh" 265 #include "G4NeutronRadCapture.hh" >> 266 #include "G4LFission.hh" 240 267 241 // -- generator models 268 // -- generator models 242 #include "G4BinaryLightIonReaction.hh" << 269 #include "G4TheoFSGenerator.hh" 243 #include "G4CascadeInterface.hh" << 244 #include "G4CompetitiveFission.hh" << 245 #include "G4ExcitationHandler.hh" 270 #include "G4ExcitationHandler.hh" 246 #include "G4ExcitedStringDecay.hh" << 271 #include "G4Evaporation.hh" 247 #include "G4FTFModel.hh" << 272 #include "G4CompetitiveFission.hh" 248 #include "G4Fancy3DNucleus.hh" << 273 #include "G4FermiBreakUp.hh" >> 274 #include "G4StatMF.hh" 249 #include "G4GeneratorPrecompoundInterface.hh" 275 #include "G4GeneratorPrecompoundInterface.hh" 250 #include "G4LundStringFragmentation.hh" << 276 #include "G4Fancy3DNucleus.hh" >> 277 #include "G4CascadeInterface.hh" >> 278 #include "G4StringModel.hh" 251 #include "G4PreCompoundModel.hh" 279 #include "G4PreCompoundModel.hh" >> 280 #include "G4FTFModel.hh" 252 #include "G4QGSMFragmentation.hh" 281 #include "G4QGSMFragmentation.hh" >> 282 #include "G4LundStringFragmentation.hh" >> 283 #include "G4ExcitedStringDecay.hh" 253 #include "G4QMDReaction.hh" 284 #include "G4QMDReaction.hh" 254 #include "G4StringModel.hh" << 285 #include "G4BinaryLightIonReaction.hh" 255 #include "G4TheoFSGenerator.hh" << 256 286 257 // Cross sections 287 // Cross sections 258 #include "G4ComponentGGHadronNucleusXsc.hh" << 288 #include "G4IonsShenCrossSection.hh" 259 #include "G4ComponentGGNuclNuclXsc.hh" << 289 #include "G4TripathiCrossSection.hh" 260 #include "G4CrossSectionElastic.hh" << 290 #include "G4TripathiLightCrossSection.hh" 261 #include "G4CrossSectionInelastic.hh" << 262 #include "G4NeutronInelasticXS.hh" << 263 291 264 // 292 // 265 // ConstructHad() 293 // ConstructHad() 266 // 294 // 267 // Makes discrete physics processes for the ha 295 // Makes discrete physics processes for the hadrons 268 // The processes are: Elastic scattering, Inel 296 // The processes are: Elastic scattering, Inelastic scattering, 269 // Fission (for neutron only), and Capture (ne 297 // Fission (for neutron only), and Capture (neutron). 270 // 298 // 271 299 272 void B03PhysicsList::ConstructHad() 300 void B03PhysicsList::ConstructHad() 273 { 301 { 274 // this will be the model class for high ene 302 // this will be the model class for high energies 275 G4TheoFSGenerator* theTheoModel = new G4Theo 303 G4TheoFSGenerator* theTheoModel = new G4TheoFSGenerator; 276 G4TheoFSGenerator* antiBHighEnergyModel = ne 304 G4TheoFSGenerator* antiBHighEnergyModel = new G4TheoFSGenerator; >> 305 >> 306 // all models for treatment of thermal nucleus >> 307 G4Evaporation* theEvaporation = new G4Evaporation; >> 308 G4FermiBreakUp* theFermiBreakUp = new G4FermiBreakUp; >> 309 G4StatMF* theMF = new G4StatMF; 277 310 278 // Evaporation logic 311 // Evaporation logic 279 G4ExcitationHandler* theHandler = new G4Exci 312 G4ExcitationHandler* theHandler = new G4ExcitationHandler; 280 theHandler->SetMinEForMultiFrag(3 * MeV); << 313 theHandler->SetEvaporation(theEvaporation); 281 << 314 theHandler->SetFermiModel(theFermiBreakUp); 282 // Pre equilibrium stage << 315 theHandler->SetMultiFragmentation(theMF); >> 316 theHandler->SetMaxAandZForFermiBreakUp(12, 6); >> 317 theHandler->SetMinEForMultiFrag(3*MeV); >> 318 >> 319 // Pre equilibrium stage 283 G4PreCompoundModel* thePreEquilib = new G4Pr 320 G4PreCompoundModel* thePreEquilib = new G4PreCompoundModel(theHandler); 284 321 285 // a no-cascade generator-precompound intera 322 // a no-cascade generator-precompound interaface 286 G4GeneratorPrecompoundInterface* theCascade << 323 G4GeneratorPrecompoundInterface* theCascade = 287 theCascade->SetDeExcitation(thePreEquilib); << 324 new G4GeneratorPrecompoundInterface; >> 325 theCascade->SetDeExcitation(thePreEquilib); 288 326 289 // Bertini cascade 327 // Bertini cascade 290 G4CascadeInterface* bertini = new G4CascadeI 328 G4CascadeInterface* bertini = new G4CascadeInterface; 291 bertini->SetMaxEnergy(22 * MeV); << 329 bertini->SetMaxEnergy(22*MeV); 292 330 293 // here come the high energy parts 331 // here come the high energy parts 294 G4VPartonStringModel* theStringModel; 332 G4VPartonStringModel* theStringModel; 295 theStringModel = new G4FTFModel; 333 theStringModel = new G4FTFModel; 296 theTheoModel->SetTransport(theCascade); 334 theTheoModel->SetTransport(theCascade); 297 theTheoModel->SetHighEnergyGenerator(theStri 335 theTheoModel->SetHighEnergyGenerator(theStringModel); 298 theTheoModel->SetMinEnergy(19 * GeV); << 336 theTheoModel->SetMinEnergy(19*GeV); 299 theTheoModel->SetMaxEnergy(G4HadronicParamet << 337 theTheoModel->SetMaxEnergy(100*TeV); 300 338 301 G4VLongitudinalStringDecay* theFragmentation 339 G4VLongitudinalStringDecay* theFragmentation = new G4QGSMFragmentation; 302 G4ExcitedStringDecay* theStringDecay = new G << 340 G4ExcitedStringDecay* theStringDecay = >> 341 new G4ExcitedStringDecay(theFragmentation); 303 theStringModel->SetFragmentationModel(theStr 342 theStringModel->SetFragmentationModel(theStringDecay); 304 343 305 // high energy model for anti-baryons 344 // high energy model for anti-baryons 306 antiBHighEnergyModel = new G4TheoFSGenerator 345 antiBHighEnergyModel = new G4TheoFSGenerator("ANTI-FTFP"); 307 G4FTFModel* antiBStringModel = new G4FTFMode 346 G4FTFModel* antiBStringModel = new G4FTFModel; 308 G4ExcitedStringDecay* stringDecay = new G4Ex << 347 G4ExcitedStringDecay* stringDecay = >> 348 new G4ExcitedStringDecay(new G4LundStringFragmentation); 309 antiBStringModel->SetFragmentationModel(stri 349 antiBStringModel->SetFragmentationModel(stringDecay); 310 350 311 G4GeneratorPrecompoundInterface* antiBCascad << 351 G4GeneratorPrecompoundInterface* antiBCascade = 312 G4PreCompoundModel* preEquilib = new G4PreCo << 352 new G4GeneratorPrecompoundInterface; >> 353 G4PreCompoundModel* preEquilib = >> 354 new G4PreCompoundModel(new G4ExcitationHandler); 313 antiBCascade->SetDeExcitation(preEquilib); 355 antiBCascade->SetDeExcitation(preEquilib); 314 356 315 antiBHighEnergyModel->SetTransport(antiBCasc 357 antiBHighEnergyModel->SetTransport(antiBCascade); 316 antiBHighEnergyModel->SetHighEnergyGenerator 358 antiBHighEnergyModel->SetHighEnergyGenerator(antiBStringModel); 317 antiBHighEnergyModel->SetMinEnergy(0.0); 359 antiBHighEnergyModel->SetMinEnergy(0.0); 318 antiBHighEnergyModel->SetMaxEnergy(20 * TeV) << 360 antiBHighEnergyModel->SetMaxEnergy(20*TeV); 319 361 320 // Light ion models 362 // Light ion models 321 G4BinaryLightIonReaction* binaryCascade = ne 363 G4BinaryLightIonReaction* binaryCascade = new G4BinaryLightIonReaction; 322 binaryCascade->SetMinEnergy(0.0); 364 binaryCascade->SetMinEnergy(0.0); 323 binaryCascade->SetMaxEnergy(110 * MeV); << 365 binaryCascade->SetMaxEnergy(110*MeV); 324 366 325 G4QMDReaction* qmd = new G4QMDReaction; 367 G4QMDReaction* qmd = new G4QMDReaction; 326 qmd->SetMinEnergy(100 * MeV); << 368 qmd->SetMinEnergy(100*MeV); 327 qmd->SetMaxEnergy(10 * GeV); << 369 qmd->SetMaxEnergy(10*GeV); 328 << 329 G4VCrossSectionDataSet* ionXS = new G4CrossS << 330 370 331 G4ComponentGGHadronNucleusXsc* ggHNXsec = ne << 371 G4IonsShenCrossSection* shenXS = new G4IonsShenCrossSection; 332 G4VCrossSectionDataSet* theGGHNEl = new G4Cr << 372 G4TripathiCrossSection* tripXS = new G4TripathiCrossSection; 333 G4VCrossSectionDataSet* theGGHNInel = new G4 << 373 G4TripathiLightCrossSection* tripLightXS = new G4TripathiLightCrossSection; 334 374 335 // Elastic process 375 // Elastic process 336 G4HadronElasticProcess* theElasticProcess = 376 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess; 337 theElasticProcess->AddDataSet(theGGHNEl); << 338 G4HadronElastic* theElasticModel = new G4Had 377 G4HadronElastic* theElasticModel = new G4HadronElastic; 339 theElasticProcess->RegisterMe(theElasticMode 378 theElasticProcess->RegisterMe(theElasticModel); 340 379 341 auto particleIterator = GetParticleIterator( << 380 theParticleIterator->reset(); 342 particleIterator->reset(); << 381 while ((*theParticleIterator)()) { 343 while ((*particleIterator)()) { << 382 G4ParticleDefinition* particle = theParticleIterator->value(); 344 G4ParticleDefinition* particle = particleI << 345 G4ProcessManager* pmanager = particle->Get 383 G4ProcessManager* pmanager = particle->GetProcessManager(); 346 G4String particleName = particle->GetParti 384 G4String particleName = particle->GetParticleName(); 347 << 385 348 if (particleName == "pi+") { 386 if (particleName == "pi+") { 349 pmanager->AddDiscreteProcess(theElasticP << 387 pmanager->AddDiscreteProcess(theElasticProcess); 350 G4HadronInelasticProcess* theInelasticPr << 388 G4PionPlusInelasticProcess* theInelasticProcess = 351 new G4HadronInelasticProcess("inelasti << 389 new G4PionPlusInelasticProcess("inelastic"); 352 theInelasticProcess->AddDataSet(theGGHNI << 390 theInelasticProcess->RegisterMe(bertini); 353 theInelasticProcess->RegisterMe(bertini) << 391 theInelasticProcess->RegisterMe(theTheoModel); 354 theInelasticProcess->RegisterMe(theTheoM << 392 pmanager->AddDiscreteProcess(theInelasticProcess); 355 pmanager->AddDiscreteProcess(theInelasti << 393 } else if (particleName == "pi-") { 356 } << 394 pmanager->AddDiscreteProcess(theElasticProcess); 357 else if (particleName == "pi-") { << 395 G4PionMinusInelasticProcess* theInelasticProcess = 358 pmanager->AddDiscreteProcess(theElasticP << 396 new G4PionMinusInelasticProcess("inelastic"); 359 G4HadronInelasticProcess* theInelasticPr << 397 theInelasticProcess->RegisterMe(bertini); 360 new G4HadronInelasticProcess("inelasti << 398 theInelasticProcess->RegisterMe(theTheoModel); 361 theInelasticProcess->AddDataSet(theGGHNI << 399 pmanager->AddDiscreteProcess(theInelasticProcess); 362 theInelasticProcess->RegisterMe(bertini) << 400 } else if (particleName == "kaon+") { 363 theInelasticProcess->RegisterMe(theTheoM << 401 pmanager->AddDiscreteProcess(theElasticProcess); 364 pmanager->AddDiscreteProcess(theInelasti << 402 G4KaonPlusInelasticProcess* theInelasticProcess = 365 } << 403 new G4KaonPlusInelasticProcess("inelastic"); 366 else if (particleName == "kaon+") { << 404 theInelasticProcess->RegisterMe(bertini); 367 pmanager->AddDiscreteProcess(theElasticP << 405 theInelasticProcess->RegisterMe(theTheoModel); 368 G4HadronInelasticProcess* theInelasticPr << 406 pmanager->AddDiscreteProcess(theInelasticProcess); 369 new G4HadronInelasticProcess("inelasti << 407 } 370 theInelasticProcess->AddDataSet(theGGHNI << 408 else if (particleName == "kaon0S") { 371 theInelasticProcess->RegisterMe(bertini) << 409 pmanager->AddDiscreteProcess(theElasticProcess); 372 theInelasticProcess->RegisterMe(theTheoM << 410 G4KaonZeroSInelasticProcess* theInelasticProcess = 373 pmanager->AddDiscreteProcess(theInelasti << 411 new G4KaonZeroSInelasticProcess("inelastic"); 374 } << 412 theInelasticProcess->RegisterMe(bertini); 375 else if (particleName == "kaon0S") { << 413 theInelasticProcess->RegisterMe(theTheoModel); 376 pmanager->AddDiscreteProcess(theElasticP << 414 pmanager->AddDiscreteProcess(theInelasticProcess); 377 G4HadronInelasticProcess* theInelasticPr << 415 } 378 new G4HadronInelasticProcess("inelasti << 416 else if (particleName == "kaon0L") { 379 theInelasticProcess->AddDataSet(theGGHNI << 417 pmanager->AddDiscreteProcess(theElasticProcess); 380 theInelasticProcess->RegisterMe(bertini) << 418 G4KaonZeroLInelasticProcess* theInelasticProcess = 381 theInelasticProcess->RegisterMe(theTheoM << 419 new G4KaonZeroLInelasticProcess("inelastic"); 382 pmanager->AddDiscreteProcess(theInelasti << 420 theInelasticProcess->RegisterMe(bertini); 383 } << 421 theInelasticProcess->RegisterMe(theTheoModel); 384 else if (particleName == "kaon0L") { << 422 pmanager->AddDiscreteProcess(theInelasticProcess); 385 pmanager->AddDiscreteProcess(theElasticP << 423 } 386 G4HadronInelasticProcess* theInelasticPr << 424 else if (particleName == "kaon-") { 387 new G4HadronInelasticProcess("inelasti << 425 pmanager->AddDiscreteProcess(theElasticProcess); 388 theInelasticProcess->AddDataSet(theGGHNI << 426 G4KaonMinusInelasticProcess* theInelasticProcess = 389 theInelasticProcess->RegisterMe(bertini) << 427 new G4KaonMinusInelasticProcess("inelastic"); 390 theInelasticProcess->RegisterMe(theTheoM << 428 theInelasticProcess->RegisterMe(bertini); 391 pmanager->AddDiscreteProcess(theInelasti << 429 theInelasticProcess->RegisterMe(theTheoModel); 392 } << 430 pmanager->AddDiscreteProcess(theInelasticProcess); 393 else if (particleName == "kaon-") { << 431 } 394 pmanager->AddDiscreteProcess(theElasticP << 432 else if (particleName == "proton") { 395 G4HadronInelasticProcess* theInelasticPr << 433 pmanager->AddDiscreteProcess(theElasticProcess); 396 new G4HadronInelasticProcess("inelasti << 434 G4ProtonInelasticProcess* theInelasticProcess = 397 theInelasticProcess->AddDataSet(theGGHNI << 435 new G4ProtonInelasticProcess("inelastic"); 398 theInelasticProcess->RegisterMe(bertini) << 436 theInelasticProcess->RegisterMe(bertini); 399 theInelasticProcess->RegisterMe(theTheoM << 437 theInelasticProcess->RegisterMe(theTheoModel); 400 pmanager->AddDiscreteProcess(theInelasti << 438 pmanager->AddDiscreteProcess(theInelasticProcess); 401 } << 439 } 402 else if (particleName == "proton") { << 440 else if (particleName == "anti_proton") { 403 pmanager->AddDiscreteProcess(theElasticP << 441 pmanager->AddDiscreteProcess(theElasticProcess); 404 G4HadronInelasticProcess* theInelasticPr << 442 G4AntiProtonInelasticProcess* theInelasticProcess = 405 new G4HadronInelasticProcess("inelasti << 443 new G4AntiProtonInelasticProcess("inelastic"); 406 theInelasticProcess->AddDataSet(theGGHNI << 444 theInelasticProcess->RegisterMe(antiBHighEnergyModel); 407 theInelasticProcess->RegisterMe(bertini) << 445 pmanager->AddDiscreteProcess(theInelasticProcess); 408 theInelasticProcess->RegisterMe(theTheoM << 446 409 pmanager->AddDiscreteProcess(theInelasti << 447 } else if (particleName == "neutron") { 410 } << 411 else if (particleName == "anti_proton") { << 412 pmanager->AddDiscreteProcess(theElasticP << 413 G4HadronInelasticProcess* theInelasticPr << 414 new G4HadronInelasticProcess("inelasti << 415 theInelasticProcess->AddDataSet(theGGHNI << 416 theInelasticProcess->RegisterMe(antiBHig << 417 pmanager->AddDiscreteProcess(theInelasti << 418 } << 419 else if (particleName == "neutron") { << 420 // elastic scattering 448 // elastic scattering 421 pmanager->AddDiscreteProcess(theElasticP 449 pmanager->AddDiscreteProcess(theElasticProcess); 422 450 423 // inelastic scattering 451 // inelastic scattering 424 G4HadronInelasticProcess* theInelasticPr << 452 G4NeutronInelasticProcess* theInelasticProcess = 425 new G4HadronInelasticProcess("inelasti << 453 new G4NeutronInelasticProcess("inelastic"); 426 theInelasticProcess->AddDataSet(new G4Ne << 427 theInelasticProcess->RegisterMe(bertini) 454 theInelasticProcess->RegisterMe(bertini); 428 theInelasticProcess->RegisterMe(theTheoM 455 theInelasticProcess->RegisterMe(theTheoModel); 429 pmanager->AddDiscreteProcess(theInelasti 456 pmanager->AddDiscreteProcess(theInelasticProcess); 430 457 431 // fission 458 // fission 432 G4NeutronFissionProcess* theFissionProce << 459 G4HadronFissionProcess* theFissionProcess = new G4HadronFissionProcess; 433 G4LFission* theFissionModel = new G4LFis 460 G4LFission* theFissionModel = new G4LFission; 434 theFissionProcess->RegisterMe(theFission 461 theFissionProcess->RegisterMe(theFissionModel); 435 pmanager->AddDiscreteProcess(theFissionP 462 pmanager->AddDiscreteProcess(theFissionProcess); 436 463 437 // capture 464 // capture 438 G4NeutronCaptureProcess* theCaptureProce << 465 G4HadronCaptureProcess* theCaptureProcess = new G4HadronCaptureProcess; 439 G4NeutronRadCapture* theCaptureModel = n 466 G4NeutronRadCapture* theCaptureModel = new G4NeutronRadCapture; 440 theCaptureProcess->RegisterMe(theCapture 467 theCaptureProcess->RegisterMe(theCaptureModel); 441 pmanager->AddDiscreteProcess(theCaptureP 468 pmanager->AddDiscreteProcess(theCaptureProcess); 442 } << 469 443 else if (particleName == "anti_neutron") { << 470 } else if (particleName == "anti_neutron") { 444 pmanager->AddDiscreteProcess(theElasticP << 471 pmanager->AddDiscreteProcess(theElasticProcess); 445 G4HadronInelasticProcess* theInelasticPr << 472 G4AntiNeutronInelasticProcess* theInelasticProcess = 446 new G4HadronInelasticProcess("inelasti << 473 new G4AntiNeutronInelasticProcess("inelastic"); 447 theInelasticProcess->AddDataSet(theGGHNI << 474 theInelasticProcess->RegisterMe(antiBHighEnergyModel); 448 theInelasticProcess->RegisterMe(antiBHig << 475 pmanager->AddDiscreteProcess(theInelasticProcess); 449 pmanager->AddDiscreteProcess(theInelasti << 476 450 } << 477 } else if (particleName == "lambda") { 451 else if (particleName == "lambda") { << 478 pmanager->AddDiscreteProcess(theElasticProcess); 452 pmanager->AddDiscreteProcess(theElasticP << 479 G4LambdaInelasticProcess* theInelasticProcess = 453 G4HadronInelasticProcess* theInelasticPr << 480 new G4LambdaInelasticProcess("inelastic"); 454 new G4HadronInelasticProcess("inelasti << 481 theInelasticProcess->RegisterMe(bertini); 455 theInelasticProcess->AddDataSet(theGGHNI << 482 theInelasticProcess->RegisterMe(theTheoModel); 456 theInelasticProcess->RegisterMe(bertini) << 483 pmanager->AddDiscreteProcess(theInelasticProcess); 457 theInelasticProcess->RegisterMe(theTheoM << 484 } 458 pmanager->AddDiscreteProcess(theInelasti << 485 else if (particleName == "anti_lambda") { 459 } << 486 pmanager->AddDiscreteProcess(theElasticProcess); 460 else if (particleName == "anti_lambda") { << 487 G4AntiLambdaInelasticProcess* theInelasticProcess = 461 pmanager->AddDiscreteProcess(theElasticP << 488 new G4AntiLambdaInelasticProcess("inelastic"); 462 G4HadronInelasticProcess* theInelasticPr << 489 theInelasticProcess->RegisterMe(antiBHighEnergyModel); 463 new G4HadronInelasticProcess("inelasti << 490 pmanager->AddDiscreteProcess(theInelasticProcess); 464 theInelasticProcess->AddDataSet(theGGHNI << 491 } 465 theInelasticProcess->RegisterMe(antiBHig << 492 else if (particleName == "sigma+") { 466 pmanager->AddDiscreteProcess(theInelasti << 493 pmanager->AddDiscreteProcess(theElasticProcess); 467 } << 494 G4SigmaPlusInelasticProcess* theInelasticProcess = 468 else if (particleName == "sigma+") { << 495 new G4SigmaPlusInelasticProcess("inelastic"); 469 pmanager->AddDiscreteProcess(theElasticP << 496 theInelasticProcess->RegisterMe(bertini); 470 G4HadronInelasticProcess* theInelasticPr << 497 theInelasticProcess->RegisterMe(theTheoModel); 471 new G4HadronInelasticProcess("inelasti << 498 pmanager->AddDiscreteProcess(theInelasticProcess); 472 theInelasticProcess->AddDataSet(theGGHNI << 499 } 473 theInelasticProcess->RegisterMe(bertini) << 500 else if (particleName == "sigma-") { 474 theInelasticProcess->RegisterMe(theTheoM << 501 pmanager->AddDiscreteProcess(theElasticProcess); 475 pmanager->AddDiscreteProcess(theInelasti << 502 G4SigmaMinusInelasticProcess* theInelasticProcess = 476 } << 503 new G4SigmaMinusInelasticProcess("inelastic"); 477 else if (particleName == "sigma-") { << 504 theInelasticProcess->RegisterMe(bertini); 478 pmanager->AddDiscreteProcess(theElasticP << 505 theInelasticProcess->RegisterMe(theTheoModel); 479 G4HadronInelasticProcess* theInelasticPr << 506 pmanager->AddDiscreteProcess(theInelasticProcess); 480 new G4HadronInelasticProcess("inelasti << 507 } 481 theInelasticProcess->AddDataSet(theGGHNI << 508 else if (particleName == "anti_sigma+") { 482 theInelasticProcess->RegisterMe(bertini) << 509 pmanager->AddDiscreteProcess(theElasticProcess); 483 theInelasticProcess->RegisterMe(theTheoM << 510 G4AntiSigmaPlusInelasticProcess* theInelasticProcess = 484 pmanager->AddDiscreteProcess(theInelasti << 511 new G4AntiSigmaPlusInelasticProcess("inelastic"); 485 } << 512 theInelasticProcess->RegisterMe(antiBHighEnergyModel); 486 else if (particleName == "anti_sigma+") { << 513 pmanager->AddDiscreteProcess(theInelasticProcess); 487 pmanager->AddDiscreteProcess(theElasticP << 514 } 488 G4HadronInelasticProcess* theInelasticPr << 515 else if (particleName == "anti_sigma-") { 489 new G4HadronInelasticProcess("inelasti << 516 pmanager->AddDiscreteProcess(theElasticProcess); 490 theInelasticProcess->AddDataSet(theGGHNI << 517 G4AntiSigmaMinusInelasticProcess* theInelasticProcess = 491 theInelasticProcess->RegisterMe(antiBHig << 518 new G4AntiSigmaMinusInelasticProcess("inelastic"); 492 pmanager->AddDiscreteProcess(theInelasti << 519 theInelasticProcess->RegisterMe(antiBHighEnergyModel); 493 } << 520 pmanager->AddDiscreteProcess(theInelasticProcess); 494 else if (particleName == "anti_sigma-") { << 521 } 495 pmanager->AddDiscreteProcess(theElasticP << 522 else if (particleName == "xi0") { 496 G4HadronInelasticProcess* theInelasticPr << 523 pmanager->AddDiscreteProcess(theElasticProcess); 497 new G4HadronInelasticProcess("inelasti << 524 G4XiZeroInelasticProcess* theInelasticProcess = 498 theInelasticProcess->AddDataSet(theGGHNI << 525 new G4XiZeroInelasticProcess("inelastic"); 499 theInelasticProcess->RegisterMe(antiBHig << 526 theInelasticProcess->RegisterMe(bertini); 500 pmanager->AddDiscreteProcess(theInelasti << 527 theInelasticProcess->RegisterMe(theTheoModel); 501 } << 528 pmanager->AddDiscreteProcess(theInelasticProcess); 502 else if (particleName == "xi0") { << 529 } 503 pmanager->AddDiscreteProcess(theElasticP << 530 else if (particleName == "xi-") { 504 G4HadronInelasticProcess* theInelasticPr << 531 pmanager->AddDiscreteProcess(theElasticProcess); 505 new G4HadronInelasticProcess("inelasti << 532 G4XiMinusInelasticProcess* theInelasticProcess = 506 theInelasticProcess->AddDataSet(theGGHNI << 533 new G4XiMinusInelasticProcess("inelastic"); 507 theInelasticProcess->RegisterMe(bertini) << 534 theInelasticProcess->RegisterMe(bertini); 508 theInelasticProcess->RegisterMe(theTheoM << 535 theInelasticProcess->RegisterMe(theTheoModel); 509 pmanager->AddDiscreteProcess(theInelasti << 536 pmanager->AddDiscreteProcess(theInelasticProcess); 510 } << 537 } 511 else if (particleName == "xi-") { << 538 else if (particleName == "anti_xi0") { 512 pmanager->AddDiscreteProcess(theElasticP << 539 pmanager->AddDiscreteProcess(theElasticProcess); 513 G4HadronInelasticProcess* theInelasticPr << 540 G4AntiXiZeroInelasticProcess* theInelasticProcess = 514 new G4HadronInelasticProcess("inelasti << 541 new G4AntiXiZeroInelasticProcess("inelastic"); 515 theInelasticProcess->AddDataSet(theGGHNI << 542 theInelasticProcess->RegisterMe(antiBHighEnergyModel); 516 theInelasticProcess->RegisterMe(bertini) << 543 pmanager->AddDiscreteProcess(theInelasticProcess); 517 theInelasticProcess->RegisterMe(theTheoM << 544 } 518 pmanager->AddDiscreteProcess(theInelasti << 545 else if (particleName == "anti_xi-") { 519 } << 546 pmanager->AddDiscreteProcess(theElasticProcess); 520 else if (particleName == "anti_xi0") { << 547 G4AntiXiMinusInelasticProcess* theInelasticProcess = 521 pmanager->AddDiscreteProcess(theElasticP << 548 new G4AntiXiMinusInelasticProcess("inelastic"); 522 G4HadronInelasticProcess* theInelasticPr << 549 theInelasticProcess->RegisterMe(antiBHighEnergyModel); 523 new G4HadronInelasticProcess("inelasti << 550 pmanager->AddDiscreteProcess(theInelasticProcess); 524 theInelasticProcess->AddDataSet(theGGHNI << 551 } 525 theInelasticProcess->RegisterMe(antiBHig << 552 else if (particleName == "deuteron") { 526 pmanager->AddDiscreteProcess(theInelasti << 553 pmanager->AddDiscreteProcess(theElasticProcess); 527 } << 554 G4DeuteronInelasticProcess* theInelasticProcess = 528 else if (particleName == "anti_xi-") { << 555 new G4DeuteronInelasticProcess("inelastic"); 529 pmanager->AddDiscreteProcess(theElasticP << 556 theInelasticProcess->RegisterMe(binaryCascade); 530 G4HadronInelasticProcess* theInelasticPr << 557 theInelasticProcess->RegisterMe(qmd); 531 new G4HadronInelasticProcess("inelasti << 558 theInelasticProcess->AddDataSet(shenXS); 532 theInelasticProcess->AddDataSet(theGGHNI << 559 theInelasticProcess->AddDataSet(tripXS); 533 theInelasticProcess->RegisterMe(antiBHig << 560 theInelasticProcess->AddDataSet(tripLightXS); 534 pmanager->AddDiscreteProcess(theInelasti << 561 pmanager->AddDiscreteProcess(theInelasticProcess); 535 } << 562 } 536 else if (particleName == "deuteron") { << 563 else if (particleName == "triton") { 537 pmanager->AddDiscreteProcess(theElasticP << 564 pmanager->AddDiscreteProcess(theElasticProcess); 538 G4HadronInelasticProcess* theInelasticPr << 565 G4TritonInelasticProcess* theInelasticProcess = 539 new G4HadronInelasticProcess("inelasti << 566 new G4TritonInelasticProcess("inelastic"); 540 theInelasticProcess->RegisterMe(binaryCa << 567 theInelasticProcess->RegisterMe(binaryCascade); 541 theInelasticProcess->RegisterMe(qmd); << 568 theInelasticProcess->RegisterMe(qmd); 542 theInelasticProcess->AddDataSet(ionXS); << 569 theInelasticProcess->AddDataSet(shenXS); 543 pmanager->AddDiscreteProcess(theInelasti << 570 theInelasticProcess->AddDataSet(tripXS); 544 } << 571 theInelasticProcess->AddDataSet(tripLightXS); 545 else if (particleName == "triton") { << 572 pmanager->AddDiscreteProcess(theInelasticProcess); 546 pmanager->AddDiscreteProcess(theElasticP << 573 } 547 G4HadronInelasticProcess* theInelasticPr << 574 else if (particleName == "alpha") { 548 new G4HadronInelasticProcess("inelasti << 575 pmanager->AddDiscreteProcess(theElasticProcess); 549 theInelasticProcess->RegisterMe(binaryCa << 576 G4AlphaInelasticProcess* theInelasticProcess = 550 theInelasticProcess->RegisterMe(qmd); << 577 new G4AlphaInelasticProcess("inelastic"); 551 theInelasticProcess->AddDataSet(ionXS); << 578 theInelasticProcess->RegisterMe(binaryCascade); 552 pmanager->AddDiscreteProcess(theInelasti << 579 theInelasticProcess->RegisterMe(qmd); 553 } << 580 theInelasticProcess->AddDataSet(shenXS); 554 else if (particleName == "alpha") { << 581 theInelasticProcess->AddDataSet(tripXS); 555 pmanager->AddDiscreteProcess(theElasticP << 582 theInelasticProcess->AddDataSet(tripLightXS); 556 G4HadronInelasticProcess* theInelasticPr << 583 pmanager->AddDiscreteProcess(theInelasticProcess); 557 new G4HadronInelasticProcess("inelasti << 584 558 theInelasticProcess->RegisterMe(binaryCa << 585 } else if (particleName == "omega-") { 559 theInelasticProcess->RegisterMe(qmd); << 560 theInelasticProcess->AddDataSet(ionXS); << 561 pmanager->AddDiscreteProcess(theInelasti << 562 } << 563 else if (particleName == "omega-") { << 564 pmanager->AddDiscreteProcess(theElasticP 586 pmanager->AddDiscreteProcess(theElasticProcess); 565 G4HadronInelasticProcess* theInelasticPr << 587 G4OmegaMinusInelasticProcess* theInelasticProcess = 566 new G4HadronInelasticProcess("inelasti << 588 new G4OmegaMinusInelasticProcess("inelastic"); 567 theInelasticProcess->AddDataSet(theGGHNI << 568 theInelasticProcess->RegisterMe(bertini) 589 theInelasticProcess->RegisterMe(bertini); 569 theInelasticProcess->RegisterMe(theTheoM 590 theInelasticProcess->RegisterMe(theTheoModel); 570 pmanager->AddDiscreteProcess(theInelasti 591 pmanager->AddDiscreteProcess(theInelasticProcess); 571 } << 592 572 else if (particleName == "anti_omega-") { << 593 } else if (particleName == "anti_omega-") { 573 pmanager->AddDiscreteProcess(theElasticP 594 pmanager->AddDiscreteProcess(theElasticProcess); 574 G4HadronInelasticProcess* theInelasticPr << 595 G4AntiOmegaMinusInelasticProcess* theInelasticProcess = 575 new G4HadronInelasticProcess("inelasti << 596 new G4AntiOmegaMinusInelasticProcess("inelastic"); 576 theInelasticProcess->AddDataSet(theGGHNI << 577 theInelasticProcess->RegisterMe(antiBHig 597 theInelasticProcess->RegisterMe(antiBHighEnergyModel); 578 pmanager->AddDiscreteProcess(theInelasti 598 pmanager->AddDiscreteProcess(theInelasticProcess); 579 } 599 } 580 } 600 } 581 } 601 } 582 602 583 //....oooOO0OOooo........oooOO0OOooo........oo 603 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 584 604 585 void B03PhysicsList::ConstructLeptHad() 605 void B03PhysicsList::ConstructLeptHad() 586 { << 606 {;} 587 ; << 588 } << 589 607 590 //....oooOO0OOooo........oooOO0OOooo........oo 608 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 591 609 592 #include "G4Decay.hh" 610 #include "G4Decay.hh" 593 void B03PhysicsList::ConstructGeneral() 611 void B03PhysicsList::ConstructGeneral() 594 { 612 { 595 G4Decay* theDecayProcess = new G4Decay(); 613 G4Decay* theDecayProcess = new G4Decay(); 596 auto particleIterator = GetParticleIterator( << 614 theParticleIterator->reset(); 597 particleIterator->reset(); << 615 while( (*theParticleIterator)() ){ 598 while ((*particleIterator)()) { << 616 G4ParticleDefinition* particle = theParticleIterator->value(); 599 G4ParticleDefinition* particle = particleI << 600 G4ProcessManager* pmanager = particle->Get 617 G4ProcessManager* pmanager = particle->GetProcessManager(); 601 if (theDecayProcess->IsApplicable(*particl << 618 if (theDecayProcess->IsApplicable(*particle)) { 602 pmanager->AddProcess(theDecayProcess); << 619 pmanager ->AddProcess(theDecayProcess); 603 pmanager->SetProcessOrdering(theDecayPro << 620 pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep); 604 pmanager->SetProcessOrdering(theDecayPro << 621 pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest); 605 } 622 } 606 } 623 } 607 } 624 } 608 625 609 //....oooOO0OOooo........oooOO0OOooo........oo 626 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 610 627 611 void B03PhysicsList::SetCuts() 628 void B03PhysicsList::SetCuts() 612 { 629 { 613 if (verboseLevel > 0) { << 630 if (verboseLevel >0) >> 631 { 614 G4cout << "B03PhysicsList::SetCuts:"; 632 G4cout << "B03PhysicsList::SetCuts:"; 615 G4cout << "CutLength : " << defaultCutValu << 633 G4cout << "CutLength : " << defaultCutValue/mm << " (mm)" << G4endl; 616 } << 634 } 617 // "G4VUserPhysicsList::SetCutsWithDefault << 635 // "G4VUserPhysicsList::SetCutsWithDefault" method sets 618 // the default cut value for all particle << 636 // the default cut value for all particle types 619 SetCutsWithDefault(); << 637 SetCutsWithDefault(); 620 } 638 } 621 639 622 //....oooOO0OOooo........oooOO0OOooo........oo 640 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 623 641 624 #include "G4ParallelWorldProcess.hh" << 642 #include "G4ParallelWorldScoringProcess.hh" 625 void B03PhysicsList::AddScoringProcess() << 643 void B03PhysicsList::AddScoringProcess(){ 626 { << 644 627 G4int npw = fParaWorldName.size(); 645 G4int npw = fParaWorldName.size(); 628 for (G4int i = 0; i < npw; i++) { << 646 for ( G4int i = 0; i < npw; i++){ 629 G4String procName = "ParaWorldProc_" + fPa << 647 G4ParallelWorldScoringProcess* theParallelWorldScoringProcess 630 G4ParallelWorldProcess* theParallelWorldPr << 648 = new G4ParallelWorldScoringProcess("ParaWorldScoringProc"); 631 theParallelWorldProcess->SetParallelWorld( << 649 theParallelWorldScoringProcess->SetParallelWorld(fParaWorldName[i]); 632 << 650 633 auto particleIterator = GetParticleIterato << 651 theParticleIterator->reset(); 634 particleIterator->reset(); << 652 while( (*theParticleIterator)() ){ 635 while ((*particleIterator)()) { << 653 G4ParticleDefinition* particle = theParticleIterator->value(); 636 G4ParticleDefinition* particle = particl << 654 if ( !particle->IsShortLived() ){ 637 G4ProcessManager* pmanager = particle->G << 655 G4ProcessManager* pmanager = particle->GetProcessManager(); 638 pmanager->AddProcess(theParallelWorldPro << 656 pmanager->AddProcess(theParallelWorldScoringProcess); 639 if (theParallelWorldProcess->IsAtRestReq << 657 pmanager->SetProcessOrderingToLast(theParallelWorldScoringProcess 640 pmanager->SetProcessOrdering(theParall << 658 ,idxAtRest); >> 659 pmanager->SetProcessOrdering(theParallelWorldScoringProcess >> 660 ,idxAlongStep,1); >> 661 pmanager->SetProcessOrderingToLast(theParallelWorldScoringProcess >> 662 ,idxPostStep); 641 } 663 } 642 pmanager->SetProcessOrderingToSecond(the << 643 pmanager->SetProcessOrdering(theParallel << 644 } 664 } 645 } 665 } >> 666 646 } 667 } 647 668 648 //....oooOO0OOooo........oooOO0OOooo........oo 669 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 649 670 650 #include "G4IStore.hh" << 651 #include "G4ImportanceProcess.hh" 671 #include "G4ImportanceProcess.hh" 652 void B03PhysicsList::AddBiasingProcess() << 672 #include "G4IStore.hh" 653 { << 673 void B03PhysicsList::AddBiasingProcess(){ 654 G4cout << " Preparing Importance Sampling wi << 655 674 >> 675 >> 676 G4cout << " Preparing Importance Sampling with GhostWorld " >> 677 << fBiasWorldName << G4endl; >> 678 fGeomSampler->SetParallel(true); // parallelworld 656 G4IStore* iStore = G4IStore::GetInstance(fBi 679 G4IStore* iStore = G4IStore::GetInstance(fBiasWorldName); 657 G4GeometrySampler fGeomSampler(fBiasWorldNam << 680 fGeomSampler->SetWorld(iStore->GetParallelWorldVolumePointer()); 658 fGeomSampler.SetParallel(true); // parallel << 659 // fGeomSampler.SetWorld(iStore->GetParallel << 660 // fGeomSampler->PrepareImportanceSampling( 681 // fGeomSampler->PrepareImportanceSampling(G4IStore:: 661 // GetInstance( 682 // GetInstance(fBiasWorldName), 0); 662 static G4bool first = true; 683 static G4bool first = true; 663 if (first) { << 684 if(first) { 664 fGeomSampler.PrepareImportanceSampling(iSt << 685 fGeomSampler->PrepareImportanceSampling(iStore, 0); 665 686 666 fGeomSampler.Configure(); << 687 fGeomSampler->Configure(); 667 G4cout << " GeomSampler Configured!!! " << 688 G4cout << " GeomSampler Configured!!! " << G4endl; 668 first = false; 689 first = false; 669 } 690 } 670 691 671 #ifdef G4MULTITHREADED << 692 #ifdef G4MULTITHREADED 672 if (!G4Threading::IsMasterThread()) fGeomSam << 693 fGeomSampler->AddProcess(); 673 #else 694 #else 674 G4cout << " Running in singlethreaded mode!! 695 G4cout << " Running in singlethreaded mode!!! " << G4endl; 675 #endif 696 #endif >> 697 676 } 698 } 677 699 678 //....oooOO0OOooo........oooOO0OOooo........oo 700 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 679 701