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: G4EmStandardPhysicsSS 30 // 31 // Author: V.Ivanchenko 09.11.2005 32 // 33 // Modified: 34 // 05.12.2005 V.Ivanchenko add controlled verbosity 35 // 13.11.2006 V.Ivanchenko use G4hMultipleScattering 36 // 23.11.2006 V.Ivanchenko remove mscStepLimit option and improve cout 37 // 13.02.2007 V.Ivanchenko use G4hMultipleScattering for muons 38 // 13.02.2007 V.Ivanchenko set skin=0.0 39 // 21.04.2008 V.Ivanchenko add long-lived D and B mesons 40 // 41 //---------------------------------------------------------------------------- 42 // 43 44 #include "G4EmStandardPhysicsSS.hh" 45 #include "G4SystemOfUnits.hh" 46 #include "G4ParticleDefinition.hh" 47 #include "G4EmParameters.hh" 48 #include "G4EmBuilder.hh" 49 #include "G4LossTableManager.hh" 50 51 #include "G4ComptonScattering.hh" 52 #include "G4GammaConversion.hh" 53 #include "G4PhotoElectricEffect.hh" 54 #include "G4RayleighScattering.hh" 55 #include "G4BetheHeitler5DModel.hh" 56 #include "G4hMultipleScattering.hh" 57 58 #include "G4KleinNishinaModel.hh" 59 #include "G4LivermorePhotoElectricModel.hh" 60 #include "G4CoulombScattering.hh" 61 #include "G4eCoulombScatteringModel.hh" 62 #include "G4hCoulombScatteringModel.hh" 63 #include "G4LivermorePhotoElectricModel.hh" 64 #include "G4LivermorePolarizedRayleighModel.hh" 65 #include "G4PhotoElectricAngularGeneratorPolarized.hh" 66 #include "G4LindhardSorensenIonModel.hh" 67 #include "G4IonFluctuations.hh" 68 69 //#include "G4eSingleCoulombScatteringModel.hh" 70 #include "G4eDPWACoulombScatteringModel.hh" 71 72 #include "G4eIonisation.hh" 73 #include "G4eBremsstrahlung.hh" 74 #include "G4eplusAnnihilation.hh" 75 #include "G4UAtomicDeexcitation.hh" 76 #include "G4ePairProduction.hh" 77 78 #include "G4hIonisation.hh" 79 #include "G4ionIonisation.hh" 80 81 #include "G4ParticleTable.hh" 82 #include "G4Gamma.hh" 83 #include "G4Electron.hh" 84 #include "G4Positron.hh" 85 #include "G4GenericIon.hh" 86 87 #include "G4PhysicsListHelper.hh" 88 #include "G4BuilderType.hh" 89 #include "G4EmModelActivator.hh" 90 #include "G4GammaGeneralProcess.hh" 91 92 // factory 93 #include "G4PhysicsConstructorFactory.hh" 94 // 95 G4_DECLARE_PHYSCONSTR_FACTORY(G4EmStandardPhysicsSS); 96 97 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 98 99 G4EmStandardPhysicsSS::G4EmStandardPhysicsSS(G4int ver) 100 : G4VPhysicsConstructor("G4EmStandardSS") 101 { 102 SetVerboseLevel(ver); 103 G4EmParameters* param = G4EmParameters::Instance(); 104 param->SetDefaults(); 105 param->SetVerbose(ver); 106 param->SetLowestElectronEnergy(10*CLHEP::eV); 107 param->SetMscThetaLimit(0.0); 108 param->SetUseMottCorrection(true); // use Mott-correction for e-/e+ msc gs 109 param->SetAuger(true); 110 param->SetPixe(true); 111 SetPhysicsType(bElectromagnetic); 112 } 113 114 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 115 116 G4EmStandardPhysicsSS::~G4EmStandardPhysicsSS() 117 {} 118 119 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 120 121 void G4EmStandardPhysicsSS::ConstructParticle() 122 { 123 // minimal set of particles for EM physics 124 G4EmBuilder::ConstructMinimalEmSet(); 125 } 126 127 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 128 129 void G4EmStandardPhysicsSS::ConstructProcess() 130 { 131 if(verboseLevel > 1) { 132 G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl; 133 } 134 G4EmBuilder::PrepareEMPhysics(); 135 136 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); 137 G4EmParameters* param = G4EmParameters::Instance(); 138 139 // processes used by several particles 140 G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc"); 141 142 // Add gamma EM Processes 143 G4ParticleDefinition* particle = G4Gamma::Gamma(); 144 145 // Photoelectric 146 G4PhotoElectricEffect* pe = new G4PhotoElectricEffect(); 147 G4VEmModel* peModel = new G4LivermorePhotoElectricModel(); 148 pe->SetEmModel(peModel); 149 if(param->EnablePolarisation()) { 150 peModel->SetAngularDistribution(new G4PhotoElectricAngularGeneratorPolarized()); 151 } 152 153 // Compton scattering 154 G4ComptonScattering* cs = new G4ComptonScattering; 155 cs->SetEmModel(new G4KleinNishinaModel()); 156 157 // Gamma conversion 158 G4GammaConversion* gc = new G4GammaConversion(); 159 G4VEmModel* conv = new G4BetheHeitler5DModel(); 160 gc->SetEmModel(conv); 161 162 // default Rayleigh scattering is Livermore 163 G4RayleighScattering* rl = new G4RayleighScattering(); 164 if(param->EnablePolarisation()) { 165 rl->SetEmModel(new G4LivermorePolarizedRayleighModel()); 166 } 167 168 if(param->GeneralProcessActive()) { 169 G4GammaGeneralProcess* sp = new G4GammaGeneralProcess(); 170 sp->AddEmProcess(pe); 171 sp->AddEmProcess(cs); 172 sp->AddEmProcess(gc); 173 sp->AddEmProcess(rl); 174 G4LossTableManager::Instance()->SetGammaGeneralProcess(sp); 175 ph->RegisterProcess(sp, particle); 176 } else { 177 ph->RegisterProcess(pe, particle); 178 ph->RegisterProcess(cs, particle); 179 ph->RegisterProcess(gc, particle); 180 ph->RegisterProcess(rl, particle); 181 } 182 // e- 183 particle = G4Electron::Electron(); 184 185 G4VEmModel* ss = nullptr; 186 if(param->UseMottCorrection()) { 187 ss = new G4eDPWACoulombScatteringModel(); 188 } else { 189 ss = new G4eCoulombScatteringModel(false); 190 } 191 ph->RegisterProcess(new G4eIonisation(), particle); 192 ph->RegisterProcess(new G4eBremsstrahlung(), particle); 193 194 G4ePairProduction* ee = new G4ePairProduction(); 195 ph->RegisterProcess(ee, particle); 196 G4EmBuilder::ConstructElectronSSProcess(ss, particle); 197 198 // e+ 199 particle = G4Positron::Positron(); 200 201 if(param->UseMottCorrection()) { 202 ss = new G4eDPWACoulombScatteringModel(); 203 } else { 204 ss = new G4eCoulombScatteringModel(false); 205 } 206 ph->RegisterProcess(new G4eIonisation(), particle); 207 ph->RegisterProcess(new G4eBremsstrahlung(), particle); 208 ph->RegisterProcess(ee, particle); 209 ph->RegisterProcess(new G4eplusAnnihilation(), particle); 210 G4EmBuilder::ConstructElectronSSProcess(ss, particle); 211 212 // generic ion 213 particle = G4GenericIon::GenericIon(); 214 G4ionIonisation* ionIoni = new G4ionIonisation(); 215 auto fluc = new G4IonFluctuations(); 216 ionIoni->SetFluctModel(fluc); 217 ionIoni->SetEmModel(new G4LindhardSorensenIonModel()); 218 ph->RegisterProcess(ionIoni, particle); 219 ph->RegisterProcess(new G4CoulombScattering(false), particle); 220 221 // muons, hadrons, ions 222 G4EmBuilder::ConstructChargedSS(hmsc); 223 224 // extra configuration 225 G4EmModelActivator mact(GetPhysicsName()); 226 } 227 228 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 229