Geant4  10.02.p03
F04PrimaryGeneratorAction Class Reference

#include <F04PrimaryGeneratorAction.hh>

Inheritance diagram for F04PrimaryGeneratorAction:
Collaboration diagram for F04PrimaryGeneratorAction:

Public Member Functions

 F04PrimaryGeneratorAction (F04DetectorConstruction *)
 
virtual ~F04PrimaryGeneratorAction ()
 
virtual void GeneratePrimaries (G4Event *)
 
void SetRndmFlag (G4String val)
 
void SetXvertex (G4double x)
 
void SetYvertex (G4double y)
 
void SetZvertex (G4double z)
 
- Public Member Functions inherited from G4VUserPrimaryGeneratorAction
 G4VUserPrimaryGeneratorAction ()
 
virtual ~G4VUserPrimaryGeneratorAction ()
 

Private Attributes

F04DetectorConstructionfDetector
 
G4ParticleGunfParticleGun
 
F04PrimaryGeneratorMessengerfGunMessenger
 
G4String fRndmFlag
 
G4bool fFirst
 
G4AffineTransform fGlobal2local
 
G4double fXvertex
 
G4double fYvertex
 
G4double fZvertex
 
G4bool fVertexdefined
 

Detailed Description

Definition at line 47 of file F04PrimaryGeneratorAction.hh.

Constructor & Destructor Documentation

◆ F04PrimaryGeneratorAction()

F04PrimaryGeneratorAction::F04PrimaryGeneratorAction ( F04DetectorConstruction detectorConstruction)

Definition at line 52 of file F04PrimaryGeneratorAction.cc.

53  : fDetector(detectorConstruction), fRndmFlag("off"), fFirst(false),
54  fXvertex(0.), fYvertex(0.), fZvertex(0.),
55  fVertexdefined(false)
56 {
57  G4int n_particle = 1;
58  fParticleGun = new G4ParticleGun(n_particle);
59 
61 
62  G4String particleName;
64 
65  fParticleGun->SetParticleDefinition(particleTable->
66  FindParticle(particleName="proton"));
69 
72 
73 }
static const double MeV
Definition: G4SIunits.hh:211
CLHEP::Hep3Vector G4ThreeVector
F04PrimaryGeneratorMessenger * fGunMessenger
void SetParticleMomentumDirection(G4ParticleMomentum aMomentumDirection)
int G4int
Definition: G4Types.hh:78
void SetParticlePosition(G4ThreeVector aPosition)
void SetParticleEnergy(G4double aKineticEnergy)
F04DetectorConstruction * fDetector
static G4ParticleTable * GetParticleTable()
void SetParticleDefinition(G4ParticleDefinition *aParticleDefinition)
Here is the call graph for this function:

◆ ~F04PrimaryGeneratorAction()

F04PrimaryGeneratorAction::~F04PrimaryGeneratorAction ( )
virtual

Definition at line 77 of file F04PrimaryGeneratorAction.cc.

78 {
79  delete fParticleGun;
80  delete fGunMessenger;
81 }
F04PrimaryGeneratorMessenger * fGunMessenger

Member Function Documentation

◆ GeneratePrimaries()

void F04PrimaryGeneratorAction::GeneratePrimaries ( G4Event anEvent)
virtual

Implements G4VUserPrimaryGeneratorAction.

Definition at line 85 of file F04PrimaryGeneratorAction.cc.

86 {
87 
88  if (!fFirst) {
89 
90  fFirst = true;
91  G4ThreeVector direction(0.0,0.0,1.0);
92 
93  G4Navigator* theNavigator =
95  GetNavigatorForTracking();
96  if ( theNavigator->GetWorldVolume() )
97  {
98  G4Navigator* aNavigator = new G4Navigator();
99  aNavigator->SetWorldVolume(theNavigator->GetWorldVolume());
100 
101  G4ThreeVector center(0.,0.,0.);
102  aNavigator->LocateGlobalPointAndSetup(center,0,false);
103 
104  G4TouchableHistoryHandle touchable = aNavigator->
105  CreateTouchableHistoryHandle();
106 
107  // set Global2local transform
108  fGlobal2local = touchable->GetHistory()->GetTopTransform();
109 
110  direction = fGlobal2local.Inverse().TransformAxis(direction);
111  delete aNavigator;
112  }
113 
115  }
116 
117  G4double x0,y0,z0 ;
118 
119  if(fVertexdefined)
120  {
121  x0 = fXvertex ;
122  y0 = fYvertex ;
123  z0 = fZvertex ;
124  }
125  else
126  {
127  x0 = 0. ;
128  y0 = 0. ;
129  z0 = -0.5*(fDetector->GetTargetThickness());
130  }
131 
132  G4double r0, phi0;
133 
134  if (fRndmFlag == "on")
135  {
136  r0 = (fDetector->GetTargetRadius())*std::sqrt(G4UniformRand());
137  phi0 = twopi*G4UniformRand();
138  x0 = r0*std::cos(phi0);
139  y0 = r0*std::sin(phi0);
140  }
141 
142  G4ThreeVector localPosition(x0,y0,z0);
143  G4ThreeVector globalPosition =
144  fGlobal2local.Inverse().TransformPoint(localPosition);
145 
146  fParticleGun->SetParticlePosition(globalPosition);
148 }
G4ThreeVector TransformAxis(const G4ThreeVector &axis) const
G4ThreeVector TransformPoint(const G4ThreeVector &vec) const
void SetParticleMomentumDirection(G4ParticleMomentum aMomentumDirection)
virtual void GeneratePrimaryVertex(G4Event *evt)
G4AffineTransform Inverse() const
void SetParticlePosition(G4ThreeVector aPosition)
#define G4UniformRand()
Definition: Randomize.hh:97
static const double twopi
Definition: G4SIunits.hh:75
static G4TransportationManager * GetTransportationManager()
F04DetectorConstruction * fDetector
void SetWorldVolume(G4VPhysicalVolume *pWorld)
virtual G4VPhysicalVolume * LocateGlobalPointAndSetup(const G4ThreeVector &point, const G4ThreeVector *direction=0, const G4bool pRelativeSearch=true, const G4bool ignoreDirection=true)
Definition: G4Navigator.cc:125
double G4double
Definition: G4Types.hh:76
G4VPhysicalVolume * GetWorldVolume() const
const G4double r0
Here is the call graph for this function:

◆ SetRndmFlag()

void F04PrimaryGeneratorAction::SetRndmFlag ( G4String  val)
inline

Definition at line 58 of file F04PrimaryGeneratorAction.hh.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetXvertex()

void F04PrimaryGeneratorAction::SetXvertex ( G4double  x)

Definition at line 152 of file F04PrimaryGeneratorAction.cc.

153 {
154  fVertexdefined = true;
155  fXvertex = x;
156  G4cout << " X coordinate of the primary vertex = " << fXvertex/mm <<
157  " mm." << G4endl;
158 }
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
static const double mm
Definition: G4SIunits.hh:114
Here is the caller graph for this function:

◆ SetYvertex()

void F04PrimaryGeneratorAction::SetYvertex ( G4double  y)

Definition at line 162 of file F04PrimaryGeneratorAction.cc.

163 {
164  fVertexdefined = true;
165  fYvertex = y;
166  G4cout << " Y coordinate of the primary vertex = " << fYvertex/mm <<
167  " mm." << G4endl;
168 }
Double_t y
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
static const double mm
Definition: G4SIunits.hh:114
Here is the caller graph for this function:

◆ SetZvertex()

void F04PrimaryGeneratorAction::SetZvertex ( G4double  z)

Definition at line 172 of file F04PrimaryGeneratorAction.cc.

173 {
174  fVertexdefined = true;
175  fZvertex = z;
176  G4cout << " Z coordinate of the primary vertex = " << fZvertex/mm <<
177  " mm." << G4endl;
178 }
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
static const double mm
Definition: G4SIunits.hh:114
Here is the caller graph for this function:

Member Data Documentation

◆ fDetector

F04DetectorConstruction* F04PrimaryGeneratorAction::fDetector
private

Definition at line 66 of file F04PrimaryGeneratorAction.hh.

◆ fFirst

G4bool F04PrimaryGeneratorAction::fFirst
private

Definition at line 74 of file F04PrimaryGeneratorAction.hh.

◆ fGlobal2local

G4AffineTransform F04PrimaryGeneratorAction::fGlobal2local
private

Definition at line 76 of file F04PrimaryGeneratorAction.hh.

◆ fGunMessenger

F04PrimaryGeneratorMessenger* F04PrimaryGeneratorAction::fGunMessenger
private

Definition at line 70 of file F04PrimaryGeneratorAction.hh.

◆ fParticleGun

G4ParticleGun* F04PrimaryGeneratorAction::fParticleGun
private

Definition at line 68 of file F04PrimaryGeneratorAction.hh.

◆ fRndmFlag

G4String F04PrimaryGeneratorAction::fRndmFlag
private

Definition at line 72 of file F04PrimaryGeneratorAction.hh.

◆ fVertexdefined

G4bool F04PrimaryGeneratorAction::fVertexdefined
private

Definition at line 80 of file F04PrimaryGeneratorAction.hh.

◆ fXvertex

G4double F04PrimaryGeneratorAction::fXvertex
private

Definition at line 78 of file F04PrimaryGeneratorAction.hh.

◆ fYvertex

G4double F04PrimaryGeneratorAction::fYvertex
private

Definition at line 78 of file F04PrimaryGeneratorAction.hh.

◆ fZvertex

G4double F04PrimaryGeneratorAction::fZvertex
private

Definition at line 78 of file F04PrimaryGeneratorAction.hh.


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