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/TestEm12/src/PhysListEmStandardSSM.cc 27 /// \brief Implementation of the PhysListEmStandardSSM class 28 // 29 // 30 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 31 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 32 33 #include "PhysListEmStandardSSM.hh" 34 35 #include "G4ComptonScattering.hh" 36 #include "G4CoulombScattering.hh" 37 #include "G4GammaConversion.hh" 38 #include "G4IonCoulombScatteringModel.hh" 39 #include "G4MuBremsstrahlung.hh" 40 #include "G4MuIonisation.hh" 41 #include "G4MuPairProduction.hh" 42 #include "G4ParticleDefinition.hh" 43 #include "G4PhotoElectricEffect.hh" 44 #include "G4ProcessManager.hh" 45 #include "G4SystemOfUnits.hh" 46 #include "G4eBremsstrahlung.hh" 47 #include "G4eCoulombScatteringModel.hh" 48 #include "G4eIonisation.hh" 49 #include "G4eSingleCoulombScatteringModel.hh" 50 #include "G4eplusAnnihilation.hh" 51 #include "G4hIonisation.hh" 52 #include "G4ionIonisation.hh" 53 54 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 55 56 PhysListEmStandardSSM::PhysListEmStandardSSM(const G4String& name) : G4VPhysicsConstructor(name) {} 57 58 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 59 60 void PhysListEmStandardSSM::ConstructProcess() 61 { 62 // Add standard EM Processes 63 64 auto particleIterator = GetParticleIterator(); 65 particleIterator->reset(); 66 while ((*particleIterator)()) { 67 G4ParticleDefinition* particle = particleIterator->value(); 68 G4ProcessManager* pmanager = particle->GetProcessManager(); 69 G4String particleName = particle->GetParticleName(); 70 71 if (particleName == "gamma") { 72 // gamma 73 pmanager->AddDiscreteProcess(new G4PhotoElectricEffect); 74 pmanager->AddDiscreteProcess(new G4ComptonScattering); 75 pmanager->AddDiscreteProcess(new G4GammaConversion); 76 } 77 else if (particleName == "e-") { 78 // electron 79 pmanager->AddProcess(new G4eIonisation, -1, 1, 1); 80 pmanager->AddProcess(new G4eBremsstrahlung, -1, 2, 2); 81 82 G4CoulombScattering* cs = new G4CoulombScattering(); 83 G4eSingleCoulombScatteringModel* model = new G4eSingleCoulombScatteringModel(); 84 // model->SetLowEnergyThreshold(10*eV); 85 model->SetPolarAngleLimit(0.0); 86 cs->AddEmModel(0, model); 87 pmanager->AddDiscreteProcess(cs); 88 } 89 else if (particleName == "e+") { 90 // positron 91 92 pmanager->AddProcess(new G4eIonisation, -1, 1, 1); 93 pmanager->AddProcess(new G4eBremsstrahlung, -1, 2, 2); 94 pmanager->AddProcess(new G4eplusAnnihilation, 0, -1, 3); 95 96 G4CoulombScattering* cs = new G4CoulombScattering(); 97 G4eSingleCoulombScatteringModel* model = new G4eSingleCoulombScatteringModel(); 98 model->SetPolarAngleLimit(0.0); 99 cs->AddEmModel(0, model); 100 pmanager->AddDiscreteProcess(cs); 101 } 102 else if (particleName == "mu+" || particleName == "mu-") { 103 // muon 104 pmanager->AddProcess(new G4MuIonisation, -1, 1, 1); 105 pmanager->AddProcess(new G4MuBremsstrahlung, -1, 2, 2); 106 pmanager->AddProcess(new G4MuPairProduction, -1, 3, 3); 107 G4CoulombScattering* cs = new G4CoulombScattering(); 108 G4eCoulombScatteringModel* model = new G4eCoulombScatteringModel(); 109 model->SetPolarAngleLimit(0.0); 110 cs->AddEmModel(0, model); 111 pmanager->AddDiscreteProcess(cs); 112 } 113 else if (particleName == "alpha" || particleName == "He3") { 114 pmanager->AddProcess(new G4ionIonisation, -1, 1, 1); 115 G4CoulombScattering* cs = new G4CoulombScattering(); 116 cs->AddEmModel(0, new G4IonCoulombScatteringModel()); 117 cs->SetBuildTableFlag(false); 118 pmanager->AddDiscreteProcess(cs); 119 } 120 else if (particleName == "GenericIon") { 121 pmanager->AddProcess(new G4ionIonisation, -1, 1, 1); 122 G4CoulombScattering* cs = new G4CoulombScattering(); 123 cs->AddEmModel(0, new G4IonCoulombScatteringModel()); 124 cs->SetBuildTableFlag(false); 125 pmanager->AddDiscreteProcess(cs); 126 } 127 else if ((!particle->IsShortLived()) && (particle->GetPDGCharge() != 0.0) 128 && (particle->GetParticleName() != "chargedgeantino")) 129 { 130 // all others charged particles except geantino 131 pmanager->AddProcess(new G4hIonisation, -1, 1, 1); 132 pmanager->AddDiscreteProcess(new G4CoulombScattering); 133 } 134 } 135 } 136 137 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 138