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