source: trunk/source/processes/electromagnetic/lowenergy/include/G4PenelopeIonisationModel.hh@ 1346

Last change on this file since 1346 was 1337, checked in by garnier, 15 years ago

tag geant4.9.4 beta 1 + modifs locales

File size: 7.9 KB
RevLine 
[966]1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
[1315]26// $Id: G4PenelopeIonisationModel.hh,v 1.5 2010/04/15 10:02:10 pandola Exp $
[1337]27// GEANT4 tag $Name: geant4-09-04-beta-01 $
[966]28//
29// Author: Luciano Pandola
30//
31// History:
32// -----------
33// 26 Nov 2008 L. Pandola 1st implementation. Migration from EM process
34// to EM model. Physics is unchanged.
[1192]35// 21 Oct 2009 L. Pandola Remove un-necessary methods and variables to handle
36// AtomicDeexcitationFlag - now demanded to G4VEmModel
37// Add ActivateAuger() method
[1315]38// 29 Mar 2010 L. Pandola Added a dummy ComputeCrossSectioPerAtom() method issueing a
39// warning if users try to access atomic cross sections via
40// G4EmCalculator
41// 15 Apr 2010 L. Pandola Implemented model's own version of MinEnergyCut()
[966]42//
43// -------------------------------------------------------------------
44//
45// Class description:
46// Low Energy Electromagnetic Physics, e+ and e- ionisation
47// with Penelope Model
48// -------------------------------------------------------------------
49
50#ifndef G4PENELOPEIONISATIONMODEL_HH
51#define G4PENELOPEIONISATIONMODEL_HH 1
52
53#include "globals.hh"
54#include "G4VEmModel.hh"
55#include "G4DataVector.hh"
56#include "G4ParticleChangeForLoss.hh"
57#include "G4VCrossSectionHandler.hh"
58#include "G4PhysicsLogVector.hh"
59#include "G4AtomicDeexcitation.hh"
60
61class G4ParticleDefinition;
62class G4DynamicParticle;
63class G4MaterialCutsCouple;
64class G4Material;
65class G4VEMDataSet;
66
67class G4PenelopeIonisationModel : public G4VEmModel
68{
69
70public:
71
72 G4PenelopeIonisationModel(const G4ParticleDefinition* p=0,
73 const G4String& processName ="PenelopeIoni");
74
75 virtual ~G4PenelopeIonisationModel();
76
77 virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
78
[1315]79 //*This is a dummy method. Never inkoved by the tracking, it just issues
80 //*a warning if one tries to get Cross Sections per Atom via the
81 //*G4EmCalculator.
82 virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
83 G4double,
84 G4double,
85 G4double,
86 G4double,
87 G4double);
88
[966]89 virtual G4double CrossSectionPerVolume(const G4Material* material,
90 const G4ParticleDefinition* theParticle,
91 G4double kineticEnergy,
92 G4double cutEnergy,
93 G4double maxEnergy = DBL_MAX);
94
95 virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
96 const G4MaterialCutsCouple*,
97 const G4DynamicParticle*,
98 G4double tmin,
99 G4double maxEnergy);
100
101 virtual G4double ComputeDEDXPerVolume(const G4Material*,
102 const G4ParticleDefinition*,
103 G4double kineticEnergy,
104 G4double cutEnergy);
[1192]105
[1315]106 // Min cut in kinetic energy allowed by the model
107 virtual G4double MinEnergyCut(const G4ParticleDefinition*,
108 const G4MaterialCutsCouple*);
109
[966]110 void SetVerbosityLevel(G4int lev){verboseLevel = lev;};
111 G4int GetVerbosityLevel(){return verboseLevel;};
112
[1192]113 void ActivateAuger(G4bool);
[966]114
115protected:
116 G4ParticleChangeForLoss* fParticleChange;
117
118private:
119
120 G4PenelopeIonisationModel & operator=(const G4PenelopeIonisationModel &right);
121 G4PenelopeIonisationModel(const G4PenelopeIonisationModel&);
122
123
124 //Intrinsic energy limits of the model: cannot be extended by the parent process
125 G4double fIntrinsicLowEnergyLimit;
126 G4double fIntrinsicHighEnergyLimit;
127
128 G4int verboseLevel;
129
130 G4bool isInitialised;
131
132 G4double CalculateDeltaFermi(G4double kinEnergy ,G4int Z,
133 G4double electronVolumeDensity);
134
135 //Methods and variables to calculate final state
136 void CalculateDiscreteForElectrons(G4double kinEnergy,G4double cutoffEnergy,
137 G4int Z,G4double electronVolumeDensity);
138 void CalculateDiscreteForPositrons(G4double kinEnergy,G4double cutoffEnergy,
[1192]139 G4int Z,G4double electronVolumeDensity);
[966]140
141 G4AtomicDeexcitation deexcitationManager;
142 G4double kineticEnergy1;
143 G4double cosThetaPrimary;
144 G4double energySecondary;
145 G4double cosThetaSecondary;
146 G4int iOsc;
147
148 //These methods are used to calculate the hard-cross section (namely they
149 //return the hard/total cross section)
150 G4double CalculateCrossSectionsRatio(G4double kinEnergy,
151 G4double cutoffEnergy,
152 G4int Z,
153 G4double electronVolumeDensity,
154 const G4ParticleDefinition*);
155 //In fact the total cross section (hard+soft) is read from file
156 //The following methods give the cross section contribution (hard and soft) from each
157 //individual oscillator
158 std::pair<G4double,G4double> CrossSectionsRatioForElectrons(G4double kineticEnergy,
159 G4double resEnergy,
160 G4double densityCorrection,
161 G4double cutoffEnergy);
162
163 std::pair<G4double,G4double> CrossSectionsRatioForPositrons(G4double kineticEnergy,
164 G4double resEnergy,
165 G4double densityCorrection,
166 G4double cutoffEnergy);
167
168 G4VCrossSectionHandler* crossSectionHandler;
169
170 //These methods are used to calculate the stopping power up to the cutoff
171 //for each individual oscillator
172 G4double ComputeStoppingPowerForElectrons(G4double kinEnergy,
173 G4double cutEnergy,
174 G4double deltaFermi,
175 G4double resEnergy);
176
177 G4double ComputeStoppingPowerForPositrons(G4double kinEnergy,
178 G4double cutEnergy,
179 G4double deltaFermi,
180 G4double resEnergy);
181
182
183 //Parameters of atomic shells
184 void ReadData();
185 std::map<G4int,G4DataVector*> *ionizationEnergy;
186 std::map<G4int,G4DataVector*> *resonanceEnergy;
187 std::map<G4int,G4DataVector*> *occupationNumber;
188 std::map<G4int,G4DataVector*> *shellFlag;
189
190 //Mean free path table. This will become obsolete! For now I need something to store
191 //cross sections and to sample a random atom
192 std::vector<G4VEMDataSet*>* theXSTable;
193 std::vector<G4VEMDataSet*>* BuildCrossSectionTable(const G4ParticleDefinition*);
194 G4int SampleRandomAtom(const G4MaterialCutsCouple*,G4double energy) const;
195
196};
197
198#endif
199
Note: See TracBrowser for help on using the repository browser.