Geant4-11
Data Structures | Public Member Functions | Static Public Member Functions | Protected Attributes | Private Attributes
G4SingleParticleSource Class Reference

#include <G4SingleParticleSource.hh>

Inheritance diagram for G4SingleParticleSource:
G4VPrimaryGenerator

Data Structures

struct  part_prop_t
 

Public Member Functions

 G4SingleParticleSource ()
 
void GeneratePrimaryVertex (G4Event *evt)
 
G4SPSAngDistributionGetAngDist () const
 
G4SPSRandomGeneratorGetBiasRndm () const
 
G4SPSEneDistributionGetEneDist () const
 
G4int GetNumberOfParticles () const
 
G4ParticleDefinitionGetParticleDefinition () const
 
G4double GetParticleEnergy () const
 
G4ThreeVector GetParticleMomentumDirection () const
 
const G4ThreeVectorGetParticlePolarization () const
 
G4ThreeVector GetParticlePosition ()
 
G4ThreeVector GetParticlePosition () const
 
G4double GetParticleTime ()
 
G4double GetParticleTime () const
 
G4SPSPosDistributionGetPosDist () const
 
void SetNumberOfParticles (G4int i)
 
void SetParticleCharge (G4double aCharge)
 
void SetParticleDefinition (G4ParticleDefinition *aParticleDefinition)
 
void SetParticlePolarization (const G4ThreeVector &aVal)
 
void SetParticlePosition (G4ThreeVector aPosition)
 
void SetParticleTime (G4double aTime)
 
void SetVerbosity (G4int)
 
 ~G4SingleParticleSource ()
 

Static Public Member Functions

static G4bool CheckVertexInsideWorld (const G4ThreeVector &pos)
 

Protected Attributes

G4ThreeVector particle_position
 
G4double particle_time = 0.0
 

Private Attributes

G4SPSAngDistributionangGenerator = nullptr
 
G4SPSRandomGeneratorbiasRndm = nullptr
 
G4double charge
 
G4ParticleDefinitiondefinition = nullptr
 
G4SPSEneDistributioneneGenerator = nullptr
 
G4Mutex mutex
 
G4int NumberOfParticlesToBeGenerated
 
G4Cache< part_prop_tParticleProperties
 
G4ThreeVector polarization
 
G4SPSPosDistributionposGenerator = nullptr
 
G4double time
 
G4int verbosityLevel
 

Detailed Description

Definition at line 70 of file G4SingleParticleSource.hh.

Constructor & Destructor Documentation

◆ G4SingleParticleSource()

G4SingleParticleSource::G4SingleParticleSource ( )

Definition at line 57 of file G4SingleParticleSource.cc.

58{
59 // Initialise all variables
60 // Position distribution Variables
61
64
65 charge = 0.0;
66 time = 0;
68
77
79
81}
#define G4MUTEXINIT(mutex)
Definition: G4Threading.hh:87
CLHEP::Hep3Vector G4ThreeVector
static G4Geantino * GeantinoDefinition()
Definition: G4Geantino.cc:81
void SetPosDistribution(G4SPSPosDistribution *a)
void SetBiasRndm(G4SPSRandomGenerator *a)
void SetBiasRndm(G4SPSRandomGenerator *a)
void SetBiasRndm(G4SPSRandomGenerator *a)
G4SPSPosDistribution * posGenerator
G4ParticleDefinition * definition
G4SPSAngDistribution * angGenerator
G4SPSEneDistribution * eneGenerator
G4SPSRandomGenerator * biasRndm

References angGenerator, biasRndm, charge, definition, eneGenerator, G4MUTEXINIT, G4Geantino::GeantinoDefinition(), NumberOfParticlesToBeGenerated, polarization, posGenerator, G4SPSAngDistribution::SetBiasRndm(), G4SPSEneDistribution::SetBiasRndm(), G4SPSPosDistribution::SetBiasRndm(), G4SPSAngDistribution::SetPosDistribution(), time, and verbosityLevel.

◆ ~G4SingleParticleSource()

G4SingleParticleSource::~G4SingleParticleSource ( )

Definition at line 83 of file G4SingleParticleSource.cc.

84{
85 delete biasRndm;
86 delete posGenerator;
87 delete angGenerator;
88 delete eneGenerator;
89
91}
#define G4MUTEXDESTROY(mutex)
Definition: G4Threading.hh:90

References angGenerator, biasRndm, eneGenerator, G4MUTEXDESTROY, and posGenerator.

Member Function Documentation

◆ CheckVertexInsideWorld()

G4bool G4VPrimaryGenerator::CheckVertexInsideWorld ( const G4ThreeVector pos)
staticinherited

Definition at line 43 of file G4VPrimaryGenerator.cc.

44{
46 -> GetNavigatorForTracking();
47
48 G4VPhysicalVolume* world= navigator-> GetWorldVolume();
49 G4VSolid* solid = world-> GetLogicalVolume()-> GetSolid();
50 EInside qinside = solid-> Inside(pos);
51
52 return (qinside != kInside) ? false : true;
53}
static const G4double pos
static G4TransportationManager * GetTransportationManager()
EInside
Definition: geomdefs.hh:67
@ kInside
Definition: geomdefs.hh:70

References G4TransportationManager::GetTransportationManager(), kInside, write_gdml::navigator, and pos.

◆ GeneratePrimaryVertex()

void G4SingleParticleSource::GeneratePrimaryVertex ( G4Event evt)
virtual

Implements G4VPrimaryGenerator.

Definition at line 109 of file G4SingleParticleSource.cc.

110{
111 if (definition == nullptr)
112 {
113 // TODO: Should this rise an exception???
114 return;
115 }
116
117 if (verbosityLevel > 1)
118 {
119 G4cout << " NumberOfParticlesToBeGenerated: "
121 }
122
123 part_prop_t& pp = ParticleProperties.Get();
124
125 // Position stuff
126 pp.position = posGenerator->GenerateOne();
127
128 // Create a new vertex
129 G4PrimaryVertex* vertex = new G4PrimaryVertex(pp.position,time);
130
131 for (G4int i=0; i<NumberOfParticlesToBeGenerated; ++i)
132 {
133 // Angular stuff
134 pp.momentum_direction = angGenerator->GenerateOne();
135
136 // Energy stuff
138
139 if (verbosityLevel >= 2)
140 {
141 G4cout << "Creating primaries and assigning to vertex" << G4endl;
142 }
143
144 // Create new primaries and set them to the vertex
145 //
148 particle->SetKineticEnergy(pp.energy );
149 particle->SetMass( mass );
150 particle->SetMomentumDirection( pp.momentum_direction );
151 particle->SetCharge( charge );
152 particle->SetPolarization(polarization.x(),
153 polarization.y(),
154 polarization.z());
155 if (verbosityLevel > 1)
156 {
157 G4cout << "Particle name: " << definition->GetParticleName() << G4endl;
158 G4cout << " Energy: " << pp.energy << G4endl;
159 G4cout << " Position: " << pp.position << G4endl;
160 G4cout << " Direction: " << pp.momentum_direction << G4endl;
161 }
162
163 // Set bweight equal to the multiple of all non-zero weights
164 //
166
168 {
169 weight *= eneGenerator->GetArbEneWeight(pp.energy);
170 }
171
172 // Pass it to primary particle
173 //
174 particle->SetWeight(weight);
175 vertex->SetPrimary(particle);
176 }
177
178 // Now pass the weight to the primary vertex. CANNOT be used here!
179 // vertex->SetWeight(particle_weight);
180 evt->AddPrimaryVertex(vertex);
181
182 if (verbosityLevel > 1)
183 {
184 G4cout << " Primary Vetex generated !" << G4endl;
185 }
186}
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
double z() const
double x() const
double y() const
void AddPrimaryVertex(G4PrimaryVertex *aPrimaryVertex)
Definition: G4Event.hh:121
const G4String & GetParticleName() const
void SetCharge(G4double chg)
void SetPolarization(const G4ThreeVector &pol)
void SetKineticEnergy(G4double eKin)
void SetWeight(G4double w)
void SetMomentumDirection(const G4ThreeVector &p)
void SetMass(G4double mas)
void SetPrimary(G4PrimaryParticle *pp)
G4ParticleMomentum GenerateOne()
G4double GetArbEneWeight(G4double)
G4double GenerateOne(G4ParticleDefinition *)
G4bool IfApplyEnergyWeight() const
G4double GetBiasWeight() const
G4Cache< part_prop_t > ParticleProperties

References G4Event::AddPrimaryVertex(), angGenerator, biasRndm, charge, definition, eneGenerator, G4cout, G4endl, G4SPSAngDistribution::GenerateOne(), G4SPSPosDistribution::GenerateOne(), G4SPSEneDistribution::GenerateOne(), G4SPSEneDistribution::GetArbEneWeight(), G4SPSRandomGenerator::GetBiasWeight(), G4ParticleDefinition::GetParticleName(), G4ParticleDefinition::GetPDGMass(), G4SPSEneDistribution::GetWeight(), G4SPSEneDistribution::IfApplyEnergyWeight(), NumberOfParticlesToBeGenerated, ParticleProperties, polarization, posGenerator, G4InuclParticleNames::pp, G4PrimaryParticle::SetCharge(), G4PrimaryParticle::SetKineticEnergy(), G4PrimaryParticle::SetMass(), G4PrimaryParticle::SetMomentumDirection(), G4PrimaryParticle::SetPolarization(), G4PrimaryVertex::SetPrimary(), G4PrimaryParticle::SetWeight(), time, verbosityLevel, CLHEP::Hep3Vector::x(), CLHEP::Hep3Vector::y(), and CLHEP::Hep3Vector::z().

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

◆ GetAngDist()

G4SPSAngDistribution * G4SingleParticleSource::GetAngDist ( ) const
inline

◆ GetBiasRndm()

G4SPSRandomGenerator * G4SingleParticleSource::GetBiasRndm ( ) const
inline

◆ GetEneDist()

G4SPSEneDistribution * G4SingleParticleSource::GetEneDist ( ) const
inline

◆ GetNumberOfParticles()

G4int G4SingleParticleSource::GetNumberOfParticles ( ) const
inline

◆ GetParticleDefinition()

G4ParticleDefinition * G4SingleParticleSource::GetParticleDefinition ( ) const
inline

◆ GetParticleEnergy()

G4double G4SingleParticleSource::GetParticleEnergy ( ) const
inline

◆ GetParticleMomentumDirection()

G4ThreeVector G4SingleParticleSource::GetParticleMomentumDirection ( ) const
inline

Definition at line 125 of file G4SingleParticleSource.hh.

126 { return ParticleProperties.Get().momentum_direction; }

References ParticleProperties.

Referenced by G4GeneralParticleSource::GetParticleMomentumDirection().

◆ GetParticlePolarization()

const G4ThreeVector & G4SingleParticleSource::GetParticlePolarization ( ) const
inline

Definition at line 109 of file G4SingleParticleSource.hh.

110 { return polarization; }

References polarization.

Referenced by G4GeneralParticleSource::GetParticlePolarization().

◆ GetParticlePosition() [1/2]

G4ThreeVector G4VPrimaryGenerator::GetParticlePosition ( )
inlineinherited

◆ GetParticlePosition() [2/2]

G4ThreeVector G4SingleParticleSource::GetParticlePosition ( ) const
inline

Definition at line 123 of file G4SingleParticleSource.hh.

124 { return ParticleProperties.Get().position; }

References ParticleProperties.

Referenced by G4GeneralParticleSource::GetParticlePosition().

◆ GetParticleTime() [1/2]

G4double G4VPrimaryGenerator::GetParticleTime ( )
inlineinherited

◆ GetParticleTime() [2/2]

G4double G4SingleParticleSource::GetParticleTime ( ) const
inline

Definition at line 114 of file G4SingleParticleSource.hh.

114{ return time; }

References time.

Referenced by G4GeneralParticleSource::GetParticleTime().

◆ GetPosDist()

G4SPSPosDistribution * G4SingleParticleSource::GetPosDist ( ) const
inline

◆ SetNumberOfParticles()

void G4SingleParticleSource::SetNumberOfParticles ( G4int  i)
inline

◆ SetParticleCharge()

void G4SingleParticleSource::SetParticleCharge ( G4double  aCharge)
inline

◆ SetParticleDefinition()

void G4SingleParticleSource::SetParticleDefinition ( G4ParticleDefinition aParticleDefinition)

◆ SetParticlePolarization()

void G4SingleParticleSource::SetParticlePolarization ( const G4ThreeVector aVal)
inline

◆ SetParticlePosition()

void G4VPrimaryGenerator::SetParticlePosition ( G4ThreeVector  aPosition)
inlineinherited

◆ SetParticleTime()

void G4SingleParticleSource::SetParticleTime ( G4double  aTime)
inline

◆ SetVerbosity()

void G4SingleParticleSource::SetVerbosity ( G4int  vL)

Field Documentation

◆ angGenerator

G4SPSAngDistribution* G4SingleParticleSource::angGenerator = nullptr
private

◆ biasRndm

G4SPSRandomGenerator* G4SingleParticleSource::biasRndm = nullptr
private

◆ charge

G4double G4SingleParticleSource::charge
private

◆ definition

G4ParticleDefinition* G4SingleParticleSource::definition = nullptr
private

◆ eneGenerator

G4SPSEneDistribution* G4SingleParticleSource::eneGenerator = nullptr
private

◆ mutex

G4Mutex G4SingleParticleSource::mutex
private

Definition at line 159 of file G4SingleParticleSource.hh.

◆ NumberOfParticlesToBeGenerated

G4int G4SingleParticleSource::NumberOfParticlesToBeGenerated
private

◆ particle_position

G4ThreeVector G4VPrimaryGenerator::particle_position
protectedinherited

◆ particle_time

G4double G4VPrimaryGenerator::particle_time = 0.0
protectedinherited

◆ ParticleProperties

G4Cache<part_prop_t> G4SingleParticleSource::ParticleProperties
private

◆ polarization

G4ThreeVector G4SingleParticleSource::polarization
private

◆ posGenerator

G4SPSPosDistribution* G4SingleParticleSource::posGenerator = nullptr
private

◆ time

G4double G4SingleParticleSource::time
private

◆ verbosityLevel

G4int G4SingleParticleSource::verbosityLevel
private

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