Gromacs
2020.4
|
#include <gromacs/analysisdata/modules/average.h>
Data module for independently averaging each column in input data.
Computes the average and standard deviation independently for each column in the input data. Multipoint data, multiple data sets, and missing data points are all supported. The average is always calculated over all frames and data points for a column.
Output data contains a column for each data set in the input data, and a frame for each column in the input data. If different data sets have different number of columns, the frame count accomodates the largest data set. Other columns are padded with zero values that are additionally marked as missing. Each value in the output data is the average of the corresponding input column in the corresponding input data set. The error value for each value provides the standard deviation of the corresponding input column. average(), standardDeviation(), and sampleCount() methods are also provided for convenient access to these properties.
The output data becomes available only after the input data has been finished.
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 | |
void | setAverageDataSets (bool bDataSets) |
Sets the averaging to happen over entire data sets. More... | |
int | flags () const override |
Returns properties supported by the module. More... | |
void | dataStarted (AbstractAnalysisData *data) override |
Called (once) when the data has been set up properly. 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 | dataFinished () override |
Called (once) when no more data is available. More... | |
real | average (int dataSet, int column) const |
Convenience access to the average of a data column. More... | |
real | standardDeviation (int dataSet, int column) const |
Convenience access to the standard deviation of a data column. More... | |
int | sampleCount (int dataSet, int column) const |
Access the number of samples for a data column. More... | |
int | frameCount () const override |
Returns the total number of frames in the data. More... | |
int | rowCount () const |
Returns the number of rows in the data array. More... | |
bool | isAllocated () const |
Returns true if values have been allocated. | |
real | xstart () const |
Returns the x value of the first frame. | |
real | xstep () const |
Returns the step between frame x values. | |
real | xvalue (int row) const |
Returns the x value of a row. | |
const AnalysisDataValue & | value (int row, int col) const |
Returns a given array element. | |
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... | |
Protected Member Functions | |
AnalysisDataValue & | value (int row, int col) |
Returns a reference to a given array element. | |
void | setColumnCount (int ncols) |
Sets the number of columns in the data array. More... | |
void | setRowCount (int rowCount) |
Sets the number of rows in the data array. More... | |
void | allocateValues () |
Allocates memory for the values. More... | |
void | setXAxis (real start, real step) |
Sets the values reported as x values for frames. More... | |
void | setXAxisValue (int row, real value) |
Sets a single value reported as x value for frames. More... | |
void | valuesReady () |
Notifies modules of the data. More... | |
Static Protected Member Functions | |
static void | copyContents (const AbstractAnalysisArrayData *src, AbstractAnalysisArrayData *dest) |
Copies the contents into a new object. More... | |
|
inherited |
Possible flags for flags().
|
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.
|
protectedinherited |
Allocates memory for the values.
std::bad_alloc | if memory allocation fails. |
setColumnCount() and setRowCount() must have been called.
Strong exception safety guarantee.
|
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). real gmx::AnalysisDataAverageModule::average | ( | int | dataSet, |
int | column | ||
) | const |
Convenience access to the average of a data column.
Note that the interpretation of the parameters follows their naming: with setAverageDataSets(false)
, dataSet
corresponds to a column in the output, but with setAverageDataSets(false)
it corresponds to an output row. In both cases, it selects the data set; with setAverageDataSets(false)
, column
should always be zero as there is only one value per data set.
|
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.
|
staticprotectedinherited |
Copies the contents into a new object.
[in] | src | Object to copy data from. |
[in,out] | dest | Empty array data object to copy data to. |
std::bad_alloc | if memory allocation for dest fails. |
dest
should not have previous contents.
|
overridevirtual |
Called (once) when no more data is available.
unspecified | Can throw any exception required by the implementing class to report errors. |
Implements gmx::AnalysisDataModuleSerial.
|
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 |
Called (once) when the data has been set up properly.
[in] | data | Data object to which the module is added. |
APIError | if the provided data is not compatible. |
unspecified | Can throw any exception required by the implementing class to report errors. |
When the data is ready, either this method or parallelDataStarted() is called, depending on the nature of the input data. If this method is called, the input data will always present the frames in sequential order.
The data to which the module is attached is passed as an argument to provide access to properties of the data for initialization and/or validation. The module can also call AbstractAnalysisData::requestStorage() if needed.
This is the only place where the module gets access to the data; if properties of the data are required later, the module should store them internally. It is guaranteed that the data properties (column count, whether it's multipoint) do not change once this method has been called.
Notice that data
will be a proxy object if the module is added as a column module, not the data object for which AbstractAnalysisData::addColumnModule() was called.
Implements gmx::AnalysisDataModuleSerial.
|
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::AnalysisDataModuleSerial.
|
inlineoverridevirtualinherited |
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::AnalysisDataModuleSerial.
|
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::AnalysisDataModuleSerial.
|
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().
|
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 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::AnalysisDataModuleSerial.
|
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.
|
inlineinherited |
Returns the number of rows in the data array.
This function is identical to frameCount(), except that frameCount() returns 0 before valuesReady() has been called.
int gmx::AnalysisDataAverageModule::sampleCount | ( | int | dataSet, |
int | column | ||
) | const |
Access the number of samples for a data column.
See average() for the interpretation of the parameters.
void gmx::AnalysisDataAverageModule::setAverageDataSets | ( | bool | bDataSets | ) |
Sets the averaging to happen over entire data sets.
If bDataSets
is false (the default), the module averages each column separately. The output will have a column for each data set, and a row for each column.
If bDataSets
is true, the module averages all values within a single data set into a single average/standard deviation. The output will have only one column, with one row for each data set.
|
protectedinherited |
Sets the number of columns in the data array.
[in] | ncols | Number of columns in the data. |
Cannot be called after allocateValues().
See AbstractAnalysisData::setColumnCount() for exception behavior.
|
protectedinherited |
Sets the number of rows in the data array.
[in] | rowCount | Number of rows in the data. |
Cannot be called after allocateValues().
Does not throw.
Sets the values reported as x values for frames.
[in] | start | x value for the first frame. |
[in] | step | Step between x values of successive frames. |
Must not be called after valuesReady(). Any values set with setXAxisValue() are overwritten.
Does not throw.
|
protectedinherited |
Sets a single value reported as x value for frames.
[in] | row | Row/frame for which to set the value. |
[in] | value | x value for the frame specified by row . |
Must not be called after valuesReady().
Does not throw.
real gmx::AnalysisDataAverageModule::standardDeviation | ( | int | dataSet, |
int | column | ||
) | const |
Convenience access to the standard deviation of a data column.
See average() for the interpretation of the parameters.
|
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.
|
protectedinherited |
Notifies modules of the data.
unspecified | Any exception thrown by attached data modules in data notification methods. |
This function should be called once the values in the array have been initialized. The values should not be changed after this function has been called.