OPALX (Object Oriented Parallel Accelerator Library for Exascal) MINIorX
OPALX
LossDataSink Class Reference

#include <LossDataSink.h>

Collaboration diagram for LossDataSink:

Public Member Functions

 LossDataSink ()=default
 LossDataSink (std::string outfn, bool hdf5Save, CollectionType=CollectionType::TEMPORAL)
 LossDataSink (const LossDataSink &rsh)
 ~LossDataSink () noexcept(false)
bool inH5Mode ()
void save (unsigned int numSets=1, OpalData::OpenMode openMode=OpalData::OpenMode::UNDEFINED)
void addReferenceParticle (const Vector_t< double, 3 > &x, const Vector_t< double, 3 > &p, double time, double spos, long long globalTrackStep)
void addParticle (const OpalParticle &, const boost::optional< std::pair< int, short int > > &turnBunchNumPair=boost::none)
size_t size () const
std::set< SetStatisticscomputeStatistics (unsigned int numSets)

Private Member Functions

void openASCII ()
void openH5 (h5_int32_t mode=H5_O_WRONLY)
void appendASCII ()
void writeHeaderASCII ()
void writeHeaderH5 ()
void saveASCII ()
void saveH5 (unsigned int setIdx)
void closeASCII ()
bool hasNoParticlesToDump () const
bool hasTurnInformations () const
void reportOnError (h5_int64_t rc, const char *file, int line)
void splitSets (unsigned int numSets)
SetStatistics computeSetStatistics (unsigned int setIdx)

Private Attributes

std::string fileName_m
bool h5hut_mode_m
std::ofstream os_m
h5_file_t H5file_m
 used to write out data in H5hut mode
std::string outputName_m
h5_int64_t H5call_m
 Current record, or time step, of H5 file.
std::vector< OpalParticleparticles_m
std::vector< size_t > bunchNumber_m
std::vector< size_t > turnNumber_m
std::vector< Vector_t< double, 3 > > RefPartR_m
std::vector< Vector_t< double, 3 > > RefPartP_m
std::vector< h5_int64_t > globalTrackStep_m
std::vector< double > refTime_m
std::vector< double > spos_m
std::vector< unsigned long > startSet_m
CollectionType collectionType_m

Detailed Description

Definition at line 78 of file LossDataSink.h.

Constructor & Destructor Documentation

◆ LossDataSink() [1/3]

LossDataSink::LossDataSink ( )
default

References LossDataSink(), and TEMPORAL.

Referenced by LossDataSink(), and LossDataSink().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ LossDataSink() [2/3]

LossDataSink::LossDataSink ( std::string outfn,
bool hdf5Save,
CollectionType collectionType = CollectionType::TEMPORAL )

Definition at line 178 of file LossDataSink.cpp.

References OpalData::APPEND, bunchNumber_m, OpalData::checkAndAddOutputFileName(), collectionType_m, Options::enableHDF5, OpalData::getInstance(), H5call_m, H5file_m, h5hut_mode_m, outputName_m, particles_m, OpalData::setOpenMode(), and turnNumber_m.

Here is the call graph for this function:

◆ LossDataSink() [3/3]

LossDataSink::LossDataSink ( const LossDataSink & rsh)

Definition at line 202 of file LossDataSink.cpp.

References bunchNumber_m, collectionType_m, globalTrackStep_m, H5call_m, H5file_m, h5hut_mode_m, LossDataSink(), outputName_m, particles_m, RefPartP_m, RefPartR_m, refTime_m, spos_m, and turnNumber_m.

Here is the call graph for this function:

◆ ~LossDataSink()

LossDataSink::~LossDataSink ( )

Definition at line 218 of file LossDataSink.cpp.

References CLOSE_FILE, and H5file_m.

Member Function Documentation

◆ addParticle()

void LossDataSink::addParticle ( const OpalParticle & ,
const boost::optional< std::pair< int, short int > > & turnBunchNumPair = boost::none )

Definition at line 314 of file LossDataSink.cpp.

References bunchNumber_m, particles_m, and turnNumber_m.

◆ addReferenceParticle()

void LossDataSink::addReferenceParticle ( const Vector_t< double, 3 > & x,
const Vector_t< double, 3 > & p,
double time,
double spos,
long long globalTrackStep )

Definition at line 304 of file LossDataSink.cpp.

References globalTrackStep_m, RefPartP_m, RefPartR_m, refTime_m, and spos_m.

◆ appendASCII()

void LossDataSink::appendASCII ( )
inlineprivate

Definition at line 114 of file LossDataSink.h.

References fileName_m, and os_m.

Referenced by save().

Here is the caller graph for this function:

◆ closeASCII()

void LossDataSink::closeASCII ( )
inlineprivate

Definition at line 126 of file LossDataSink.h.

References os_m.

Referenced by save().

Here is the caller graph for this function:

◆ computeSetStatistics()

◆ computeStatistics()

std::set< SetStatistics > LossDataSink::computeStatistics ( unsigned int numSets)
inline

Definition at line 176 of file LossDataSink.h.

References computeSetStatistics(), and splitSets().

Here is the call graph for this function:

◆ hasNoParticlesToDump()

bool LossDataSink::hasNoParticlesToDump ( ) const
private

Definition at line 387 of file LossDataSink.cpp.

References particles_m.

Referenced by save().

Here is the caller graph for this function:

◆ hasTurnInformations()

bool LossDataSink::hasTurnInformations ( ) const
private

Definition at line 393 of file LossDataSink.cpp.

References turnNumber_m.

Referenced by saveH5(), and writeHeaderASCII().

Here is the caller graph for this function:

◆ inH5Mode()

bool LossDataSink::inH5Mode ( )
inline

Definition at line 87 of file LossDataSink.h.

References h5hut_mode_m, and inH5Mode().

Referenced by inH5Mode().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ openASCII()

void LossDataSink::openASCII ( )
inlineprivate

Definition at line 107 of file LossDataSink.h.

References fileName_m, and os_m.

Referenced by save().

Here is the caller graph for this function:

◆ openH5()

void LossDataSink::openH5 ( h5_int32_t mode = H5_O_WRONLY)
private

Definition at line 226 of file LossDataSink.cpp.

References fileName_m, and OPEN_FILE.

Referenced by save().

Here is the caller graph for this function:

◆ reportOnError()

void LossDataSink::reportOnError ( h5_int64_t rc,
const char * file,
int line )
private

◆ save()

void LossDataSink::save ( unsigned int numSets = 1,
OpalData::OpenMode openMode = OpalData::OpenMode::UNDEFINED )

◆ saveASCII()

void LossDataSink::saveASCII ( )
private

Definition at line 540 of file LossDataSink.cpp.

Referenced by save().

Here is the caller graph for this function:

◆ saveH5()

void LossDataSink::saveH5 ( unsigned int setIdx)
private

Set current record/time step.

Definition at line 401 of file LossDataSink.cpp.

References bunchNumber_m, DistributionMoments::compute(), Options::computePercentiles, DistributionMoments::get68Percentile(), DistributionMoments::get95Percentile(), DistributionMoments::get99_99Percentile(), DistributionMoments::get99Percentile(), OpalParticle::getCharge(), DistributionMoments::getGeometricEmittance(), OpalParticle::getId(), OpalParticle::getMass(), DistributionMoments::getMaxR(), DistributionMoments::getMeanKineticEnergy(), DistributionMoments::getMeanMomentum(), DistributionMoments::getMeanPosition(), DistributionMoments::getMeanTime(), DistributionMoments::getNormalizedEmittance(), DistributionMoments::getNormalizedEmittance68Percentile(), DistributionMoments::getNormalizedEmittance95Percentile(), DistributionMoments::getNormalizedEmittance99_99Percentile(), DistributionMoments::getNormalizedEmittance99Percentile(), OpalParticle::getPx(), OpalParticle::getPy(), OpalParticle::getPz(), DistributionMoments::getStandardDeviationMomentum(), DistributionMoments::getStandardDeviationPosition(), DistributionMoments::getStdKineticEnergy(), DistributionMoments::getStdTime(), OpalParticle::getTime(), DistributionMoments::getTotalCharge(), DistributionMoments::getTotalMass(), OpalParticle::getX(), OpalParticle::getY(), OpalParticle::getZ(), globalTrackStep_m, H5call_m, hasTurnInformations(), particles_m, RefPartP_m, RefPartR_m, refTime_m, SET_NUM_PARTICLES, SET_STEP, size(), spos_m, startSet_m, turnNumber_m, WRITE_DATA_FLOAT64, WRITE_DATA_INT64, WRITE_STEPATTRIB_FLOAT64, and WRITE_STEPATTRIB_INT64.

Referenced by save().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ size()

size_t LossDataSink::size ( ) const
inline

Definition at line 172 of file LossDataSink.h.

References particles_m.

Referenced by saveH5().

Here is the caller graph for this function:

◆ splitSets()

void LossDataSink::splitSets ( unsigned int numSets)
private

In Opal-T monitors can be traversed several times. We know how many times the bunch passes because we register the passage of the reference particle. This code tries to determine to which bunch (same bunch but different times) a particle belongs. For this we could use algorithms from data science such as k-means or dbscan. But they are an overkill for this application because the bunches are well separated.

In a first step we a assign to each bunch the same number of particles and compute the mean time of passage and with it a time range. Of course this is only an approximation. So we reassign the particles to the bunches using the time ranges compute a better approximation. Two iterations should be sufficient for Opal-T where the temporal separation is large.

Parameters
numSetsnumber of passes of the reference particle

Definition at line 643 of file LossDataSink.cpp.

References particles_m, and startSet_m.

Referenced by computeStatistics().

Here is the caller graph for this function:

◆ writeHeaderASCII()

void LossDataSink::writeHeaderASCII ( )
private

Definition at line 293 of file LossDataSink.cpp.

References hasTurnInformations(), and os_m.

Referenced by save().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ writeHeaderH5()

void LossDataSink::writeHeaderH5 ( )
private

Definition at line 234 of file LossDataSink.cpp.

References collectionType_m, Options::computePercentiles, Util::getGitRevision(), OPAL_PROJECT_NAME, OPAL_PROJECT_VERSION, TEMPORAL, and WRITE_FILEATTRIB_STRING.

Referenced by save().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ bunchNumber_m

std::vector<size_t> LossDataSink::bunchNumber_m
private

Definition at line 158 of file LossDataSink.h.

Referenced by addParticle(), LossDataSink(), LossDataSink(), save(), and saveH5().

◆ collectionType_m

CollectionType LossDataSink::collectionType_m
private

Definition at line 169 of file LossDataSink.h.

Referenced by LossDataSink(), LossDataSink(), and writeHeaderH5().

◆ fileName_m

std::string LossDataSink::fileName_m
private

Definition at line 141 of file LossDataSink.h.

Referenced by appendASCII(), openASCII(), openH5(), and save().

◆ globalTrackStep_m

std::vector<h5_int64_t> LossDataSink::globalTrackStep_m
private

Definition at line 163 of file LossDataSink.h.

Referenced by addReferenceParticle(), LossDataSink(), save(), and saveH5().

◆ H5call_m

h5_int64_t LossDataSink::H5call_m
private

Current record, or time step, of H5 file.

Definition at line 155 of file LossDataSink.h.

Referenced by LossDataSink(), LossDataSink(), and saveH5().

◆ H5file_m

h5_file_t LossDataSink::H5file_m
private

used to write out data in H5hut mode

Definition at line 150 of file LossDataSink.h.

Referenced by LossDataSink(), LossDataSink(), save(), and ~LossDataSink().

◆ h5hut_mode_m

bool LossDataSink::h5hut_mode_m
private

Definition at line 144 of file LossDataSink.h.

Referenced by inH5Mode(), LossDataSink(), LossDataSink(), and save().

◆ os_m

std::ofstream LossDataSink::os_m
private

Definition at line 147 of file LossDataSink.h.

Referenced by appendASCII(), closeASCII(), openASCII(), and writeHeaderASCII().

◆ outputName_m

std::string LossDataSink::outputName_m
private

Definition at line 152 of file LossDataSink.h.

Referenced by computeSetStatistics(), LossDataSink(), LossDataSink(), and save().

◆ particles_m

std::vector<OpalParticle> LossDataSink::particles_m
private

◆ RefPartP_m

std::vector<Vector_t<double, 3> > LossDataSink::RefPartP_m
private

◆ RefPartR_m

std::vector<Vector_t<double, 3> > LossDataSink::RefPartR_m
private

◆ refTime_m

std::vector<double> LossDataSink::refTime_m
private

◆ spos_m

std::vector<double> LossDataSink::spos_m
private

◆ startSet_m

std::vector<unsigned long> LossDataSink::startSet_m
private

Definition at line 167 of file LossDataSink.h.

Referenced by computeSetStatistics(), saveH5(), and splitSets().

◆ turnNumber_m

std::vector<size_t> LossDataSink::turnNumber_m
private

The documentation for this class was generated from the following files: