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

F04DetectorConstruction * fDetector
 
G4ParticleGun * fParticleGun
 
F04PrimaryGeneratorMessenger * fGunMessenger
 
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: