|
OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
|
Implements the sampling method for reading particle phase space from ASCII files. More...
#include <FromFile.h>


Public Types | |
| using | size_type = ippl::detail::size_type |
Public Member Functions | |
| FromFile (std::shared_ptr< ParticleContainer_t > pc, std::shared_ptr< FieldContainer_t > fc, Distribution_t *opalDist) | |
| Constructor for FromFile. | |
| FromFile (std::shared_ptr< ParticleContainer_t > pc, std::shared_ptr< FieldContainer_t > fc, const std::string &filename) | |
| Convenience constructor that takes the filename directly. | |
| void | generateParticles (size_t &numberOfParticles, Vector_t< double, 3 > nr) override |
| Generates particles by reading from file. | |
| void | emitParticles (double t, double dt) override |
| Time-stepped emission hook for one-shot delayed file-based injection. | |
| 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). | |
Protected Attributes | |
| std::shared_ptr< ParticleContainer_t > | pc_m |
| std::shared_ptr< FieldContainer_t > | fc_m |
| Distribution_t * | opalDist_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 | readFile (const std::string &filename) |
| Reads and parses the particle file. Format must be: N (particle count), then header line (column names), then data lines. Comments ('#') and blank lines are skipped. Throws if format is invalid. | |
| std::vector< size_t > | parseHeader (const std::string &headerLine) |
| Parses the header line to get column indices. Header must contain all of x, y, z, px, py, pz (or aliases). Throws if any are missing. | |
| std::string | normalizeColumnName (const std::string &name) |
| Normalizes column name for comparison (case-insensitive, whitespace handling). | |
Private Attributes | |
| std::string | filename_m |
| File path to read particle data from. | |
| std::vector< std::vector< double > > | particleData_m |
| Stored particle data: each element is a 6D phase space vector [x, y, z, px, py, pz]. | |
| size_t | numParticles_m |
| Number of particles in the file. | |
| std::vector< size_t > | columnIndices_m |
| Column indices mapping: [x_idx, y_idx, z_idx, px_idx, py_idx, pz_idx]. | |
Implements the sampling method for reading particle phase space from ASCII files.
The file must follow this structure (no variations allowed):
Definition at line 31 of file FromFile.h.
| using FromFile::size_type = ippl::detail::size_type |
Definition at line 33 of file FromFile.h.
| FromFile::FromFile | ( | std::shared_ptr< ParticleContainer_t > | pc, |
| std::shared_ptr< FieldContainer_t > | fc, | ||
| Distribution_t * | opalDist | ||
| ) |
Constructor for FromFile.
| pc | Shared pointer to ParticleContainer. |
| fc | Shared pointer to FieldContainer. |
| opalDist | Borrowed Distribution. |
Definition at line 15 of file FromFile.cpp.
References filename_m, Distribution::getFilename(), OpalData::getInputFn(), OpalData::getInstance(), and readFile().

| FromFile::FromFile | ( | std::shared_ptr< ParticleContainer_t > | pc, |
| std::shared_ptr< FieldContainer_t > | fc, | ||
| const std::string & | filename | ||
| ) |
Convenience constructor that takes the filename directly.
This is primarily intended for unit tests, where constructing a full OPALX Distribution object is unnecessary. It behaves like the main constructor but skips querying the Distribution for the filename.
Definition at line 46 of file FromFile.cpp.
References filename_m, and readFile().

|
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).
| totalToSample | Global number of particles to emit this timestep. |
Definition at line 6 of file SamplingBase.cpp.
References SamplingBase::pc_m.
Referenced by FlatTop::countEnteringParticlesPerRank(), generateParticles(), Gaussian::generateParticles(), and MultiVariateGaussian::generateParticles().
|
overridevirtual |
Time-stepped emission hook for one-shot delayed file-based injection.
When a source using FROMFILE has t0 > 0 and a positive NPARTDIST, the sampler will read and inject particles once when [t, t+dt] crosses t0. Initial sampling at t0 == 0 is handled via generateParticles.
Reimplemented from SamplingBase.
Definition at line 350 of file FromFile.cpp.
References generateParticles(), Distribution::getNumParticles(), SamplingBase::hasEmittedOnce_m, numParticles_m, SamplingBase::opalDist_m, SamplingBase::pc_m, and SamplingBase::t0_m.

|
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(), generateParticles(), Gaussian::generateParticles(), and MultiVariateGaussian::generateParticles().
|
overridevirtual |
Generates particles by reading from file.
| numberOfParticles | Number of particles to generate (may be overridden by file). |
| nr | Number of grid points per direction (not used here). |
Reimplemented from SamplingBase.
Definition at line 234 of file FromFile.cpp.
References SamplingBase::computeLocalEmitCount(), SamplingBase::emissionModel_m, filename_m, SamplingBase::fillPolarization(), SamplingBase::hasEmittedOnce_m, numParticles_m, SamplingBase::P0_m, particleData_m, SamplingBase::pc_m, SamplingBase::R0_m, and SamplingBase::t0_m.
Referenced by emitParticles(), TEST_F(), TEST_F(), and TEST_F().

|
inlineinherited |
Definition at line 78 of file SamplingBase.hpp.
References SamplingBase::R0_m.
|
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.
|
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.
|
inlinevirtualinherited |
Reimplemented in EmittedFromFile, and OpalFlatTop.
Definition at line 97 of file SamplingBase.hpp.
|
inlinevirtualinherited |
Optional initial reference momentum in the source-local frame.
Reimplemented in EmittedFromFile, and OpalFlatTop.
Definition at line 95 of file SamplingBase.hpp.
|
inlinevirtualinherited |
Reimplemented in FlatTop, and OpalFlatTop.
Definition at line 110 of file SamplingBase.hpp.
|
inlinevirtualinherited |
Whether this sampler has finished all emission (no more particles will be created).
| t | Current simulation time (s). |
Reimplemented in FlatTop, EmittedFromFile, and OpalFlatTop.
Definition at line 86 of file SamplingBase.hpp.
References SamplingBase::hasEmittedOnce_m.
|
private |
Normalizes column name for comparison (case-insensitive, whitespace handling).
| name | Column name to normalize. |
Definition at line 214 of file FromFile.cpp.
Referenced by parseHeader().
|
private |
Parses the header line to get column indices. Header must contain all of x, y, z, px, py, pz (or aliases). Throws if any are missing.
| headerLine | The header line string. |
Definition at line 169 of file FromFile.cpp.
References normalizeColumnName().
Referenced by readFile().

|
private |
Reads and parses the particle file. Format must be: N (particle count), then header line (column names), then data lines. Comments ('#') and blank lines are skipped. Throws if format is invalid.
| filename | Path to the file to read. |
Definition at line 60 of file FromFile.cpp.
References columnIndices_m, numParticles_m, parseHeader(), and particleData_m.
Referenced by FromFile(), and FromFile().

|
inlineinherited |
Definition at line 48 of file SamplingBase.hpp.
References SamplingBase::emissionModel_m, SamplingBase::P0_m, SamplingBase::R0_m, and SamplingBase::t0_m.
Referenced by TEST_F(), TEST_F(), TEST_F(), TEST_F(), TEST_F(), TEST_F(), TEST_F(), TEST_F(), and TEST_F().
|
inlineinherited |
Definition at line 57 of file SamplingBase.hpp.
References SamplingBase::initialPol_m.
|
inlinevirtualinherited |
Reimplemented in FlatTop, and OpalFlatTop.
Definition at line 112 of file SamplingBase.hpp.
|
inlinevirtualinherited |
Definition at line 108 of file SamplingBase.hpp.
|
inlinevirtualinherited |
Definition at line 105 of file SamplingBase.hpp.
|
private |
Column indices mapping: [x_idx, y_idx, z_idx, px_idx, py_idx, pz_idx].
Definition at line 106 of file FromFile.h.
Referenced by readFile().
|
protectedinherited |
Definition at line 25 of file SamplingBase.hpp.
Referenced by OpalFlatTop::generateLocalParticles(), EmittedFromFile::generateParticles(), generateParticles(), Gaussian::generateParticles(), MultiVariateGaussian::generateParticles(), FlatTop::generateUniformDisk(), OpalFlatTop::getInitialReferenceMomentum(), and SamplingBase::setEmissionOffsets().
|
protectedinherited |
Definition at line 18 of file SamplingBase.hpp.
Referenced by FlatTop::initDomainDecomp(), OpalFlatTop::initDomainDecomp(), FlatTop::setParameters(), and OpalFlatTop::setParameters().
|
private |
File path to read particle data from.
Definition at line 97 of file FromFile.h.
Referenced by FromFile(), FromFile(), and generateParticles().
|
protectedinherited |
For one-shot emitters (e.g. Gaussian at delayed t0): guard to avoid double sampling.
Definition at line 33 of file SamplingBase.hpp.
Referenced by emitParticles(), Gaussian::emitParticles(), MultiVariateGaussian::emitParticles(), generateParticles(), Gaussian::generateParticles(), MultiVariateGaussian::generateParticles(), and SamplingBase::isEmissionDone().
|
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().
|
private |
Number of particles in the file.
Definition at line 103 of file FromFile.h.
Referenced by emitParticles(), generateParticles(), and readFile().
|
protectedinherited |
Definition at line 19 of file SamplingBase.hpp.
Referenced by EmittedFromFile::buildInventory(), emitParticles(), Gaussian::emitParticles(), MultiVariateGaussian::emitParticles(), EmittedFromFile::generateParticles(), MultiVariateGaussian::MultiVariateGaussian(), and FlatTop::setParameters().
|
protectedinherited |
Definition at line 23 of file SamplingBase.hpp.
Referenced by EmittedFromFile::buildInventory(), EmittedFromFile::generateLocalParticles(), OpalFlatTop::generateLocalParticles(), generateParticles(), Gaussian::generateParticles(), MultiVariateGaussian::generateParticles(), FlatTop::generateUniformDisk(), OpalFlatTop::getInitialReferenceMomentum(), and SamplingBase::setEmissionOffsets().
|
private |
Stored particle data: each element is a 6D phase space vector [x, y, z, px, py, pz].
Definition at line 100 of file FromFile.h.
Referenced by generateParticles(), and readFile().
|
protectedinherited |
Definition at line 17 of file SamplingBase.hpp.
Referenced by SamplingBase::computeLocalEmitCount(), EmittedFromFile::computeLocalEmitRange(), OpalFlatTop::computeLocalEmitRange(), FlatTop::countEnteringParticlesPerRank(), EmittedFromFile::emitParticles(), FlatTop::emitParticles(), emitParticles(), Gaussian::emitParticles(), MultiVariateGaussian::emitParticles(), OpalFlatTop::emitParticles(), SamplingBase::fillPolarization(), EmittedFromFile::generateLocalParticles(), OpalFlatTop::generateLocalParticles(), generateParticles(), Gaussian::generateParticles(), MultiVariateGaussian::generateParticles(), FlatTop::generateUniformDisk(), FlatTop::initDomainDecomp(), OpalFlatTop::initDomainDecomp(), and FlatTop::testNumEmitParticles().
|
protectedinherited |
Emission source offset: position R0, momentum P0, start time t0 (applied in sample step).
Definition at line 22 of file SamplingBase.hpp.
Referenced by EmittedFromFile::generateLocalParticles(), OpalFlatTop::generateLocalParticles(), generateParticles(), Gaussian::generateParticles(), MultiVariateGaussian::generateParticles(), FlatTop::generateUniformDisk(), SamplingBase::getEmissionR0(), and SamplingBase::setEmissionOffsets().
|
protectedinherited |
Definition at line 20 of file SamplingBase.hpp.
|
protectedinherited |
Definition at line 24 of file SamplingBase.hpp.
Referenced by EmittedFromFile::buildInventory(), FlatTop::emitParticles(), emitParticles(), Gaussian::emitParticles(), MultiVariateGaussian::emitParticles(), generateParticles(), Gaussian::generateParticles(), MultiVariateGaussian::generateParticles(), EmittedFromFile::getGlobalTimeShift(), OpalFlatTop::getGlobalTimeShift(), FlatTop::isEmissionDone(), SamplingBase::setEmissionOffsets(), and OpalFlatTop::toBirthTime().