File indexing completed on 2026-09-15 08:29:48
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #include "ElectromagneticPhysics.hh"
0030
0031 #include "G4BuilderType.hh"
0032 #include "G4ComptonScattering.hh"
0033 #include "G4GammaConversion.hh"
0034 #include "G4IonParametrisedLossModel.hh"
0035 #include "G4LossTableManager.hh"
0036 #include "G4MuBremsstrahlung.hh"
0037 #include "G4MuIonisation.hh"
0038 #include "G4MuMultipleScattering.hh"
0039 #include "G4MuPairProduction.hh"
0040 #include "G4NuclearStopping.hh"
0041 #include "G4ParticleDefinition.hh"
0042 #include "G4PhotoElectricEffect.hh"
0043 #include "G4PhysicsListHelper.hh"
0044 #include "G4ProcessManager.hh"
0045 #include "G4RayleighScattering.hh"
0046 #include "G4SystemOfUnits.hh"
0047 #include "G4UAtomicDeexcitation.hh"
0048 #include "G4eBremsstrahlung.hh"
0049 #include "G4eIonisation.hh"
0050 #include "G4eMultipleScattering.hh"
0051 #include "G4eplusAnnihilation.hh"
0052 #include "G4hBremsstrahlung.hh"
0053 #include "G4hIonisation.hh"
0054 #include "G4hMultipleScattering.hh"
0055 #include "G4hPairProduction.hh"
0056 #include "G4ionIonisation.hh"
0057
0058
0059
0060 ElectromagneticPhysics::ElectromagneticPhysics(const G4String& name) : G4VPhysicsConstructor(name)
0061 {
0062 SetPhysicsType(bElectromagnetic);
0063
0064 G4EmParameters* param = G4EmParameters::Instance();
0065 param->SetDefaults();
0066 param->SetStepFunction(0.2, 100 * um);
0067 param->SetStepFunctionMuHad(0.1, 10 * um);
0068 param->SetStepFunctionLightIons(0.1, 10 * um);
0069 param->SetStepFunctionIons(0.1, 1 * um);
0070 param->SetDeexcitationIgnoreCut(true);
0071 }
0072
0073
0074
0075 void ElectromagneticPhysics::ConstructProcess()
0076 {
0077 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
0078
0079
0080
0081 auto particleIterator = GetParticleIterator();
0082 particleIterator->reset();
0083 while ((*particleIterator)()) {
0084 G4ParticleDefinition* particle = particleIterator->value();
0085 G4String particleName = particle->GetParticleName();
0086
0087 if (particleName == "gamma") {
0088 ph->RegisterProcess(new G4RayleighScattering, particle);
0089 ph->RegisterProcess(new G4PhotoElectricEffect, particle);
0090 ph->RegisterProcess(new G4ComptonScattering, particle);
0091 ph->RegisterProcess(new G4GammaConversion, particle);
0092 }
0093 else if (particleName == "e-") {
0094 ph->RegisterProcess(new G4eMultipleScattering(), particle);
0095 ph->RegisterProcess(new G4eIonisation, particle);
0096 ph->RegisterProcess(new G4eBremsstrahlung(), particle);
0097 }
0098 else if (particleName == "e+") {
0099 ph->RegisterProcess(new G4eMultipleScattering(), particle);
0100 ph->RegisterProcess(new G4eIonisation, particle);
0101 ph->RegisterProcess(new G4eBremsstrahlung(), particle);
0102 ph->RegisterProcess(new G4eplusAnnihilation(), particle);
0103 }
0104 else if (particleName == "mu+" || particleName == "mu-") {
0105 ph->RegisterProcess(new G4MuMultipleScattering(), particle);
0106 ph->RegisterProcess(new G4MuIonisation, particle);
0107 ph->RegisterProcess(new G4MuBremsstrahlung(), particle);
0108 ph->RegisterProcess(new G4MuPairProduction(), particle);
0109 }
0110 else if (particleName == "proton" || particleName == "pi-" || particleName == "pi+") {
0111 ph->RegisterProcess(new G4hMultipleScattering(), particle);
0112 ph->RegisterProcess(new G4hIonisation, particle);
0113 }
0114 else if (particleName == "alpha" || particleName == "He3") {
0115 ph->RegisterProcess(new G4hMultipleScattering(), particle);
0116 ph->RegisterProcess(new G4ionIonisation, particle);
0117 ph->RegisterProcess(new G4NuclearStopping(), particle);
0118 }
0119 else if (particleName == "GenericIon") {
0120 ph->RegisterProcess(new G4hMultipleScattering(), particle);
0121 G4ionIonisation* ionIoni = new G4ionIonisation();
0122 ionIoni->SetEmModel(new G4IonParametrisedLossModel());
0123 ph->RegisterProcess(ionIoni, particle);
0124 ph->RegisterProcess(new G4NuclearStopping(), particle);
0125 }
0126 else if ((!particle->IsShortLived()) && (particle->GetPDGCharge() != 0.0)
0127 && (particle->GetParticleName() != "chargedgeantino"))
0128 {
0129
0130 ph->RegisterProcess(new G4hMultipleScattering(), particle);
0131 ph->RegisterProcess(new G4hIonisation(), particle);
0132 }
0133 }
0134
0135
0136
0137 G4VAtomDeexcitation* de = new G4UAtomicDeexcitation();
0138 G4LossTableManager::Instance()->SetAtomDeexcitation(de);
0139 }
0140
0141