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 // 27 //--------------------------------------------------------------------------- 28 // 29 // ClassName: PhysListEmStandard 30 // 31 // Author: V.Ivanchenko 09.11.2005 32 // 33 // Modified: 34 // 35 //---------------------------------------------------------------------------- 36 // 37 38 #include "PhysListEmStandard.hh" 39 40 #include "G4BuilderType.hh" 41 #include "G4ComptonScattering.hh" 42 #include "G4CoulombScattering.hh" 43 #include "G4Electron.hh" 44 #include "G4EmBuilder.hh" 45 #include "G4EmModelActivator.hh" 46 #include "G4EmParameters.hh" 47 #include "G4Gamma.hh" 48 #include "G4GammaConversion.hh" 49 #include "G4GenericIon.hh" 50 #include "G4LivermorePhotoElectricModel.hh" 51 #include "G4LossTableManager.hh" 52 #include "G4ParticleDefinition.hh" 53 #include "G4PhotoElectricEffect.hh" 54 #include "G4PhysicsListHelper.hh" 55 #include "G4Positron.hh" 56 #include "G4RayleighScattering.hh" 57 #include "G4SystemOfUnits.hh" 58 #include "G4UrbanMscModel.hh" 59 #include "G4WentzelVIModel.hh" 60 #include "G4eBremsstrahlung.hh" 61 #include "G4eCoulombScatteringModel.hh" 62 #include "G4eIonisation.hh" 63 #include "G4eMultipleScattering.hh" 64 #include "G4eplusAnnihilation.hh" 65 #include "G4hIonisation.hh" 66 #include "G4hMultipleScattering.hh" 67 #include "G4ionIonisation.hh" 68 69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 70 71 PhysListEmStandard::PhysListEmStandard(G4int verbose) : G4VPhysicsConstructor("local") 72 { 73 G4EmParameters* param = G4EmParameters::Instance(); 74 param->SetDefaults(); 75 param->SetVerbose(verbose); 76 SetPhysicsType(bElectromagnetic); 77 SetVerboseLevel(verbose); 78 } 79 80 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 81 82 PhysListEmStandard::~PhysListEmStandard() {} 83 84 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 85 86 void PhysListEmStandard::ConstructParticle() 87 { 88 // minimal set of particles for EM physics 89 G4EmBuilder::ConstructMinimalEmSet(); 90 } 91 92 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 93 94 void PhysListEmStandard::ConstructProcess() 95 { 96 if (verboseLevel > 1) { 97 G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl; 98 } 99 G4EmBuilder::PrepareEMPhysics(); 100 101 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); 102 103 // processes used by several particles 104 G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc"); 105 G4NuclearStopping* pnuc(nullptr); 106 107 // high energy limit for e+- scattering models and bremsstrahlung 108 G4double highEnergyLimit = G4EmParameters::Instance()->MscEnergyLimit(); 109 110 // Add gamma EM Processes 111 G4ParticleDefinition* particle = G4Gamma::Gamma(); 112 113 G4PhotoElectricEffect* pee = new G4PhotoElectricEffect(); 114 pee->SetEmModel(new G4LivermorePhotoElectricModel()); 115 ph->RegisterProcess(pee, particle); 116 ph->RegisterProcess(new G4ComptonScattering(), particle); 117 ph->RegisterProcess(new G4GammaConversion(), particle); 118 ph->RegisterProcess(new G4RayleighScattering(), particle); 119 120 // e- 121 particle = G4Electron::Electron(); 122 123 G4eMultipleScattering* msc = new G4eMultipleScattering; 124 G4UrbanMscModel* msc1 = new G4UrbanMscModel(); 125 G4WentzelVIModel* msc2 = new G4WentzelVIModel(); 126 msc1->SetHighEnergyLimit(highEnergyLimit); 127 msc2->SetLowEnergyLimit(highEnergyLimit); 128 msc->SetEmModel(msc1); 129 msc->SetEmModel(msc2); 130 131 G4eCoulombScatteringModel* ssm = new G4eCoulombScatteringModel(); 132 G4CoulombScattering* ss = new G4CoulombScattering(); 133 ss->SetEmModel(ssm); 134 ss->SetMinKinEnergy(highEnergyLimit); 135 ssm->SetLowEnergyLimit(highEnergyLimit); 136 ssm->SetActivationLowEnergyLimit(highEnergyLimit); 137 138 ph->RegisterProcess(msc, particle); 139 ph->RegisterProcess(new G4eIonisation(), particle); 140 ph->RegisterProcess(new G4eBremsstrahlung(), particle); 141 ph->RegisterProcess(ss, particle); 142 143 // e+ 144 particle = G4Positron::Positron(); 145 146 msc = new G4eMultipleScattering; 147 msc1 = new G4UrbanMscModel(); 148 msc2 = new G4WentzelVIModel(); 149 msc1->SetHighEnergyLimit(highEnergyLimit); 150 msc2->SetLowEnergyLimit(highEnergyLimit); 151 msc->SetEmModel(msc1); 152 msc->SetEmModel(msc2); 153 154 ssm = new G4eCoulombScatteringModel(); 155 ss = new G4CoulombScattering(); 156 ss->SetEmModel(ssm); 157 ss->SetMinKinEnergy(highEnergyLimit); 158 ssm->SetLowEnergyLimit(highEnergyLimit); 159 ssm->SetActivationLowEnergyLimit(highEnergyLimit); 160 161 ph->RegisterProcess(msc, particle); 162 ph->RegisterProcess(new G4eIonisation(), particle); 163 ph->RegisterProcess(new G4eBremsstrahlung(), particle); 164 ph->RegisterProcess(new G4eplusAnnihilation(), particle); 165 ph->RegisterProcess(ss, particle); 166 167 // generic ion 168 particle = G4GenericIon::GenericIon(); 169 G4ionIonisation* ionIoni = new G4ionIonisation(); 170 ph->RegisterProcess(hmsc, particle); 171 ph->RegisterProcess(ionIoni, particle); 172 173 // muons, hadrons ions 174 G4EmBuilder::ConstructCharged(hmsc, pnuc); 175 176 // extra configuration 177 G4EmModelActivator mact(GetPhysicsName()); 178 } 179 180 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 181