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
00040
00041
00042
00043 #ifndef G4PENELOPEPHOTOELECTRICMODEL_HH
00044 #define G4PENELOPEPHOTOELECTRICMODEL_HH 1
00045
00046 #include "globals.hh"
00047 #include "G4VEmModel.hh"
00048 #include "G4DataVector.hh"
00049 #include "G4ParticleChangeForGamma.hh"
00050 #include "G4AtomicTransitionManager.hh"
00051 #include "G4VAtomDeexcitation.hh"
00052
00053 class G4ParticleDefinition;
00054 class G4DynamicParticle;
00055 class G4MaterialCutsCouple;
00056 class G4Material;
00057
00058 class G4PenelopePhotoElectricModel : public G4VEmModel
00059 {
00060
00061 public:
00062
00063 G4PenelopePhotoElectricModel(const G4ParticleDefinition* p=0,
00064 const G4String& processName ="PenPhotoElec");
00065
00066 virtual ~G4PenelopePhotoElectricModel();
00067
00068 virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
00069
00070 virtual G4double ComputeCrossSectionPerAtom(
00071 const G4ParticleDefinition*,
00072 G4double kinEnergy,
00073 G4double Z,
00074 G4double A=0,
00075 G4double cut=0,
00076 G4double emax=DBL_MAX);
00077
00078 virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
00079 const G4MaterialCutsCouple*,
00080 const G4DynamicParticle*,
00081 G4double tmin,
00082 G4double maxEnergy);
00083
00084 void SetVerbosityLevel(G4int lev){verboseLevel = lev;};
00085 G4int GetVerbosityLevel(){return verboseLevel;};
00086
00087
00088 size_t GetNumberOfShellXS(G4int);
00089 G4double GetShellCrossSection(G4int Z,size_t shellID,G4double energy);
00090
00091
00092 protected:
00093 G4ParticleChangeForGamma* fParticleChange;
00094
00095 private:
00096 G4PenelopePhotoElectricModel & operator=(const G4PenelopePhotoElectricModel &right);
00097 G4PenelopePhotoElectricModel(const G4PenelopePhotoElectricModel&);
00098
00099 G4double SampleElectronDirection(G4double energy);
00100
00101
00102 G4double fIntrinsicLowEnergyLimit;
00103 G4double fIntrinsicHighEnergyLimit;
00104
00105 G4int verboseLevel;
00106 G4bool isInitialised;
00107
00108 G4VAtomDeexcitation* fAtomDeexcitation;
00109 const G4AtomicTransitionManager* fTransitionManager;
00110
00111 void ReadDataFile(G4int Z);
00112
00113
00114
00115
00116
00117 std::map<G4int,G4PhysicsTable*> *logAtomicShellXS;
00118
00119 size_t SelectRandomShell(G4int Z,G4double energy);
00120 G4String WriteTargetShell(size_t shellID);
00121
00122
00123 };
00124
00125 #endif
00126