#include <G4ModifiedTsai.hh>
Inheritance diagram for G4ModifiedTsai:
Public Member Functions | |
G4ModifiedTsai (const G4String &name="") | |
virtual | ~G4ModifiedTsai () |
virtual G4ThreeVector & | SampleDirection (const G4DynamicParticle *dp, G4double out_energy, G4int Z, const G4Material *mat=0) |
void | PrintGeneratorInformation () const |
Definition at line 64 of file G4ModifiedTsai.hh.
G4ModifiedTsai::G4ModifiedTsai | ( | const G4String & | name = "" |
) |
Definition at line 63 of file G4ModifiedTsai.cc.
00064 : G4VEmAngularDistribution("AngularGenUrban") 00065 {}
G4ModifiedTsai::~G4ModifiedTsai | ( | ) | [virtual] |
void G4ModifiedTsai::PrintGeneratorInformation | ( | ) | const |
Definition at line 103 of file G4ModifiedTsai.cc.
References G4cout, and G4endl.
00104 { 00105 G4cout << "\n" << G4endl; 00106 G4cout << "Bremsstrahlung Angular Generator is Modified Tsai" << G4endl; 00107 G4cout << "Distribution suggested by L.Urban (Geant3 manual (1993) Phys211)" 00108 << G4endl; 00109 G4cout << "Derived from Tsai distribution (Rev Mod Phys 49,421(1977)) \n" 00110 << G4endl; 00111 }
G4ThreeVector & G4ModifiedTsai::SampleDirection | ( | const G4DynamicParticle * | dp, | |
G4double | out_energy, | |||
G4int | Z, | |||
const G4Material * | mat = 0 | |||
) | [virtual] |
Implements G4VEmAngularDistribution.
Definition at line 71 of file G4ModifiedTsai.cc.
References G4VEmAngularDistribution::fLocalDirection, G4UniformRand, G4DynamicParticle::GetKineticEnergy(), and G4DynamicParticle::GetMomentumDirection().
00073 { 00074 // Sample gamma angle (Z - axis along the parent particle). 00075 // Universal distribution suggested by L. Urban (Geant3 manual (1993) 00076 // Phys211) derived from Tsai distribution (Rev Mod Phys 49,421(1977)) 00077 00078 G4double uMax = 2*(1. + dp->GetKineticEnergy()/electron_mass_c2); 00079 00080 const G4double a1 = 0.625; 00081 const G4double a2 = 1.875; 00082 const G4double border = 0.25; 00083 G4double u; 00084 00085 do { 00086 u = - std::log(G4UniformRand()*G4UniformRand()); 00087 00088 if ( border > G4UniformRand() ) { u /= a1; } 00089 else { u /= a2; } 00090 00091 } while(u > uMax); 00092 00093 G4double cost = 1.0 - 2*u*u/(uMax*uMax); 00094 G4double sint = std::sqrt((1 - cost)*(1 + cost)); 00095 G4double phi = CLHEP::twopi*G4UniformRand(); 00096 00097 fLocalDirection.set(sint*std::cos(phi), sint*std::sin(phi), cost); 00098 fLocalDirection.rotateUz(dp->GetMomentumDirection()); 00099 00100 return fLocalDirection; 00101 }