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 #ifndef G4SampleResonance_h
00030 #define G4SampleResonance_h 1
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #include "globals.hh"
00041 #include <map>
00042 #include "G4ParticleDefinition.hh"
00043
00044
00045 class G4SampleResonance
00046 {
00047 public:
00048
00049 G4double GetMinimumMass(const G4ParticleDefinition* p) const;
00050 G4double SampleMass(const G4double poleMass,
00051 const G4double gamma,
00052 const G4double minMass,
00053 const G4double maxMass) const;
00054 G4double SampleMass(const G4ParticleDefinition* p, const G4double maxMass) const;
00055
00056 private:
00057
00058 G4double BrWigInt0(const G4double x, const G4double gamma, const G4double m0) const
00059 { return 2.0*gamma*std::atan( 2.0 * (x-m0)/ gamma ); }
00060
00061 G4double BrWigInt1(const G4double x, const G4double gamma, const G4double m0) const
00062 { return 0.5*gamma*gamma*std::log( (x-m0)*(x-m0)+gamma*gamma/4.0 ) + m0*BrWigInt0(x,gamma,m0); }
00063
00064 G4double BrWigInv(const G4double x, const G4double gamma, const G4double m0) const
00065 { return 0.5*gamma*std::tan( 0.5*x/gamma )+m0; }
00066
00067 public:
00068
00069 typedef std::map<const G4ParticleDefinition*, G4double, std::less<const G4ParticleDefinition*> >::const_iterator minMassMapIterator;
00070 typedef std::map<const G4ParticleDefinition*, G4double, std::less<const G4ParticleDefinition*> > minMassMapType;
00071
00072 private:
00073
00074 static minMassMapType minMassCache;
00075
00076 };
00077
00078
00079 #endif
00080
00081
00082
00083
00084
00085