|
OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
|
Reads old-OPAL emitted distribution dumps and emits particles by file time. More...
#include <EmittedFromFile.h>


Classes | |
| struct | RawRecord |
| Raw row parsed from an old-OPAL emitted distribution dump. More... | |
| struct | Record |
| Selected file row plus its converted tracker birth time. More... | |
Public Types | |
| using | size_type = ippl::detail::size_type |
Public Member Functions | |
| EmittedFromFile (std::shared_ptr< ParticleContainer_t > pc, std::shared_ptr< FieldContainer_t > fc, Distribution_t *opalDist) | |
| Constructor for EmittedFromFile. | |
| EmittedFromFile (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 |
| Reads the selected file records and builds the birth-time inventory. | |
| void | emitParticles (double t, double dt) override |
| Emits all file records whose birth times fall into the current step. | |
| bool | isEmissionDone (double) const override |
| Returns whether all file records in the inventory have been emitted. | |
| bool | hasInitialReferenceMomentum () const override |
| Reports whether an initial reference momentum is available. | |
| Vector_t< double, 3 > | getInitialReferenceMomentum () const override |
| Returns the average initial reference momentum from selected records. | |
| double | getGlobalTimeShift () const override |
| Returns the global time shift needed to center old-OPAL file times. | |
| double | getEmissionTimeStep () const override |
| Returns the preferred emission time step. | |
| double | getEmissionTime () const |
| Returns the total emission time spanned by selected file records. | |
| void | generateLocalParticles (size_type nlocalBefore, size_t globalBegin, size_t nNew, double tStart, double dt) |
| Generates the local particles assigned to this rank for one emission step. | |
| 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 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 | resolveFilenameFromInput () |
| Resolves relative file paths against the active input file directory. | |
| void | readFile (const std::string &filename) |
| Reads and parses an old-OPAL emitted particle file. | |
| void | buildInventory (size_t requested) |
| Selects records, converts file times to birth times, and sorts them. | |
| std::pair< size_t, size_t > | computeLocalEmitRange (size_t totalToEmit) const |
| Computes the local contiguous subrange of a global emission batch. | |
Private Attributes | |
| std::string | filename_m |
| File path to read emitted particle data from. | |
| std::vector< RawRecord > | rawRecords_m |
| Parsed file rows before selection and sorting. | |
| std::vector< Record > | records_m |
| Selected records sorted by tracker birth time. | |
| size_t | nextGlobalIndex_m = 0 |
| First global record index not emitted yet. | |
| bool | inventoryBuilt_m = false |
| True once records_m is ready for emission. | |
| Vector_t< double, 3 > | initialRefP_m = 0.0 |
| Average initial reference momentum. | |
| double | emissionTime_m = 0.0 |
| Total emission time spanned by records_m. | |
| size_t | emissionSteps_m = 100 |
| Number of steps used to derive emission dt. | |
Reads old-OPAL emitted distribution dumps and emits particles by file time.
The data rows are interpreted positionally as x px y py t pz [optional-bin]. The file time is an old-OPAL pre-emission time, so a row with t = -6e-13 is emitted at t = +6e-13 when the source t0 is zero.
Definition at line 28 of file EmittedFromFile.h.
| struct EmittedFromFile::RawRecord |
Raw row parsed from an old-OPAL emitted distribution dump.
Definition at line 139 of file EmittedFromFile.h.

| struct EmittedFromFile::Record |
Selected file row plus its converted tracker birth time.
Definition at line 151 of file EmittedFromFile.h.

| Class Members | ||
|---|---|---|
| double | birthTime = 0.0 | Birth time in the OPALX tracker convention. |
| RawRecord | raw | Original parsed file row. |
| using EmittedFromFile::size_type = ippl::detail::size_type |
Definition at line 30 of file EmittedFromFile.h.
| EmittedFromFile::EmittedFromFile | ( | std::shared_ptr< ParticleContainer_t > | pc, |
| std::shared_ptr< FieldContainer_t > | fc, | ||
| Distribution_t * | opalDist | ||
| ) |
Constructor for EmittedFromFile.
| pc | Shared pointer to ParticleContainer. |
| fc | Shared pointer to FieldContainer. |
| opalDist | Borrowed Distribution. |
Definition at line 67 of file EmittedFromFile.cpp.
References emissionSteps_m, filename_m, Distribution::getEmissionSteps(), Distribution::getFilename(), readFile(), and resolveFilenameFromInput().

| EmittedFromFile::EmittedFromFile | ( | 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 tests, where constructing a full OPALX Distribution object is unnecessary.
| pc | Shared pointer to ParticleContainer. |
| fc | Shared pointer to FieldContainer. |
| filename | Path to the emitted particle file. |
Definition at line 83 of file EmittedFromFile.cpp.
References filename_m, and readFile().

|
private |
Selects records, converts file times to birth times, and sorts them.
| requested | Number of records requested; zero selects all records. |
Definition at line 223 of file EmittedFromFile.cpp.
References EmittedFromFile::Record::birthTime, emissionTime_m, EmittedFromFile::RawRecord::fileTime, initialRefP_m, inventoryBuilt_m, nextGlobalIndex_m, SamplingBase::opalDist_m, SamplingBase::P0_m, EmittedFromFile::RawRecord::px, EmittedFromFile::RawRecord::py, EmittedFromFile::RawRecord::pz, EmittedFromFile::Record::raw, rawRecords_m, records_m, Distribution::setTEmission(), and SamplingBase::t0_m.
Referenced by generateParticles().

|
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(), FromFile::generateParticles(), Gaussian::generateParticles(), and MultiVariateGaussian::generateParticles().
|
private |
Computes the local contiguous subrange of a global emission batch.
| totalToEmit | Number of particles emitted globally in the current step. |
Definition at line 279 of file EmittedFromFile.cpp.
References SamplingBase::pc_m.
Referenced by emitParticles().
|
overridevirtual |
Emits all file records whose birth times fall into the current step.
| t | Start time of the current tracker step. |
| dt | Time step size. |
Reimplemented from SamplingBase.
Definition at line 340 of file EmittedFromFile.cpp.
References computeLocalEmitRange(), generateLocalParticles(), inventoryBuilt_m, nextGlobalIndex_m, SamplingBase::pc_m, and records_m.
Referenced by TEST_F(), TEST_F(), and TEST_F().

|
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(), Gaussian::generateParticles(), and MultiVariateGaussian::generateParticles().
| void EmittedFromFile::generateLocalParticles | ( | size_type | nlocalBefore, |
| size_t | globalBegin, | ||
| size_t | nNew, | ||
| double | tStart, | ||
| double | dt | ||
| ) |
Generates the local particles assigned to this rank for one emission step.
Particle coordinates and momentum offsets come from the file. Each particle receives a per-particle fractional step based on its birth time and is drifted for half of that effective step.
| nlocalBefore | Local particle count before allocation. |
| globalBegin | First global record index assigned to this rank. |
| nNew | Number of local particles to generate. |
| tStart | Start time of the current tracker step. |
| dt | Time step size. |
Definition at line 376 of file EmittedFromFile.cpp.
References EmittedFromFile::Record::birthTime, Physics::c, SamplingBase::P0_m, SamplingBase::pc_m, EmittedFromFile::RawRecord::px, EmittedFromFile::RawRecord::py, EmittedFromFile::RawRecord::pz, SamplingBase::R0_m, EmittedFromFile::Record::raw, records_m, EmittedFromFile::RawRecord::x, and EmittedFromFile::RawRecord::y.
Referenced by emitParticles().
|
overridevirtual |
Reads the selected file records and builds the birth-time inventory.
| numberOfParticles | Number of particles requested by the caller. |
| nr | Number of grid points per direction (not used here). |
Reimplemented from SamplingBase.
Definition at line 206 of file EmittedFromFile.cpp.
References buildInventory(), SamplingBase::emissionModel_m, Distribution::getNumParticles(), SamplingBase::opalDist_m, and records_m.
Referenced by TEST_F(), TEST_F(), TEST_F(), TEST_F(), and TEST_F().

|
inlineinherited |
Definition at line 78 of file SamplingBase.hpp.
References SamplingBase::R0_m.
|
inline |
Returns the total emission time spanned by selected file records.
Definition at line 117 of file EmittedFromFile.h.
References emissionTime_m.
Referenced by TEST_F().
|
inlineoverridevirtual |
Returns the preferred emission time step.
Reimplemented from SamplingBase.
Definition at line 108 of file EmittedFromFile.h.
References emissionSteps_m, and emissionTime_m.
Referenced by TEST_F().
|
inlineoverridevirtual |
Returns the global time shift needed to center old-OPAL file times.
Reimplemented from SamplingBase.
Definition at line 99 of file EmittedFromFile.h.
References emissionTime_m, and SamplingBase::t0_m.
|
inlineoverridevirtual |
Returns the average initial reference momentum from selected records.
Reimplemented from SamplingBase.
Definition at line 92 of file EmittedFromFile.h.
References initialRefP_m.
|
inlineoverridevirtual |
Reports whether an initial reference momentum is available.
Reimplemented from SamplingBase.
Definition at line 87 of file EmittedFromFile.h.
References inventoryBuilt_m.
Referenced by TEST_F().
|
inlinevirtualinherited |
Reimplemented in FlatTop, and OpalFlatTop.
Definition at line 110 of file SamplingBase.hpp.
|
inlineoverridevirtual |
Returns whether all file records in the inventory have been emitted.
Reimplemented from SamplingBase.
Definition at line 78 of file EmittedFromFile.h.
References inventoryBuilt_m, nextGlobalIndex_m, and records_m.
Referenced by TEST_F().
|
private |
Reads and parses an old-OPAL emitted particle file.
Accepted files may contain a leading particle count and header, or a comment header. Data rows are interpreted positionally as x px y py t pz [optional-bin].
| filename | Path to the file to read. |
Definition at line 109 of file EmittedFromFile.cpp.
References EmittedFromFile::RawRecord::fileTime, EmittedFromFile::RawRecord::px, EmittedFromFile::RawRecord::py, EmittedFromFile::RawRecord::pz, rawRecords_m, EmittedFromFile::RawRecord::x, and EmittedFromFile::RawRecord::y.
Referenced by EmittedFromFile(), and EmittedFromFile().
|
private |
Resolves relative file paths against the active input file directory.
Definition at line 94 of file EmittedFromFile.cpp.
References filename_m, OpalData::getInputFn(), and OpalData::getInstance().
Referenced by EmittedFromFile().

|
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.
|
protectedinherited |
Definition at line 25 of file SamplingBase.hpp.
Referenced by OpalFlatTop::generateLocalParticles(), generateParticles(), FromFile::generateParticles(), Gaussian::generateParticles(), MultiVariateGaussian::generateParticles(), FlatTop::generateUniformDisk(), OpalFlatTop::getInitialReferenceMomentum(), and SamplingBase::setEmissionOffsets().
|
private |
Number of steps used to derive emission dt.
Definition at line 194 of file EmittedFromFile.h.
Referenced by EmittedFromFile(), and getEmissionTimeStep().
|
private |
Total emission time spanned by records_m.
Definition at line 193 of file EmittedFromFile.h.
Referenced by buildInventory(), getEmissionTime(), getEmissionTimeStep(), and getGlobalTimeShift().
|
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 emitted particle data from.
Definition at line 187 of file EmittedFromFile.h.
Referenced by EmittedFromFile(), EmittedFromFile(), and resolveFilenameFromInput().
|
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 FromFile::emitParticles(), Gaussian::emitParticles(), MultiVariateGaussian::emitParticles(), FromFile::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 |
Average initial reference momentum.
Definition at line 192 of file EmittedFromFile.h.
Referenced by buildInventory(), and getInitialReferenceMomentum().
|
private |
True once records_m is ready for emission.
Definition at line 191 of file EmittedFromFile.h.
Referenced by buildInventory(), emitParticles(), hasInitialReferenceMomentum(), and isEmissionDone().
|
private |
First global record index not emitted yet.
Definition at line 190 of file EmittedFromFile.h.
Referenced by buildInventory(), emitParticles(), and isEmissionDone().
|
protectedinherited |
Definition at line 19 of file SamplingBase.hpp.
Referenced by buildInventory(), FromFile::emitParticles(), Gaussian::emitParticles(), MultiVariateGaussian::emitParticles(), generateParticles(), MultiVariateGaussian::MultiVariateGaussian(), and FlatTop::setParameters().
|
protectedinherited |
Definition at line 23 of file SamplingBase.hpp.
Referenced by buildInventory(), generateLocalParticles(), OpalFlatTop::generateLocalParticles(), FromFile::generateParticles(), Gaussian::generateParticles(), MultiVariateGaussian::generateParticles(), FlatTop::generateUniformDisk(), OpalFlatTop::getInitialReferenceMomentum(), and SamplingBase::setEmissionOffsets().
|
protectedinherited |
Definition at line 17 of file SamplingBase.hpp.
Referenced by SamplingBase::computeLocalEmitCount(), computeLocalEmitRange(), OpalFlatTop::computeLocalEmitRange(), FlatTop::countEnteringParticlesPerRank(), emitParticles(), FlatTop::emitParticles(), FromFile::emitParticles(), Gaussian::emitParticles(), MultiVariateGaussian::emitParticles(), OpalFlatTop::emitParticles(), SamplingBase::fillPolarization(), generateLocalParticles(), OpalFlatTop::generateLocalParticles(), FromFile::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 generateLocalParticles(), OpalFlatTop::generateLocalParticles(), FromFile::generateParticles(), Gaussian::generateParticles(), MultiVariateGaussian::generateParticles(), FlatTop::generateUniformDisk(), SamplingBase::getEmissionR0(), and SamplingBase::setEmissionOffsets().
|
private |
Parsed file rows before selection and sorting.
Definition at line 188 of file EmittedFromFile.h.
Referenced by buildInventory(), and readFile().
|
private |
Selected records sorted by tracker birth time.
Definition at line 189 of file EmittedFromFile.h.
Referenced by buildInventory(), emitParticles(), generateLocalParticles(), generateParticles(), and isEmissionDone().
|
protectedinherited |
Definition at line 20 of file SamplingBase.hpp.
|
protectedinherited |
Definition at line 24 of file SamplingBase.hpp.
Referenced by buildInventory(), FlatTop::emitParticles(), FromFile::emitParticles(), Gaussian::emitParticles(), MultiVariateGaussian::emitParticles(), FromFile::generateParticles(), Gaussian::generateParticles(), MultiVariateGaussian::generateParticles(), getGlobalTimeShift(), OpalFlatTop::getGlobalTimeShift(), FlatTop::isEmissionDone(), SamplingBase::setEmissionOffsets(), and OpalFlatTop::toBirthTime().