G4ModifiedTsai Class Reference

#include <G4ModifiedTsai.hh>

Inheritance diagram for G4ModifiedTsai:

G4VEmAngularDistribution

Public Member Functions

 G4ModifiedTsai (const G4String &name="")
virtual ~G4ModifiedTsai ()
virtual G4ThreeVectorSampleDirection (const G4DynamicParticle *dp, G4double out_energy, G4int Z, const G4Material *mat=0)
void PrintGeneratorInformation () const

Detailed Description

Definition at line 64 of file G4ModifiedTsai.hh.


Constructor & Destructor Documentation

G4ModifiedTsai::G4ModifiedTsai ( const G4String name = ""  ) 

Definition at line 63 of file G4ModifiedTsai.cc.

00064   : G4VEmAngularDistribution("AngularGenUrban")
00065 {}    

G4ModifiedTsai::~G4ModifiedTsai (  )  [virtual]

Definition at line 67 of file G4ModifiedTsai.cc.

00068 {}


Member Function Documentation

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 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:52:30 2013 for Geant4 by  doxygen 1.4.7