00001
00002
00003
00004
00005
00006
00007
00008 #include "globals.hh"
00009 #include "PhysicsList.hh"
00010
00011 #include "G4ProcessManager.hh"
00012 #include "G4ParticleTypes.hh"
00013
00014
00015
00016 PhysicsList::PhysicsList(): G4VUserPhysicsList()
00017 {
00018 defaultCutValue = 1.0*mm;
00019 SetVerboseLevel(1);
00020 }
00021
00022
00023
00024 PhysicsList::~PhysicsList()
00025 {}
00026
00027
00028
00029 void PhysicsList::ConstructParticle()
00030 {
00031
00032 G4Geantino::GeantinoDefinition();
00033
00034
00035 G4Gamma::GammaDefinition();
00036
00037
00038 G4Electron::ElectronDefinition();
00039 G4Positron::PositronDefinition();
00040
00041
00042 G4Proton::ProtonDefinition();
00043
00044
00045 G4Neutron::NeutronDefinition();
00046 }
00047
00048
00049
00050 void PhysicsList::ConstructProcess()
00051 {
00052 AddTransportation();
00053 ConstructEM();
00054 }
00055
00056
00057
00058 #include "G4ComptonScattering.hh"
00059 #include "G4GammaConversion.hh"
00060 #include "G4PhotoElectricEffect.hh"
00061
00062 #include "G4MultipleScattering.hh"
00063
00064 #include "G4eIonisation.hh"
00065 #include "G4eBremsstrahlung.hh"
00066 #include "G4eplusAnnihilation.hh"
00067
00068 #include "G4hIonisation.hh"
00069
00070
00071
00072 void PhysicsList::ConstructEM()
00073 {
00074 theParticleIterator->reset();
00075 while( (*theParticleIterator)() ){
00076 G4ParticleDefinition* particle = theParticleIterator->value();
00077 G4ProcessManager* pmanager = particle->GetProcessManager();
00078 G4String particleName = particle->GetParticleName();
00079
00080 if (particleName == "gamma") {
00081
00082 pmanager->AddDiscreteProcess(new G4PhotoElectricEffect);
00083 pmanager->AddDiscreteProcess(new G4ComptonScattering);
00084 pmanager->AddDiscreteProcess(new G4GammaConversion);
00085
00086 } else if (particleName == "e-") {
00087
00088 pmanager->AddProcess(new G4MultipleScattering, -1, 1,1);
00089 pmanager->AddProcess(new G4eIonisation, -1, 2,2);
00090 pmanager->AddProcess(new G4eBremsstrahlung, -1, 3,3);
00091
00092 } else if (particleName == "e+") {
00093
00094 pmanager->AddProcess(new G4MultipleScattering, -1, 1,1);
00095 pmanager->AddProcess(new G4eIonisation, -1, 2,2);
00096 pmanager->AddProcess(new G4eBremsstrahlung, -1, 3,3);
00097 pmanager->AddProcess(new G4eplusAnnihilation, 0,-1,4);
00098
00099 } else if (particle->GetPDGCharge() != 0.0) {
00100 pmanager->AddProcess(new G4MultipleScattering, -1, 1,1);
00101 pmanager->AddProcess(new G4hIonisation, -1, 2,2);
00102 }
00103 }
00104 }
00105
00106
00107
00108 void PhysicsList::SetCuts()
00109 {
00110
00111
00112
00113 SetCutsWithDefault();
00114
00115 if (verboseLevel>0) DumpCutValuesTable();
00116 }
00117
00118
00119