OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
Gaussian Class Reference

Generating particles following a Gaussian distribution. More...

#include <Gaussian.h>

Inheritance diagram for Gaussian:
Inheritance graph
Collaboration diagram for Gaussian:
Collaboration graph

Public Member Functions

 Gaussian (std::shared_ptr< ParticleContainer_t > pc, std::shared_ptr< FieldContainer_t > fc, Distribution_t *opalDist)
 Constructor for the Gaussian sampler.
 
 Gaussian (std::shared_ptr< ParticleContainer_t > pc, const Vector_t< double, 3 > &sigmaR, const Vector_t< double, 3 > &sigmaP, double avrgpz, const Vector_t< double, 3 > &cutoffR, bool fix_meanR=true)
 Constructor for the Gaussian sampler without field container and distribution object.
 
void generateParticles (size_t &numberOfParticles, Vector_t< double, 3 > nr) override
 Generates particles with a Gaussian distribution.
 
void emitParticles (double t, double dt) override
 Time-stepped emission hook for one-shot delayed injection.
 
void setSigmaR (const Vector_t< double, 3 > &sigmaR)
 
void setSigmaP (const Vector_t< double, 3 > &sigmaP)
 
void setAvrgpz (double avrgpz)
 
void setCutoffR (const Vector_t< double, 3 > &cutoffR)
 
void getParameters (Vector_t< double, 3 > &sigmaR, Vector_t< double, 3 > &sigmaP, double &avrgpz, Vector_t< double, 3 > &cutoffR) const
 
void setFixMeanR (bool fixMeanR)
 
void getFixMeanR (bool &fixMeanR) const
 
void setEmissionOffsets (ippl::Vector< double, 3 > R0, ippl::Vector< double, 3 > P0, double t0, const std::string &emissionModel="NONE")
 
void setInitialPolarization (const ippl::Vector< double, 3 > &pol)
 
void fillPolarization (size_t startIdx, size_t count)
 
Vector_t< double, 3 > getEmissionR0 () const
 
virtual bool isEmissionDone (double t) const
 Whether this sampler has finished all emission (no more particles will be created).
 
virtual double getGlobalTimeShift () const
 Optional tracker time shift needed before the first emitted particles are born.
 
virtual bool hasInitialReferenceMomentum () const
 Optional initial reference momentum in the source-local frame.
 
virtual Vector_t< double, 3 > getInitialReferenceMomentum () const
 
virtual double getEmissionTimeStep () const
 Optional OPAL-like tracker time step while this sampler is still emitting.
 
virtual void testNumEmitParticles (size_t, double)
 
virtual void testEmitParticles (size_t, double)
 
virtual void initDomainDecomp (double)
 
virtual void setWithDomainDecomp (bool)
 
size_t computeLocalEmitCount (size_t totalToSample) const
 Computes the number of particles this rank should emit so that the global total equals totalToSample and no rank exceeds its capacity (space left).
 

Public Attributes

IpplTimings::TimerRef samperTimer_m
 Timer for performance profiling.
 

Protected Attributes

std::shared_ptr< ParticleContainer_tpc_m
 
std::shared_ptr< FieldContainer_tfc_m
 
Distribution_topalDist_m = nullptr
 
std::string samplingMethod_m
 
Vector_t< double, 3 > R0_m = 0.0
 Emission source offset: position R0, momentum P0, start time t0 (applied in sample step).
 
Vector_t< double, 3 > P0_m = 0.0
 
double t0_m = 0.0
 
std::string emissionModel_m = "NONE"
 
Vector_t< double, 3 > initialPol_m = 0.0
 
bool hasEmittedOnce_m = false
 For one-shot emitters (e.g. Gaussian at delayed t0): guard to avoid double sampling.
 

Private Member Functions

void initRandomPool ()
 Initializes the random number generator pool.
 

Private Attributes

GeneratorPool randPool_m
 Pool of random number generators for parallel sampling.
 
Vector_t< double, 3 > sigmaR_m
 Standard deviations for position and momentum distributions.
 
Vector_t< double, 3 > sigmaP_m
 
double avrgpz_m
 Average momentum in the z-direction.
 
Vector_t< double, 3 > cutoffR_m
 Cutoff multiplier for position distribution.
 
bool fixMeanR_m = true
 Flag to exactly fix the mean position of particles after sampling.
 

Detailed Description

Generating particles following a Gaussian distribution.

This function samples particle positions R and momenta P given following normal distributions a normal distribution R ~ N ( [0, 0, 0 ], sdR) P ~ N ( [0, 0, avrgpz], sdP) where sdR = [SigmaR[0] 0 0 0 SigmaR[1] 0 0 0 SigmaR[2]]

and sdP = [SigmaP[0] 0 0 0 SigmaP[1] 0 0 0 SigmaP[2]].

Here, R is sampled in a bounded domains R \in [-CutoffR*SigmaR, CutoffR*SigmaR]^3 and corrected by translation to ensure mean = [0,0,0].

Parameters
numberOfParticlesThe total number of particles to generate.
nrThe number of grid points in each dimension (not used here).

Definition at line 38 of file Gaussian.h.

Constructor & Destructor Documentation

◆ Gaussian() [1/2]

Gaussian::Gaussian ( std::shared_ptr< ParticleContainer_t pc,
std::shared_ptr< FieldContainer_t fc,
Distribution_t opalDist 
)

Constructor for the Gaussian sampler.

Constructs a Gaussian sampler.

Parameters
pcShared pointer to the particle container.
fcShared pointer to the field container.
opalDistBorrowed distribution object.

Definition at line 15 of file Gaussian.cpp.

References Distribution::getAvrgpz(), Distribution::getCutoffR(), Distribution::getSigmaP(), Distribution::getSigmaR(), initRandomPool(), samperTimer_m, setAvrgpz(), setCutoffR(), setSigmaP(), and setSigmaR().

Here is the call graph for this function:

◆ Gaussian() [2/2]

Gaussian::Gaussian ( std::shared_ptr< ParticleContainer_t pc,
const Vector_t< double, 3 > &  sigmaR,
const Vector_t< double, 3 > &  sigmaP,
double  avrgpz,
const Vector_t< double, 3 > &  cutoffR,
bool  fix_meanR = true 
)

Constructor for the Gaussian sampler without field container and distribution object.

Parameters
pcShared pointer to the particle container.
sigmaRStandard deviation for position distribution.
sigmaPStandard deviation for momentum distribution.
avrgpzAverage momentum in the z-direction.
cutoffRCutoff multiplier for position distribution.
fix_meanRFlag to exactly fix the mean position of particles after sampling.

Definition at line 27 of file Gaussian.cpp.

References initRandomPool(), samperTimer_m, setAvrgpz(), setCutoffR(), setFixMeanR(), setSigmaP(), and setSigmaR().

Here is the call graph for this function:

Member Function Documentation

◆ computeLocalEmitCount()

size_t SamplingBase::computeLocalEmitCount ( size_t  totalToSample) const
inherited

Computes the number of particles this rank should emit so that the global total equals totalToSample and no rank exceeds its capacity (space left).

Parameters
totalToSampleGlobal number of particles to emit this timestep.
Returns
Local number of particles this rank should create/emit.

Definition at line 6 of file SamplingBase.cpp.

References SamplingBase::pc_m.

Referenced by FlatTop::countEnteringParticlesPerRank(), FromFile::generateParticles(), generateParticles(), and MultiVariateGaussian::generateParticles().

◆ emitParticles()

void Gaussian::emitParticles ( double  t,
double  dt 
)
overridevirtual

Time-stepped emission hook for one-shot delayed injection.

For GAUSS, this emits once when [t, t+dt] crosses t0 for sources with t0 > 0. Initial sampling at t0 == 0 is handled via generateParticles.

Reimplemented from SamplingBase.

Definition at line 187 of file Gaussian.cpp.

References generateParticles(), Distribution::getNumParticles(), SamplingBase::hasEmittedOnce_m, SamplingBase::opalDist_m, SamplingBase::pc_m, and SamplingBase::t0_m.

Here is the call graph for this function:

◆ fillPolarization()

void SamplingBase::fillPolarization ( size_t  startIdx,
size_t  count 
)
inlineinherited

Fill the Pol particle attribute with initialPol_m on the half-open range [startIdx, startIdx + count). No-op when the container does not store spin. Must be called after the particles have been created and before they are pushed downstream.

Definition at line 63 of file SamplingBase.hpp.

References SamplingBase::initialPol_m, and SamplingBase::pc_m.

Referenced by FlatTop::emitParticles(), FromFile::generateParticles(), generateParticles(), and MultiVariateGaussian::generateParticles().

◆ generateParticles()

void Gaussian::generateParticles ( size_t &  numberOfParticles,
Vector_t< double, 3 >  nr 
)
overridevirtual

Generates particles with a Gaussian distribution.

Generates particles following a Gaussian distribution.

Parameters
numberOfParticlesThe total number of particles to generate.
nrthe number of grid cells in R (used in domain decomposition).
numberOfParticlesThe total number of particles to generate.
nrThe number of grid points in each dimension (not used here).

Reimplemented from SamplingBase.

Definition at line 64 of file Gaussian.cpp.

References avrgpz_m, SamplingBase::computeLocalEmitCount(), cutoffR_m, SamplingBase::emissionModel_m, SamplingBase::fillPolarization(), fixMeanR_m, SamplingBase::hasEmittedOnce_m, SamplingBase::P0_m, SamplingBase::pc_m, SamplingBase::R0_m, randPool_m, samperTimer_m, sigmaP_m, sigmaR_m, and SamplingBase::t0_m.

Referenced by emitParticles(), TEST_F(), TEST_F(), and TEST_F().

Here is the call graph for this function:

◆ getEmissionR0()

Vector_t< double, 3 > SamplingBase::getEmissionR0 ( ) const
inlineinherited

Definition at line 78 of file SamplingBase.hpp.

References SamplingBase::R0_m.

◆ getEmissionTimeStep()

virtual double SamplingBase::getEmissionTimeStep ( ) const
inlinevirtualinherited

Optional OPAL-like tracker time step while this sampler is still emitting.

Reimplemented in EmittedFromFile, and OpalFlatTop.

Definition at line 102 of file SamplingBase.hpp.

◆ getFixMeanR()

void Gaussian::getFixMeanR ( bool &  fixMeanR) const
inline

Definition at line 104 of file Gaussian.h.

References fixMeanR_m.

◆ getGlobalTimeShift()

virtual double SamplingBase::getGlobalTimeShift ( ) const
inlinevirtualinherited

Optional tracker time shift needed before the first emitted particles are born.

Reimplemented in EmittedFromFile, and OpalFlatTop.

Definition at line 92 of file SamplingBase.hpp.

◆ getInitialReferenceMomentum()

virtual Vector_t< double, 3 > SamplingBase::getInitialReferenceMomentum ( ) const
inlinevirtualinherited

Reimplemented in EmittedFromFile, and OpalFlatTop.

Definition at line 97 of file SamplingBase.hpp.

◆ getParameters()

void Gaussian::getParameters ( Vector_t< double, 3 > &  sigmaR,
Vector_t< double, 3 > &  sigmaP,
double &  avrgpz,
Vector_t< double, 3 > &  cutoffR 
) const
inline

Definition at line 93 of file Gaussian.h.

References avrgpz_m, cutoffR_m, sigmaP_m, and sigmaR_m.

◆ hasInitialReferenceMomentum()

virtual bool SamplingBase::hasInitialReferenceMomentum ( ) const
inlinevirtualinherited

Optional initial reference momentum in the source-local frame.

Reimplemented in EmittedFromFile, and OpalFlatTop.

Definition at line 95 of file SamplingBase.hpp.

◆ initDomainDecomp()

virtual void SamplingBase::initDomainDecomp ( double  )
inlinevirtualinherited

Reimplemented in FlatTop, and OpalFlatTop.

Definition at line 110 of file SamplingBase.hpp.

◆ initRandomPool()

void Gaussian::initRandomPool ( )
private

Initializes the random number generator pool.

Definition at line 42 of file Gaussian.cpp.

References gmsg, randPool_m, and Options::seed.

Referenced by Gaussian(), and Gaussian().

◆ isEmissionDone()

virtual bool SamplingBase::isEmissionDone ( double  t) const
inlinevirtualinherited

Whether this sampler has finished all emission (no more particles will be created).

Parameters
tCurrent simulation time (s).

Reimplemented in FlatTop, EmittedFromFile, and OpalFlatTop.

Definition at line 86 of file SamplingBase.hpp.

References SamplingBase::hasEmittedOnce_m.

◆ setAvrgpz()

void Gaussian::setAvrgpz ( double  avrgpz)
inline

Definition at line 89 of file Gaussian.h.

References avrgpz_m.

Referenced by Gaussian(), and Gaussian().

◆ setCutoffR()

void Gaussian::setCutoffR ( const Vector_t< double, 3 > &  cutoffR)
inline

Definition at line 91 of file Gaussian.h.

References cutoffR_m.

Referenced by Gaussian(), and Gaussian().

◆ setEmissionOffsets()

void SamplingBase::setEmissionOffsets ( ippl::Vector< double, 3 >  R0,
ippl::Vector< double, 3 >  P0,
double  t0,
const std::string &  emissionModel = "NONE" 
)
inlineinherited

◆ setFixMeanR()

void Gaussian::setFixMeanR ( bool  fixMeanR)
inline

Definition at line 102 of file Gaussian.h.

References fixMeanR_m.

Referenced by Gaussian().

◆ setInitialPolarization()

void SamplingBase::setInitialPolarization ( const ippl::Vector< double, 3 > &  pol)
inlineinherited

Definition at line 57 of file SamplingBase.hpp.

References SamplingBase::initialPol_m.

◆ setSigmaP()

void Gaussian::setSigmaP ( const Vector_t< double, 3 > &  sigmaP)
inline

Definition at line 87 of file Gaussian.h.

References sigmaP_m.

Referenced by Gaussian(), and Gaussian().

◆ setSigmaR()

void Gaussian::setSigmaR ( const Vector_t< double, 3 > &  sigmaR)
inline

Definition at line 85 of file Gaussian.h.

References sigmaR_m.

Referenced by Gaussian(), and Gaussian().

◆ setWithDomainDecomp()

virtual void SamplingBase::setWithDomainDecomp ( bool  )
inlinevirtualinherited

Reimplemented in FlatTop, and OpalFlatTop.

Definition at line 112 of file SamplingBase.hpp.

◆ testEmitParticles()

virtual void SamplingBase::testEmitParticles ( size_t  ,
double   
)
inlinevirtualinherited

Definition at line 108 of file SamplingBase.hpp.

◆ testNumEmitParticles()

virtual void SamplingBase::testNumEmitParticles ( size_t  ,
double   
)
inlinevirtualinherited

Definition at line 105 of file SamplingBase.hpp.

Member Data Documentation

◆ avrgpz_m

double Gaussian::avrgpz_m
private

Average momentum in the z-direction.

Definition at line 126 of file Gaussian.h.

Referenced by generateParticles(), getParameters(), and setAvrgpz().

◆ cutoffR_m

Vector_t<double, 3> Gaussian::cutoffR_m
private

Cutoff multiplier for position distribution.

Definition at line 131 of file Gaussian.h.

Referenced by generateParticles(), getParameters(), and setCutoffR().

◆ emissionModel_m

◆ fc_m

std::shared_ptr<FieldContainer_t> SamplingBase::fc_m
protectedinherited

◆ fixMeanR_m

bool Gaussian::fixMeanR_m = true
private

Flag to exactly fix the mean position of particles after sampling.

Definition at line 136 of file Gaussian.h.

Referenced by generateParticles(), getFixMeanR(), and setFixMeanR().

◆ hasEmittedOnce_m

bool SamplingBase::hasEmittedOnce_m = false
protectedinherited

◆ initialPol_m

Vector_t<double, 3> SamplingBase::initialPol_m = 0.0
protectedinherited

Initial polarization vector P applied to every particle this sampler creates. Rest-frame Pauli expectations along lab-frame axes; |Pol| in [0, 1]. Ignored when the container does not have a spin attribute (hasSpin() == false).

Definition at line 30 of file SamplingBase.hpp.

Referenced by SamplingBase::fillPolarization(), and SamplingBase::setInitialPolarization().

◆ opalDist_m

◆ P0_m

◆ pc_m

◆ R0_m

Vector_t<double, 3> SamplingBase::R0_m = 0.0
protectedinherited

◆ randPool_m

GeneratorPool Gaussian::randPool_m
private

Pool of random number generators for parallel sampling.

Definition at line 115 of file Gaussian.h.

Referenced by generateParticles(), and initRandomPool().

◆ samperTimer_m

IpplTimings::TimerRef Gaussian::samperTimer_m

Timer for performance profiling.

Definition at line 43 of file Gaussian.h.

Referenced by Gaussian(), Gaussian(), and generateParticles().

◆ samplingMethod_m

std::string SamplingBase::samplingMethod_m
protectedinherited

Definition at line 20 of file SamplingBase.hpp.

◆ sigmaP_m

Vector_t<double, 3> Gaussian::sigmaP_m
private

Definition at line 121 of file Gaussian.h.

Referenced by generateParticles(), getParameters(), and setSigmaP().

◆ sigmaR_m

Vector_t<double, 3> Gaussian::sigmaR_m
private

Standard deviations for position and momentum distributions.

Definition at line 120 of file Gaussian.h.

Referenced by generateParticles(), getParameters(), and setSigmaR().

◆ t0_m


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