Geant4  10.02.p03
B5PrimaryGeneratorAction Class Reference

#include <B5PrimaryGeneratorAction.hh>

Inheritance diagram for B5PrimaryGeneratorAction:
Collaboration diagram for B5PrimaryGeneratorAction:

Public Member Functions

 B5PrimaryGeneratorAction ()
 
virtual ~B5PrimaryGeneratorAction ()
 
virtual void GeneratePrimaries (G4Event *)
 
void SetMomentum (G4double val)
 
G4double GetMomentum () const
 
void SetSigmaMomentum (G4double val)
 
G4double GetSigmaMomentum () const
 
void SetSigmaAngle (G4double val)
 
G4double GetSigmaAngle () const
 
void SetRandomize (G4bool val)
 
G4bool GetRandomize () const
 
- Public Member Functions inherited from G4VUserPrimaryGeneratorAction
 G4VUserPrimaryGeneratorAction ()
 
virtual ~G4VUserPrimaryGeneratorAction ()
 

Private Member Functions

void DefineCommands ()
 

Private Attributes

G4ParticleGunfParticleGun
 
G4GenericMessengerfMessenger
 
G4ParticleDefinitionfPositron
 
G4ParticleDefinitionfMuon
 
G4ParticleDefinitionfPion
 
G4ParticleDefinitionfKaon
 
G4ParticleDefinitionfProton
 
G4double fMomentum
 
G4double fSigmaMomentum
 
G4double fSigmaAngle
 
G4bool fRandomizePrimary
 

Detailed Description

Primary generator

A single particle is generated. User can select

  • the initial momentum and angle
  • the momentum and angle spreads
  • random selection of a particle type from proton, kaon+, pi+, muon+, e+

Definition at line 51 of file B5PrimaryGeneratorAction.hh.

Constructor & Destructor Documentation

◆ B5PrimaryGeneratorAction()

B5PrimaryGeneratorAction::B5PrimaryGeneratorAction ( )

Definition at line 43 of file B5PrimaryGeneratorAction.cc.

45  fParticleGun(0), fMessenger(0),
46  fPositron(0), fMuon(0), fPion(0), fKaon(0), fProton(0),
47  fMomentum(1000.*MeV),
48  fSigmaMomentum(50.*MeV),
49  fSigmaAngle(2.*deg),
50  fRandomizePrimary(true)
51 {
52  G4int n_particle = 1;
53  fParticleGun = new G4ParticleGun(n_particle);
54 
56  G4String particleName;
57  fPositron = particleTable->FindParticle(particleName="e+");
58  fMuon = particleTable->FindParticle(particleName="mu+");
59  fPion = particleTable->FindParticle(particleName="pi+");
60  fKaon = particleTable->FindParticle(particleName="kaon+");
61  fProton = particleTable->FindParticle(particleName="proton");
62 
63  // default particle kinematics
66 
67  // define commands for this class
69 }
static const double MeV
Definition: G4SIunits.hh:211
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
CLHEP::Hep3Vector G4ThreeVector
int G4int
Definition: G4Types.hh:78
void SetParticlePosition(G4ThreeVector aPosition)
G4ParticleDefinition * fPositron
static const double deg
Definition: G4SIunits.hh:151
static G4ParticleTable * GetParticleTable()
G4ParticleDefinition * fProton
static const double m
Definition: G4SIunits.hh:128
void SetParticleDefinition(G4ParticleDefinition *aParticleDefinition)
Here is the call graph for this function:

◆ ~B5PrimaryGeneratorAction()

B5PrimaryGeneratorAction::~B5PrimaryGeneratorAction ( )
virtual

Definition at line 73 of file B5PrimaryGeneratorAction.cc.

74 {
75  delete fParticleGun;
76  delete fMessenger;
77 }

Member Function Documentation

◆ DefineCommands()

void B5PrimaryGeneratorAction::DefineCommands ( )
private

Definition at line 127 of file B5PrimaryGeneratorAction.cc.

128 {
129  // Define /B5/generator command directory using generic messenger class
130  fMessenger
131  = new G4GenericMessenger(this,
132  "/B5/generator/",
133  "Primary generator control");
134 
135  // momentum command
136  G4GenericMessenger::Command& momentumCmd
137  = fMessenger->DeclarePropertyWithUnit("momentum", "GeV", fMomentum,
138  "Mean momentum of primaries.");
139  momentumCmd.SetParameterName("p", true);
140  momentumCmd.SetRange("p>=0.");
141  momentumCmd.SetDefaultValue("1.");
142  // ok
143  //momentumCmd.SetParameterName("p", true);
144  //momentumCmd.SetRange("p>=0.");
145 
146  // sigmaMomentum command
147  G4GenericMessenger::Command& sigmaMomentumCmd
148  = fMessenger->DeclarePropertyWithUnit("sigmaMomentum",
149  "MeV", fSigmaMomentum, "Sigma momentum of primaries.");
150  sigmaMomentumCmd.SetParameterName("sp", true);
151  sigmaMomentumCmd.SetRange("sp>=0.");
152  sigmaMomentumCmd.SetDefaultValue("50.");
153 
154  // sigmaAngle command
155  G4GenericMessenger::Command& sigmaAngleCmd
156  = fMessenger->DeclarePropertyWithUnit("sigmaAngle", "deg", fSigmaAngle,
157  "Sigma angle divergence of primaries.");
158  sigmaAngleCmd.SetParameterName("t", true);
159  sigmaAngleCmd.SetRange("t>=0.");
160  sigmaAngleCmd.SetDefaultValue("2.");
161 
162  // randomizePrimary command
163  G4GenericMessenger::Command& randomCmd
164  = fMessenger->DeclareProperty("randomizePrimary", fRandomizePrimary);
165  G4String guidance
166  = "Boolean flag for randomizing primary particle types.\n";
167  guidance
168  += "In case this flag is false, you can select the primary particle\n";
169  guidance += " with /gun/particle command.";
170  randomCmd.SetGuidance(guidance);
171  randomCmd.SetParameterName("flg", true);
172  randomCmd.SetDefaultValue("true");
173 }
This class is generic messenger.
Command & DeclareProperty(const G4String &name, const G4AnyType &variable, const G4String &doc="")
Declare Methods.
Command & SetDefaultValue(const G4String &)
Command & SetGuidance(const G4String &s0)
Command & SetRange(const G4String &range)
Command & SetParameterName(const G4String &, G4bool, G4bool=false)
Command & DeclarePropertyWithUnit(const G4String &name, const G4String &defaultUnit, const G4AnyType &variable, const G4String &doc="")
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GeneratePrimaries()

void B5PrimaryGeneratorAction::GeneratePrimaries ( G4Event event)
virtual

Implements G4VUserPrimaryGeneratorAction.

Definition at line 81 of file B5PrimaryGeneratorAction.cc.

82 {
83  G4ParticleDefinition* particle;
84 
86  {
87  G4int i = (int)(5.*G4UniformRand());
88  switch(i)
89  {
90  case 0:
91  particle = fPositron;
92  break;
93  case 1:
94  particle = fMuon;
95  break;
96  case 2:
97  particle = fPion;
98  break;
99  case 3:
100  particle = fKaon;
101  break;
102  default:
103  particle = fProton;
104  break;
105  }
107  }
108  else
109  {
110  particle = fParticleGun->GetParticleDefinition();
111  }
112 
114  G4double mass = particle->GetPDGMass();
115  G4double Ekin = std::sqrt(pp*pp+mass*mass)-mass;
117 
120  std::cos(angle)));
121 
123 }
CLHEP::Hep3Vector G4ThreeVector
static G4double angle[DIM]
void SetParticleMomentumDirection(G4ParticleMomentum aMomentumDirection)
int G4int
Definition: G4Types.hh:78
virtual void GeneratePrimaryVertex(G4Event *evt)
#define G4UniformRand()
Definition: Randomize.hh:97
G4ParticleDefinition * fPositron
void SetParticleEnergy(G4double aKineticEnergy)
G4ParticleDefinition * fProton
double G4double
Definition: G4Types.hh:76
G4ParticleDefinition * GetParticleDefinition() const
void SetParticleDefinition(G4ParticleDefinition *aParticleDefinition)
Here is the call graph for this function:

◆ GetMomentum()

G4double B5PrimaryGeneratorAction::GetMomentum ( ) const
inline

Definition at line 60 of file B5PrimaryGeneratorAction.hh.

◆ GetRandomize()

G4bool B5PrimaryGeneratorAction::GetRandomize ( ) const
inline

Definition at line 69 of file B5PrimaryGeneratorAction.hh.

Here is the call graph for this function:

◆ GetSigmaAngle()

G4double B5PrimaryGeneratorAction::GetSigmaAngle ( ) const
inline

Definition at line 66 of file B5PrimaryGeneratorAction.hh.

◆ GetSigmaMomentum()

G4double B5PrimaryGeneratorAction::GetSigmaMomentum ( ) const
inline

Definition at line 63 of file B5PrimaryGeneratorAction.hh.

◆ SetMomentum()

void B5PrimaryGeneratorAction::SetMomentum ( G4double  val)
inline

Definition at line 59 of file B5PrimaryGeneratorAction.hh.

◆ SetRandomize()

void B5PrimaryGeneratorAction::SetRandomize ( G4bool  val)
inline

Definition at line 68 of file B5PrimaryGeneratorAction.hh.

◆ SetSigmaAngle()

void B5PrimaryGeneratorAction::SetSigmaAngle ( G4double  val)
inline

Definition at line 65 of file B5PrimaryGeneratorAction.hh.

◆ SetSigmaMomentum()

void B5PrimaryGeneratorAction::SetSigmaMomentum ( G4double  val)
inline

Definition at line 62 of file B5PrimaryGeneratorAction.hh.

Member Data Documentation

◆ fKaon

G4ParticleDefinition* B5PrimaryGeneratorAction::fKaon
private

Definition at line 79 of file B5PrimaryGeneratorAction.hh.

◆ fMessenger

G4GenericMessenger* B5PrimaryGeneratorAction::fMessenger
private

Definition at line 75 of file B5PrimaryGeneratorAction.hh.

◆ fMomentum

G4double B5PrimaryGeneratorAction::fMomentum
private

Definition at line 81 of file B5PrimaryGeneratorAction.hh.

◆ fMuon

G4ParticleDefinition* B5PrimaryGeneratorAction::fMuon
private

Definition at line 77 of file B5PrimaryGeneratorAction.hh.

◆ fParticleGun

G4ParticleGun* B5PrimaryGeneratorAction::fParticleGun
private

Definition at line 74 of file B5PrimaryGeneratorAction.hh.

◆ fPion

G4ParticleDefinition* B5PrimaryGeneratorAction::fPion
private

Definition at line 78 of file B5PrimaryGeneratorAction.hh.

◆ fPositron

G4ParticleDefinition* B5PrimaryGeneratorAction::fPositron
private

Definition at line 76 of file B5PrimaryGeneratorAction.hh.

◆ fProton

G4ParticleDefinition* B5PrimaryGeneratorAction::fProton
private

Definition at line 80 of file B5PrimaryGeneratorAction.hh.

◆ fRandomizePrimary

G4bool B5PrimaryGeneratorAction::fRandomizePrimary
private

Definition at line 84 of file B5PrimaryGeneratorAction.hh.

◆ fSigmaAngle

G4double B5PrimaryGeneratorAction::fSigmaAngle
private

Definition at line 83 of file B5PrimaryGeneratorAction.hh.

◆ fSigmaMomentum

G4double B5PrimaryGeneratorAction::fSigmaMomentum
private

Definition at line 82 of file B5PrimaryGeneratorAction.hh.


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