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 #ifndef G4LivermoreGammaConversionModel_h
00031 #define G4LivermoreGammaConversionModel_h 1
00032
00033 #include "G4VEmModel.hh"
00034 #include "G4Electron.hh"
00035 #include "G4Positron.hh"
00036 #include "G4ParticleChangeForGamma.hh"
00037 #include "G4LPhysicsFreeVector.hh"
00038 #include "G4ProductionCutsTable.hh"
00039
00040 class G4LivermoreGammaConversionModel : public G4VEmModel
00041 {
00042
00043 public:
00044
00045 G4LivermoreGammaConversionModel(const G4ParticleDefinition* p = 0,
00046 const G4String& nam = "LivermoreConversion");
00047
00048 virtual ~G4LivermoreGammaConversionModel();
00049
00050 virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
00051
00052 virtual G4double ComputeCrossSectionPerAtom(
00053 const G4ParticleDefinition*,
00054 G4double kinEnergy,
00055 G4double Z,
00056 G4double A=0,
00057 G4double cut=0,
00058 G4double emax=DBL_MAX);
00059
00060 virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
00061 const G4MaterialCutsCouple*,
00062 const G4DynamicParticle*,
00063 G4double tmin,
00064 G4double maxEnergy);
00065
00066 private:
00067
00068 void ReadData(size_t Z, const char* path = 0);
00069
00070 G4double ScreenFunction1(G4double screenVariable);
00071 G4double ScreenFunction2(G4double screenVariable);
00072
00073 G4LivermoreGammaConversionModel & operator=(const G4LivermoreGammaConversionModel &right);
00074 G4LivermoreGammaConversionModel(const G4LivermoreGammaConversionModel&);
00075
00076 G4double smallEnergy;
00077 G4bool isInitialised;
00078 G4int maxZ;
00079
00080 G4double lowEnergyLimit;
00081 G4int verboseLevel;
00082
00083 G4ParticleChangeForGamma* fParticleChange;
00084
00085 std::vector<G4LPhysicsFreeVector*> data;
00086
00087 };
00088
00089
00090
00091 #endif