00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #include "G4QAtomicPhysics.hh"
00040 #include "G4ParticleDefinition.hh"
00041 #include "G4ProcessManager.hh"
00042 #include "G4LossTableManager.hh"
00043 #include "G4EmProcessOptions.hh"
00044
00045 #include "G4ComptonScattering.hh"
00046 #include "G4GammaConversion.hh"
00047 #include "G4PhotoElectricEffect.hh"
00048
00049 #include "G4eMultipleScattering.hh"
00050 #include "G4MuMultipleScattering.hh"
00051 #include "G4hMultipleScattering.hh"
00052
00053 #include "G4eIonisation.hh"
00054 #include "G4eBremsstrahlung.hh"
00055 #include "G4eplusAnnihilation.hh"
00056
00057 #include "G4MuIonisation.hh"
00058 #include "G4MuBremsstrahlung.hh"
00059 #include "G4MuPairProduction.hh"
00060 #include "G4hBremsstrahlung.hh"
00061 #include "G4hPairProduction.hh"
00062
00063 #include "G4hIonisation.hh"
00064 #include "G4ionIonisation.hh"
00065
00066 #include "G4Gamma.hh"
00067 #include "G4Electron.hh"
00068 #include "G4Positron.hh"
00069 #include "G4MuonPlus.hh"
00070 #include "G4MuonMinus.hh"
00071 #include "G4PionPlus.hh"
00072 #include "G4PionMinus.hh"
00073 #include "G4KaonPlus.hh"
00074 #include "G4KaonMinus.hh"
00075 #include "G4Proton.hh"
00076 #include "G4AntiProton.hh"
00077 #include "G4SigmaPlus.hh"
00078 #include "G4SigmaMinus.hh"
00079 #include "G4XiMinus.hh"
00080 #include "G4OmegaMinus.hh"
00081 #include "G4AntiSigmaPlus.hh"
00082 #include "G4AntiSigmaMinus.hh"
00083 #include "G4AntiXiMinus.hh"
00084 #include "G4AntiOmegaMinus.hh"
00085 #include "G4Deuteron.hh"
00086 #include "G4Triton.hh"
00087 #include "G4He3.hh"
00088 #include "G4Alpha.hh"
00089 #include "G4GenericIon.hh"
00090 #include "G4BuilderType.hh"
00091
00092 G4QAtomicPhysics::G4QAtomicPhysics(G4int ver)
00093 : G4VPhysicsConstructor("CHIPS Atomic"), verbose(ver)
00094 {
00095 G4LossTableManager::Instance();
00096 SetPhysicsType(bElectromagnetic);
00097 }
00098
00099 G4QAtomicPhysics::G4QAtomicPhysics(G4int ver, const G4String& name)
00100 : G4VPhysicsConstructor(name), verbose(ver)
00101 {
00102 G4LossTableManager::Instance();
00103 SetPhysicsType(bElectromagnetic);
00104 }
00105
00106 G4QAtomicPhysics::~G4QAtomicPhysics()
00107 {}
00108
00109 void G4QAtomicPhysics::ConstructParticle()
00110 {
00111
00112 G4Gamma::Gamma();
00113
00114
00115 G4Electron::Electron();
00116 G4Positron::Positron();
00117 G4MuonPlus::MuonPlus();
00118 G4MuonMinus::MuonMinus();
00119
00120
00121 G4PionPlus::PionPlusDefinition();
00122 G4PionMinus::PionMinusDefinition();
00123 G4KaonPlus::KaonPlusDefinition();
00124 G4KaonMinus::KaonMinusDefinition();
00125
00126
00127 G4Proton::Proton();
00128 G4AntiProton::AntiProton();
00129 G4SigmaPlus::SigmaPlus();
00130 G4SigmaMinus::SigmaMinus();
00131 G4XiMinus::XiMinus();
00132 G4OmegaMinus::OmegaMinus();
00133 G4AntiSigmaPlus::AntiSigmaPlus();
00134 G4AntiSigmaMinus::AntiSigmaMinus();
00135 G4AntiXiMinus::AntiXiMinus();
00136 G4AntiOmegaMinus::AntiOmegaMinus();
00137
00138
00139 G4Deuteron::Deuteron();
00140 G4Triton::Triton();
00141 G4He3::He3();
00142 G4Alpha::Alpha();
00143 G4GenericIon::GenericIonDefinition();
00144 }
00145
00146 void G4QAtomicPhysics::ConstructProcess()
00147 {
00148 theParticleIterator->reset();
00149 while( (*theParticleIterator)() )
00150 {
00151 G4ParticleDefinition* particlePointer = theParticleIterator->value();
00152 G4ProcessManager* pmanager = particlePointer->GetProcessManager();
00153 G4String particle = particlePointer->GetParticleName();
00154 if(verbose > 1) G4cout<<"###G4QAtomicPhysics::ConstructProcesses: try "
00155 <<GetPhysicsName()<<" builder for "<<particle<<G4endl;
00156 if ( particle == "gamma")
00157 {
00158
00159 pmanager->AddDiscreteProcess(new G4PhotoElectricEffect);
00160 pmanager->AddDiscreteProcess(new G4ComptonScattering);
00161 pmanager->AddDiscreteProcess(new G4GammaConversion);
00162 }
00163 else if( particle == "e-")
00164 {
00165 pmanager->AddProcess(new G4eMultipleScattering(), -1, 1, 1);
00166 pmanager->AddProcess(new G4eIonisation, -1, 2, 2);
00167 pmanager->AddProcess(new G4eBremsstrahlung(), -1,-3, 3);
00168 }
00169 else if( particle == "e+")
00170 {
00171 pmanager->AddProcess(new G4eMultipleScattering(), -1, 1, 1);
00172 pmanager->AddProcess(new G4eIonisation, -1, 2, 2);
00173 pmanager->AddProcess(new G4eBremsstrahlung, -1,-3, 3);
00174 pmanager->AddProcess(new G4eplusAnnihilation, 0,-1, 4);
00175 }
00176 else if( particle == "mu+" || particle == "mu-" )
00177 {
00178 pmanager->AddProcess(new G4MuMultipleScattering, -1, 1, 1);
00179 pmanager->AddProcess(new G4MuIonisation, -1, 2, 2);
00180 pmanager->AddProcess(new G4MuBremsstrahlung, -1,-3, 3);
00181 pmanager->AddProcess(new G4MuPairProduction, -1,-4, 4);
00182 }
00183 else if( particle == "pi-" || particle == "pi+" ||
00184 particle == "kaon-" || particle == "kaon+" ||
00185 particle == "proton" || particle == "anti_proton" ||
00186 particle == "tau-" || particle == "tau+" ||
00187 particle == "deuteron" || particle == "triton" ||
00188 particle == "xi-" || particle == "anti_xi-" ||
00189 particle == "sigma+" || particle == "anti_sigma+" ||
00190 particle == "sigma-" || particle == "anti_sigma-" ||
00191 particle == "omega-" || particle == "anti_omega-" )
00192 {
00193 pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
00194 pmanager->AddProcess(new G4hIonisation, -1, 2, 2);
00195 pmanager->AddProcess(new G4hBremsstrahlung, -1,-3, 3);
00196 pmanager->AddProcess(new G4hPairProduction, -1,-4, 4);
00197 }
00198 else if(particle == "alpha" || particle == "He3" ||particle == "GenericIon")
00199 {
00200 pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
00201 pmanager->AddProcess(new G4ionIonisation, -1, 2, 2);
00202 }
00203 else if (particle == "B+" || particle == "B-" ||
00204 particle == "D+" || particle == "D-" ||
00205 particle == "Ds+" || particle == "Ds-" ||
00206 particle == "lambda_c+" || particle == "anti_lambda_c+" ||
00207 particle == "sigma_c+" || particle == "anti_sigma_c+" ||
00208 particle == "sigma_c++" || particle == "anti_sigma_c++" ||
00209 particle == "xi_c+" || particle == "anti_xi_c+" )
00210 {
00211 pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
00212 pmanager->AddProcess(new G4hIonisation, -1, 2, 2);
00213 }
00214 }
00215 G4EmProcessOptions opt;
00216 opt.SetVerbose(verbose);
00217 }