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

#include <PrimaryGeneratorAction4.hh>

Public Member Functions

 PrimaryGeneratorAction4 (G4ParticleGun *)
 
 ~PrimaryGeneratorAction4 ()
 
void GeneratePrimaries (G4Event *)
 
G4double GetRmin3 ()
 
G4double GetRmax3 ()
 
G4double GetCosAlphaMin ()
 
G4double GetCosAlphaMax ()
 

Detailed Description

Definition at line 47 of file PrimaryGeneratorAction4.hh.

Constructor & Destructor Documentation

PrimaryGeneratorAction4::PrimaryGeneratorAction4 ( G4ParticleGun gun)

Definition at line 48 of file PrimaryGeneratorAction4.cc.

References python.hepunit::deg, and python.hepunit::mm.

49 : fParticleGun(gun)
50 {
51  // vertex volume
52  //
53  G4double Rmin = 2.*mm;
54  G4double Rmax = 8.*mm;
55  fRmin3 = Rmin*Rmin*Rmin;
56  fRmax3 = Rmax*Rmax*Rmax;
57 
58  //opening angle
59  //
60  G4double alphaMin = 0.*deg;
61  G4double alphaMax = 10.*deg;
62  fCosAlphaMin = std::cos(alphaMin);
63  fCosAlphaMax = std::cos(alphaMax);
64 }
double G4double
Definition: G4Types.hh:76
PrimaryGeneratorAction4::~PrimaryGeneratorAction4 ( )

Definition at line 68 of file PrimaryGeneratorAction4.cc.

69 { }

Member Function Documentation

void PrimaryGeneratorAction4::GeneratePrimaries ( G4Event anEvent)

Definition at line 73 of file PrimaryGeneratorAction4.cc.

References G4UniformRand, G4ParticleGun::GeneratePrimaryVertex(), python.hepunit::MeV, CLHEP::Hep3Vector::rotateUz(), G4ParticleGun::SetParticleEnergy(), G4ParticleGun::SetParticleMomentumDirection(), G4VPrimaryGenerator::SetParticlePosition(), and python.hepunit::twopi.

74 {
75  //vertex position uniform in spherical shell
76  //
77  G4double cosTheta = 2*G4UniformRand() - 1; //cosTheta uniform in [0, pi]
78  G4double sinTheta = std::sqrt(1. - cosTheta*cosTheta);
79  G4double phi = twopi*G4UniformRand(); //phi uniform in [0, 2*pi]
80  G4ThreeVector ur(sinTheta*std::cos(phi),sinTheta*std::sin(phi),cosTheta);
81 
82  G4double R3 = fRmin3 + G4UniformRand()*(fRmax3 - fRmin3);
83  G4double R = std::pow(R3, 1./3);
84 
85  fParticleGun->SetParticlePosition(R*ur);
86 
87  //particle direction uniform around ur
88  //
89  //1- in World frame
90  //cosAlpha uniform in [cos(alphaMin), cos(alphaMax)]
91  G4double cosAlpha = fCosAlphaMin - G4UniformRand()*(fCosAlphaMin - fCosAlphaMax);
92  G4double sinAlpha = std::sqrt(1. - cosAlpha*cosAlpha);
93  G4double psi = twopi*G4UniformRand(); //psi uniform in (0,2*pi)
94  G4ThreeVector dir(sinAlpha*std::cos(psi),sinAlpha*std::sin(psi),cosAlpha);
95 
96  //2- rotate dir (rotateUz transforms uz to ur)
97  dir.rotateUz(ur);
98 
99  fParticleGun->SetParticleMomentumDirection(dir);
100 
101  //energy
102  //
103  fParticleGun->SetParticleEnergy(1*MeV);
104 
105  //create vertex
106  //
107  fParticleGun->GeneratePrimaryVertex(anEvent);
108 }
void SetParticleMomentumDirection(G4ParticleMomentum aMomentumDirection)
virtual void GeneratePrimaryVertex(G4Event *evt)
void SetParticlePosition(G4ThreeVector aPosition)
#define G4UniformRand()
Definition: Randomize.hh:87
void SetParticleEnergy(G4double aKineticEnergy)
double G4double
Definition: G4Types.hh:76
G4double PrimaryGeneratorAction4::GetCosAlphaMax ( )
inline

Definition at line 59 of file PrimaryGeneratorAction4.hh.

59 {return fCosAlphaMax;};
G4double PrimaryGeneratorAction4::GetCosAlphaMin ( )
inline

Definition at line 58 of file PrimaryGeneratorAction4.hh.

58 {return fCosAlphaMin;};
G4double PrimaryGeneratorAction4::GetRmax3 ( )
inline

Definition at line 57 of file PrimaryGeneratorAction4.hh.

57 {return fRmax3;};
G4double PrimaryGeneratorAction4::GetRmin3 ( )
inline

Definition at line 56 of file PrimaryGeneratorAction4.hh.

56 {return fRmin3;};

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