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 // 26 // 27 // ------------------------------------------- 27 // -------------------------------------------------------------- 28 // GEANT 4 - Underground Dark Matter Detecto 28 // GEANT 4 - Underground Dark Matter Detector Advanced Example 29 // 29 // 30 // For information related to this code c 30 // For information related to this code contact: Alex Howard 31 // e-mail: alexander.howard@cern.ch 31 // e-mail: alexander.howard@cern.ch 32 // ------------------------------------------- 32 // -------------------------------------------------------------- 33 // Comments 33 // Comments 34 // 34 // 35 // Underground Advanced 35 // Underground Advanced 36 // by A. Howard and H. Araujo 36 // by A. Howard and H. Araujo 37 // (27th November 2001) 37 // (27th November 2001) 38 // 38 // 39 // PhysicsList program 39 // PhysicsList program 40 // 40 // 41 // Modified: 41 // Modified: 42 // 42 // 43 // 14-02-03 Fix bugs in msc and hIon instancia 43 // 14-02-03 Fix bugs in msc and hIon instanciation + cut per region 44 // 44 // 45 // 05-02-05 AH - changes to G4Decay - added is 45 // 05-02-05 AH - changes to G4Decay - added is not short lived protection 46 // and redefined particles to allow n 46 // and redefined particles to allow non-static creation 47 // i.e. changed construction to G4Mes 47 // i.e. changed construction to G4MesonConstructor, G4BaryonConstructor 48 // 48 // 49 // 23-10-09 LP - migrated EM physics from the 49 // 23-10-09 LP - migrated EM physics from the LowEnergy processes (not supported) to 50 // the new G4Livermore model implemen 50 // the new G4Livermore model implementation. Results unchanged. 51 // 51 // 52 // ------------------------------------------- 52 // -------------------------------------------------------------- 53 53 54 #include <iomanip> 54 #include <iomanip> 55 55 56 #include "DMXPhysicsList.hh" 56 #include "DMXPhysicsList.hh" 57 57 58 #include "globals.hh" 58 #include "globals.hh" 59 #include "G4SystemOfUnits.hh" 59 #include "G4SystemOfUnits.hh" 60 #include "G4ProcessManager.hh" 60 #include "G4ProcessManager.hh" 61 #include "G4ProcessVector.hh" 61 #include "G4ProcessVector.hh" 62 62 63 #include "G4ParticleDefinition.hh" 63 #include "G4ParticleDefinition.hh" 64 #include "G4ParticleWithCuts.hh" 64 #include "G4ParticleWithCuts.hh" 65 #include "G4ParticleTypes.hh" 65 #include "G4ParticleTypes.hh" 66 #include "G4ParticleTable.hh" 66 #include "G4ParticleTable.hh" 67 67 68 #include "G4ios.hh" 68 #include "G4ios.hh" 69 #include "G4UserLimits.hh" 69 #include "G4UserLimits.hh" 70 70 71 #include "G4MesonConstructor.hh" << 72 #include "G4BaryonConstructor.hh" << 73 #include "G4IonConstructor.hh" << 74 #include "G4ShortLivedConstructor.hh" << 75 << 76 #include "DMXMaxTimeCuts.hh" << 77 #include "DMXMinEkineCuts.hh" << 78 #include "G4StepLimiter.hh" << 79 << 80 // gamma << 81 #include "G4PhotoElectricEffect.hh" << 82 #include "G4LivermorePhotoElectricModel.hh" << 83 << 84 #include "G4ComptonScattering.hh" << 85 #include "G4LivermoreComptonModel.hh" << 86 << 87 #include "G4GammaConversion.hh" << 88 #include "G4BetheHeitler5DModel.hh" << 89 << 90 #include "G4RayleighScattering.hh" << 91 #include "G4LivermoreRayleighModel.hh" << 92 << 93 // e- << 94 #include "G4eMultipleScattering.hh" << 95 << 96 #include "G4eIonisation.hh" << 97 #include "G4LivermoreIonisationModel.hh" << 98 << 99 #include "G4eBremsstrahlung.hh" << 100 #include "G4UniversalFluctuation.hh" << 101 << 102 // e+ << 103 #include "G4eIonisation.hh" << 104 #include "G4eBremsstrahlung.hh" << 105 #include "G4eplusAnnihilation.hh" << 106 << 107 // alpha and GenericIon and deuterons, triton, << 108 //muon: << 109 #include "G4MuIonisation.hh" << 110 #include "G4MuBremsstrahlung.hh" << 111 #include "G4MuPairProduction.hh" << 112 #include "G4MuMultipleScattering.hh" << 113 #include "G4MuonMinusCapture.hh" << 114 << 115 //OTHERS: << 116 #include "G4hIonisation.hh" << 117 #include "G4hMultipleScattering.hh" << 118 #include "G4hBremsstrahlung.hh" << 119 #include "G4ionIonisation.hh" << 120 #include "G4IonParametrisedLossModel.hh" << 121 #include "G4NuclearStopping.hh" << 122 << 123 //em process options to allow msc step-limitat << 124 #include "G4EmParameters.hh" << 125 #include "G4VAtomDeexcitation.hh" << 126 #include "G4UAtomicDeexcitation.hh" << 127 #include "G4LossTableManager.hh" << 128 << 129 #include "G4Scintillation.hh" << 130 #include "G4OpAbsorption.hh" << 131 #include "G4OpBoundaryProcess.hh" << 132 #include "G4OpticalParameters.hh" << 133 << 134 // Elastic processes: << 135 #include "G4HadronElasticProcess.hh" << 136 #include "G4ChipsElasticModel.hh" << 137 #include "G4ElasticHadrNucleusHE.hh" << 138 << 139 // Inelastic processes: << 140 #include "G4HadronInelasticProcess.hh" << 141 << 142 // High energy FTFP model and Bertini cascade << 143 #include "G4FTFModel.hh" << 144 #include "G4LundStringFragmentation.hh" << 145 #include "G4ExcitedStringDecay.hh" << 146 #include "G4PreCompoundModel.hh" << 147 #include "G4GeneratorPrecompoundInterface.hh" << 148 #include "G4TheoFSGenerator.hh" << 149 #include "G4CascadeInterface.hh" << 150 << 151 // Cross sections << 152 #include "G4VCrossSectionDataSet.hh" << 153 #include "G4CrossSectionDataSetRegistry.hh" << 154 << 155 #include "G4CrossSectionElastic.hh" << 156 #include "G4CrossSectionInelastic.hh" << 157 #include "G4BGGPionElasticXS.hh" << 158 #include "G4BGGPionInelasticXS.hh" << 159 #include "G4AntiNuclElastic.hh" << 160 << 161 #include "G4CrossSectionInelastic.hh" << 162 #include "G4BGGNucleonInelasticXS.hh" << 163 #include "G4BGGNucleonElasticXS.hh" << 164 #include "G4NeutronInelasticXS.hh" << 165 #include "G4NeutronElasticXS.hh" << 166 #include "G4ComponentAntiNuclNuclearXS.hh" << 167 #include "G4ComponentGGNuclNuclXsc.hh" << 168 #include "G4ComponentGGHadronNucleusXsc.hh" << 169 << 170 #include "G4HadronElastic.hh" << 171 #include "G4NeutronCaptureProcess.hh" << 172 << 173 // Neutron high-precision models: <20 MeV << 174 #include "G4ParticleHPElastic.hh" << 175 #include "G4ParticleHPElasticData.hh" << 176 #include "G4ParticleHPCapture.hh" << 177 #include "G4ParticleHPCaptureData.hh" << 178 #include "G4ParticleHPInelastic.hh" << 179 #include "G4ParticleHPInelasticData.hh" << 180 << 181 // Stopping processes << 182 #include "G4HadronStoppingProcess.hh" << 183 #include "G4HadronicAbsorptionBertini.hh" << 184 #include "G4HadronicAbsorptionFritiof.hh" << 185 << 186 #include "G4HadronicParameters.hh" << 187 << 188 #include "G4Decay.hh" << 189 #include "G4RadioactiveDecay.hh" << 190 #include "G4PhysicsListHelper.hh" << 191 #include "G4NuclideTable.hh" << 192 #include "G4NuclearLevelData.hh" << 193 << 194 // Constructor /////////////////////////////// 71 // Constructor ///////////////////////////////////////////////////////////// 195 DMXPhysicsList::DMXPhysicsList() : G4VUserPhys 72 DMXPhysicsList::DMXPhysicsList() : G4VUserPhysicsList() 196 { 73 { 197 74 198 defaultCutValue = 1.0*micrometer; // 75 defaultCutValue = 1.0*micrometer; // 199 cutForGamma = defaultCutValue; 76 cutForGamma = defaultCutValue; 200 cutForElectron = 1.0*nanometer; 77 cutForElectron = 1.0*nanometer; 201 cutForPositron = defaultCutValue; 78 cutForPositron = defaultCutValue; 202 79 203 VerboseLevel = 1; 80 VerboseLevel = 1; 204 OpVerbLevel = 0; 81 OpVerbLevel = 0; 205 82 206 //set a finer grid of the physic tables in o << 207 //former LowEnergy models have 200 bins up t << 208 G4EmParameters* param = G4EmParameters::Inst << 209 param->SetMaxEnergy(100*GeV); << 210 param->SetNumberOfBinsPerDecade(20); << 211 param->SetMscStepLimitType(fMinimal); << 212 param->SetFluo(true); << 213 param->SetPixe(true); << 214 param->SetAuger(true); << 215 << 216 G4EmParameters::Instance()->AddPhysics("Worl << 217 G4DeexPrecoParameters* deex = G4NuclearLevel << 218 deex->SetStoreICLevelData(true); << 219 deex->SetMaxLifeTime(G4NuclideTable::GetInst << 220 /std::log(2.)); << 221 SetVerboseLevel(VerboseLevel); 83 SetVerboseLevel(VerboseLevel); 222 } 84 } 223 85 >> 86 224 // Destructor //////////////////////////////// 87 // Destructor ////////////////////////////////////////////////////////////// 225 DMXPhysicsList::~DMXPhysicsList() 88 DMXPhysicsList::~DMXPhysicsList() 226 {;} 89 {;} 227 90 >> 91 228 // Construct Particles /////////////////////// 92 // Construct Particles ///////////////////////////////////////////////////// 229 void DMXPhysicsList::ConstructParticle() 93 void DMXPhysicsList::ConstructParticle() 230 { 94 { >> 95 231 // In this method, static member functions s 96 // In this method, static member functions should be called 232 // for all particles which you want to use. 97 // for all particles which you want to use. 233 // This ensures that objects of these partic 98 // This ensures that objects of these particle types will be 234 // created in the program. 99 // created in the program. 235 100 236 ConstructMyBosons(); 101 ConstructMyBosons(); 237 ConstructMyLeptons(); 102 ConstructMyLeptons(); 238 ConstructMyHadrons(); 103 ConstructMyHadrons(); 239 ConstructMyShortLiveds(); 104 ConstructMyShortLiveds(); >> 105 240 } 106 } 241 107 >> 108 242 // construct Bosons:////////////////////////// 109 // construct Bosons:///////////////////////////////////////////////////// 243 void DMXPhysicsList::ConstructMyBosons() 110 void DMXPhysicsList::ConstructMyBosons() 244 { 111 { 245 // pseudo-particles 112 // pseudo-particles 246 G4Geantino::GeantinoDefinition(); 113 G4Geantino::GeantinoDefinition(); 247 G4ChargedGeantino::ChargedGeantinoDefinition 114 G4ChargedGeantino::ChargedGeantinoDefinition(); 248 115 249 // gamma 116 // gamma 250 G4Gamma::GammaDefinition(); 117 G4Gamma::GammaDefinition(); 251 118 252 //OpticalPhotons 119 //OpticalPhotons 253 G4OpticalPhoton::OpticalPhotonDefinition(); 120 G4OpticalPhoton::OpticalPhotonDefinition(); 254 121 255 } 122 } 256 123 >> 124 257 // construct Leptons:///////////////////////// 125 // construct Leptons:///////////////////////////////////////////////////// 258 void DMXPhysicsList::ConstructMyLeptons() 126 void DMXPhysicsList::ConstructMyLeptons() 259 { 127 { 260 // leptons 128 // leptons 261 G4Electron::ElectronDefinition(); 129 G4Electron::ElectronDefinition(); 262 G4Positron::PositronDefinition(); 130 G4Positron::PositronDefinition(); 263 G4MuonPlus::MuonPlusDefinition(); 131 G4MuonPlus::MuonPlusDefinition(); 264 G4MuonMinus::MuonMinusDefinition(); 132 G4MuonMinus::MuonMinusDefinition(); 265 133 266 G4NeutrinoE::NeutrinoEDefinition(); 134 G4NeutrinoE::NeutrinoEDefinition(); 267 G4AntiNeutrinoE::AntiNeutrinoEDefinition(); 135 G4AntiNeutrinoE::AntiNeutrinoEDefinition(); 268 G4NeutrinoMu::NeutrinoMuDefinition(); 136 G4NeutrinoMu::NeutrinoMuDefinition(); 269 G4AntiNeutrinoMu::AntiNeutrinoMuDefinition() 137 G4AntiNeutrinoMu::AntiNeutrinoMuDefinition(); 270 } 138 } 271 139 >> 140 >> 141 #include "G4MesonConstructor.hh" >> 142 #include "G4BaryonConstructor.hh" >> 143 #include "G4IonConstructor.hh" >> 144 272 // construct Hadrons:///////////////////////// 145 // construct Hadrons:///////////////////////////////////////////////////// 273 void DMXPhysicsList::ConstructMyHadrons() 146 void DMXPhysicsList::ConstructMyHadrons() 274 { 147 { 275 // mesons 148 // mesons 276 G4MesonConstructor mConstructor; 149 G4MesonConstructor mConstructor; 277 mConstructor.ConstructParticle(); 150 mConstructor.ConstructParticle(); 278 151 279 // baryons 152 // baryons 280 G4BaryonConstructor bConstructor; 153 G4BaryonConstructor bConstructor; 281 bConstructor.ConstructParticle(); 154 bConstructor.ConstructParticle(); 282 155 283 // ions 156 // ions 284 G4IonConstructor iConstructor; 157 G4IonConstructor iConstructor; 285 iConstructor.ConstructParticle(); 158 iConstructor.ConstructParticle(); >> 159 286 } 160 } 287 161 >> 162 #include "G4ShortLivedConstructor.hh" >> 163 288 // construct Shortliveds:///////////////////// 164 // construct Shortliveds:///////////////////////////////////////////////////// 289 void DMXPhysicsList::ConstructMyShortLiveds() 165 void DMXPhysicsList::ConstructMyShortLiveds() 290 { 166 { 291 G4ShortLivedConstructor slConstructor; 167 G4ShortLivedConstructor slConstructor; 292 slConstructor.ConstructParticle(); 168 slConstructor.ConstructParticle(); 293 } 169 } 294 170 >> 171 >> 172 >> 173 295 // Construct Processes /////////////////////// 174 // Construct Processes ////////////////////////////////////////////////////// 296 void DMXPhysicsList::ConstructProcess() 175 void DMXPhysicsList::ConstructProcess() 297 { 176 { >> 177 298 AddTransportation(); 178 AddTransportation(); 299 179 300 ConstructEM(); 180 ConstructEM(); 301 181 302 ConstructOp(); 182 ConstructOp(); 303 183 304 ConstructHad(); 184 ConstructHad(); 305 185 306 ConstructGeneral(); 186 ConstructGeneral(); >> 187 307 } 188 } 308 189 >> 190 309 // Transportation //////////////////////////// 191 // Transportation /////////////////////////////////////////////////////////// >> 192 #include "DMXMaxTimeCuts.hh" >> 193 #include "DMXMinEkineCuts.hh" >> 194 #include "G4StepLimiter.hh" >> 195 310 void DMXPhysicsList::AddTransportation() { 196 void DMXPhysicsList::AddTransportation() { 311 197 312 G4VUserPhysicsList::AddTransportation(); 198 G4VUserPhysicsList::AddTransportation(); 313 199 314 auto particleIterator=GetParticleIterator(); << 200 theParticleIterator->reset(); 315 particleIterator->reset(); << 201 while( (*theParticleIterator)() ){ 316 while( (*particleIterator)() ){ << 202 G4ParticleDefinition* particle = theParticleIterator->value(); 317 G4ParticleDefinition* particle = particleI << 318 G4ProcessManager* pmanager = particle->Get 203 G4ProcessManager* pmanager = particle->GetProcessManager(); 319 G4String particleName = particle->GetParti 204 G4String particleName = particle->GetParticleName(); 320 // time cuts for ONLY neutrons: 205 // time cuts for ONLY neutrons: 321 if(particleName == "neutron") 206 if(particleName == "neutron") 322 pmanager->AddDiscreteProcess(new DMXMaxT 207 pmanager->AddDiscreteProcess(new DMXMaxTimeCuts()); 323 // Energy cuts to kill charged (embedded i 208 // Energy cuts to kill charged (embedded in method) particles: 324 pmanager->AddDiscreteProcess(new DMXMinEki 209 pmanager->AddDiscreteProcess(new DMXMinEkineCuts()); 325 210 326 // Step limit applied to all particles: 211 // Step limit applied to all particles: 327 pmanager->AddDiscreteProcess(new G4StepLim << 212 pmanager->AddProcess(new G4StepLimiter, -1,-1,1); >> 213 328 } 214 } 329 } 215 } 330 216 >> 217 331 // Electromagnetic Processes ///////////////// 218 // Electromagnetic Processes //////////////////////////////////////////////// 332 // all charged particles 219 // all charged particles 333 void DMXPhysicsList::ConstructEM() { << 334 << 335 G4LossTableManager* man = G4LossTableManager << 336 man->SetAtomDeexcitation(new G4UAtomicDeexci << 337 220 338 G4EmParameters* em_params = G4EmParameters:: << 221 // gamma >> 222 #include "G4PhotoElectricEffect.hh" >> 223 #include "G4LivermorePhotoElectricModel.hh" >> 224 >> 225 #include "G4ComptonScattering.hh" >> 226 #include "G4LivermoreComptonModel.hh" >> 227 >> 228 #include "G4GammaConversion.hh" >> 229 #include "G4LivermoreGammaConversionModel.hh" >> 230 >> 231 #include "G4RayleighScattering.hh" >> 232 #include "G4LivermoreRayleighModel.hh" >> 233 >> 234 >> 235 // e- >> 236 #include "G4eMultipleScattering.hh" >> 237 >> 238 #include "G4eIonisation.hh" >> 239 #include "G4LivermoreIonisationModel.hh" >> 240 >> 241 #include "G4eBremsstrahlung.hh" >> 242 #include "G4LivermoreBremsstrahlungModel.hh" >> 243 >> 244 >> 245 // e+ >> 246 #include "G4eIonisation.hh" >> 247 #include "G4eBremsstrahlung.hh" >> 248 #include "G4eplusAnnihilation.hh" >> 249 >> 250 >> 251 // alpha and GenericIon and deuterons, triton, He3: >> 252 >> 253 //muon: >> 254 #include "G4MuIonisation.hh" >> 255 #include "G4MuBremsstrahlung.hh" >> 256 #include "G4MuPairProduction.hh" >> 257 #include "G4MuonMinusCapture.hh" >> 258 >> 259 //OTHERS: >> 260 #include "G4hIonisation.hh" >> 261 #include "G4hMultipleScattering.hh" >> 262 #include "G4hBremsstrahlung.hh" >> 263 #include "G4ionIonisation.hh" >> 264 #include "G4IonParametrisedLossModel.hh" >> 265 >> 266 //em process options to allow msc step-limitation to be switched off >> 267 #include "G4EmProcessOptions.hh" >> 268 >> 269 void DMXPhysicsList::ConstructEM() { 339 270 340 auto particleIterator=GetParticleIterator(); << 271 //set a finer grid of the physic tables in order to improve precision 341 particleIterator->reset(); << 272 //former LowEnergy models have 200 bins up to 100 GeV 342 while( (*particleIterator)() ){ << 273 G4EmProcessOptions opt; 343 G4ParticleDefinition* particle = particleI << 274 opt.SetMaxEnergy(100*GeV); >> 275 opt.SetDEDXBinning(200); >> 276 opt.SetLambdaBinning(200); >> 277 >> 278 theParticleIterator->reset(); >> 279 while( (*theParticleIterator)() ){ >> 280 G4ParticleDefinition* particle = theParticleIterator->value(); 344 G4ProcessManager* pmanager = particle->Get 281 G4ProcessManager* pmanager = particle->GetProcessManager(); 345 G4String particleName = particle->GetParti 282 G4String particleName = particle->GetParticleName(); 346 G4String particleType = particle->GetParti 283 G4String particleType = particle->GetParticleType(); 347 G4double charge = particle->GetPDGCharge() 284 G4double charge = particle->GetPDGCharge(); 348 285 349 if (particleName == "gamma") 286 if (particleName == "gamma") 350 { 287 { 351 //gamma 288 //gamma 352 G4RayleighScattering* theRayleigh = new G4Ra 289 G4RayleighScattering* theRayleigh = new G4RayleighScattering(); >> 290 theRayleigh->SetEmModel(new G4LivermoreRayleighModel()); //not strictly necessary 353 pmanager->AddDiscreteProcess(theRayleigh); 291 pmanager->AddDiscreteProcess(theRayleigh); 354 292 355 G4PhotoElectricEffect* thePhotoElectricEffec 293 G4PhotoElectricEffect* thePhotoElectricEffect = new G4PhotoElectricEffect(); 356 thePhotoElectricEffect->SetEmModel(new G4Liv 294 thePhotoElectricEffect->SetEmModel(new G4LivermorePhotoElectricModel()); 357 pmanager->AddDiscreteProcess(thePhotoElectri 295 pmanager->AddDiscreteProcess(thePhotoElectricEffect); 358 296 359 G4ComptonScattering* theComptonScattering = 297 G4ComptonScattering* theComptonScattering = new G4ComptonScattering(); 360 theComptonScattering->SetEmModel(new G4Liver 298 theComptonScattering->SetEmModel(new G4LivermoreComptonModel()); 361 pmanager->AddDiscreteProcess(theComptonScatt 299 pmanager->AddDiscreteProcess(theComptonScattering); 362 300 363 G4GammaConversion* theGammaConversion = new 301 G4GammaConversion* theGammaConversion = new G4GammaConversion(); 364 theGammaConversion->SetEmModel(new G4BetheHe << 302 theGammaConversion->SetEmModel(new G4LivermoreGammaConversionModel()); 365 pmanager->AddDiscreteProcess(theGammaConvers 303 pmanager->AddDiscreteProcess(theGammaConversion); 366 304 367 } 305 } 368 else if (particleName == "e-") 306 else if (particleName == "e-") 369 { 307 { 370 //electron 308 //electron 371 // process ordering: AddProcess(name, at res 309 // process ordering: AddProcess(name, at rest, along step, post step) 372 // Multiple scattering 310 // Multiple scattering 373 G4eMultipleScattering* msc = new G4eMultiple 311 G4eMultipleScattering* msc = new G4eMultipleScattering(); 374 em_params->SetMscStepLimitType(fUseDistanceT << 312 msc->SetStepLimitType(fUseDistanceToBoundary); 375 pmanager->AddProcess(msc,-1, 1, -1); << 313 pmanager->AddProcess(msc,-1, 1, 1); 376 314 377 // Ionisation 315 // Ionisation 378 G4eIonisation* eIonisation = new G4eIonisati 316 G4eIonisation* eIonisation = new G4eIonisation(); 379 G4VEmModel* theIoniLiv = new G4Livermo << 317 eIonisation->SetEmModel(new G4LivermoreIonisationModel()); 380 theIoniLiv->SetHighEnergyLimit(0.1*MeV << 318 eIonisation->SetStepFunction(0.2, 100*um); //improved precision in tracking 381 eIonisation->AddEmModel(0, theIoniLiv, << 319 pmanager->AddProcess(eIonisation,-1, 2, 2); 382 em_params->SetStepFunction(0.2, 100*um); //i << 383 pmanager->AddProcess(eIonisation,-1, 2, 1); << 384 320 385 // Bremsstrahlung 321 // Bremsstrahlung 386 G4eBremsstrahlung* eBremsstrahlung = new G4e 322 G4eBremsstrahlung* eBremsstrahlung = new G4eBremsstrahlung(); 387 pmanager->AddProcess(eBremsstrahlung, -1,-3, << 323 eBremsstrahlung->SetEmModel(new G4LivermoreBremsstrahlungModel()); >> 324 pmanager->AddProcess(eBremsstrahlung, -1,-3, 3); 388 } 325 } 389 else if (particleName == "e+") 326 else if (particleName == "e+") 390 { 327 { 391 //positron 328 //positron 392 G4eMultipleScattering* msc = new G4eMultiple 329 G4eMultipleScattering* msc = new G4eMultipleScattering(); 393 msc->SetStepLimitType(fUseDistanceToBoundary 330 msc->SetStepLimitType(fUseDistanceToBoundary); 394 pmanager->AddProcess(msc,-1, 1, -1); << 331 pmanager->AddProcess(msc,-1, 1, 1); 395 332 396 // Ionisation 333 // Ionisation 397 G4eIonisation* eIonisation = new G4eIonisati 334 G4eIonisation* eIonisation = new G4eIonisation(); 398 // eIonisation->SetStepFunction(0.2, 100*um) << 335 eIonisation->SetStepFunction(0.2, 100*um); // 399 pmanager->AddProcess(eIonisation, << 336 pmanager->AddProcess(eIonisation, -1, 2, 2); 400 337 401 //Bremsstrahlung (use default, no low-energy 338 //Bremsstrahlung (use default, no low-energy available) 402 pmanager->AddProcess(new G4eBremsstrahlung() << 339 pmanager->AddProcess(new G4eBremsstrahlung(), -1,-1, 3); 403 340 404 //Annihilation 341 //Annihilation 405 pmanager->AddProcess(new G4eplusAnnihilation << 342 pmanager->AddProcess(new G4eplusAnnihilation(),0,-1, 4); 406 } 343 } 407 else if( particleName == "mu+" || 344 else if( particleName == "mu+" || 408 particleName == "mu-" ) 345 particleName == "mu-" ) 409 { 346 { 410 //muon 347 //muon 411 pmanager->AddProcess(new G4MuMultipleScatter << 348 pmanager->AddProcess(new G4eMultipleScattering, -1, 1, 1); 412 pmanager->AddProcess(new G4MuIonisation(), << 349 pmanager->AddProcess(new G4MuIonisation(), -1, 2, 2); 413 pmanager->AddProcess(new G4MuBremsstrahlung( << 350 pmanager->AddProcess(new G4MuBremsstrahlung(), -1,-1, 3); 414 pmanager->AddProcess(new G4MuPairProduction( << 351 pmanager->AddProcess(new G4MuPairProduction(), -1,-1, 4); 415 if( particleName == "mu-" ) 352 if( particleName == "mu-" ) 416 pmanager->AddProcess(new G4MuonMinusCaptur 353 pmanager->AddProcess(new G4MuonMinusCapture(), 0,-1,-1); 417 } 354 } 418 else if (particleName == "proton" || 355 else if (particleName == "proton" || 419 particleName == "pi+" || 356 particleName == "pi+" || 420 particleName == "pi-") 357 particleName == "pi-") 421 { 358 { 422 //multiple scattering 359 //multiple scattering 423 pmanager->AddProcess(new G4hMultipleScatteri << 360 pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1); 424 361 425 //ionisation 362 //ionisation 426 G4hIonisation* hIonisation = new G4hIonisati 363 G4hIonisation* hIonisation = new G4hIonisation(); 427 em_params->SetStepFunctionMuHad(0.2, 50*um); << 364 hIonisation->SetStepFunction(0.2, 50*um); 428 pmanager->AddProcess(hIonisation, << 365 pmanager->AddProcess(hIonisation, -1, 2, 2); 429 366 430 //bremmstrahlung 367 //bremmstrahlung 431 pmanager->AddProcess(new G4hBremsstrahlung, << 368 pmanager->AddProcess(new G4hBremsstrahlung, -1,-3, 3); 432 } 369 } 433 else if(particleName == "alpha" || 370 else if(particleName == "alpha" || 434 particleName == "deuteron" || 371 particleName == "deuteron" || 435 particleName == "triton" || 372 particleName == "triton" || 436 particleName == "He3") 373 particleName == "He3") 437 { 374 { 438 //multiple scattering 375 //multiple scattering 439 pmanager->AddProcess(new G4hMultipleScatteri << 376 pmanager->AddProcess(new G4hMultipleScattering,-1,1,1); 440 377 441 //ionisation 378 //ionisation 442 G4ionIonisation* ionIoni = new G4ionIonisati 379 G4ionIonisation* ionIoni = new G4ionIonisation(); 443 em_params->SetStepFunctionLightIons(0.1, 1*C << 380 ionIoni->SetStepFunction(0.1, 20*um); 444 pmanager->AddProcess(ionIoni, << 381 pmanager->AddProcess(ionIoni, -1, 2, 2); 445 pmanager->AddProcess(new G4NuclearStopping() << 446 } 382 } 447 else if (particleName == "GenericIon") 383 else if (particleName == "GenericIon") 448 { 384 { 449 // OBJECT may be dynamically created as eith 385 // OBJECT may be dynamically created as either a GenericIon or nucleus 450 // G4Nucleus exists and therefore has partic 386 // G4Nucleus exists and therefore has particle type nucleus 451 // genericIon: 387 // genericIon: 452 388 453 //multiple scattering 389 //multiple scattering 454 pmanager->AddProcess(new G4hMultipleScatteri << 390 pmanager->AddProcess(new G4hMultipleScattering,-1,1,1); 455 391 456 //ionisation 392 //ionisation 457 G4ionIonisation* ionIoni = new G4ionIonisati 393 G4ionIonisation* ionIoni = new G4ionIonisation(); 458 em_params->SetStepFunctionIons(0.1, 1*CLHEP: << 394 ionIoni->SetEmModel(new G4IonParametrisedLossModel()); 459 pmanager->AddProcess(ionIoni, << 395 ionIoni->SetStepFunction(0.1, 20*um); 460 pmanager->AddProcess(new G4NuclearStopping() << 396 pmanager->AddProcess(ionIoni, -1, 2, 2); 461 } 397 } 462 398 463 else if ((!particle->IsShortLived()) && 399 else if ((!particle->IsShortLived()) && 464 (charge != 0.0) && 400 (charge != 0.0) && 465 (particle->GetParticleName() != "charge 401 (particle->GetParticleName() != "chargedgeantino")) 466 { 402 { 467 //all others charged particles except geanti 403 //all others charged particles except geantino 468 G4hMultipleScattering* aMultipleScatte 404 G4hMultipleScattering* aMultipleScattering = new G4hMultipleScattering(); 469 G4hIonisation* ahadronIon = new G4hIon 405 G4hIonisation* ahadronIon = new G4hIonisation(); 470 406 471 //multiple scattering 407 //multiple scattering 472 pmanager->AddProcess(aMultipleScattering,-1, << 408 pmanager->AddProcess(aMultipleScattering,-1,1,1); 473 409 474 //ionisation 410 //ionisation 475 pmanager->AddProcess(ahadronIon, -1,2, << 411 pmanager->AddProcess(ahadronIon, -1,2,2); 476 } 412 } >> 413 477 } 414 } >> 415 >> 416 // turn off msc step-limitation - especially as electron cut 1nm >> 417 opt.SetMscStepLimitation(fMinimal); >> 418 >> 419 // switch on fluorescence, PIXE and Auger: >> 420 opt.SetFluo(true); >> 421 opt.SetPIXE(true); >> 422 opt.SetAuger(true); >> 423 478 } 424 } 479 425 >> 426 480 // Optical Processes ///////////////////////// 427 // Optical Processes //////////////////////////////////////////////////////// >> 428 #include "G4Scintillation.hh" >> 429 #include "G4OpAbsorption.hh" >> 430 //#include "G4OpRayleigh.hh" >> 431 #include "G4OpBoundaryProcess.hh" >> 432 481 void DMXPhysicsList::ConstructOp() 433 void DMXPhysicsList::ConstructOp() 482 { 434 { 483 G4OpticalParameters* opParams = G4OpticalPar << 435 // default scintillation process 484 G4Scintillation* theScintProcessDef = new G4 436 G4Scintillation* theScintProcessDef = new G4Scintillation("Scintillation"); 485 opParams->SetScintTrackSecondariesFirst(true << 437 // theScintProcessDef->DumpPhysicsTable(); 486 opParams->SetScintByParticleType(true); << 438 theScintProcessDef->SetTrackSecondariesFirst(true); >> 439 theScintProcessDef->SetScintillationYieldFactor(1.0); // >> 440 theScintProcessDef->SetScintillationExcitationRatio(0.0); // >> 441 theScintProcessDef->SetVerboseLevel(OpVerbLevel); >> 442 >> 443 // scintillation process for alpha: >> 444 G4Scintillation* theScintProcessAlpha = new G4Scintillation("Scintillation"); >> 445 // theScintProcessNuc->DumpPhysicsTable(); >> 446 theScintProcessAlpha->SetTrackSecondariesFirst(true); >> 447 theScintProcessAlpha->SetScintillationYieldFactor(1.1); >> 448 theScintProcessAlpha->SetScintillationExcitationRatio(1.0); >> 449 theScintProcessAlpha->SetVerboseLevel(OpVerbLevel); >> 450 >> 451 // scintillation process for heavy nuclei >> 452 G4Scintillation* theScintProcessNuc = new G4Scintillation("Scintillation"); >> 453 // theScintProcessNuc->DumpPhysicsTable(); >> 454 theScintProcessNuc->SetTrackSecondariesFirst(true); >> 455 theScintProcessNuc->SetScintillationYieldFactor(0.2); >> 456 theScintProcessNuc->SetScintillationExcitationRatio(1.0); >> 457 theScintProcessNuc->SetVerboseLevel(OpVerbLevel); 487 458 488 // optical processes 459 // optical processes 489 G4OpAbsorption* theAbsorptionProcess = new G 460 G4OpAbsorption* theAbsorptionProcess = new G4OpAbsorption(); >> 461 // G4OpRayleigh* theRayleighScatteringProcess = new G4OpRayleigh(); 490 G4OpBoundaryProcess* theBoundaryProcess = ne 462 G4OpBoundaryProcess* theBoundaryProcess = new G4OpBoundaryProcess(); >> 463 // theAbsorptionProcess->DumpPhysicsTable(); >> 464 // theRayleighScatteringProcess->DumpPhysicsTable(); >> 465 theAbsorptionProcess->SetVerboseLevel(OpVerbLevel); >> 466 // theRayleighScatteringProcess->SetVerboseLevel(OpVerbLevel); >> 467 theBoundaryProcess->SetVerboseLevel(OpVerbLevel); 491 468 492 auto particleIterator=GetParticleIterator(); << 469 theParticleIterator->reset(); 493 particleIterator->reset(); << 470 while( (*theParticleIterator)() ) 494 while( (*particleIterator)() ) << 495 { 471 { 496 G4ParticleDefinition* particle = particl << 472 G4ParticleDefinition* particle = theParticleIterator->value(); 497 G4ProcessManager* pmanager = particle->G 473 G4ProcessManager* pmanager = particle->GetProcessManager(); 498 G4String particleName = particle->GetPar 474 G4String particleName = particle->GetParticleName(); 499 if (theScintProcessDef->IsApplicable(*pa 475 if (theScintProcessDef->IsApplicable(*particle)) { 500 pmanager->AddProcess(theScintProcessDe << 476 // if(particle->GetPDGMass() > 5.0*GeV) 501 pmanager->SetProcessOrderingToLast(the << 477 if(particle->GetParticleName() == "GenericIon") { 502 pmanager->SetProcessOrderingToLast(the << 478 pmanager->AddProcess(theScintProcessNuc); // AtRestDiscrete >> 479 pmanager->SetProcessOrderingToLast(theScintProcessNuc,idxAtRest); >> 480 pmanager->SetProcessOrderingToLast(theScintProcessNuc,idxPostStep); >> 481 } >> 482 else if(particle->GetParticleName() == "alpha") { >> 483 pmanager->AddProcess(theScintProcessAlpha); >> 484 pmanager->SetProcessOrderingToLast(theScintProcessAlpha,idxAtRest); >> 485 pmanager->SetProcessOrderingToLast(theScintProcessAlpha,idxPostStep); >> 486 } >> 487 else { >> 488 pmanager->AddProcess(theScintProcessDef); >> 489 pmanager->SetProcessOrderingToLast(theScintProcessDef,idxAtRest); >> 490 pmanager->SetProcessOrderingToLast(theScintProcessDef,idxPostStep); >> 491 } 503 } 492 } 504 493 505 if (particleName == "opticalphoton") { 494 if (particleName == "opticalphoton") { 506 pmanager->AddDiscreteProcess(theAbsorptionPr 495 pmanager->AddDiscreteProcess(theAbsorptionProcess); >> 496 // pmanager->AddDiscreteProcess(theRayleighScatteringProcess); 507 pmanager->AddDiscreteProcess(theBoundaryProc 497 pmanager->AddDiscreteProcess(theBoundaryProcess); 508 } 498 } 509 } 499 } 510 } 500 } 511 501 >> 502 512 // Hadronic processes //////////////////////// 503 // Hadronic processes //////////////////////////////////////////////////////// 513 504 >> 505 // Elastic processes: >> 506 #include "G4HadronElasticProcess.hh" >> 507 #include "G4ChipsElasticModel.hh" >> 508 #include "G4ElasticHadrNucleusHE.hh" >> 509 >> 510 // Inelastic processes: >> 511 #include "G4PionPlusInelasticProcess.hh" >> 512 #include "G4PionMinusInelasticProcess.hh" >> 513 #include "G4KaonPlusInelasticProcess.hh" >> 514 #include "G4KaonZeroSInelasticProcess.hh" >> 515 #include "G4KaonZeroLInelasticProcess.hh" >> 516 #include "G4KaonMinusInelasticProcess.hh" >> 517 #include "G4ProtonInelasticProcess.hh" >> 518 #include "G4AntiProtonInelasticProcess.hh" >> 519 #include "G4NeutronInelasticProcess.hh" >> 520 #include "G4AntiNeutronInelasticProcess.hh" >> 521 #include "G4DeuteronInelasticProcess.hh" >> 522 #include "G4TritonInelasticProcess.hh" >> 523 #include "G4AlphaInelasticProcess.hh" >> 524 >> 525 // High energy FTFP model and Bertini cascade >> 526 #include "G4FTFModel.hh" >> 527 #include "G4LundStringFragmentation.hh" >> 528 #include "G4ExcitedStringDecay.hh" >> 529 #include "G4PreCompoundModel.hh" >> 530 #include "G4GeneratorPrecompoundInterface.hh" >> 531 #include "G4TheoFSGenerator.hh" >> 532 #include "G4CascadeInterface.hh" >> 533 >> 534 // Cross sections >> 535 #include "G4VCrossSectionDataSet.hh" >> 536 #include "G4CrossSectionDataSetRegistry.hh" >> 537 >> 538 #include "G4CrossSectionElastic.hh" >> 539 #include "G4BGGPionElasticXS.hh" >> 540 #include "G4AntiNuclElastic.hh" >> 541 >> 542 #include "G4CrossSectionInelastic.hh" >> 543 #include "G4PiNuclearCrossSection.hh" >> 544 #include "G4CrossSectionPairGG.hh" >> 545 #include "G4BGGNucleonInelasticXS.hh" >> 546 #include "G4ComponentAntiNuclNuclearXS.hh" >> 547 #include "G4GGNuclNuclCrossSection.hh" >> 548 >> 549 #include "G4HadronElastic.hh" >> 550 #include "G4HadronCaptureProcess.hh" >> 551 >> 552 // Neutron high-precision models: <20 MeV >> 553 #include "G4NeutronHPElastic.hh" >> 554 #include "G4NeutronHPElasticData.hh" >> 555 #include "G4NeutronHPCapture.hh" >> 556 #include "G4NeutronHPCaptureData.hh" >> 557 #include "G4NeutronHPInelastic.hh" >> 558 #include "G4NeutronHPInelasticData.hh" >> 559 >> 560 // Stopping processes >> 561 #include "G4PiMinusAbsorptionBertini.hh" >> 562 #include "G4KaonMinusAbsorptionBertini.hh" >> 563 #include "G4AntiProtonAbsorptionFritiof.hh" >> 564 >> 565 >> 566 514 void DMXPhysicsList::ConstructHad() 567 void DMXPhysicsList::ConstructHad() 515 { 568 { 516 //Elastic models 569 //Elastic models >> 570 const G4double elastic_elimitPi = 1.0*GeV; >> 571 517 G4HadronElastic* elastic_lhep0 = new G4Hadro 572 G4HadronElastic* elastic_lhep0 = new G4HadronElastic(); >> 573 G4HadronElastic* elastic_lhep1 = new G4HadronElastic(); >> 574 elastic_lhep1->SetMaxEnergy( elastic_elimitPi ); 518 G4ChipsElasticModel* elastic_chip = new G4Ch 575 G4ChipsElasticModel* elastic_chip = new G4ChipsElasticModel(); 519 G4ElasticHadrNucleusHE* elastic_he = new G4E 576 G4ElasticHadrNucleusHE* elastic_he = new G4ElasticHadrNucleusHE(); >> 577 elastic_he->SetMinEnergy( elastic_elimitPi ); >> 578 520 579 521 // Inelastic scattering 580 // Inelastic scattering 522 const G4double theFTFMin0 = 0.0*GeV; 581 const G4double theFTFMin0 = 0.0*GeV; 523 const G4double theFTFMin1 = 3.0*GeV; << 582 const G4double theFTFMin1 = 4.0*GeV; 524 const G4double theFTFMax = G4HadronicParamet << 583 const G4double theFTFMax = 100.0*TeV; 525 const G4double theBERTMin0 = 0.0*GeV; 584 const G4double theBERTMin0 = 0.0*GeV; 526 const G4double theBERTMin1 = 19.0*MeV; 585 const G4double theBERTMin1 = 19.0*MeV; 527 const G4double theBERTMax = 6.0*GeV; << 586 const G4double theBERTMax = 5.0*GeV; 528 const G4double theHPMin = 0.0*GeV; 587 const G4double theHPMin = 0.0*GeV; 529 const G4double theHPMax = 20.0*MeV; 588 const G4double theHPMax = 20.0*MeV; 530 589 531 G4FTFModel * theStringModel = new G4FTFModel 590 G4FTFModel * theStringModel = new G4FTFModel; 532 G4ExcitedStringDecay * theStringDecay = new 591 G4ExcitedStringDecay * theStringDecay = new G4ExcitedStringDecay( new G4LundStringFragmentation ); 533 theStringModel->SetFragmentationModel( theSt 592 theStringModel->SetFragmentationModel( theStringDecay ); 534 G4PreCompoundModel * thePreEquilib = new G4P 593 G4PreCompoundModel * thePreEquilib = new G4PreCompoundModel( new G4ExcitationHandler ); 535 G4GeneratorPrecompoundInterface * theCascade 594 G4GeneratorPrecompoundInterface * theCascade = new G4GeneratorPrecompoundInterface( thePreEquilib ); 536 595 537 G4TheoFSGenerator * theFTFModel0 = new G4The 596 G4TheoFSGenerator * theFTFModel0 = new G4TheoFSGenerator( "FTFP" ); 538 theFTFModel0->SetHighEnergyGenerator( theStr 597 theFTFModel0->SetHighEnergyGenerator( theStringModel ); 539 theFTFModel0->SetTransport( theCascade ); 598 theFTFModel0->SetTransport( theCascade ); 540 theFTFModel0->SetMinEnergy( theFTFMin0 ); 599 theFTFModel0->SetMinEnergy( theFTFMin0 ); 541 theFTFModel0->SetMaxEnergy( theFTFMax ); 600 theFTFModel0->SetMaxEnergy( theFTFMax ); 542 601 543 G4TheoFSGenerator * theFTFModel1 = new G4The 602 G4TheoFSGenerator * theFTFModel1 = new G4TheoFSGenerator( "FTFP" ); 544 theFTFModel1->SetHighEnergyGenerator( theStr 603 theFTFModel1->SetHighEnergyGenerator( theStringModel ); 545 theFTFModel1->SetTransport( theCascade ); 604 theFTFModel1->SetTransport( theCascade ); 546 theFTFModel1->SetMinEnergy( theFTFMin1 ); 605 theFTFModel1->SetMinEnergy( theFTFMin1 ); 547 theFTFModel1->SetMaxEnergy( theFTFMax ); 606 theFTFModel1->SetMaxEnergy( theFTFMax ); 548 607 549 G4CascadeInterface * theBERTModel0 = new G4C 608 G4CascadeInterface * theBERTModel0 = new G4CascadeInterface; 550 theBERTModel0->SetMinEnergy( theBERTMin0 ); 609 theBERTModel0->SetMinEnergy( theBERTMin0 ); 551 theBERTModel0->SetMaxEnergy( theBERTMax ); 610 theBERTModel0->SetMaxEnergy( theBERTMax ); 552 611 553 G4CascadeInterface * theBERTModel1 = new G4C 612 G4CascadeInterface * theBERTModel1 = new G4CascadeInterface; 554 theBERTModel1->SetMinEnergy( theBERTMin1 ); 613 theBERTModel1->SetMinEnergy( theBERTMin1 ); 555 theBERTModel1->SetMaxEnergy( theBERTMax ); 614 theBERTModel1->SetMaxEnergy( theBERTMax ); 556 615 >> 616 G4VCrossSectionDataSet * thePiData = new G4CrossSectionPairGG( new G4PiNuclearCrossSection, 91*GeV ); 557 G4VCrossSectionDataSet * theAntiNucleonData 617 G4VCrossSectionDataSet * theAntiNucleonData = new G4CrossSectionInelastic( new G4ComponentAntiNuclNuclearXS ); 558 G4ComponentGGNuclNuclXsc * ggNuclNuclXsec = << 618 G4VCrossSectionDataSet * theGGNuclNuclData = G4CrossSectionDataSetRegistry::Instance()-> 559 G4VCrossSectionDataSet * theGGNuclNuclData = << 619 GetCrossSectionDataSet(G4GGNuclNuclCrossSection::Default_Name()); 560 G4VCrossSectionDataSet * theGGNNEl = new G4C << 620 561 G4ComponentGGHadronNucleusXsc * ggHNXsec = n << 621 562 G4VCrossSectionDataSet * theGGHNEl = new G4C << 622 theParticleIterator->reset(); 563 G4VCrossSectionDataSet * theGGHNInel = new G << 623 while ((*theParticleIterator)()) 564 << 565 auto particleIterator=GetParticleIterator(); << 566 particleIterator->reset(); << 567 while ((*particleIterator)()) << 568 { 624 { 569 G4ParticleDefinition* particle = particl << 625 G4ParticleDefinition* particle = theParticleIterator->value(); 570 G4ProcessManager* pmanager = particle->G 626 G4ProcessManager* pmanager = particle->GetProcessManager(); 571 G4String particleName = particle->GetPar 627 G4String particleName = particle->GetParticleName(); 572 628 573 if (particleName == "pi+") 629 if (particleName == "pi+") 574 { 630 { 575 // Elastic scattering 631 // Elastic scattering 576 G4HadronElasticProcess* theElasticPr 632 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess; 577 theElasticProcess->AddDataSet( new G 633 theElasticProcess->AddDataSet( new G4BGGPionElasticXS( particle ) ); >> 634 theElasticProcess->RegisterMe( elastic_lhep1 ); 578 theElasticProcess->RegisterMe( elast 635 theElasticProcess->RegisterMe( elastic_he ); 579 pmanager->AddDiscreteProcess( theElasticPr 636 pmanager->AddDiscreteProcess( theElasticProcess ); 580 //Inelastic scattering 637 //Inelastic scattering 581 G4HadronInelasticProcess* theInelasticProc << 638 G4PionPlusInelasticProcess* theInelasticProcess = 582 new G4HadronInelasticProcess( "inelastic << 639 new G4PionPlusInelasticProcess("inelastic"); 583 theInelasticProcess->AddDataSet( new G4BGG << 640 theInelasticProcess->AddDataSet( thePiData ); 584 theInelasticProcess->RegisterMe( theFTFMod 641 theInelasticProcess->RegisterMe( theFTFModel1 ); 585 theInelasticProcess->RegisterMe( the 642 theInelasticProcess->RegisterMe( theBERTModel0 ); 586 pmanager->AddDiscreteProcess( theInelastic 643 pmanager->AddDiscreteProcess( theInelasticProcess ); 587 } 644 } 588 645 589 else if (particleName == "pi-") 646 else if (particleName == "pi-") 590 { 647 { 591 // Elastic scattering 648 // Elastic scattering 592 G4HadronElasticProcess* theElasticPr 649 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess; 593 theElasticProcess->AddDataSet( new G 650 theElasticProcess->AddDataSet( new G4BGGPionElasticXS( particle ) ); >> 651 theElasticProcess->RegisterMe( elastic_lhep1 ); 594 theElasticProcess->RegisterMe( elast 652 theElasticProcess->RegisterMe( elastic_he ); 595 pmanager->AddDiscreteProcess( theElasticPr 653 pmanager->AddDiscreteProcess( theElasticProcess ); 596 //Inelastic scattering 654 //Inelastic scattering 597 G4HadronInelasticProcess* theInelasticProc << 655 G4PionMinusInelasticProcess* theInelasticProcess = 598 new G4HadronInelasticProcess( "inelastic << 656 new G4PionMinusInelasticProcess("inelastic"); 599 theInelasticProcess->AddDataSet( new G4BGG << 657 theInelasticProcess->AddDataSet( thePiData ); 600 theInelasticProcess->RegisterMe( theFTFMod 658 theInelasticProcess->RegisterMe( theFTFModel1 ); 601 theInelasticProcess->RegisterMe( the 659 theInelasticProcess->RegisterMe( theBERTModel0 ); 602 pmanager->AddDiscreteProcess( theInelastic 660 pmanager->AddDiscreteProcess( theInelasticProcess ); 603 //Absorption 661 //Absorption 604 pmanager->AddRestProcess(new G4HadronicAbs << 662 pmanager->AddRestProcess(new G4PiMinusAbsorptionBertini, ordDefault); 605 } 663 } >> 664 606 else if (particleName == "kaon+") 665 else if (particleName == "kaon+") 607 { 666 { 608 // Elastic scattering 667 // Elastic scattering 609 G4HadronElasticProcess* theElasticPr 668 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess; 610 theElasticProcess->AddDataSet( theGGHNEl ) << 611 theElasticProcess->RegisterMe( elast 669 theElasticProcess->RegisterMe( elastic_lhep0 ); 612 pmanager->AddDiscreteProcess( theElasticPr 670 pmanager->AddDiscreteProcess( theElasticProcess ); 613 // Inelastic scattering 671 // Inelastic scattering 614 G4HadronInelasticProcess* theInelasticProc << 672 G4KaonPlusInelasticProcess* theInelasticProcess = 615 new G4HadronInelasticProcess( "inelastic << 673 new G4KaonPlusInelasticProcess("inelastic"); 616 theInelasticProcess->AddDataSet( theGGHNIn << 674 theInelasticProcess->AddDataSet( G4CrossSectionDataSetRegistry::Instance()-> >> 675 GetCrossSectionDataSet(G4ChipsKaonPlusInelasticXS::Default_Name())); 617 theInelasticProcess->RegisterMe( theFTFMod 676 theInelasticProcess->RegisterMe( theFTFModel1 ); 618 theInelasticProcess->RegisterMe( the 677 theInelasticProcess->RegisterMe( theBERTModel0 ); 619 pmanager->AddDiscreteProcess( theInelastic 678 pmanager->AddDiscreteProcess( theInelasticProcess ); 620 } << 679 } >> 680 621 else if (particleName == "kaon0S") 681 else if (particleName == "kaon0S") 622 { 682 { 623 // Elastic scattering 683 // Elastic scattering 624 G4HadronElasticProcess* theElasticPr 684 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess; 625 theElasticProcess->AddDataSet( theGGHNEl ) << 626 theElasticProcess->RegisterMe( elast 685 theElasticProcess->RegisterMe( elastic_lhep0 ); 627 pmanager->AddDiscreteProcess( theElasticPr 686 pmanager->AddDiscreteProcess( theElasticProcess ); 628 // Inelastic scattering 687 // Inelastic scattering 629 G4HadronInelasticProcess* theInelasticProc << 688 G4KaonZeroSInelasticProcess* theInelasticProcess = 630 new G4HadronInelasticProcess( "inelastic << 689 new G4KaonZeroSInelasticProcess("inelastic"); 631 theInelasticProcess->AddDataSet( theGGHNIn << 690 theInelasticProcess->AddDataSet( G4CrossSectionDataSetRegistry::Instance()-> >> 691 GetCrossSectionDataSet(G4ChipsKaonZeroInelasticXS::Default_Name())); 632 theInelasticProcess->RegisterMe( theFTFMod 692 theInelasticProcess->RegisterMe( theFTFModel1 ); 633 theInelasticProcess->RegisterMe( the 693 theInelasticProcess->RegisterMe( theBERTModel0 ); 634 pmanager->AddDiscreteProcess( theInelastic 694 pmanager->AddDiscreteProcess( theInelasticProcess ); 635 } 695 } 636 696 637 else if (particleName == "kaon0L") 697 else if (particleName == "kaon0L") 638 { 698 { 639 // Elastic scattering 699 // Elastic scattering 640 G4HadronElasticProcess* theElasticPr 700 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess; 641 theElasticProcess->AddDataSet( theGGHNEl ) << 642 theElasticProcess->RegisterMe( elast 701 theElasticProcess->RegisterMe( elastic_lhep0 ); 643 pmanager->AddDiscreteProcess( theElasticPr 702 pmanager->AddDiscreteProcess( theElasticProcess ); 644 // Inelastic scattering 703 // Inelastic scattering 645 G4HadronInelasticProcess* theInelasticProc << 704 G4KaonZeroLInelasticProcess* theInelasticProcess = 646 new G4HadronInelasticProcess( "inelastic << 705 new G4KaonZeroLInelasticProcess("inelastic"); 647 theInelasticProcess->AddDataSet( theGGHNIn << 706 theInelasticProcess->AddDataSet( G4CrossSectionDataSetRegistry::Instance()-> >> 707 GetCrossSectionDataSet(G4ChipsKaonZeroInelasticXS::Default_Name())); 648 theInelasticProcess->RegisterMe( theFTFMod 708 theInelasticProcess->RegisterMe( theFTFModel1 ); 649 theInelasticProcess->RegisterMe( the 709 theInelasticProcess->RegisterMe( theBERTModel0 ); 650 pmanager->AddDiscreteProcess( theInelastic 710 pmanager->AddDiscreteProcess( theInelasticProcess ); 651 } 711 } 652 712 653 else if (particleName == "kaon-") 713 else if (particleName == "kaon-") 654 { 714 { 655 // Elastic scattering 715 // Elastic scattering 656 G4HadronElasticProcess* theElasticPr 716 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess; 657 theElasticProcess->AddDataSet( theGGHNEl ) << 658 theElasticProcess->RegisterMe( elast 717 theElasticProcess->RegisterMe( elastic_lhep0 ); 659 pmanager->AddDiscreteProcess( theElasticPr 718 pmanager->AddDiscreteProcess( theElasticProcess ); 660 // Inelastic scattering 719 // Inelastic scattering 661 G4HadronInelasticProcess* theInelasticProc << 720 G4KaonMinusInelasticProcess* theInelasticProcess = 662 new G4HadronInelasticProcess( "inelastic << 721 new G4KaonMinusInelasticProcess("inelastic"); 663 theInelasticProcess->AddDataSet( the << 722 theInelasticProcess->AddDataSet( G4CrossSectionDataSetRegistry::Instance()-> >> 723 GetCrossSectionDataSet(G4ChipsKaonMinusInelasticXS::Default_Name())); 664 theInelasticProcess->RegisterMe( theFTFMod 724 theInelasticProcess->RegisterMe( theFTFModel1 ); 665 theInelasticProcess->RegisterMe( the 725 theInelasticProcess->RegisterMe( theBERTModel0 ); 666 pmanager->AddDiscreteProcess( theInelastic 726 pmanager->AddDiscreteProcess( theInelasticProcess ); 667 pmanager->AddRestProcess(new G4HadronicAbs << 727 pmanager->AddRestProcess(new G4KaonMinusAbsorptionBertini, ordDefault); 668 } 728 } 669 729 670 else if (particleName == "proton") 730 else if (particleName == "proton") 671 { 731 { 672 // Elastic scattering 732 // Elastic scattering 673 G4HadronElasticProcess* theElasticPr 733 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess; 674 theElasticProcess->AddDataSet( new G << 734 theElasticProcess->AddDataSet(G4CrossSectionDataSetRegistry::Instance()-> >> 735 GetCrossSectionDataSet(G4ChipsProtonElasticXS::Default_Name())); 675 theElasticProcess->RegisterMe( elast 736 theElasticProcess->RegisterMe( elastic_chip ); 676 pmanager->AddDiscreteProcess( theElasticPr 737 pmanager->AddDiscreteProcess( theElasticProcess ); 677 // Inelastic scattering 738 // Inelastic scattering 678 G4HadronInelasticProcess* theInelasticProc << 739 G4ProtonInelasticProcess* theInelasticProcess = 679 new G4HadronInelasticProcess( "inelastic << 740 new G4ProtonInelasticProcess("inelastic"); 680 theInelasticProcess->AddDataSet( new G4BGG 741 theInelasticProcess->AddDataSet( new G4BGGNucleonInelasticXS( G4Proton::Proton() ) ); 681 theInelasticProcess->RegisterMe( theFTFMod 742 theInelasticProcess->RegisterMe( theFTFModel1 ); 682 theInelasticProcess->RegisterMe( the 743 theInelasticProcess->RegisterMe( theBERTModel0 ); 683 pmanager->AddDiscreteProcess( theInelastic 744 pmanager->AddDiscreteProcess( theInelasticProcess ); 684 } 745 } 685 else if (particleName == "anti_proton") 746 else if (particleName == "anti_proton") 686 { 747 { 687 // Elastic scattering 748 // Elastic scattering 688 const G4double elastic_elimitAntiNuc 749 const G4double elastic_elimitAntiNuc = 100.0*MeV; 689 G4AntiNuclElastic* elastic_anuc = ne 750 G4AntiNuclElastic* elastic_anuc = new G4AntiNuclElastic(); 690 elastic_anuc->SetMinEnergy( elastic_ 751 elastic_anuc->SetMinEnergy( elastic_elimitAntiNuc ); 691 G4CrossSectionElastic* elastic_anucx 752 G4CrossSectionElastic* elastic_anucxs = new G4CrossSectionElastic( elastic_anuc->GetComponentCrossSection() ); 692 G4HadronElastic* elastic_lhep2 = new 753 G4HadronElastic* elastic_lhep2 = new G4HadronElastic(); 693 elastic_lhep2->SetMaxEnergy( elastic 754 elastic_lhep2->SetMaxEnergy( elastic_elimitAntiNuc ); 694 G4HadronElasticProcess* theElasticPr 755 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess; 695 theElasticProcess->AddDataSet( elast 756 theElasticProcess->AddDataSet( elastic_anucxs ); 696 theElasticProcess->RegisterMe( elast 757 theElasticProcess->RegisterMe( elastic_lhep2 ); 697 theElasticProcess->RegisterMe( elast 758 theElasticProcess->RegisterMe( elastic_anuc ); 698 pmanager->AddDiscreteProcess( theElasticPr 759 pmanager->AddDiscreteProcess( theElasticProcess ); 699 // Inelastic scattering 760 // Inelastic scattering 700 G4HadronInelasticProcess* theInelasticProc << 761 G4AntiProtonInelasticProcess* theInelasticProcess = 701 new G4HadronInelasticProcess( "inelastic << 762 new G4AntiProtonInelasticProcess("inelastic"); 702 theInelasticProcess->AddDataSet( theAntiNu 763 theInelasticProcess->AddDataSet( theAntiNucleonData ); 703 theInelasticProcess->RegisterMe( theFTFMod 764 theInelasticProcess->RegisterMe( theFTFModel0 ); 704 pmanager->AddDiscreteProcess( theInelastic 765 pmanager->AddDiscreteProcess( theInelasticProcess ); 705 // Absorption 766 // Absorption 706 pmanager->AddRestProcess(new G4HadronicAbs << 767 pmanager->AddRestProcess(new G4AntiProtonAbsorptionFritiof, ordDefault); 707 } 768 } >> 769 708 else if (particleName == "neutron") { 770 else if (particleName == "neutron") { 709 // elastic scattering 771 // elastic scattering 710 G4HadronElasticProcess* theElasticProcess = 772 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess; 711 theElasticProcess->AddDataSet(new G4Ne << 773 theElasticProcess->AddDataSet(G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsNeutronElasticXS::Default_Name())); 712 G4HadronElastic* elastic_neutronChipsM 774 G4HadronElastic* elastic_neutronChipsModel = new G4ChipsElasticModel(); 713 elastic_neutronChipsModel->SetMinEnergy( 19. 775 elastic_neutronChipsModel->SetMinEnergy( 19.0*MeV ); 714 theElasticProcess->RegisterMe( elastic 776 theElasticProcess->RegisterMe( elastic_neutronChipsModel ); 715 G4ParticleHPElastic * theElasticNeutronHP = << 777 G4NeutronHPElastic * theElasticNeutronHP = new G4NeutronHPElastic; 716 theElasticNeutronHP->SetMinEnergy( the 778 theElasticNeutronHP->SetMinEnergy( theHPMin ); 717 theElasticNeutronHP->SetMaxEnergy( the 779 theElasticNeutronHP->SetMaxEnergy( theHPMax ); 718 theElasticProcess->RegisterMe( theElasticNeu 780 theElasticProcess->RegisterMe( theElasticNeutronHP ); 719 theElasticProcess->AddDataSet( new G4Particl << 781 theElasticProcess->AddDataSet( new G4NeutronHPElasticData ); 720 pmanager->AddDiscreteProcess( theElasticProc 782 pmanager->AddDiscreteProcess( theElasticProcess ); 721 // inelastic scattering 783 // inelastic scattering 722 G4HadronInelasticProcess* theInelasticProces << 784 G4NeutronInelasticProcess* theInelasticProcess = 723 new G4HadronInelasticProcess( "inelastic", << 785 new G4NeutronInelasticProcess("inelastic"); 724 theInelasticProcess->AddDataSet( new G4Neutr << 786 theInelasticProcess->AddDataSet( new G4BGGNucleonInelasticXS( G4Neutron::Neutron() ) ); 725 theInelasticProcess->RegisterMe( theFTFModel 787 theInelasticProcess->RegisterMe( theFTFModel1 ); 726 theInelasticProcess->RegisterMe( theBE 788 theInelasticProcess->RegisterMe( theBERTModel1 ); 727 G4ParticleHPInelastic * theNeutronInelasticH << 789 G4NeutronHPInelastic * theNeutronInelasticHPModel = new G4NeutronHPInelastic; 728 theNeutronInelasticHPModel->SetMinEner 790 theNeutronInelasticHPModel->SetMinEnergy( theHPMin ); 729 theNeutronInelasticHPModel->SetMaxEner 791 theNeutronInelasticHPModel->SetMaxEnergy( theHPMax ); 730 theInelasticProcess->RegisterMe( theNeutronI 792 theInelasticProcess->RegisterMe( theNeutronInelasticHPModel ); 731 theInelasticProcess->AddDataSet( new G4Parti << 793 theInelasticProcess->AddDataSet( new G4NeutronHPInelasticData ); 732 pmanager->AddDiscreteProcess(theInelasticPro 794 pmanager->AddDiscreteProcess(theInelasticProcess); 733 // capture 795 // capture 734 G4NeutronCaptureProcess* theCaptureProcess = << 796 G4HadronCaptureProcess* theCaptureProcess = 735 new G4NeutronCaptureProcess; << 797 new G4HadronCaptureProcess; 736 G4ParticleHPCapture * theLENeutronCaptureMod << 798 G4NeutronHPCapture * theLENeutronCaptureModel = new G4NeutronHPCapture; 737 theLENeutronCaptureModel->SetMinEnergy(theHP 799 theLENeutronCaptureModel->SetMinEnergy(theHPMin); 738 theLENeutronCaptureModel->SetMaxEnergy(theHP 800 theLENeutronCaptureModel->SetMaxEnergy(theHPMax); 739 theCaptureProcess->RegisterMe(theLENeutronCa 801 theCaptureProcess->RegisterMe(theLENeutronCaptureModel); 740 theCaptureProcess->AddDataSet( new G4Particl << 802 theCaptureProcess->AddDataSet( new G4NeutronHPCaptureData); 741 pmanager->AddDiscreteProcess(theCaptureProce 803 pmanager->AddDiscreteProcess(theCaptureProcess); >> 804 742 } 805 } 743 else if (particleName == "anti_neutron") 806 else if (particleName == "anti_neutron") 744 { 807 { 745 // Elastic scattering 808 // Elastic scattering 746 G4HadronElasticProcess* theElasticPr 809 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess; 747 theElasticProcess->AddDataSet( theGGHNEl ) << 748 theElasticProcess->RegisterMe( elast 810 theElasticProcess->RegisterMe( elastic_lhep0 ); 749 pmanager->AddDiscreteProcess( theElasticPr 811 pmanager->AddDiscreteProcess( theElasticProcess ); 750 // Inelastic scattering (include ann 812 // Inelastic scattering (include annihilation on-fly) 751 G4HadronInelasticProcess* theInelasticProc << 813 G4AntiNeutronInelasticProcess* theInelasticProcess = 752 new G4HadronInelasticProcess( "inelastic << 814 new G4AntiNeutronInelasticProcess("inelastic"); 753 theInelasticProcess->AddDataSet( theAntiNu 815 theInelasticProcess->AddDataSet( theAntiNucleonData ); 754 theInelasticProcess->RegisterMe( theFTFMod 816 theInelasticProcess->RegisterMe( theFTFModel0 ); 755 pmanager->AddDiscreteProcess( theInelastic 817 pmanager->AddDiscreteProcess( theInelasticProcess ); 756 } 818 } >> 819 757 else if (particleName == "deuteron") 820 else if (particleName == "deuteron") 758 { 821 { 759 // Elastic scattering 822 // Elastic scattering 760 G4HadronElasticProcess* theElasticPr 823 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess; 761 theElasticProcess->AddDataSet( theGGNNEl ) << 762 theElasticProcess->RegisterMe( elast 824 theElasticProcess->RegisterMe( elastic_lhep0 ); 763 pmanager->AddDiscreteProcess( theElasticPr 825 pmanager->AddDiscreteProcess( theElasticProcess ); 764 // Inelastic scattering 826 // Inelastic scattering 765 G4HadronInelasticProcess* theInelasticProc << 827 G4DeuteronInelasticProcess* theInelasticProcess = 766 new G4HadronInelasticProcess( "inelastic << 828 new G4DeuteronInelasticProcess("inelastic"); 767 theInelasticProcess->AddDataSet( theGGNucl 829 theInelasticProcess->AddDataSet( theGGNuclNuclData ); 768 theInelasticProcess->RegisterMe( theFTFMod 830 theInelasticProcess->RegisterMe( theFTFModel1 ); 769 theInelasticProcess->RegisterMe( the 831 theInelasticProcess->RegisterMe( theBERTModel0 ); 770 pmanager->AddDiscreteProcess( theInelastic 832 pmanager->AddDiscreteProcess( theInelasticProcess ); 771 } 833 } >> 834 772 else if (particleName == "triton") 835 else if (particleName == "triton") 773 { 836 { 774 // Elastic scattering 837 // Elastic scattering 775 G4HadronElasticProcess* theElasticPr 838 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess; 776 theElasticProcess->AddDataSet( theGGNNEl ) << 777 theElasticProcess->RegisterMe( elast 839 theElasticProcess->RegisterMe( elastic_lhep0 ); 778 pmanager->AddDiscreteProcess( theElasticPr 840 pmanager->AddDiscreteProcess( theElasticProcess ); 779 // Inelastic scattering 841 // Inelastic scattering 780 G4HadronInelasticProcess* theInelasticProc << 842 G4TritonInelasticProcess* theInelasticProcess = 781 new G4HadronInelasticProcess( "inelastic << 843 new G4TritonInelasticProcess("inelastic"); 782 theInelasticProcess->AddDataSet( theGGNucl 844 theInelasticProcess->AddDataSet( theGGNuclNuclData ); 783 theInelasticProcess->RegisterMe( theFTFMod 845 theInelasticProcess->RegisterMe( theFTFModel1 ); 784 theInelasticProcess->RegisterMe( the 846 theInelasticProcess->RegisterMe( theBERTModel0 ); 785 pmanager->AddDiscreteProcess( theInelastic 847 pmanager->AddDiscreteProcess( theInelasticProcess ); 786 } 848 } 787 else if (particleName == "alpha") 849 else if (particleName == "alpha") 788 { 850 { 789 // Elastic scattering 851 // Elastic scattering 790 G4HadronElasticProcess* theElasticPr 852 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess; 791 theElasticProcess->AddDataSet( theGGNNEl ) << 792 theElasticProcess->RegisterMe( elast 853 theElasticProcess->RegisterMe( elastic_lhep0 ); 793 pmanager->AddDiscreteProcess( theElasticPr 854 pmanager->AddDiscreteProcess( theElasticProcess ); 794 // Inelastic scattering 855 // Inelastic scattering 795 G4HadronInelasticProcess* theInelasticProc << 856 G4AlphaInelasticProcess* theInelasticProcess = 796 new G4HadronInelasticProcess( "inelastic << 857 new G4AlphaInelasticProcess("inelastic"); 797 theInelasticProcess->AddDataSet( the 858 theInelasticProcess->AddDataSet( theGGNuclNuclData ); 798 theInelasticProcess->RegisterMe( theFTFMod 859 theInelasticProcess->RegisterMe( theFTFModel1 ); 799 theInelasticProcess->RegisterMe( the 860 theInelasticProcess->RegisterMe( theBERTModel0 ); 800 pmanager->AddDiscreteProcess( theInelastic 861 pmanager->AddDiscreteProcess( theInelasticProcess ); 801 } 862 } >> 863 802 } 864 } 803 } 865 } 804 866 >> 867 805 // Decays //////////////////////////////////// 868 // Decays /////////////////////////////////////////////////////////////////// >> 869 #include "G4Decay.hh" >> 870 #include "G4RadioactiveDecay.hh" >> 871 #include "G4IonTable.hh" >> 872 #include "G4Ions.hh" >> 873 806 void DMXPhysicsList::ConstructGeneral() { 874 void DMXPhysicsList::ConstructGeneral() { 807 875 808 // Add Decay Process 876 // Add Decay Process 809 G4Decay* theDecayProcess = new G4Decay(); 877 G4Decay* theDecayProcess = new G4Decay(); 810 auto particleIterator=GetParticleIterator(); << 878 theParticleIterator->reset(); 811 particleIterator->reset(); << 879 while( (*theParticleIterator)() ) 812 while( (*particleIterator)() ) << 813 { 880 { 814 G4ParticleDefinition* particle = particl << 881 G4ParticleDefinition* particle = theParticleIterator->value(); 815 G4ProcessManager* pmanager = particle->G 882 G4ProcessManager* pmanager = particle->GetProcessManager(); 816 883 817 if (theDecayProcess->IsApplicable(*parti 884 if (theDecayProcess->IsApplicable(*particle) && !particle->IsShortLived()) 818 { 885 { 819 pmanager ->AddProcess(theDecayProcess); 886 pmanager ->AddProcess(theDecayProcess); 820 // set ordering for PostStepDoIt and AtRes 887 // set ordering for PostStepDoIt and AtRestDoIt 821 pmanager ->SetProcessOrdering(theDecayProc 888 pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep); 822 pmanager ->SetProcessOrdering(theDecayProc 889 pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest); 823 } 890 } 824 } 891 } 825 892 826 // Declare radioactive decay to the GenericI 893 // Declare radioactive decay to the GenericIon in the IonTable. 827 G4LossTableManager* man = G4LossTableManager << 894 const G4IonTable *theIonTable = 828 G4VAtomDeexcitation* ad = man->AtomDeexcitat << 895 G4ParticleTable::GetParticleTable()->GetIonTable(); 829 if(!ad) { << 896 G4RadioactiveDecay *theRadioactiveDecay = new G4RadioactiveDecay(); 830 G4EmParameters::Instance()->SetAugerCascad << 831 ad = new G4UAtomicDeexcitation(); << 832 man->SetAtomDeexcitation(ad); << 833 ad->InitialiseAtomicDeexcitation(); << 834 } << 835 897 836 G4PhysicsListHelper::GetPhysicsListHelper()- << 898 for (G4int i=0; i<theIonTable->Entries(); i++) 837 RegisterProcess(new G4RadioactiveDecay(), << 899 { >> 900 G4String particleName = theIonTable->GetParticle(i)->GetParticleName(); >> 901 G4String particleType = theIonTable->GetParticle(i)->GetParticleType(); >> 902 >> 903 if (particleName == "GenericIon") >> 904 { >> 905 G4ProcessManager* pmanager = >> 906 theIonTable->GetParticle(i)->GetProcessManager(); >> 907 pmanager->SetVerboseLevel(VerboseLevel); >> 908 pmanager ->AddProcess(theRadioactiveDecay); >> 909 pmanager ->SetProcessOrdering(theRadioactiveDecay, idxPostStep); >> 910 pmanager ->SetProcessOrdering(theRadioactiveDecay, idxAtRest); >> 911 } >> 912 } 838 } 913 } 839 914 840 // Cuts ////////////////////////////////////// 915 // Cuts ///////////////////////////////////////////////////////////////////// 841 void DMXPhysicsList::SetCuts() 916 void DMXPhysicsList::SetCuts() 842 { 917 { 843 918 844 if (verboseLevel >1) 919 if (verboseLevel >1) 845 G4cout << "DMXPhysicsList::SetCuts:"; 920 G4cout << "DMXPhysicsList::SetCuts:"; 846 921 847 if (verboseLevel>0){ 922 if (verboseLevel>0){ 848 G4cout << "DMXPhysicsList::SetCuts:"; 923 G4cout << "DMXPhysicsList::SetCuts:"; 849 G4cout << "CutLength : " 924 G4cout << "CutLength : " 850 << G4BestUnit(defaultCutValue,"Length") < 925 << G4BestUnit(defaultCutValue,"Length") << G4endl; 851 } 926 } 852 927 853 //special for low energy physics 928 //special for low energy physics 854 G4double lowlimit=250*eV; 929 G4double lowlimit=250*eV; 855 G4ProductionCutsTable::GetProductionCutsTabl 930 G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(lowlimit,100.*GeV); 856 931 857 // set cut values for gamma at first and for 932 // set cut values for gamma at first and for e- second and next for e+, 858 // because some processes for e+/e- need cut 933 // because some processes for e+/e- need cut values for gamma 859 SetCutValue(cutForGamma, "gamma"); 934 SetCutValue(cutForGamma, "gamma"); 860 SetCutValue(cutForElectron, "e-"); 935 SetCutValue(cutForElectron, "e-"); 861 SetCutValue(cutForPositron, "e+"); 936 SetCutValue(cutForPositron, "e+"); 862 937 863 if (verboseLevel>0) DumpCutValuesTable(); 938 if (verboseLevel>0) DumpCutValuesTable(); 864 } 939 } 865 940 866 941