10#ifndef IMPACTX_PARTICLE_CONTAINER_H
11#define IMPACTX_PARTICLE_CONTAINER_H
30#include <unordered_map>
69 static constexpr auto names_s = {
"position_x",
"position_y",
"position_t",
"momentum_x",
"momentum_y",
"momentum_t",
"spin_x",
"spin_y",
"spin_z",
"qm",
"weighting" };
71 static constexpr auto names_t = {
"position_x",
"position_y",
"position_z",
"momentum_x",
"momentum_y",
"momentum_z",
"spin_x",
"spin_y",
"spin_z",
"qm",
"weighting" };
87 static constexpr std::initializer_list<char const *>
names_s = {};
89 static constexpr std::initializer_list<char const *>
names_t = {};
100 :
public amrex::ParIterSoA<RealSoA::nattribs, IntSoA::nattribs, amrex::PolymorphicArenaAllocator>
164 void clear (
bool keep_mass=
false,
bool keep_charge=
false);
198 std::optional<amrex::ParticleReal> bunch_charge = std::nullopt,
294 DepositCharge (std::unordered_map<int, amrex::MultiFab> & rho,
332 std::unordered_map<std::string, amrex::ParticleReal>
336 std::list<std::unordered_map<std::string, amrex::ParticleReal> >
ParticleContainer_impl< ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignor > ContainerType
ParticleContainer_impl< ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignor > ContainerType
std::unordered_map< std::string, amrex::ParticleReal > beam_moments()
Definition ImpactXParticleContainer.cpp:483
virtual ~ImpactXParticleContainer()=default
Destruct a particle container.
void record_beam_moments()
Definition ImpactXParticleContainer.cpp:471
int GetParticleShape() const
Definition ImpactXParticleContainer.H:244
std::list< std::unordered_map< std::string, amrex::ParticleReal > > m_beam_moments
history of the beam moments over s
Definition ImpactXParticleContainer.H:358
void SetLostParticleContainer(ImpactXParticleContainer *lost_pc)
Definition ImpactXParticleContainer.cpp:75
void DepositCharge(std::unordered_map< int, amrex::MultiFab > &rho, amrex::Vector< amrex::IntVect > const &ref_ratio)
Definition ChargeDeposition.cpp:58
std::tuple< amrex::ParticleReal, amrex::ParticleReal, amrex::ParticleReal, amrex::ParticleReal, amrex::ParticleReal, amrex::ParticleReal > MinAndMaxPositions()
Definition ImpactXParticleContainer.cpp:440
void reset_beam_moments_history()
Definition ImpactXParticleContainer.H:341
amrex::ParticleReal m_bucket_length
Definition ImpactXParticleContainer.H:362
void SetRefParticle(RefPart const &refpart)
Definition ImpactXParticleContainer.cpp:413
void AddNParticles(amrex::Gpu::DeviceVector< amrex::ParticleReal > const &x, amrex::Gpu::DeviceVector< amrex::ParticleReal > const &y, amrex::Gpu::DeviceVector< amrex::ParticleReal > const &t, amrex::Gpu::DeviceVector< amrex::ParticleReal > const &px, amrex::Gpu::DeviceVector< amrex::ParticleReal > const &py, amrex::Gpu::DeviceVector< amrex::ParticleReal > const &pt, amrex::ParticleReal qm, std::optional< amrex::ParticleReal > bunch_charge=std::nullopt, std::optional< amrex::Gpu::DeviceVector< amrex::ParticleReal > > w=std::nullopt, std::optional< amrex::Gpu::DeviceVector< amrex::ParticleReal > > sx=std::nullopt, std::optional< amrex::Gpu::DeviceVector< amrex::ParticleReal > > sy=std::nullopt, std::optional< amrex::Gpu::DeviceVector< amrex::ParticleReal > > sz=std::nullopt)
Definition ImpactXParticleContainer.cpp:248
impactx::ParIterSoA iterator
amrex iterator for particle boxes
Definition ImpactXParticleContainer.H:139
bool store_beam_moments
Definition ImpactXParticleContainer.H:325
CoordSystem GetCoordSystem() const
Definition ImpactXParticleContainer.cpp:459
amrex::ParticleReal GetBucketLength()
Definition ImpactXParticleContainer.cpp:132
void SetRefParticleEdge()
Definition ImpactXParticleContainer.cpp:431
ImpactXParticleContainer * m_particles_lost
a non-owning reference to lost particles, i.e., due to apertures
Definition ImpactXParticleContainer.H:352
void SetBucketLength(amrex::ParticleReal bucket_length)
Definition ImpactXParticleContainer.cpp:126
ImpactXParticleContainer(initialization::AmrCoreData *amr_core)
Construct a new particle container.
Definition ImpactXParticleContainer.cpp:63
void SetParticleShape()
Definition ImpactXParticleContainer.cpp:106
void SetCoordSystem(CoordSystem coord_system)
Definition ImpactXParticleContainer.cpp:465
ImpactXParticleContainer * GetLostParticleContainer()
Definition ImpactXParticleContainer.cpp:81
impactx::ParConstIterSoA const_iterator
amrex constant iterator for particle boxes (read-only)
Definition ImpactXParticleContainer.H:142
std::tuple< amrex::ParticleReal, amrex::ParticleReal, amrex::ParticleReal, amrex::ParticleReal, amrex::ParticleReal, amrex::ParticleReal > MeanAndStdPositions()
Definition ImpactXParticleContainer.cpp:450
RefPart m_refpart
the reference particle for the beam in the particle container
Definition ImpactXParticleContainer.H:346
std::optional< int > m_particle_shape
the particle shape
Definition ImpactXParticleContainer.H:349
CoordSystem m_coordsystem
the current coordinate system of particles in this container
Definition ImpactXParticleContainer.H:355
std::list< std::unordered_map< std::string, amrex::ParticleReal > > beam_moments_history()
Definition ImpactXParticleContainer.H:337
void prepare()
Definition ImpactXParticleContainer.cpp:138
void clear(bool keep_mass=false, bool keep_charge=false)
Definition ImpactXParticleContainer.cpp:240
RefPart & GetRefParticle()
Definition ImpactXParticleContainer.cpp:419
Definition ImpactXParticleContainer.H:119
ContainerType const * pc() const
Definition ImpactXParticleContainer.H:127
ParConstIterSoA(ContainerType &pc, int level)
Definition ImpactXParticleContainer.cpp:55
Definition ImpactXParticleContainer.H:101
ContainerType * pc()
Definition ImpactXParticleContainer.H:109
ParIterSoA(ContainerType &pc, int level)
Definition ImpactXParticleContainer.cpp:47
Definition AmrCoreData.H:44
amrex_particle_real ParticleReal
PODVector< T, ArenaAllocator< T > > DeviceVector
ParIter_impl< SoAParticle< T_NArrayReal, T_NArrayInt >, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor > ParIterSoA
ParConstIter_impl< SoAParticle< T_NArrayReal, T_NArrayInt >, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor > ParConstIterSoA
ParticleContainer_impl< SoAParticle< T_NArrayReal, T_NArrayInt >, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor > ParticleContainerPureSoA
Definition CovarianceMatrixMath.H:25
CoordSystem
Definition ImpactXParticleContainer.H:36
@ s
fixed s as the independent variable
Definition ImpactXParticleContainer.H:37
@ t
fixed t as the independent variable
Definition ImpactXParticleContainer.H:38
Definition ImpactXParticleContainer.H:80
@ nattribs
the number of attributes above (always last)
Definition ImpactXParticleContainer.H:83
static constexpr std::initializer_list< char const * > names_s
named labels for fixed s
Definition ImpactXParticleContainer.H:87
static constexpr std::initializer_list< char const * > names_t
named labels for fixed t
Definition ImpactXParticleContainer.H:89
Definition ImpactXParticleContainer.H:45
static constexpr auto names_s
named labels for fixed s
Definition ImpactXParticleContainer.H:69
@ z
position in z [m] (at fixed t)
Definition ImpactXParticleContainer.H:64
@ pz
momentum in z, scaled by the magnitude of the reference momentum [unitless] (at fixed t)
Definition ImpactXParticleContainer.H:65
@ pt
energy deviation, scaled by speed of light * the magnitude of the reference momentum [unitless] (at f...
Definition ImpactXParticleContainer.H:53
@ y
position in y [m] (at fixed s or t)
Definition ImpactXParticleContainer.H:49
@ t
time-of-flight ct [m] (at fixed s)
Definition ImpactXParticleContainer.H:50
@ sz
spin vector z-component [unitless] (at fixed s or t)
Definition ImpactXParticleContainer.H:56
@ w
particle weight, number of real particles represented by this macroparticle [unitless]
Definition ImpactXParticleContainer.H:58
@ sy
spin vector y-component [unitless] (at fixed s or t)
Definition ImpactXParticleContainer.H:55
@ px
momentum in x, scaled by the magnitude of the reference momentum [unitless] (at fixed s or t)
Definition ImpactXParticleContainer.H:51
@ sx
spin vector x-component [unitless] (at fixed s or t)
Definition ImpactXParticleContainer.H:54
@ nattribs
the number of attributes above (always last)
Definition ImpactXParticleContainer.H:59
@ py
momentum in y, scaled by the magnitude of the reference momentum [unitless] (at fixed s or t)
Definition ImpactXParticleContainer.H:52
@ x
position in x [m] (at fixed s or t)
Definition ImpactXParticleContainer.H:48
@ qm
charge to mass ratio, in q_e/m_e [q_e/eV]
Definition ImpactXParticleContainer.H:57
static constexpr auto names_t
named labels for fixed t
Definition ImpactXParticleContainer.H:71
Definition ReferenceParticle.H:33