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
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 #ifndef G4PolarizedAnnihilationModel_h
00055 #define G4PolarizedAnnihilationModel_h 1
00056
00057 #include "G4eeToTwoGammaModel.hh"
00058 #include "G4StokesVector.hh"
00059
00060 class G4ParticleChangeForGamma;
00061 class G4PolarizedAnnihilationCrossSection;
00062
00063 class G4PolarizedAnnihilationModel : public G4eeToTwoGammaModel
00064 {
00065
00066 public:
00067
00068 G4PolarizedAnnihilationModel(const G4ParticleDefinition* p = 0,
00069 const G4String& nam = "Polarized-Annihilation");
00070
00071 virtual ~G4PolarizedAnnihilationModel();
00072
00073 virtual void Initialise(const G4ParticleDefinition*,
00074 const G4DataVector&);
00075 virtual G4double ComputeCrossSectionPerElectron(
00076 const G4ParticleDefinition*,
00077 G4double kinEnergy,
00078 G4double cut,
00079 G4double emax);
00080 void ComputeAsymmetriesPerElectron(G4double gammaEnergy,
00081 G4double & valueX,
00082 G4double & valueA,
00083 G4double & valueT);
00084
00085 virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
00086 const G4MaterialCutsCouple*,
00087 const G4DynamicParticle*,
00088 G4double tmin,
00089 G4double maxEnergy);
00090
00091
00092 inline void SetTargetPolarization(const G4ThreeVector & pTarget);
00093 inline void SetBeamPolarization(const G4ThreeVector & pBeam);
00094 inline const G4ThreeVector & GetTargetPolarization() const;
00095 inline const G4ThreeVector & GetBeamPolarization() const;
00096 inline const G4ThreeVector & GetFinalGamma1Polarization() const;
00097 inline const G4ThreeVector & GetFinalGamma2Polarization() const;
00098 private:
00099
00100
00101 G4PolarizedAnnihilationModel & operator=(const G4PolarizedAnnihilationModel &right);
00102 G4PolarizedAnnihilationModel(const G4PolarizedAnnihilationModel&);
00103
00104 G4PolarizedAnnihilationCrossSection * crossSectionCalculator;
00105
00106 G4StokesVector theBeamPolarization;
00107 G4StokesVector theTargetPolarization;
00108
00109 G4StokesVector finalGamma1Polarization;
00110 G4StokesVector finalGamma2Polarization;
00111
00112 G4int verboseLevel;
00113
00114 G4ParticleChangeForGamma* gParticleChange;
00115 G4bool gIsInitialised;
00116 };
00117
00118
00119
00120 inline void G4PolarizedAnnihilationModel::SetTargetPolarization(const G4ThreeVector & pTarget)
00121 {
00122 theTargetPolarization = pTarget;
00123 }
00124 inline void G4PolarizedAnnihilationModel::SetBeamPolarization(const G4ThreeVector & pBeam)
00125 {
00126 theBeamPolarization = pBeam;
00127 }
00128 inline const G4ThreeVector & G4PolarizedAnnihilationModel::GetTargetPolarization() const
00129 {
00130 return theTargetPolarization;
00131 }
00132 inline const G4ThreeVector & G4PolarizedAnnihilationModel::GetBeamPolarization() const
00133 {
00134 return theBeamPolarization;
00135 }
00136 inline const G4ThreeVector & G4PolarizedAnnihilationModel::GetFinalGamma1Polarization() const
00137 {
00138 return finalGamma1Polarization;
00139 }
00140 inline const G4ThreeVector & G4PolarizedAnnihilationModel::GetFinalGamma2Polarization() const
00141 {
00142 return finalGamma2Polarization;
00143 }
00144
00145 #endif