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)
 
G4SPSAngDistribution * GetAngDist () const
 
G4SPSRandomGenerator * GetBiasRndm () const
 
G4SPSEneDistribution * GetEneDist () const
 
G4int GetNumberOfParticles () const
 
G4ParticleDefinition * GetParticleDefinition () const
 
G4double GetParticleEnergy () const
 
G4ThreeVector GetParticleMomentumDirection () const
 
const G4ThreeVector & GetParticlePolarization () const
 
G4ThreeVector GetParticlePosition ()
 
G4ThreeVector GetParticlePosition () const
 
G4double GetParticleTime ()
 
G4double GetParticleTime () const
 
G4SPSPosDistribution * GetPosDist () 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

G4SPSAngDistribution * angGenerator = nullptr
 
G4SPSRandomGenerator * biasRndm = nullptr
 
G4double charge
 
G4ParticleDefinition * definition = nullptr
 
G4SPSEneDistribution * eneGenerator = nullptr
 
G4Mutex mutex
 
G4int NumberOfParticlesToBeGenerated
 
G4Cache< part_prop_t > ParticleProperties
 
G4ThreeVector polarization
 
G4SPSPosDistribution * posGenerator = 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: