18#ifndef DISTRIBUTIONMOMENTS_H
19#define DISTRIBUTIONMOMENTS_H
27#include <Kokkos_Core.hpp>
30template <
typename T,
unsigned Dim = 3>
63 const std::vector<OpalParticle>::const_iterator&,
64 const std::vector<OpalParticle>::const_iterator&);
68 ippl::ParticleAttrib<double>::view_type Mview,
size_t Np,
size_t Nlocal);
107 double getDx()
const;
109 double getDy()
const;
121 ippl::ParticleAttrib<double>::view_type Mview,
size_t Np,
size_t Nlocal);
130 template <
class InputIt>
132 using iterator_t = std::vector<Vector_t<double, 2>>::const_iterator;
135 const std::vector<int>& globalAccumulatedHistogram,
136 const std::vector<int>& localAccumulatedHistogram,
unsigned int dimension,
137 int numRequiredParticles)
const;
297 for (
unsigned int i = 0; i < 3; ++i) {
298 maxDistance[i] = std::max(std::abs(
maxR_m[i]), std::abs(
minR_m[i]));
315 KOKKOS_INLINE_FUNCTION
317 for (
int i = 0; i < N; ++i)
321 KOKKOS_INLINE_FUNCTION
323 for (
int i = 0; i < N; ++i)
334 KOKKOS_INLINE_FUNCTION
336 for (
int i = 0; i < N; ++i)
337 data[i] = Kokkos::reduction_identity<double>::max();
340 KOKKOS_INLINE_FUNCTION
342 for (
int i = 0; i < N; ++i)
353 KOKKOS_INLINE_FUNCTION
355 for (
int i = 0; i < N; ++i)
356 data[i] = Kokkos::reduction_identity<double>::min();
359 KOKKOS_INLINE_FUNCTION
361 for (
int i = 0; i < N; ++i)
371 KOKKOS_INLINE_FUNCTION
373 for (
int i = 0; i < 6; ++i)
374 for (
int j = 0; j < 6; ++j)
378 KOKKOS_INLINE_FUNCTION
380 for (
int i = 0; i < 6; ++i)
381 for (
int j = 0; j < 6; ++j)
std::pair< Vector_t< double, 3 >, Vector_t< double, 3 > > VectorPair_t
ippl::Vector< T, Dim > Vector_t
typename ippl::detail::ViewType< ippl::Vector< double, Dim >, 1 >::view_type view_type
double meanKineticEnergy_m
void fillMembers(std::vector< double > &)
matrix6x6_t getMoments6x6() const
Vector_t< double, 3 > sixtyEightPercentile_m
double getMeanKineticEnergy() const
Vector_t< double, 3 > get68Percentile() const
Vector_t< double, 3 > getMinPosition() const
Vector_t< double, 3 > getMeanMomentum() const
bool rescaleToReference_m
Vector_t< double, 3 > ninetyFivePercentile_m
void computeDebyeLength(ippl::ParticleAttrib< Vector_t< double, 3 > >::view_type Pview, size_t Np, size_t Nlocal, double density)
Vector_t< double, 3 > getStandardDeviationPosition() const
Vector_t< double, 3 > getNormalizedEmittance() const
double getMeanGamma() const
Vector_t< double, 3 > get99_99Percentile() const
void computePlasmaParameter(double)
bool getRescaleEnergyToReference() const
std::vector< Vector_t< double, 2 > >::const_iterator iterator_t
double getTotalCharge() const
Vector_t< double, 3 > minR_m
static const double percentileFourSigmasNormalDist_m
double getTemperature() const
void computeMoments(ippl::ParticleAttrib< Vector_t< double, 3 > >::view_type Rview, ippl::ParticleAttrib< Vector_t< double, 3 > >::view_type Pview, ippl::ParticleAttrib< double >::view_type Mview, size_t Np, size_t Nlocal)
double getDebyeLength() const
unsigned int totalNumParticles_m
matrix6x6_t notCentMoments_m
void computeMeans(ippl::ParticleAttrib< Vector_t< double, 3 > >::view_type Rview, ippl::ParticleAttrib< Vector_t< double, 3 > >::view_type Pview, ippl::ParticleAttrib< double >::view_type Mview, size_t Np, size_t Nlocal)
void computeMinMaxPosition(ippl::ParticleAttrib< Vector_t< double, 3 > >::view_type Rview, size_t Nlcoal)
Vector_t< double, 3 > getHalo() const
Vector_t< double, 3 > ninetyNinePercentile_m
void compute(const std::vector< OpalParticle >::const_iterator &, const std::vector< OpalParticle >::const_iterator &)
double getStdKineticEnergy() const
Vector_t< double, 3 > getNormalizedEmittance99Percentile() const
Vector_t< double, 3 > getStandardDeviationMomentum() const
Vector_t< double, 3 > getMeanPosition() const
Vector_t< double, 3 > getStandardDeviationRP() const
Vector_t< double, 3 > ninetyNine_NinetyNinePercentile_m
double getStdTime() const
double getTotalMass() const
double getPlasmaParameter() const
Vector_t< double, 3 > normalizedEps_m
Vector_t< double, 3 > normalizedEps68Percentile_m
Vector_t< double, 3 > meanP_m
Vector_t< double, 3 > getNormalizedEmittance99_99Percentile() const
double computeNormalizedEmittance(const iterator_t &begin, const iterator_t &end) const
Vector_t< double, 3 > halo_m
double getTotalNumParticles() const
Vector_t< double, 3 > stdP_m
Vector_t< double, 3 > normalizedEps99Percentile_m
Vector_t< double, 3 > getMaxPosition() const
Vector_t< double, 3 > stdR_m
static const double percentileThreeSigmasNormalDist_m
double getEnergyReferenceMassGeV() const
Vector_t< double, 3 > getNormalizedEmittance95Percentile() const
Vector_t< double, 3 > getGeometricEmittance() const
Vector_t< double, 3 > meanR_m
void computePercentiles(const InputIt &, const InputIt &)
static const double percentileTwoSigmasNormalDist_m
Vector_t< double, 3 > get95Percentile() const
Vector_t< double, 6 > getCentroid() const
Vector_t< double, 3 > getNormalizedEmittance68Percentile() const
double referenceMassGeV_m
Vector_t< double, 3 > normalizedEps99_99Percentile_m
void computeMeanKineticEnergy()
bool isParticleExcluded(const OpalParticle &) const
std::weak_ptr< BunchStateHandler::ContainerState > containerState_m
void setContainerState(std::weak_ptr< BunchStateHandler::ContainerState > containerState)
Vector_t< double, 3 > maxR_m
Vector_t< double, 3 > stdRP_m
std::pair< double, iterator_t > determinePercentilesDetail(const iterator_t &begin, const iterator_t &end, const std::vector< int > &globalAccumulatedHistogram, const std::vector< int > &localAccumulatedHistogram, unsigned int dimension, int numRequiredParticles) const
Vector_t< double, 3 > geometricEps_m
static const double percentileOneSigmaNormalDist_m
Vector_t< double, 3 > get99Percentile() const
double getMeanTime() const
void setEnergyReferenceMass(double referenceMassGeV, bool rescaleToReference=true)
Vector_t< double, 6 > getMeans() const
void resetPlasmaParameters()
Vector_t< double, 6 > means_m
Vector_t< double, 6 > centroid_m
Vector_t< double, 3 > getMaxR() const
double stdKineticEnergy_m
double getMeanGammaZ() const
Vector_t< double, 3 > normalizedEps95Percentile_m
constexpr double kB
Boltzman's constant in eV/K.
constexpr double c
The velocity of light in m/s.
static KOKKOS_FORCEINLINE_FUNCTION MaxArray< N > sum()
static KOKKOS_FORCEINLINE_FUNCTION MinArray< N > sum()
static KOKKOS_FORCEINLINE_FUNCTION SumArray< N > sum()
static KOKKOS_FORCEINLINE_FUNCTION SumMatrix6x6 sum()
KOKKOS_INLINE_FUNCTION MaxArray()
KOKKOS_INLINE_FUNCTION MaxArray & operator+=(const MaxArray &src)
KOKKOS_INLINE_FUNCTION MinArray()
KOKKOS_INLINE_FUNCTION MinArray & operator+=(const MinArray &src)
KOKKOS_INLINE_FUNCTION SumArray()
KOKKOS_INLINE_FUNCTION SumArray & operator+=(const SumArray &src)
KOKKOS_INLINE_FUNCTION SumMatrix6x6()
KOKKOS_INLINE_FUNCTION SumMatrix6x6 & operator+=(const SumMatrix6x6 &src)