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 #include "G4DNAIonisation.hh"
00029 #include "G4SystemOfUnits.hh"
00030
00031
00032
00033 using namespace std;
00034
00035 G4DNAIonisation::G4DNAIonisation(const G4String& processName,
00036 G4ProcessType type):G4VEmProcess (processName, type),
00037 isInitialised(false)
00038 {
00039 SetProcessSubType(53);
00040 }
00041
00042
00043
00044 G4DNAIonisation::~G4DNAIonisation()
00045 {}
00046
00047
00048
00049 G4bool G4DNAIonisation::IsApplicable(const G4ParticleDefinition& p)
00050 {
00051 G4DNAGenericIonsManager *instance;
00052 instance = G4DNAGenericIonsManager::Instance();
00053
00054 return
00055 (
00056 &p == G4Electron::Electron()
00057 || &p == G4Proton::Proton()
00058 || &p == instance->GetIon("hydrogen")
00059 || &p == instance->GetIon("alpha++")
00060 || &p == instance->GetIon("alpha+")
00061 || &p == instance->GetIon("helium")
00062 || &p == instance->GetIon("carbon")
00063 || &p == instance->GetIon("nitrogen")
00064 || &p == instance->GetIon("oxygen")
00065 || &p == instance->GetIon("iron")
00066 );
00067 }
00068
00069
00070
00071 void G4DNAIonisation::InitialiseProcess(const G4ParticleDefinition* p)
00072 {
00073 if(!isInitialised)
00074 {
00075 isInitialised = true;
00076 SetBuildTableFlag(false);
00077
00078 G4String name = p->GetParticleName();
00079
00080 if(name == "e-")
00081 {
00082 if(!EmModel()) SetEmModel(new G4DNABornIonisationModel);
00083 EmModel()->SetLowEnergyLimit(11.*eV);
00084 EmModel()->SetHighEnergyLimit(1.*MeV);
00085
00086 AddEmModel(1, EmModel());
00087 }
00088
00089 if(name == "proton")
00090 {
00091 if(!EmModel(1)) SetEmModel(new G4DNARuddIonisationModel,1);
00092 EmModel(1)->SetLowEnergyLimit(0*eV);
00093 EmModel(1)->SetHighEnergyLimit(500*keV);
00094
00095 if(!EmModel(2)) SetEmModel(new G4DNABornIonisationModel,2);
00096 EmModel(2)->SetLowEnergyLimit(500*keV);
00097 EmModel(2)->SetHighEnergyLimit(100*MeV);
00098
00099 AddEmModel(1, EmModel(1));
00100 AddEmModel(2, EmModel(2));
00101 }
00102
00103 if(name == "hydrogen")
00104 {
00105 if(!EmModel()) SetEmModel(new G4DNARuddIonisationModel);
00106 EmModel()->SetLowEnergyLimit(0*eV);
00107 EmModel()->SetHighEnergyLimit(100*MeV);
00108
00109 AddEmModel(1, EmModel());
00110 }
00111
00112 if(name == "alpha" || name == "alpha+" || name == "helium" )
00113 {
00114 if(!EmModel()) SetEmModel(new G4DNARuddIonisationModel);
00115 EmModel()->SetLowEnergyLimit(0*keV);
00116 EmModel()->SetHighEnergyLimit(400*MeV);
00117
00118 AddEmModel(1, EmModel());
00119 }
00120
00121
00122
00123 if(name == "carbon" || name == "nitrogen" || name == "oxygen" || name == "iron")
00124 {
00125 if(!EmModel()) SetEmModel(new G4DNARuddIonisationExtendedModel);
00126 EmModel()->SetLowEnergyLimit(0*keV);
00127 EmModel()->SetHighEnergyLimit(p->GetAtomicMass()*1e6*MeV);
00128
00129 AddEmModel(1, EmModel());
00130 }
00131
00132 }
00133 }
00134
00135
00136
00137 void G4DNAIonisation::PrintInfo()
00138 {
00139 if (EmModel(2))
00140 {
00141 G4cout
00142 << " Total cross sections computed from "
00143 << EmModel(1)->GetName()
00144 << " and "
00145 << EmModel(2)->GetName()
00146 << " models"
00147 << G4endl;
00148 }
00149 else
00150 {
00151 G4cout
00152 << " Total cross sections computed from "
00153 << EmModel()->GetName()
00154 << G4endl;
00155 }
00156 }
00157
00158