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 #ifndef G4LivermorePhotoElectricModel_h
00040 #define G4LivermorePhotoElectricModel_h 1
00041
00042 #include "G4VEmModel.hh"
00043 #include "G4ElementData.hh"
00044 #include <vector>
00045
00046 class G4ParticleChangeForGamma;
00047 class G4VAtomDeexcitation;
00048 class G4LPhysicsFreeVector;
00049
00050 class G4LivermorePhotoElectricModel : public G4VEmModel
00051 {
00052
00053 public:
00054
00055 G4LivermorePhotoElectricModel(const G4String& nam = "LivermorePhElectric");
00056
00057 virtual ~G4LivermorePhotoElectricModel();
00058
00059 virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
00060
00061 virtual G4double ComputeCrossSectionPerAtom(
00062 const G4ParticleDefinition*,
00063 G4double kinEnergy,
00064 G4double Z,
00065 G4double A=0,
00066 G4double cut=0,
00067 G4double emax=DBL_MAX);
00068
00069 virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
00070 const G4MaterialCutsCouple*,
00071 const G4DynamicParticle*,
00072 G4double tmin,
00073 G4double maxEnergy);
00074
00075 inline void SetLimitNumberOfShells(G4int);
00076
00077
00078 protected:
00079
00080 G4ParticleChangeForGamma* fParticleChange;
00081
00082 private:
00083
00084 void ReadData(G4int Z, const char* path = 0);
00085
00086 G4LivermorePhotoElectricModel & operator=(const G4LivermorePhotoElectricModel &right);
00087 G4LivermorePhotoElectricModel(const G4LivermorePhotoElectricModel&);
00088
00089 G4ParticleDefinition* theGamma;
00090 G4ParticleDefinition* theElectron;
00091
00092 G4int verboseLevel;
00093 G4int maxZ;
00094 G4int nShellLimit;
00095 G4bool fDeexcitationActive;
00096 G4bool isInitialised;
00097
00098 G4LPhysicsFreeVector* fCrossSection[99];
00099 G4LPhysicsFreeVector* fCrossSectionLE[99];
00100 std::vector<G4double> fParam[99];
00101 G4int fNShells[99];
00102 G4int fNShellsUsed[99];
00103 G4ElementData fShellCrossSection;
00104
00105 G4VAtomDeexcitation* fAtomDeexcitation;
00106
00107 };
00108
00109 inline
00110 void G4LivermorePhotoElectricModel::SetLimitNumberOfShells(G4int n)
00111 {
00112 nShellLimit = n;
00113 }
00114
00115
00116
00117 #endif