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 #ifndef G4LivermorePolarizedComptonModel_h
00032 #define G4LivermorePolarizedComptonModel_h 1
00033
00034 #include "G4VEmModel.hh"
00035 #include "G4Electron.hh"
00036 #include "G4ParticleChangeForGamma.hh"
00037 #include "G4CrossSectionHandler.hh"
00038 #include "G4LogLogInterpolation.hh"
00039 #include "G4CompositeEMDataSet.hh"
00040 #include "G4ShellData.hh"
00041 #include "G4DopplerProfile.hh"
00042 #include "G4ForceCondition.hh"
00043 #include "G4Gamma.hh"
00044
00045 class G4LivermorePolarizedComptonModel : public G4VEmModel
00046 {
00047
00048 public:
00049
00050 G4LivermorePolarizedComptonModel(const G4ParticleDefinition* p = 0,
00051 const G4String& nam = "LivermorePolarizedCompton");
00052
00053 virtual ~G4LivermorePolarizedComptonModel();
00054
00055 virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
00056
00057 virtual G4double ComputeCrossSectionPerAtom(
00058 const G4ParticleDefinition*,
00059 G4double kinEnergy,
00060 G4double Z,
00061 G4double A=0,
00062 G4double cut=0,
00063 G4double emax=DBL_MAX);
00064
00065 virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
00066 const G4MaterialCutsCouple*,
00067 const G4DynamicParticle*,
00068 G4double tmin,
00069 G4double maxEnergy);
00070
00071 protected:
00072
00073 G4ParticleChangeForGamma* fParticleChange;
00074
00075
00076
00077
00078
00079
00080 private:
00081
00082 G4double lowEnergyLimit;
00083 G4double highEnergyLimit;
00084 G4bool isInitialised;
00085 G4int verboseLevel;
00086
00087 G4VEMDataSet* meanFreePathTable;
00088 G4VEMDataSet* scatterFunctionData;
00089 G4VCrossSectionHandler* crossSectionHandler;
00090
00091
00092
00093 G4ThreeVector GetRandomPolarization(G4ThreeVector& direction0);
00094 G4ThreeVector GetPerpendicularPolarization(const G4ThreeVector& direction0, const G4ThreeVector& polarization0) const;
00095
00096 G4ThreeVector SetPerpendicularVector(G4ThreeVector& a);
00097 G4ThreeVector SetNewPolarization(G4double epsilon, G4double sinSqrTheta,
00098 G4double phi, G4double cosTheta);
00099 G4double SetPhi(G4double, G4double);
00100
00101 void SystemOfRefChange(G4ThreeVector& direction0, G4ThreeVector& direction1,
00102 G4ThreeVector& polarization0, G4ThreeVector& polarization1);
00103
00104
00105
00106 G4ShellData shellData;
00107 G4DopplerProfile profileData;
00108
00109 G4LivermorePolarizedComptonModel & operator=(const G4LivermorePolarizedComptonModel &right);
00110 G4LivermorePolarizedComptonModel(const G4LivermorePolarizedComptonModel&);
00111
00112 };
00113
00114
00115
00116 #endif