Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 /// \file electromagnetic/TestEm13/src/PhysListEmPenelope.cc 27 /// \brief Implementation of the PhysListEmPenelope class 28 // 29 // 30 // 31 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 32 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 33 34 #include "PhysListEmPenelope.hh" 35 36 #include "G4BuilderType.hh" 37 #include "G4ParticleDefinition.hh" 38 #include "G4ProcessManager.hh" 39 40 // gamma 41 42 #include "G4ComptonScattering.hh" 43 #include "G4GammaConversion.hh" 44 #include "G4PenelopeComptonModel.hh" 45 #include "G4PenelopeGammaConversionModel.hh" 46 #include "G4PenelopePhotoElectricModel.hh" 47 #include "G4PenelopeRayleighModel.hh" 48 #include "G4PhotoElectricEffect.hh" 49 #include "G4RayleighScattering.hh" 50 51 // e- 52 53 #include "G4PenelopeBremsstrahlungModel.hh" 54 #include "G4PenelopeIonisationModel.hh" 55 #include "G4UniversalFluctuation.hh" 56 #include "G4eBremsstrahlung.hh" 57 #include "G4eIonisation.hh" 58 59 // e+ 60 61 #include "G4PenelopeAnnihilationModel.hh" 62 #include "G4eplusAnnihilation.hh" 63 64 // mu 65 66 #include "G4MuBremsstrahlung.hh" 67 #include "G4MuIonisation.hh" 68 #include "G4MuPairProduction.hh" 69 70 // hadrons, ions 71 72 #include "G4hIonisation.hh" 73 #include "G4ionIonisation.hh" 74 75 // deexcitation 76 77 #include "G4LossTableManager.hh" 78 #include "G4SystemOfUnits.hh" 79 #include "G4UAtomicDeexcitation.hh" 80 81 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 82 83 PhysListEmPenelope::PhysListEmPenelope(const G4String& name) : G4VPhysicsConstructor(name) 84 { 85 G4EmParameters* param = G4EmParameters::Instance(); 86 param->SetDefaults(); 87 param->SetMinEnergy(10 * eV); 88 param->SetMaxEnergy(10 * TeV); 89 param->SetNumberOfBinsPerDecade(10); 90 91 param->SetVerbose(0); 92 param->Dump(); 93 } 94 95 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 96 97 void PhysListEmPenelope::ConstructProcess() 98 { 99 // Add standard EM Processes 100 101 auto particleIterator = GetParticleIterator(); 102 particleIterator->reset(); 103 while ((*particleIterator)()) { 104 G4ParticleDefinition* particle = particleIterator->value(); 105 G4ProcessManager* pmanager = particle->GetProcessManager(); 106 G4String particleName = particle->GetParticleName(); 107 108 // Applicability range for Penelope models 109 // for higher energies, the Standard models are used 110 G4double highEnergyLimit = 1 * GeV; 111 112 if (particleName == "gamma") { 113 // gamma 114 115 G4PhotoElectricEffect* phot = new G4PhotoElectricEffect(); 116 G4PenelopePhotoElectricModel* photModel = new G4PenelopePhotoElectricModel(); 117 photModel->SetHighEnergyLimit(highEnergyLimit); 118 phot->AddEmModel(0, photModel); 119 pmanager->AddDiscreteProcess(phot); 120 121 G4ComptonScattering* compt = new G4ComptonScattering(); 122 G4PenelopeComptonModel* comptModel = new G4PenelopeComptonModel(); 123 comptModel->SetHighEnergyLimit(highEnergyLimit); 124 compt->AddEmModel(0, comptModel); 125 pmanager->AddDiscreteProcess(compt); 126 127 G4GammaConversion* conv = new G4GammaConversion(); 128 G4PenelopeGammaConversionModel* convModel = new G4PenelopeGammaConversionModel(); 129 convModel->SetHighEnergyLimit(highEnergyLimit); 130 conv->AddEmModel(0, convModel); 131 pmanager->AddDiscreteProcess(conv); 132 133 G4RayleighScattering* rayl = new G4RayleighScattering(); 134 G4PenelopeRayleighModel* raylModel = new G4PenelopeRayleighModel(); 135 raylModel->SetHighEnergyLimit(highEnergyLimit); 136 rayl->AddEmModel(0, raylModel); 137 pmanager->AddDiscreteProcess(rayl); 138 } 139 else if (particleName == "e-") { 140 // electron 141 142 G4eIonisation* eIoni = new G4eIonisation(); 143 G4PenelopeIonisationModel* eIoniModel = new G4PenelopeIonisationModel(); 144 eIoniModel->SetHighEnergyLimit(highEnergyLimit); 145 eIoni->AddEmModel(0, eIoniModel, new G4UniversalFluctuation()); 146 pmanager->AddProcess(eIoni, -1, -1, 1); 147 148 G4eBremsstrahlung* eBrem = new G4eBremsstrahlung(); 149 G4PenelopeBremsstrahlungModel* eBremModel = new G4PenelopeBremsstrahlungModel(); 150 eBremModel->SetHighEnergyLimit(highEnergyLimit); 151 eBrem->AddEmModel(0, eBremModel); 152 pmanager->AddProcess(eBrem, -1, -1, 2); 153 } 154 else if (particleName == "e+") { 155 // positron 156 G4eIonisation* eIoni = new G4eIonisation(); 157 G4PenelopeIonisationModel* eIoniModel = new G4PenelopeIonisationModel(); 158 eIoniModel->SetHighEnergyLimit(highEnergyLimit); 159 eIoni->AddEmModel(0, eIoniModel, new G4UniversalFluctuation()); 160 pmanager->AddProcess(eIoni, -1, -1, 1); 161 162 G4eBremsstrahlung* eBrem = new G4eBremsstrahlung(); 163 G4PenelopeBremsstrahlungModel* eBremModel = new G4PenelopeBremsstrahlungModel(); 164 eBremModel->SetHighEnergyLimit(highEnergyLimit); 165 eBrem->AddEmModel(0, eBremModel); 166 pmanager->AddProcess(eBrem, -1, -1, 2); 167 168 G4eplusAnnihilation* eAnni = new G4eplusAnnihilation(); 169 G4PenelopeAnnihilationModel* eAnniModel = new G4PenelopeAnnihilationModel(); 170 eAnniModel->SetHighEnergyLimit(highEnergyLimit); 171 eAnni->AddEmModel(0, eAnniModel); 172 pmanager->AddProcess(eAnni, 0, -1, 3); 173 } 174 else if (particleName == "mu+" || particleName == "mu-") { 175 // muon 176 pmanager->AddProcess(new G4MuIonisation, -1, -1, 1); 177 pmanager->AddProcess(new G4MuBremsstrahlung, -1, -1, 2); 178 pmanager->AddProcess(new G4MuPairProduction, -1, -1, 3); 179 } 180 else if (particleName == "alpha" || particleName == "GenericIon") { 181 pmanager->AddProcess(new G4ionIonisation, -1, -1, 1); 182 } 183 else if ((!particle->IsShortLived()) && (particle->GetPDGCharge() != 0.0) 184 && (particle->GetParticleName() != "chargedgeantino")) 185 { 186 // all others charged particles except geantino 187 pmanager->AddProcess(new G4hIonisation, -1, -1, 1); 188 } 189 } 190 191 // Deexcitation 192 // 193 G4VAtomDeexcitation* deex = new G4UAtomicDeexcitation(); 194 G4LossTableManager::Instance()->SetAtomDeexcitation(deex); 195 } 196 197 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 198