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

#include <G4SingleParticleSource.hh>

Inheritance diagram for G4SingleParticleSource:
G4VPrimaryGenerator

Public Member Functions

 G4SingleParticleSource ()
 
 ~G4SingleParticleSource ()
 
void GeneratePrimaryVertex (G4Event *evt)
 
G4SPSPosDistributionGetPosDist ()
 
G4SPSAngDistributionGetAngDist ()
 
G4SPSEneDistributionGetEneDist ()
 
G4SPSRandomGeneratorGetBiasRndm ()
 
void SetVerbosity (G4int)
 
void SetParticleDefinition (G4ParticleDefinition *aParticleDefinition)
 
G4ParticleDefinitionGetParticleDefinition ()
 
void SetParticleCharge (G4double aCharge)
 
void SetParticlePolarization (G4ThreeVector aVal)
 
G4ThreeVector GetParticlePolarization ()
 
void SetParticleTime (G4double aTime)
 
G4double GetParticleTime ()
 
void SetNumberOfParticles (G4int i)
 
G4int GetNumberOfParticles ()
 
G4ThreeVector GetParticlePosition ()
 
G4ThreeVector GetParticleMomentumDirection ()
 
G4double GetParticleEnergy ()
 
- Public Member Functions inherited from G4VPrimaryGenerator
 G4VPrimaryGenerator ()
 
virtual ~G4VPrimaryGenerator ()
 
G4ThreeVector GetParticlePosition ()
 
G4double GetParticleTime ()
 
void SetParticlePosition (G4ThreeVector aPosition)
 
void SetParticleTime (G4double aTime)
 

Additional Inherited Members

- Static Public Member Functions inherited from G4VPrimaryGenerator
static G4bool CheckVertexInsideWorld (const G4ThreeVector &pos)
 
- Protected Attributes inherited from G4VPrimaryGenerator
G4ThreeVector particle_position
 
G4double particle_time
 

Detailed Description

Definition at line 123 of file G4SingleParticleSource.hh.

Constructor & Destructor Documentation

G4SingleParticleSource::G4SingleParticleSource ( )

Definition at line 63 of file G4SingleParticleSource.cc.

References G4Geantino::GeantinoDefinition(), python.hepunit::MeV, G4SPSPosDistribution::SetBiasRndm(), G4SPSAngDistribution::SetBiasRndm(), G4SPSEneDistribution::SetBiasRndm(), and G4SPSAngDistribution::SetPosDistribution().

63  {
64  // Initialise all variables
65  // Position distribution Variables
66 
67  NumberOfParticlesToBeGenerated = 1;
68  particle_definition = G4Geantino::GeantinoDefinition();
69  G4ThreeVector zero;
70  particle_momentum_direction = G4ParticleMomentum(1, 0, 0);
71  particle_energy = 1.0 * MeV;
72  particle_position = zero;
73  particle_time = 0.0;
74  particle_polarization = zero;
75  particle_charge = 0.0;
76  particle_weight = 1.0;
77 
78  biasRndm = new G4SPSRandomGenerator();
79  posGenerator = new G4SPSPosDistribution();
80  posGenerator->SetBiasRndm(biasRndm);
81  angGenerator = new G4SPSAngDistribution();
82  angGenerator->SetPosDistribution(posGenerator);
83  angGenerator->SetBiasRndm(biasRndm);
84  eneGenerator = new G4SPSEneDistribution();
85  eneGenerator->SetBiasRndm(biasRndm);
86 
87  // verbosity
88  verbosityLevel = 0;
89 
90 }
static G4Geantino * GeantinoDefinition()
Definition: G4Geantino.cc:82
void SetBiasRndm(G4SPSRandomGenerator *a)
void SetBiasRndm(G4SPSRandomGenerator *a)
void SetBiasRndm(G4SPSRandomGenerator *a)
void SetPosDistribution(G4SPSPosDistribution *a)
G4ThreeVector G4ParticleMomentum
G4SingleParticleSource::~G4SingleParticleSource ( )

Definition at line 92 of file G4SingleParticleSource.cc.

92  {
93  delete biasRndm;
94  delete posGenerator;
95  delete angGenerator;
96  delete eneGenerator;
97 }

Member Function Documentation

void G4SingleParticleSource::GeneratePrimaryVertex ( G4Event evt)
virtual

Implements G4VPrimaryGenerator.

Definition at line 113 of file G4SingleParticleSource.cc.

References G4Event::AddPrimaryVertex(), G4cout, G4endl, G4SPSPosDistribution::GenerateOne(), G4SPSAngDistribution::GenerateOne(), G4SPSEneDistribution::GenerateOne(), G4SPSRandomGenerator::GetBiasWeight(), G4ParticleDefinition::GetParticleName(), G4ParticleDefinition::GetPDGMass(), G4SPSEneDistribution::GetWeight(), G4PrimaryParticle::SetCharge(), G4PrimaryParticle::SetKineticEnergy(), G4PrimaryParticle::SetMass(), G4PrimaryParticle::SetMomentumDirection(), G4PrimaryParticle::SetPolarization(), G4PrimaryVertex::SetPrimary(), G4PrimaryParticle::SetWeight(), CLHEP::Hep3Vector::x(), CLHEP::Hep3Vector::y(), and CLHEP::Hep3Vector::z().

Referenced by G4AdjointPrimaryGenerator::GenerateAdjointPrimaryVertex(), and G4AdjointPrimaryGenerator::GenerateFwdPrimaryVertex().

113  {
114  if (particle_definition == NULL)
115  return;
116 
117  if (verbosityLevel > 1)
118  G4cout << " NumberOfParticlesToBeGenerated: "
119  << NumberOfParticlesToBeGenerated << G4endl;
120 
121  // Position stuff
122  particle_position = posGenerator->GenerateOne();
123 
124  // create a new vertex
125  G4PrimaryVertex* vertex = new G4PrimaryVertex(particle_position,
126  particle_time);
127 
128  for (G4int i = 0; i < NumberOfParticlesToBeGenerated; i++) {
129  // Angular stuff
130  particle_momentum_direction = angGenerator->GenerateOne();
131  // Energy stuff
132  particle_energy = eneGenerator->GenerateOne(particle_definition);
133 
134  if (verbosityLevel >= 2)
135  G4cout << "Creating primaries and assigning to vertex" << G4endl;
136  // create new primaries and set them to the vertex
137  G4double mass = particle_definition->GetPDGMass();
138  G4PrimaryParticle* particle =
139  new G4PrimaryParticle(particle_definition);
140  particle->SetKineticEnergy( particle_energy );
141  particle->SetMass( mass );
142  particle->SetMomentumDirection( particle_momentum_direction );
143  particle->SetCharge( particle_charge );
144  particle->SetPolarization(particle_polarization.x(),
145  particle_polarization.y(),
146  particle_polarization.z());
147  if (verbosityLevel > 1) {
148  G4cout << "Particle name: "
149  << particle_definition->GetParticleName() << G4endl;
150  G4cout << " Energy: " << particle_energy << G4endl;
151  G4cout << " Position: " << particle_position << G4endl;
152  G4cout << " Direction: " << particle_momentum_direction
153  << G4endl;
154  }
155  // Set bweight equal to the multiple of all non-zero weights
156  particle_weight = eneGenerator->GetWeight()*biasRndm->GetBiasWeight();
157  // pass it to primary particle
158  particle->SetWeight(particle_weight);
159 
160  vertex->SetPrimary(particle);
161 
162  }
163  // now pass the weight to the primary vertex. CANNOT be used here!
164  // vertex->SetWeight(particle_weight);
165  evt->AddPrimaryVertex(vertex);
166  if (verbosityLevel > 1)
167  G4cout << " Primary Vetex generated !" << G4endl;
168 }
double x() const
void AddPrimaryVertex(G4PrimaryVertex *aPrimaryVertex)
Definition: G4Event.hh:143
int G4int
Definition: G4Types.hh:78
const G4String & GetParticleName() const
double z() const
void SetKineticEnergy(G4double eKin)
G4GLOB_DLL std::ostream G4cout
G4ParticleMomentum GenerateOne()
void SetMass(G4double mas)
G4double GenerateOne(G4ParticleDefinition *)
G4double GetPDGMass() const
void SetMomentumDirection(const G4ThreeVector &p)
void SetWeight(G4double w)
void SetCharge(G4double chg)
double y() const
void SetPrimary(G4PrimaryParticle *pp)
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
void SetPolarization(const G4ThreeVector &pol)
G4SPSAngDistribution* G4SingleParticleSource::GetAngDist ( )
inline
G4SPSRandomGenerator* G4SingleParticleSource::GetBiasRndm ( )
inline

Definition at line 141 of file G4SingleParticleSource.hh.

Referenced by G4GeneralParticleSourceMessenger::SetNewValue().

141  {
142  return biasRndm;
143  }
G4SPSEneDistribution* G4SingleParticleSource::GetEneDist ( )
inline
G4int G4SingleParticleSource::GetNumberOfParticles ( )
inline

Definition at line 186 of file G4SingleParticleSource.hh.

Referenced by G4GeneralParticleSource::GetNumberOfParticles().

186  {
187  return NumberOfParticlesToBeGenerated;
188  }
G4ParticleDefinition* G4SingleParticleSource::GetParticleDefinition ( )
inline

Definition at line 151 of file G4SingleParticleSource.hh.

Referenced by G4GeneralParticleSource::GetParticleDefinition().

151  {
152  return particle_definition;
153  }
G4double G4SingleParticleSource::GetParticleEnergy ( )
inline

Definition at line 198 of file G4SingleParticleSource.hh.

Referenced by G4GeneralParticleSource::GetParticleEnergy().

198  {
199  return particle_energy;
200  }
G4ThreeVector G4SingleParticleSource::GetParticleMomentumDirection ( )
inline

Definition at line 194 of file G4SingleParticleSource.hh.

Referenced by G4GeneralParticleSource::GetParticleMomentumDirection().

194  {
195  return particle_momentum_direction;
196  }
G4ThreeVector G4SingleParticleSource::GetParticlePolarization ( )
inline

Definition at line 166 of file G4SingleParticleSource.hh.

Referenced by G4GeneralParticleSource::GetParticlePolarization().

166  {
167  return particle_polarization;
168  }
G4ThreeVector G4SingleParticleSource::GetParticlePosition ( )
inline

Definition at line 190 of file G4SingleParticleSource.hh.

Referenced by G4GeneralParticleSource::GetParticlePosition().

190  {
191  return particle_position;
192  }
G4double G4SingleParticleSource::GetParticleTime ( )
inline

Definition at line 176 of file G4SingleParticleSource.hh.

Referenced by G4GeneralParticleSource::GetParticleTime().

176  {
177  return particle_time;
178  }
G4SPSPosDistribution* G4SingleParticleSource::GetPosDist ( )
inline
void G4SingleParticleSource::SetNumberOfParticles ( G4int  i)
inline

Definition at line 181 of file G4SingleParticleSource.hh.

Referenced by G4GeneralParticleSourceMessenger::SetNewValue(), and G4GeneralParticleSource::SetNumberOfParticles().

181  {
182  NumberOfParticlesToBeGenerated = i;
183  }
void G4SingleParticleSource::SetParticleCharge ( G4double  aCharge)
inline

Definition at line 156 of file G4SingleParticleSource.hh.

Referenced by G4GeneralParticleSource::SetParticleCharge().

156  {
157  particle_charge = aCharge;
158  }
void G4SingleParticleSource::SetParticleDefinition ( G4ParticleDefinition aParticleDefinition)
void G4SingleParticleSource::SetParticlePolarization ( G4ThreeVector  aVal)
inline

Definition at line 162 of file G4SingleParticleSource.hh.

Referenced by G4GeneralParticleSourceMessenger::SetNewValue(), and G4GeneralParticleSource::SetParticlePolarization().

162  {
163  particle_polarization = aVal;
164  }
void G4SingleParticleSource::SetParticleTime ( G4double  aTime)
inline

Definition at line 172 of file G4SingleParticleSource.hh.

Referenced by G4GeneralParticleSourceMessenger::SetNewValue(), and G4GeneralParticleSource::SetParticleTime().

172  {
173  particle_time = aTime;
174  }
void G4SingleParticleSource::SetVerbosity ( G4int  vL)

Definition at line 99 of file G4SingleParticleSource.cc.

References G4cout, G4endl, G4SPSPosDistribution::SetVerbosity(), G4SPSAngDistribution::SetVerbosity(), and G4SPSEneDistribution::SetVerbosity().

Referenced by G4GeneralParticleSourceMessenger::SetNewValue(), and G4GeneralParticleSource::SetVerbosity().

99  {
100  verbosityLevel = vL;
101  posGenerator->SetVerbosity(vL);
102  angGenerator->SetVerbosity(vL);
103  eneGenerator->SetVerbosity(vL);
104  G4cout << "Verbosity Set to: " << verbosityLevel << G4endl;
105 }
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61

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