Gromacs  2024.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
List of all members | Public Types | Public Member Functions
gmx::AnalysisDataDisplacementModule Class Referenceabstract

#include <gromacs/analysisdata/modules/displacement.h>

+ Inheritance diagram for gmx::AnalysisDataDisplacementModule:
+ Collaboration diagram for gmx::AnalysisDataDisplacementModule:

Description

Data module for calculating displacements.

Output data contains a frame for each frame in the input data except the first one. For each frame, there can be multiple points, each of which describes displacement for a certain time difference ending that that frame. The first column contains the time difference (backwards from the current frame), and the remaining columns the sizes of the displacements.

Current implementation is not very generic, but should be easy to extend.

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 setMaxTime (real tmax)
 Sets the largest displacement time to be calculated.
 
void setMSDHistogram (const std::shared_ptr< AnalysisDataBinAverageModule > &histm)
 Sets an histogram module that will receive a MSD histogram. 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...
 
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...
 
virtual int frameCount () const =0
 Returns the total number of frames 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...
 

Member Enumeration Documentation

Possible flags for flags().

Enumerator
efAllowMultipoint 

The module can process multipoint data.

efOnlyMultipoint 

The module does not make sense for non-multipoint data.

efAllowMulticolumn 

The module can process data with more than one column.

efAllowMissing 

The module can process data with missing points.

efAllowMultipleDataSets 

The module can process data with multiple data sets.

Member Function Documentation

void gmx::AbstractAnalysisData::addColumnModule ( int  col,
int  span,
const AnalysisDataModulePointer module 
)
inherited

Adds a module that processes only a subset of the columns.

Parameters
[in]colFirst column.
[in]spanNumber of columns.
moduleModule to add.

Throws in the same situations as addModule().

Currently, all data sets are filtered using the same column mask.

Todo:
This method doesn't currently work in all cases with multipoint data or with multiple data sets. In particular, if the added module requests storage and uses getDataFrame(), it will behave unpredictably (most likely asserts).
Todo:
Generalize this method to multiple data sets (e.g., for adding modules that only process a single data set).
See Also
addModule()
void gmx::AbstractAnalysisData::addModule ( const AnalysisDataModulePointer module)
inherited

Adds a module to process the data.

Parameters
moduleModule to add.
Exceptions
std::bad_allocif out of memory.
APIErrorif
  • module is not compatible with the data object
  • data has already been added to the data object and everything is not available through getDataFrame().
unspecifiedAny 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.

void gmx::AbstractAnalysisData::applyModule ( IAnalysisDataModule module)
inherited

Applies a module to process data that is ready.

Parameters
moduleModule to apply.
Exceptions
APIErrorin same situations as addModule().
unspecifiedAny 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.

Todo:
Currently, this method may not work correctly if module requests storage (addModule() has the same problem if called after data is started).
int gmx::AbstractAnalysisData::columnCount ( int  dataSet) const
inherited

Returns the number of columns in a data set.

Parameters
[in]dataSetZero-based index of the data set to query.
Returns
The number of columns in the data.

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.

int gmx::AbstractAnalysisData::columnCount ( ) const
inherited

Returns the number of columns in the data.

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.

See Also
columnCount(int)
void gmx::AnalysisDataDisplacementModule::dataFinished ( )
overridevirtual

Called (once) when no more data is available.

Exceptions
unspecifiedCan throw any exception required by the implementing class to report errors.

Implements gmx::AnalysisDataModuleSerial.

int gmx::AbstractAnalysisData::dataSetCount ( ) const
inherited

Returns the number of data sets in the data object.

Returns
The number of data sets in the data.

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.

void gmx::AnalysisDataDisplacementModule::dataStarted ( AbstractAnalysisData data)
overridevirtual

Called (once) when the data has been set up properly.

Parameters
[in]dataData object to which the module is added.
Exceptions
APIErrorif the provided data is not compatible.
unspecifiedCan 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.

int gmx::AnalysisDataDisplacementModule::flags ( ) const
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.

virtual int gmx::AbstractAnalysisData::frameCount ( ) const
pure virtualinherited

Returns the total number of frames in the data.

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.

Implemented in gmx::AnalysisDataWeightedHistogramModule, gmx::AnalysisDataSimpleHistogramModule, gmx::AnalysisData, gmx::AnalysisDataFrameAverageModule, and gmx::AbstractAnalysisArrayData.

void gmx::AnalysisDataDisplacementModule::frameFinished ( const AnalysisDataFrameHeader header)
overridevirtual

Called when a data frame is finished.

Parameters
[in]headerHeader information for the frame that is ending.
Exceptions
unspecifiedCan throw any exception required by the implementing class to report errors.

Implements gmx::AnalysisDataModuleSerial.

void gmx::AnalysisDataDisplacementModule::frameStarted ( const AnalysisDataFrameHeader frame)
overridevirtual

Called at the start of each data frame.

Parameters
[in]frameHeader information for the frame that is starting.
Exceptions
unspecifiedCan throw any exception required by the implementing class to report errors.

Implements gmx::AnalysisDataModuleSerial.

AnalysisDataFrameRef gmx::AbstractAnalysisData::getDataFrame ( int  index) const
inherited

Access stored data.

Parameters
[in]indexZero-based frame index to access.
Returns
Frame reference to frame index.
Exceptions
APIErrorif the requested frame is not accessible.

If the data is not certainly available, use tryGetDataFrame().

See Also
requestStorage()
tryGetDataFrame()
bool gmx::AbstractAnalysisData::isMultipoint ( ) const
inherited

Whether the data can have multiple points in the same column in the same frame.

Returns
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.

void gmx::AnalysisDataDisplacementModule::pointsAdded ( const AnalysisDataPointSetRef points)
overridevirtual

Called one or more times during each data frame.

Parameters
[in]pointsSet of points added (also provides access to frame-level data).
Exceptions
APIErrorif the provided data is not compatible.
unspecifiedCan 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.

bool gmx::AbstractAnalysisData::requestStorage ( int  nframes)
inherited

Request storage of frames.

Parameters
[in]nframesRequest storing at least nframes previous frames (-1 = request storing all). Must be >= -1.
Returns
true if the request could be satisfied.

If called multiple times, the largest request is honored.

Does not throw. Failure to honor the request is indicated through the return value.

See Also
getDataFrame()
tryGetDataFrame()
void gmx::AnalysisDataDisplacementModule::setMSDHistogram ( const std::shared_ptr< AnalysisDataBinAverageModule > &  histm)

Sets an histogram module that will receive a MSD histogram.

If this function is not called, no histogram is calculated.

AnalysisDataFrameRef gmx::AbstractAnalysisData::tryGetDataFrame ( int  index) const
inherited

Access stored data.

Parameters
[in]indexZero-based frame index to access.
Returns
Frame reference to frame 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.

See Also
requestStorage()
getDataFrame()

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