6#include <Kokkos_Random.hpp>
16using GeneratorPool =
typename Kokkos::Random_XorShift64_Pool<>;
17using Dist_t = ippl::random::NormalDistribution<double, 3>;
55 Gaussian(std::shared_ptr<ParticleContainer_t> &pc,
56 std::shared_ptr<FieldContainer_t> &fc,
57 std::shared_ptr<Distribution_t> &opalDist);
68 Gaussian(std::shared_ptr<ParticleContainer_t> pc,
72 bool fix_meanR =
true);
ParticleContainer< double, 3 > ParticleContainer_t
ippl::Vector< T, Dim > Vector_t
typename Kokkos::Random_XorShift64_Pool<> GeneratorPool
Distribution Distribution_t
ippl::random::NormalDistribution< double, 3 > Dist_t
FieldContainer< double, 3 > FieldContainer_t
Vector_t< double, 3 > sigmaP_m
Vector_t< double, 3 > sigmaR_m
Standard deviations for position and momentum distributions.
void initRandomPool()
Initializes the random number generator pool.
void setCutoffR(const Vector_t< double, 3 > &cutoffR)
double avrgpz_m
Average momentum in the z-direction.
void setFixMeanR(bool fixMeanR)
bool fixMeanR_m
Flag to exactly fix the mean position of particles after sampling.
void setSigmaR(const Vector_t< double, 3 > &sigmaR)
void getFixMeanR(bool &fixMeanR) const
void generateParticles(size_t &numberOfParticles, Vector_t< double, 3 > nr) override
Generates particles with a Gaussian distribution.
Vector_t< double, 3 > cutoffR_m
Cutoff multiplier for position distribution.
GeneratorPool randPool_m
Pool of random number generators for parallel sampling.
Gaussian(std::shared_ptr< ParticleContainer_t > &pc, std::shared_ptr< FieldContainer_t > &fc, std::shared_ptr< Distribution_t > &opalDist)
Constructor for the Gaussian sampler.
void getParameters(Vector_t< double, 3 > &sigmaR, Vector_t< double, 3 > &sigmaP, double &avrgpz, Vector_t< double, 3 > &cutoffR) const
void setAvrgpz(double avrgpz)
void setSigmaP(const Vector_t< double, 3 > &sigmaP)
IpplTimings::TimerRef samperTimer_m
Timer for performance profiling.
SamplingBase(std::shared_ptr< ParticleContainer_t > &pc, std::shared_ptr< FieldContainer_t > &fc, std::shared_ptr< Distribution_t > &dist)