Geant4-11
Public Member Functions | Static Public Member Functions | Protected Attributes | Private Member Functions | Private Attributes
G4GeneralParticleSource Class Reference

#include <G4GeneralParticleSource.hh>

Inheritance diagram for G4GeneralParticleSource:
G4VPrimaryGenerator

Public Member Functions

void AddaSource (G4double)
 
void ClearAll ()
 
void DeleteaSource (G4int)
 
 G4GeneralParticleSource ()
 
void GeneratePrimaryVertex (G4Event *)
 
G4SingleParticleSourceGetCurrentSource () const
 
G4int GetCurrentSourceIndex () const
 
G4double GetCurrentSourceIntensity () const
 
G4int GetNumberOfParticles () const
 
G4int GetNumberofSource ()
 
G4ParticleDefinitionGetParticleDefinition () const
 
G4double GetParticleEnergy () const
 
G4ThreeVector GetParticleMomentumDirection () const
 
G4ThreeVector GetParticlePolarization () const
 
G4ThreeVector GetParticlePosition ()
 
G4ThreeVector GetParticlePosition () const
 
G4double GetParticleTime ()
 
G4double GetParticleTime () const
 
void ListSource ()
 
void SetCurrentSourceIntensity (G4double)
 
void SetCurrentSourceto (G4int)
 
void SetFlatSampling (G4bool av)
 
void SetMultipleVertex (G4bool av)
 
void SetNumberOfParticles (G4int i)
 
void SetParticleCharge (G4double aCharge)
 
void SetParticleDefinition (G4ParticleDefinition *aPDef)
 
void SetParticlePolarization (G4ThreeVector aVal)
 
void SetParticlePosition (G4ThreeVector aPosition)
 
void SetParticleTime (G4double aTime)
 
void SetVerbosity (G4int i)
 
 ~G4GeneralParticleSource ()
 

Static Public Member Functions

static G4bool CheckVertexInsideWorld (const G4ThreeVector &pos)
 

Protected Attributes

G4ThreeVector particle_position
 
G4double particle_time = 0.0
 

Private Member Functions

void IntensityNormalization ()
 

Private Attributes

G4GeneralParticleSourceDataGPSData = nullptr
 
G4bool normalised = false
 
G4GeneralParticleSourceMessengertheMessenger = nullptr
 

Detailed Description

Definition at line 58 of file G4GeneralParticleSource.hh.

Constructor & Destructor Documentation

◆ G4GeneralParticleSource()

G4GeneralParticleSource::G4GeneralParticleSource ( )

Definition at line 49 of file G4GeneralParticleSource.cc.

50{
52 // currentSource = GPSData->GetCurrentSource();
53 // currentSourceIdx = G4int(GPSData->GetSourceVectorSize() - 1);
54
55 // Messenger is special, only a worker should instantiate it.
56 // Singleton pattern
57 //
59
60 // Some initialization should be done only once
61 //
63 static G4bool onlyOnce = false;
64 if ( !onlyOnce )
65 {
68 onlyOnce = true;
69 }
70}
bool G4bool
Definition: G4Types.hh:86
G4SingleParticleSource * GetCurrentSource(G4int idx)
static G4GeneralParticleSourceData * Instance()
static G4GeneralParticleSourceMessenger * GetInstance(G4GeneralParticleSource *)
void SetParticleGun(G4SingleParticleSource *fpg)
G4GeneralParticleSourceData * GPSData
G4GeneralParticleSourceMessenger * theMessenger

References G4GeneralParticleSourceData::GetCurrentSource(), G4GeneralParticleSourceMessenger::GetInstance(), GPSData, G4GeneralParticleSourceData::Instance(), IntensityNormalization(), anonymous_namespace{G4GeneralParticleSource.cc}::messangerInit, G4GeneralParticleSourceMessenger::SetParticleGun(), and theMessenger.

◆ ~G4GeneralParticleSource()

G4GeneralParticleSource::~G4GeneralParticleSource ( )

Member Function Documentation

◆ AddaSource()

void G4GeneralParticleSource::AddaSource ( G4double  aV)

◆ 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.

◆ ClearAll()

void G4GeneralParticleSource::ClearAll ( )

◆ DeleteaSource()

void G4GeneralParticleSource::DeleteaSource ( G4int  aV)

Definition at line 164 of file G4GeneralParticleSource.cc.

165{
166 G4int id = aV;
167 if ( id <= GPSData->GetIntensityVectorSize() )
168 {
171 }
172 else
173 {
174 G4cout << " source index is invalid " << G4endl;
175 G4cout << " it shall be <= "
177 }
178}
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout

References G4GeneralParticleSourceData::DeleteASource(), G4cout, G4endl, G4GeneralParticleSourceData::GetIntensityVectorSize(), GPSData, normalised, and G4GeneralParticleSourceData::Normalised().

Referenced by G4GeneralParticleSourceMessenger::SetNewValue().

◆ GeneratePrimaryVertex()

void G4GeneralParticleSource::GeneratePrimaryVertex ( G4Event evt)
virtual

Implements G4VPrimaryGenerator.

Definition at line 180 of file G4GeneralParticleSource.cc.

181{
183 {
186 {
187 // Try to minimize locks
188 if (! normalised )
189 {
190 // According to local variable, normalization is needed
191 // Check with underlying shared resource, another
192 // thread could have already normalized this
193 GPSData->Lock();
194 G4bool norm = GPSData->Normalised();
195 if (!norm)
196 {
198 }
199 // This takes care of the case in which the local variable
200 // is False and the underlying resource is true.
202 GPSData->Unlock();
203 }
204 G4double rndm = G4UniformRand();
205 std::size_t i = 0 ;
206 if (! GPSData->GetFlatSampling() )
207 {
208 while ( rndm > GPSData->GetSourceProbability(i) ) ++i;
209 currentSource = GPSData->GetCurrentSource(i);
210 }
211 else
212 {
213 i = std::size_t (GPSData->GetIntensityVectorSize()*rndm);
214 currentSource = GPSData->GetCurrentSource(i);
215 }
216 }
217 currentSource->GeneratePrimaryVertex(evt);
218 }
219 else
220 {
221 for (G4int i = 0; i < GPSData->GetIntensityVectorSize(); ++i)
222 {
224 }
225 }
226}
double G4double
Definition: G4Types.hh:83
#define G4UniformRand()
Definition: Randomize.hh:52
G4double GetSourceProbability(G4int idx) const
void GeneratePrimaryVertex(G4Event *evt)

References G4UniformRand, G4SingleParticleSource::GeneratePrimaryVertex(), G4GeneralParticleSourceData::GetCurrentSource(), G4GeneralParticleSourceData::GetFlatSampling(), G4GeneralParticleSourceData::GetIntensityVectorSize(), G4GeneralParticleSourceData::GetMultipleVertex(), G4GeneralParticleSourceData::GetSourceProbability(), GPSData, IntensityNormalization(), G4GeneralParticleSourceData::Lock(), normalised, G4GeneralParticleSourceData::Normalised(), and G4GeneralParticleSourceData::Unlock().

◆ GetCurrentSource()

G4SingleParticleSource * G4GeneralParticleSource::GetCurrentSource ( ) const
inline

Definition at line 84 of file G4GeneralParticleSource.hh.

85 { return GPSData->GetCurrentSource(); }

References G4GeneralParticleSourceData::GetCurrentSource(), and GPSData.

◆ GetCurrentSourceIndex()

G4int G4GeneralParticleSource::GetCurrentSourceIndex ( ) const
inline

◆ GetCurrentSourceIntensity()

G4double G4GeneralParticleSource::GetCurrentSourceIntensity ( ) const
inline

◆ GetNumberOfParticles()

G4int G4GeneralParticleSource::GetNumberOfParticles ( ) const
inline

◆ GetNumberofSource()

G4int G4GeneralParticleSource::GetNumberofSource ( )
inline

◆ GetParticleDefinition()

G4ParticleDefinition * G4GeneralParticleSource::GetParticleDefinition ( ) const
inline

◆ GetParticleEnergy()

G4double G4GeneralParticleSource::GetParticleEnergy ( ) const
inline

◆ GetParticleMomentumDirection()

G4ThreeVector G4GeneralParticleSource::GetParticleMomentumDirection ( ) const
inline

◆ GetParticlePolarization()

G4ThreeVector G4GeneralParticleSource::GetParticlePolarization ( ) const
inline

◆ GetParticlePosition() [1/2]

G4ThreeVector G4VPrimaryGenerator::GetParticlePosition ( )
inlineinherited

◆ GetParticlePosition() [2/2]

G4ThreeVector G4GeneralParticleSource::GetParticlePosition ( ) const
inline

◆ GetParticleTime() [1/2]

G4double G4VPrimaryGenerator::GetParticleTime ( )
inlineinherited

◆ GetParticleTime() [2/2]

G4double G4GeneralParticleSource::GetParticleTime ( ) const
inline

◆ IntensityNormalization()

void G4GeneralParticleSource::IntensityNormalization ( )
private

◆ ListSource()

void G4GeneralParticleSource::ListSource ( )

Definition at line 96 of file G4GeneralParticleSource.cc.

97{
98 G4cout << "The number of particle sources is: "
100 G4cout << " Multiple Vertex sources: " << GPSData->GetMultipleVertex();
101 G4cout << " Flat Sampling flag: " << GPSData->GetFlatSampling() << G4endl;
102 const G4int currentIdx = GPSData->GetCurrentSourceIdx();
103 for(G4int i=0; i<GPSData->GetIntensityVectorSize(); ++i)
104 {
105 G4cout << "\tsource " << i << " with intensity: "
106 << GPSData->GetIntensity(i) << G4endl;
108 G4cout << " \t\tNum Particles: "<<thisSrc->GetNumberOfParticles()
109 << "; Particle type: "
110 << thisSrc->GetParticleDefinition()->GetParticleName() << G4endl;
111 G4cout << " \t\tEnergy: "
112 << G4BestUnit(thisSrc->GetParticleEnergy(),"Energy") << G4endl;
113 G4cout << " \t\tDirection: "
114 << thisSrc->GetAngDist()->GetDirection() << "; Position: ";
115 G4cout << G4BestUnit(thisSrc->GetPosDist()->GetCentreCoords(),"Length")
116 << G4endl;
117 G4cout << " \t\tAngular Distribution: "
118 << thisSrc->GetAngDist()->GetDistType() << G4endl;
119 G4cout << " \t\tEnergy Distribution: "
120 << thisSrc->GetEneDist()->GetEnergyDisType() << G4endl;
121 G4cout << " \t\tPosition Distribution Type: "
122 << thisSrc->GetPosDist()->GetPosDisType();
123 G4cout << "; Position Shape: "
124 << thisSrc->GetPosDist()->GetPosDisShape() << G4endl;
125 }
126
127 // Set back previous source
128 GPSData->GetCurrentSource(currentIdx);
129}
#define G4BestUnit(a, b)
const G4String & GetParticleName() const
const G4String & GetEnergyDisType()
const G4ThreeVector & GetCentreCoords() const
const G4String & GetPosDisType() const
const G4String & GetPosDisShape() const
G4SPSAngDistribution * GetAngDist() const
G4SPSEneDistribution * GetEneDist() const
G4SPSPosDistribution * GetPosDist() const

References G4BestUnit, G4cout, G4endl, G4SingleParticleSource::GetAngDist(), G4SPSPosDistribution::GetCentreCoords(), G4GeneralParticleSourceData::GetCurrentSource(), G4GeneralParticleSourceData::GetCurrentSourceIdx(), G4SPSAngDistribution::GetDirection(), G4SPSAngDistribution::GetDistType(), G4SingleParticleSource::GetEneDist(), G4SPSEneDistribution::GetEnergyDisType(), G4GeneralParticleSourceData::GetFlatSampling(), G4GeneralParticleSourceData::GetIntensity(), G4GeneralParticleSourceData::GetIntensityVectorSize(), G4GeneralParticleSourceData::GetMultipleVertex(), G4SingleParticleSource::GetNumberOfParticles(), G4SingleParticleSource::GetParticleDefinition(), G4SingleParticleSource::GetParticleEnergy(), G4ParticleDefinition::GetParticleName(), G4SPSPosDistribution::GetPosDisShape(), G4SingleParticleSource::GetPosDist(), G4SPSPosDistribution::GetPosDisType(), and GPSData.

Referenced by G4GeneralParticleSourceMessenger::SetNewValue().

◆ SetCurrentSourceIntensity()

void G4GeneralParticleSource::SetCurrentSourceIntensity ( G4double  aV)

◆ SetCurrentSourceto()

void G4GeneralParticleSource::SetCurrentSourceto ( G4int  aV)

Definition at line 131 of file G4GeneralParticleSource.cc.

132{
133 G4int id = aV;
134 if ( id < GPSData->GetIntensityVectorSize() )
135 {
136 // currentSourceIdx = aV;
137 // currentSource = GPSData->GetCurrentSource(id);
139 }
140 else
141 {
143 msg << "Trying to set source to index " << aV << " but only "
144 << GPSData->GetIntensityVectorSize() << " sources are defined.";
145 G4Exception("G4GeneralParticleSoruce::SetCurrentSourceto", "G4GPS004",
146 FatalException, msg);
147 }
148}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
std::ostringstream G4ExceptionDescription
Definition: G4Exception.hh:40

References FatalException, G4Exception(), G4GeneralParticleSourceData::GetCurrentSource(), G4GeneralParticleSourceData::GetIntensityVectorSize(), GPSData, G4GeneralParticleSourceMessenger::SetParticleGun(), and theMessenger.

Referenced by G4GeneralParticleSourceMessenger::SetNewValue().

◆ SetFlatSampling()

void G4GeneralParticleSource::SetFlatSampling ( G4bool  av)
inline

◆ SetMultipleVertex()

void G4GeneralParticleSource::SetMultipleVertex ( G4bool  av)
inline

◆ SetNumberOfParticles()

void G4GeneralParticleSource::SetNumberOfParticles ( G4int  i)
inline

◆ SetParticleCharge()

void G4GeneralParticleSource::SetParticleCharge ( G4double  aCharge)
inline

◆ SetParticleDefinition()

void G4GeneralParticleSource::SetParticleDefinition ( G4ParticleDefinition aPDef)
inline

◆ SetParticlePolarization()

void G4GeneralParticleSource::SetParticlePolarization ( G4ThreeVector  aVal)
inline

◆ SetParticlePosition()

void G4VPrimaryGenerator::SetParticlePosition ( G4ThreeVector  aPosition)
inlineinherited

◆ SetParticleTime()

void G4GeneralParticleSource::SetParticleTime ( G4double  aTime)
inline

◆ SetVerbosity()

void G4GeneralParticleSource::SetVerbosity ( G4int  i)
inline

Field Documentation

◆ GPSData

G4GeneralParticleSourceData* G4GeneralParticleSource::GPSData = nullptr
private

◆ normalised

G4bool G4GeneralParticleSource::normalised = false
private

◆ particle_position

G4ThreeVector G4VPrimaryGenerator::particle_position
protectedinherited

◆ particle_time

G4double G4VPrimaryGenerator::particle_time = 0.0
protectedinherited

◆ theMessenger

G4GeneralParticleSourceMessenger* G4GeneralParticleSource::theMessenger = nullptr
private

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