G4DNAMillerGreenExcitationModel Class Reference

#include <G4DNAMillerGreenExcitationModel.hh>

Inheritance diagram for G4DNAMillerGreenExcitationModel:

G4VEmModel

Public Member Functions

 G4DNAMillerGreenExcitationModel (const G4ParticleDefinition *p=0, const G4String &nam="DNAMillerGreenExcitationModel")
virtual ~G4DNAMillerGreenExcitationModel ()
virtual void Initialise (const G4ParticleDefinition *, const G4DataVector &)
virtual G4double CrossSectionPerVolume (const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax)
virtual void SampleSecondaries (std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)

Protected Attributes

G4ParticleChangeForGammafParticleChangeForGamma

Detailed Description

Definition at line 43 of file G4DNAMillerGreenExcitationModel.hh.


Constructor & Destructor Documentation

G4DNAMillerGreenExcitationModel::G4DNAMillerGreenExcitationModel ( const G4ParticleDefinition p = 0,
const G4String nam = "DNAMillerGreenExcitationModel" 
)

Definition at line 41 of file G4DNAMillerGreenExcitationModel.cc.

References fParticleChangeForGamma, G4cout, and G4endl.

00043     :G4VEmModel(nam),isInitialised(false)
00044 {
00045     //  nistwater = G4NistManager::Instance()->FindOrBuildMaterial("G4_WATER");
00046     fpMolWaterDensity = 0;
00047 
00048     nLevels=0;
00049     kineticEnergyCorrection[0]=0.;
00050     kineticEnergyCorrection[1]=0.;
00051     kineticEnergyCorrection[2]=0.;
00052     kineticEnergyCorrection[3]=0.;
00053 
00054     verboseLevel= 0;
00055     // Verbosity scale:
00056     // 0 = nothing
00057     // 1 = warning for energy non-conservation
00058     // 2 = details of energy budget
00059     // 3 = calculation of cross sections, file openings, sampling of atoms
00060     // 4 = entering in methods
00061 
00062     if( verboseLevel>0 )
00063     {
00064         G4cout << "Miller & Green excitation model is constructed " << G4endl;
00065     }
00066     fParticleChangeForGamma = 0;
00067 }

G4DNAMillerGreenExcitationModel::~G4DNAMillerGreenExcitationModel (  )  [virtual]

Definition at line 71 of file G4DNAMillerGreenExcitationModel.cc.

00072 {}


Member Function Documentation

G4double G4DNAMillerGreenExcitationModel::CrossSectionPerVolume ( const G4Material material,
const G4ParticleDefinition p,
G4double  ekin,
G4double  emin,
G4double  emax 
) [virtual]

Reimplemented from G4VEmModel.

Definition at line 222 of file G4DNAMillerGreenExcitationModel.cc.

References G4cout, G4endl, G4Material::GetIndex(), G4DNAGenericIonsManager::GetIon(), G4ParticleDefinition::GetParticleName(), G4DNAGenericIonsManager::Instance(), and G4Proton::ProtonDefinition().

00227 {
00228     if (verboseLevel > 3)
00229         G4cout << "Calling CrossSectionPerVolume() of G4DNAMillerGreenExcitationModel" << G4endl;
00230 
00231     // Calculate total cross section for model
00232 
00233     G4DNAGenericIonsManager *instance;
00234     instance = G4DNAGenericIonsManager::Instance();
00235 
00236     if (
00237             particleDefinition != G4Proton::ProtonDefinition()
00238             &&
00239             particleDefinition != instance->GetIon("hydrogen")
00240             &&
00241             particleDefinition != instance->GetIon("alpha++")
00242             &&
00243             particleDefinition != instance->GetIon("alpha+")
00244             &&
00245             particleDefinition != instance->GetIon("helium")
00246             )
00247 
00248         return 0;
00249 
00250     G4double lowLim = 0;
00251     G4double highLim = 0;
00252     G4double crossSection = 0.;
00253 
00254     G4double waterDensity = (*fpMolWaterDensity)[material->GetIndex()];
00255 
00256     if(waterDensity!= 0.0)
00257   //  if (material == nistwater || material->GetBaseMaterial() == nistwater)
00258     {
00259 //        G4cout << "WATER DENSITY = " << waterDensity*G4Material::GetMaterial("G4_WATER")->GetMassOfMolecule()/(g/cm3)
00260 //               << G4endl;
00261         const G4String& particleName = particleDefinition->GetParticleName();
00262 
00263         std::map< G4String,G4double,std::less<G4String> >::iterator pos1;
00264         pos1 = lowEnergyLimit.find(particleName);
00265 
00266         if (pos1 != lowEnergyLimit.end())
00267         {
00268             lowLim = pos1->second;
00269         }
00270 
00271         std::map< G4String,G4double,std::less<G4String> >::iterator pos2;
00272         pos2 = highEnergyLimit.find(particleName);
00273 
00274         if (pos2 != highEnergyLimit.end())
00275         {
00276             highLim = pos2->second;
00277         }
00278 
00279         if (k >= lowLim && k < highLim)
00280         {
00281             crossSection = Sum(k,particleDefinition);
00282 
00283             // add ONE or TWO electron-water excitation for alpha+ and helium
00284             /*
00285       if ( particleDefinition == instance->GetIon("alpha+")
00286            ||
00287            particleDefinition == instance->GetIon("helium")
00288          )
00289       {
00290 
00291       G4DNAEmfietzoglouExcitationModel * excitationXS = new G4DNAEmfietzoglouExcitationModel();
00292           excitationXS->Initialise(G4Electron::ElectronDefinition());
00293 
00294       G4double sigmaExcitation=0;
00295       G4double tmp =0.;
00296 
00297       if (k*0.511/3728 > 8.23*eV && k*0.511/3728 < 10*MeV ) sigmaExcitation =
00298         excitationXS->CrossSectionPerVolume(material,G4Electron::ElectronDefinition(),k*0.511/3728,tmp,tmp)
00299         /material->GetAtomicNumDensityVector()[1];
00300 
00301       if ( particleDefinition == instance->GetIon("alpha+") )
00302         crossSection = crossSection +  sigmaExcitation ;
00303 
00304       if ( particleDefinition == instance->GetIon("helium") )
00305         crossSection = crossSection + 2*sigmaExcitation ;
00306 
00307       delete excitationXS;
00308 
00309           // Alternative excitation model
00310 
00311           G4DNABornExcitationModel * excitationXS = new G4DNABornExcitationModel();
00312           excitationXS->Initialise(G4Electron::ElectronDefinition());
00313 
00314       G4double sigmaExcitation=0;
00315       G4double tmp=0;
00316 
00317       if (k*0.511/3728 > 9*eV && k*0.511/3728 < 1*MeV ) sigmaExcitation =
00318         excitationXS->CrossSectionPerVolume(material,G4Electron::ElectronDefinition(),k*0.511/3728,tmp,tmp)
00319         /material->GetAtomicNumDensityVector()[1];
00320 
00321       if ( particleDefinition == instance->GetIon("alpha+") )
00322         crossSection = crossSection +  sigmaExcitation ;
00323 
00324       if ( particleDefinition == instance->GetIon("helium") )
00325         crossSection = crossSection + 2*sigmaExcitation ;
00326 
00327       delete excitationXS;
00328 
00329       }
00330 */      
00331 
00332         }
00333 
00334         if (verboseLevel > 2)
00335         {
00336             G4cout << "__________________________________" << G4endl;
00337             G4cout << "°°° G4DNAMillerGreenExcitationModel - XS INFO START" << G4endl;
00338             G4cout << "°°° Kinetic energy(eV)=" << k/eV << " particle : " << particleDefinition->GetParticleName() << G4endl;
00339             G4cout << "°°° Cross section per water molecule (cm^2)=" << crossSection/cm/cm << G4endl;
00340             G4cout << "°°° Cross section per water molecule (cm^-1)=" << crossSection*waterDensity/(1./cm) << G4endl;
00341             //      G4cout << " - Cross section per water molecule (cm^-1)=" << sigma*material->GetAtomicNumDensityVector()[1]/(1./cm) << G4endl;
00342             G4cout << "°°° G4DNAMillerGreenExcitationModel - XS INFO END" << G4endl;
00343         }
00344     }
00345     else
00346     {
00347         if (verboseLevel > 2)
00348         {
00349             G4cout << "MillerGreenExcitationModel : WARNING Water density is NULL" << G4endl;
00350         }
00351     }
00352 
00353     return crossSection*waterDensity;
00354     // return crossSection*material->GetAtomicNumDensityVector()[1];
00355 
00356 }

void G4DNAMillerGreenExcitationModel::Initialise ( const G4ParticleDefinition ,
const G4DataVector  
) [virtual]

Implements G4VEmModel.

Definition at line 76 of file G4DNAMillerGreenExcitationModel.cc.

References fParticleChangeForGamma, G4cout, G4endl, G4DNAGenericIonsManager::GetIon(), G4Material::GetMaterial(), G4DNAMolecularMaterial::GetNumMolPerVolTableFor(), G4VEmModel::GetParticleChangeForGamma(), G4ParticleDefinition::GetParticleName(), G4VEmModel::HighEnergyLimit(), G4DNAMolecularMaterial::Instance(), G4DNAGenericIonsManager::Instance(), G4VEmModel::LowEnergyLimit(), G4DNAWaterExcitationStructure::NumberOfLevels(), G4InuclParticleNames::proton, G4Proton::ProtonDefinition(), G4VEmModel::SetHighEnergyLimit(), and G4VEmModel::SetLowEnergyLimit().

00078 {
00079 
00080     if (verboseLevel > 3)
00081         G4cout << "Calling G4DNAMillerGreenExcitationModel::Initialise()" << G4endl;
00082 
00083     // Energy limits
00084 
00085     G4DNAGenericIonsManager *instance;
00086     instance = G4DNAGenericIonsManager::Instance();
00087     G4ParticleDefinition* protonDef = G4Proton::ProtonDefinition();
00088     G4ParticleDefinition* hydrogenDef = instance->GetIon("hydrogen");
00089     G4ParticleDefinition* alphaPlusPlusDef = instance->GetIon("alpha++");
00090     G4ParticleDefinition* alphaPlusDef = instance->GetIon("alpha+");
00091     G4ParticleDefinition* heliumDef = instance->GetIon("helium");
00092 
00093     G4String proton;
00094     G4String hydrogen;
00095     G4String alphaPlusPlus;
00096     G4String alphaPlus;
00097     G4String helium;
00098 
00099     // LIMITS AND CONSTANTS
00100 
00101     proton = protonDef->GetParticleName();
00102     lowEnergyLimit[proton] = 10. * eV;
00103     highEnergyLimit[proton] = 500. * keV;
00104     
00105     kineticEnergyCorrection[0] = 1.;
00106     slaterEffectiveCharge[0][0] = 0.;
00107     slaterEffectiveCharge[1][0] = 0.;
00108     slaterEffectiveCharge[2][0] = 0.;
00109     sCoefficient[0][0] = 0.;
00110     sCoefficient[1][0] = 0.;
00111     sCoefficient[2][0] = 0.;
00112 
00113     hydrogen = hydrogenDef->GetParticleName();
00114     lowEnergyLimit[hydrogen] = 10. * eV;
00115     highEnergyLimit[hydrogen] = 500. * keV;
00116     
00117     kineticEnergyCorrection[0] = 1.;
00118     slaterEffectiveCharge[0][0] = 0.;
00119     slaterEffectiveCharge[1][0] = 0.;
00120     slaterEffectiveCharge[2][0] = 0.;
00121     sCoefficient[0][0] = 0.;
00122     sCoefficient[1][0] = 0.;
00123     sCoefficient[2][0] = 0.;
00124 
00125     alphaPlusPlus = alphaPlusPlusDef->GetParticleName();
00126     lowEnergyLimit[alphaPlusPlus] = 1. * keV;
00127     highEnergyLimit[alphaPlusPlus] = 400. * MeV;
00128 
00129     kineticEnergyCorrection[1] = 0.9382723/3.727417;
00130     slaterEffectiveCharge[0][1]=0.;
00131     slaterEffectiveCharge[1][1]=0.;
00132     slaterEffectiveCharge[2][1]=0.;
00133     sCoefficient[0][1]=0.;
00134     sCoefficient[1][1]=0.;
00135     sCoefficient[2][1]=0.;
00136 
00137     alphaPlus = alphaPlusDef->GetParticleName();
00138     lowEnergyLimit[alphaPlus] = 1. * keV;
00139     highEnergyLimit[alphaPlus] = 400. * MeV;
00140 
00141     kineticEnergyCorrection[2] = 0.9382723/3.727417;
00142     slaterEffectiveCharge[0][2]=2.0;
00143 
00144     // Following values provided by M. Dingfelder
00145     slaterEffectiveCharge[1][2]=2.00;
00146     slaterEffectiveCharge[2][2]=2.00;
00147     //
00148     sCoefficient[0][2]=0.7;
00149     sCoefficient[1][2]=0.15;
00150     sCoefficient[2][2]=0.15;
00151 
00152     helium = heliumDef->GetParticleName();
00153     lowEnergyLimit[helium] = 1. * keV;
00154     highEnergyLimit[helium] = 400. * MeV;
00155     
00156     kineticEnergyCorrection[3] = 0.9382723/3.727417;
00157     slaterEffectiveCharge[0][3]=1.7;
00158     slaterEffectiveCharge[1][3]=1.15;
00159     slaterEffectiveCharge[2][3]=1.15;
00160     sCoefficient[0][3]=0.5;
00161     sCoefficient[1][3]=0.25;
00162     sCoefficient[2][3]=0.25;
00163 
00164     //
00165 
00166     if (particle==protonDef)
00167     {
00168         SetLowEnergyLimit(lowEnergyLimit[proton]);
00169         SetHighEnergyLimit(highEnergyLimit[proton]);
00170     }
00171 
00172     if (particle==hydrogenDef)
00173     {
00174         SetLowEnergyLimit(lowEnergyLimit[hydrogen]);
00175         SetHighEnergyLimit(highEnergyLimit[hydrogen]);
00176     }
00177 
00178     if (particle==alphaPlusPlusDef)
00179     {
00180         SetLowEnergyLimit(lowEnergyLimit[alphaPlusPlus]);
00181         SetHighEnergyLimit(highEnergyLimit[alphaPlusPlus]);
00182     }
00183 
00184     if (particle==alphaPlusDef)
00185     {
00186         SetLowEnergyLimit(lowEnergyLimit[alphaPlus]);
00187         SetHighEnergyLimit(highEnergyLimit[alphaPlus]);
00188     }
00189 
00190     if (particle==heliumDef)
00191     {
00192         SetLowEnergyLimit(lowEnergyLimit[helium]);
00193         SetHighEnergyLimit(highEnergyLimit[helium]);
00194     }
00195 
00196     //
00197 
00198     nLevels = waterExcitation.NumberOfLevels();
00199 
00200     //
00201     if( verboseLevel>0 )
00202     {
00203         G4cout << "Miller & Green excitation model is initialized " << G4endl
00204                << "Energy range: "
00205                << LowEnergyLimit() / eV << " eV - "
00206                << HighEnergyLimit() / keV << " keV for "
00207                << particle->GetParticleName()
00208                << G4endl;
00209     }
00210 
00211     // Initialize water density pointer
00212     fpMolWaterDensity = G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(G4Material::GetMaterial("G4_WATER"));
00213 
00214     if (isInitialised) { return; }
00215     fParticleChangeForGamma = GetParticleChangeForGamma();
00216     isInitialised = true;
00217 
00218 }

void G4DNAMillerGreenExcitationModel::SampleSecondaries ( std::vector< G4DynamicParticle * > *  ,
const G4MaterialCutsCouple ,
const G4DynamicParticle ,
G4double  tmin,
G4double  maxEnergy 
) [virtual]

Implements G4VEmModel.

Definition at line 360 of file G4DNAMillerGreenExcitationModel.cc.

References G4DNAChemistryManager::CreateWaterMolecule(), eExcitedMolecule, fParticleChangeForGamma, G4cout, G4endl, G4ParticleChangeForGamma::GetCurrentTrack(), G4DynamicParticle::GetDefinition(), G4DynamicParticle::GetKineticEnergy(), G4DynamicParticle::GetMomentumDirection(), G4DNAChemistryManager::Instance(), G4VParticleChange::ProposeLocalEnergyDeposit(), G4ParticleChangeForGamma::ProposeMomentumDirection(), and G4ParticleChangeForGamma::SetProposedKineticEnergy().

00365 {
00366 
00367     if (verboseLevel > 3)
00368         G4cout << "Calling SampleSecondaries() of G4DNAMillerGreenExcitationModel" << G4endl;
00369 
00370     G4double particleEnergy0 = aDynamicParticle->GetKineticEnergy();
00371 
00372     G4int level = RandomSelect(particleEnergy0,aDynamicParticle->GetDefinition());
00373 
00374     //  G4double excitationEnergy = waterExcitation.ExcitationEnergy(level);
00375 
00376     // Dingfelder's excitation levels
00377     const G4double excitation[]={ 8.17*eV, 10.13*eV, 11.31*eV, 12.91*eV, 14.50*eV};
00378     G4double excitationEnergy = excitation[level];
00379 
00380     G4double newEnergy = particleEnergy0 - excitationEnergy;
00381 
00382     if (newEnergy>0)
00383     {
00384         fParticleChangeForGamma->ProposeMomentumDirection(aDynamicParticle->GetMomentumDirection());
00385         fParticleChangeForGamma->SetProposedKineticEnergy(newEnergy);
00386         fParticleChangeForGamma->ProposeLocalEnergyDeposit(excitationEnergy);
00387 
00388         const G4Track * theIncomingTrack = fParticleChangeForGamma->GetCurrentTrack();
00389         G4DNAChemistryManager::Instance()->CreateWaterMolecule(eExcitedMolecule,
00390                                                                level,
00391                                                                theIncomingTrack);
00392 
00393     }
00394 
00395 }


Field Documentation

G4ParticleChangeForGamma* G4DNAMillerGreenExcitationModel::fParticleChangeForGamma [protected]

Definition at line 69 of file G4DNAMillerGreenExcitationModel.hh.

Referenced by G4DNAMillerGreenExcitationModel(), Initialise(), and SampleSecondaries().


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:51:48 2013 for Geant4 by  doxygen 1.4.7