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 G4VSCATTERINGCOLLISION_HH
00044 #define G4VSCATTERINGCOLLISION_HH
00045
00046 #include "globals.hh"
00047 #include "G4VCollision.hh"
00048 #include "G4VCrossSectionSource.hh"
00049 #include "G4VAngularDistribution.hh"
00050 #include "G4KineticTrackVector.hh"
00051
00052 class G4KineticTrack;
00053
00054
00055 class G4VScatteringCollision : public G4VCollision
00056 {
00057
00058 public:
00059
00060 G4VScatteringCollision();
00061
00062 virtual ~G4VScatteringCollision();
00063
00064 G4bool operator==(const G4VScatteringCollision &right) const;
00065 G4bool operator!=(const G4VScatteringCollision &right) const;
00066
00067 virtual G4KineticTrackVector* FinalState(const G4KineticTrack& trk1,
00068 const G4KineticTrack& trk2) const;
00069 virtual const G4VAngularDistribution* GetAngularDistribution() const
00070 {
00071 return theAngularDistribution;
00072 }
00073
00074 private:
00075 G4VScatteringCollision(const G4VScatteringCollision &);
00076 G4VScatteringCollision & operator= (const G4VScatteringCollision &);
00077
00078 protected:
00079
00080 virtual const std::vector<const G4ParticleDefinition*> & GetOutgoingParticles() const = 0;
00081
00082 private:
00083
00084 double BrWigInt0(const double x, const double gamma, const double m0) const
00085 { return 2.0*gamma*std::atan( 2.0 * (x-m0)/ gamma ); }
00086
00087 G4double BrWigInt1(const G4double x, const G4double gamma, const G4double m0) const
00088 { return 0.5*gamma*gamma*std::log( (x-m0)*(x-m0)+gamma*gamma/4.0 ) + m0*BrWigInt0(x,gamma,m0); }
00089
00090 double BrWigInv(const double x, const double gamma, const double m0) const
00091 { return 0.5*gamma*std::tan( 0.5*x/gamma )+m0; }
00092
00093 double SampleResonanceMass(const double poleMass,
00094 const double width,
00095 const double minMass,
00096 const double maxMass) const;
00097 private:
00098
00099 G4VAngularDistribution * theAngularDistribution;
00100
00101 };
00102
00103
00104
00105
00106 #endif