Gromacs
2023.1
|
#include <gromacs/analysisdata/modules/histogram.h>
Data module for per-frame weighted histograms.
Output data contains the same number of frames and data sets as the input data. Each frame contains the histogram(s) for the points in that frame, interpreted such that the first column passed to pointsAdded() determines the bin and the rest give weights to be added to that bin (input data should have at least two columns, and at least two columns should be added at the same time). Each input data set is processed independently into the corresponding output data set. All input columns for a data set are averaged into the same histogram. The number of columns for all data sets equals the number of bins in the histogram.
The histograms are accumulated in double precision, even if the output data is in single precision.
Public Types | |
enum | Flag { efAllowMultipoint = 1 << 0, efOnlyMultipoint = 1 << 1, efAllowMulticolumn = 1 << 2, efAllowMissing = 1 << 3, efAllowMultipleDataSets = 1 << 4 } |
Possible flags for flags(). More... | |
Public Member Functions | |
AnalysisDataWeightedHistogramModule () | |
Creates a histogram module with undefined bins. More... | |
AnalysisDataWeightedHistogramModule (const AnalysisHistogramSettings &settings) | |
Creates a histogram module with defined bin parameters. More... | |
void | init (const AnalysisHistogramSettings &settings) |
(Re)initializes the histogram from settings. More... | |
AbstractAverageHistogram & | averager () |
Returns the average histogram over all frames. More... | |
const AnalysisHistogramSettings & | settings () const |
Returns bin properties for the histogram. More... | |
int | frameCount () const override |
Returns the total number of frames in the data. More... | |
int | flags () const override |
Returns properties supported by the module. More... | |
bool | parallelDataStarted (AbstractAnalysisData *data, const AnalysisDataParallelOptions &options) override |
Called (once) for parallel data when the data has been set up. More... | |
void | frameStarted (const AnalysisDataFrameHeader &header) override |
Called at the start of each data frame. More... | |
void | pointsAdded (const AnalysisDataPointSetRef &points) override |
Called one or more times during each data frame. More... | |
void | frameFinished (const AnalysisDataFrameHeader &header) override |
Called when a data frame is finished. More... | |
void | frameFinishedSerial (int frameIndex) override |
Called in sequential order for each frame after they are finished. More... | |
void | dataFinished () override |
Called (once) when no more data is available. More... | |
bool | isMultipoint () const |
Whether the data can have multiple points in the same column in the same frame. More... | |
int | dataSetCount () const |
Returns the number of data sets in the data object. More... | |
int | columnCount (int dataSet) const |
Returns the number of columns in a data set. More... | |
int | columnCount () const |
Returns the number of columns in the data. More... | |
AnalysisDataFrameRef | tryGetDataFrame (int index) const |
Access stored data. More... | |
AnalysisDataFrameRef | getDataFrame (int index) const |
Access stored data. More... | |
bool | requestStorage (int nframes) |
Request storage of frames. More... | |
void | addModule (const AnalysisDataModulePointer &module) |
Adds a module to process the data. More... | |
void | addColumnModule (int col, int span, const AnalysisDataModulePointer &module) |
Adds a module that processes only a subset of the columns. More... | |
void | applyModule (IAnalysisDataModule *module) |
Applies a module to process data that is ready. More... | |
|
inherited |
Possible flags for flags().
gmx::AnalysisDataWeightedHistogramModule::AnalysisDataWeightedHistogramModule | ( | ) |
Creates a histogram module with undefined bins.
Bin parameters must be defined with init() before data input is started.
|
explicit |
Creates a histogram module with defined bin parameters.
|
inherited |
Adds a module that processes only a subset of the columns.
[in] | col | First column. |
[in] | span | Number of columns. |
module | Module to add. |
Throws in the same situations as addModule().
Currently, all data sets are filtered using the same column mask.
|
inherited |
Adds a module to process the data.
module | Module to add. |
std::bad_alloc | if out of memory. |
APIError | if
|
unspecified | Any exception thrown by module in its notification methods (if data has been added). |
If data has already been added to the data, the new module immediately processes all existing data. APIError is thrown if all data is not available through getDataFrame().
The caller can keep a copy of the module pointer if it requires later access to the module.
If the method throws, the state of the data object is not changed. The state of the data module is indeterminate.
|
inherited |
Applies a module to process data that is ready.
module | Module to apply. |
APIError | in same situations as addModule(). |
unspecified | Any exception thrown by module in its notification methods. |
This function works as addModule(), except that it does not keep a reference to module
within the data object after it returns. Also, it can only be called after the data is ready, and only if getDataFrame() gives access to all of the data. It is provided for additional flexibility in postprocessing in-memory data.
module
requests storage (addModule() has the same problem if called after data is started). AbstractAverageHistogram & gmx::AnalysisDataWeightedHistogramModule::averager | ( | ) |
Returns the average histogram over all frames.
Can be called already before the histogram is calculated to customize the way the average histogram is calculated.
|
inherited |
Returns the number of columns in a data set.
[in] | dataSet | Zero-based index of the data set to query. |
If the number of columns is not yet known, returns 0. The returned value does not change after modules have been notified of data start, but may change multiple times before that, depending on the actual data class.
Does not throw.
|
inherited |
Returns the number of columns in the data.
This is a convenience method for data objects with a single data set. Can only be called if dataSetCount() == 1.
Does not throw.
|
overridevirtual |
Called (once) when no more data is available.
unspecified | Can throw any exception required by the implementing class to report errors. |
Implements gmx::AnalysisDataModuleParallel.
|
inherited |
Returns the number of data sets in the data object.
If the number is not yet known, returns 0. The returned value does not change after modules have been notified of data start, but may change multiple times before that, depending on the actual data class.
Does not throw.
|
overridevirtual |
Returns properties supported by the module.
The return value of this method should not change after the module has been added to a data (this responsibility can, and in most cases must, be delegated to the user of the module).
The purpose of this method is to remove the need for common checks for data compatibility in the classes that implement the interface. Instead, AbstractAnalysisData performs these checks based on the flags provided.
Does not throw.
Implements gmx::AnalysisDataModuleParallel.
|
overridevirtual |
Returns the total number of frames in the data.
This function returns the number of frames that the object has produced. If requestStorage() has been successfully called, tryGetDataframe() or getDataFrame() can be used to access some or all of these frames.
Does not throw.
Implements gmx::AbstractAnalysisData.
|
overridevirtual |
Called when a data frame is finished.
[in] | header | Header information for the frame that is ending. |
unspecified | Can throw any exception required by the implementing class to report errors. |
Implements gmx::AnalysisDataModuleParallel.
|
overridevirtual |
Called in sequential order for each frame after they are finished.
[in] | frameIndex | Index of the next finished frame. |
unspecified | Can throw any exception required by the implementing class to report errors. |
This method is called after frameFinished(), but with an additional constraint that it is always called in serial and with an increasing frameIndex
. Parallel data modules need this to serialize their data for downstream serial modules; AnalysisDataModuleSerial provides an empty implementation, as there frameFinished() can be used for the same purpose.
Implements gmx::AnalysisDataModuleParallel.
|
overridevirtual |
Called at the start of each data frame.
[in] | frame | Header information for the frame that is starting. |
unspecified | Can throw any exception required by the implementing class to report errors. |
Implements gmx::AnalysisDataModuleParallel.
|
inherited |
Access stored data.
[in] | index | Zero-based frame index to access. |
index
. APIError | if the requested frame is not accessible. |
If the data is not certainly available, use tryGetDataFrame().
void gmx::AnalysisDataWeightedHistogramModule::init | ( | const AnalysisHistogramSettings & | settings | ) |
(Re)initializes the histogram from settings.
|
inherited |
Whether the data can have multiple points in the same column in the same frame.
true
if multiple points in the same column are allowed within a single frame.This kind of data can appear in many histogramming applications (e.g., RDFs), where each trajectory frame has several data points (possibly a different number for each frame). The current interface doesn't support storing such data, but this should rarely be necessary.
The returned value does not change after modules have been notified of data start.
Does not throw.
|
overridevirtual |
Called (once) for parallel data when the data has been set up.
[in] | data | Data object to which the module is added. |
[in] | options | Parallelization properties of the input data. |
APIError | if the provided data is not compatible. |
unspecified | Can throw any exception required by the implementing class to report errors. |
This method is called instead of dataStarted() if the input data has the capability to present data in non-sequential order. If the method returns true, then the module accepts this and frame notification methods may be called in that non-sequential order. If the method returns false, then the frame notification methods are called in sequential order, as if dataStarted() had been called.
See dataStarted() for general information on initializing the data. That applies to this method as well, with the exception that calling AbstractAnalysisData::requestStorage() is currently not very well supported (or rather, accessing the requested storage doesn't work).
Implements gmx::AnalysisDataModuleParallel.
|
overridevirtual |
Called one or more times during each data frame.
[in] | points | Set of points added (also provides access to frame-level data). |
APIError | if the provided data is not compatible. |
unspecified | Can throw any exception required by the implementing class to report errors. |
Can be called once or multiple times for a frame. For all data objects currently implemented in the library (and all objects that will use AnalysisDataStorage for internal implementation), it is called exactly once for each frame if the data is not multipoint, but currently this restriction is not enforced.
Implements gmx::AnalysisDataModuleParallel.
|
inherited |
Request storage of frames.
[in] | nframes | Request storing at least nframes previous frames (-1 = request storing all). Must be >= -1. |
If called multiple times, the largest request is honored.
Does not throw. Failure to honor the request is indicated through the return value.
const AnalysisHistogramSettings & gmx::AnalysisDataWeightedHistogramModule::settings | ( | ) | const |
Returns bin properties for the histogram.
|
inherited |
Access stored data.
[in] | index | Zero-based frame index to access. |
index
, or an invalid reference if no such frame is available.Does not throw. Failure to access a frame with the given index is indicated through the return value. Negative index
is allowed, and will always result in an invalid reference being returned.