Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4RDPhotoElectricAngularGeneratorSauterGavrila Class Reference

#include <G4RDPhotoElectricAngularGeneratorSauterGavrila.hh>

Inheritance diagram for G4RDPhotoElectricAngularGeneratorSauterGavrila:
G4RDVPhotoElectricAngularDistribution

Public Member Functions

 G4RDPhotoElectricAngularGeneratorSauterGavrila (const G4String &name)
 
 ~G4RDPhotoElectricAngularGeneratorSauterGavrila ()
 
G4ThreeVector GetPhotoElectronDirection (const G4ThreeVector &direction, const G4double kineticEnergy, const G4ThreeVector &polarization, const G4int shellId) const
 
void PrintGeneratorInformation () const
 
- Public Member Functions inherited from G4RDVPhotoElectricAngularDistribution
 G4RDVPhotoElectricAngularDistribution (const G4String &name)
 
virtual ~G4RDVPhotoElectricAngularDistribution ()
 

Detailed Description

Definition at line 57 of file G4RDPhotoElectricAngularGeneratorSauterGavrila.hh.

Constructor & Destructor Documentation

G4RDPhotoElectricAngularGeneratorSauterGavrila::G4RDPhotoElectricAngularGeneratorSauterGavrila ( const G4String name)
G4RDPhotoElectricAngularGeneratorSauterGavrila::~G4RDPhotoElectricAngularGeneratorSauterGavrila ( )

Definition at line 62 of file G4RDPhotoElectricAngularGeneratorSauterGavrila.cc.

63 {;}

Member Function Documentation

G4ThreeVector G4RDPhotoElectricAngularGeneratorSauterGavrila::GetPhotoElectronDirection ( const G4ThreeVector direction,
const G4double  kineticEnergy,
const G4ThreeVector polarization,
const G4int  shellId 
) const
virtual

Implements G4RDVPhotoElectricAngularDistribution.

Definition at line 67 of file G4RDPhotoElectricAngularGeneratorSauterGavrila.cc.

References test::b, python.hepunit::electron_mass_c2, G4UniformRand, rndm(), CLHEP::Hep3Vector::rotateUz(), and python.hepunit::twopi.

68 {
69 
70  // Compute Theta distribution of the emitted electron, with respect to the
71  // incident Gamma.
72  // The Sauter-Gavrila distribution for the K-shell is used. (adapted from G4PhotoElectricEffect)
73 
74  G4double costeta = 1.;
75  G4double Phi = twopi * G4UniformRand();
76  G4double cosphi = std::cos(Phi);
77  G4double sinphi = std::sin(Phi);
78  G4double sinteta = 0;
79  G4double gamma = 1. + eKineticEnergy/electron_mass_c2;
80 
81  if (gamma > 5.) {
82  G4ThreeVector direction (sinteta*cosphi, sinteta*sinphi, costeta);
83  return direction;
84  }
85 
86  G4double beta = std::sqrt(gamma*gamma-1.)/gamma;
87  G4double b = 0.5*gamma*(gamma-1.)*(gamma-2);
88 
89  G4double rndm,term,greject,grejsup;
90  if (gamma < 2.) grejsup = gamma*gamma*(1.+b-beta*b);
91  else grejsup = gamma*gamma*(1.+b+beta*b);
92 
93  do { rndm = 1.-2*G4UniformRand();
94  costeta = (rndm+beta)/(rndm*beta+1.);
95  term = 1.-beta*costeta;
96  greject = (1.-costeta*costeta)*(1.+b*term)/(term*term);
97  } while(greject < G4UniformRand()*grejsup);
98 
99 
100  sinteta = std::sqrt(1.-costeta*costeta);
101  G4ThreeVector photoelectrondirection (sinteta*cosphi, sinteta*sinphi, costeta);
102  photoelectrondirection.rotateUz(direction);
103  return photoelectrondirection;
104 }
#define G4UniformRand()
Definition: Randomize.hh:87
float electron_mass_c2
Definition: hepunit.py:274
double precision function rndm(RDUMMY)
Definition: dpm25nulib.f:1460
double G4double
Definition: G4Types.hh:76
void G4RDPhotoElectricAngularGeneratorSauterGavrila::PrintGeneratorInformation ( ) const
virtual

Implements G4RDVPhotoElectricAngularDistribution.

Definition at line 108 of file G4RDPhotoElectricAngularGeneratorSauterGavrila.cc.

References G4cout, and G4endl.

109 {
110  G4cout << "\n" << G4endl;
111  G4cout << "" << G4endl;
112  G4cout << "Re-implementation of the photolectric angular distribution" << G4endl;
113  G4cout << "developed my M. Maire for the Standard EM Physics G4PhotoElectricEffect" << G4endl;
114  G4cout << "It computes the theta distribution of the emitted electron, with respect to the" << G4endl;
115  G4cout << "incident Gamma, using the Sauter-Gavrila distribution for the K-shell\n" << G4endl;
116 }
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61

The documentation for this class was generated from the following files: