source: trunk/source/processes/electromagnetic/lowenergy/src/G4PhotoElectricAngularGeneratorSauterGavrila.cc @ 1340

Last change on this file since 1340 was 1340, checked in by garnier, 14 years ago

update ti head

File size: 4.6 KB
Line 
1//
2// ********************************************************************
3// * License and Disclaimer                                           *
4// *                                                                  *
5// * The  Geant4 software  is  copyright of the Copyright Holders  of *
6// * the Geant4 Collaboration.  It is provided  under  the terms  and *
7// * conditions of the Geant4 Software License,  included in the file *
8// * LICENSE and available at  http://cern.ch/geant4/license .  These *
9// * include a list of copyright holders.                             *
10// *                                                                  *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work  make  any representation or  warranty, express or implied, *
14// * regarding  this  software system or assume any liability for its *
15// * use.  Please see the license in the file  LICENSE  and URL above *
16// * for the full disclaimer and the limitation of liability.         *
17// *                                                                  *
18// * This  code  implementation is the result of  the  scientific and *
19// * technical work of the GEANT4 collaboration.                      *
20// * By using,  copying,  modifying or  distributing the software (or *
21// * any work based  on the software)  you  agree  to acknowledge its *
22// * use  in  resulting  scientific  publications,  and indicate your *
23// * acceptance of all terms of the Geant4 Software license.          *
24// ********************************************************************
25//
26//
27// -------------------------------------------------------------------
28//
29// GEANT4 Class file
30//
31//
32// File name:     G4PhotoElectricAngularGeneratorSauterGavrila
33//
34// Creation date: 10 May 2004
35//
36// Modifications:
37// 10 May 2003     P. Rodrigues    First implementation acording with new design
38//
39// Class Description:
40//
41// Concrete class for PhotoElectric Electron Angular Distribution Generation
42// This model is a re-implementation of the Photolectric angular distribution
43// developed my M. Maire for the Standard EM Physics G4PhotoElectricEffect
44//
45// Class Description: End
46//
47// -------------------------------------------------------------------
48//
49//   
50
51#include "G4PhotoElectricAngularGeneratorSauterGavrila.hh"
52#include "Randomize.hh"
53
54//   
55
56G4PhotoElectricAngularGeneratorSauterGavrila::G4PhotoElectricAngularGeneratorSauterGavrila(const G4String& name):G4VPhotoElectricAngularDistribution(name)
57{;}
58
59//   
60
61G4PhotoElectricAngularGeneratorSauterGavrila::~G4PhotoElectricAngularGeneratorSauterGavrila() 
62{;}
63
64//
65
66G4ThreeVector G4PhotoElectricAngularGeneratorSauterGavrila::GetPhotoElectronDirection(const G4ThreeVector& direction, const G4double eKineticEnergy, const G4ThreeVector&, const G4int) const
67{
68
69  // Compute Theta distribution of the emitted electron, with respect to the
70  // incident Gamma.
71  // The Sauter-Gavrila distribution for the K-shell is used. (adapted from G4PhotoElectricEffect)
72
73  G4double costeta = 1.;
74  G4double Phi     = twopi * G4UniformRand();
75  G4double cosphi = std::cos(Phi);
76  G4double sinphi = std::sin(Phi);
77  G4double sinteta = 0;
78  G4double gamma   = 1. + eKineticEnergy/electron_mass_c2;
79
80  if (gamma > 5.) {
81    G4ThreeVector direction (sinteta*cosphi, sinteta*sinphi, costeta);
82    return direction; 
83    // Bugzilla 1120
84    // SI on 05/09/2010 as suggested by JG 04/09/10
85  }
86
87  G4double beta  = std::sqrt(gamma*gamma-1.)/gamma;
88  G4double b     = 0.5*gamma*(gamma-1.)*(gamma-2);
89   
90  G4double rndm,term,greject,grejsup;
91  if (gamma < 2.) grejsup = gamma*gamma*(1.+b-beta*b);
92  else            grejsup = gamma*gamma*(1.+b+beta*b);
93 
94  do { rndm = 1.-2*G4UniformRand();
95       costeta = (rndm+beta)/(rndm*beta+1.);
96       term = 1.-beta*costeta;
97       greject = (1.-costeta*costeta)*(1.+b*term)/(term*term);
98  } while(greject < G4UniformRand()*grejsup);
99       
100
101  sinteta = std::sqrt(1.-costeta*costeta);
102  G4ThreeVector photoelectrondirection (sinteta*cosphi, sinteta*sinphi, costeta);
103  photoelectrondirection.rotateUz(direction);
104  return photoelectrondirection;
105}
106
107//
108
109void G4PhotoElectricAngularGeneratorSauterGavrila::PrintGeneratorInformation() const
110{
111  G4cout << "\n" << G4endl;
112  G4cout << "" << G4endl;
113  G4cout << "Re-implementation of the photolectric angular distribution" << G4endl;
114  G4cout << "developed my M. Maire for the Standard EM Physics G4PhotoElectricEffect" << G4endl;
115  G4cout << "It computes the theta distribution of the emitted electron, with respect to the" << G4endl;
116  G4cout << "incident Gamma, using the Sauter-Gavrila distribution for the K-shell\n" << G4endl;
117} 
Note: See TracBrowser for help on using the repository browser.