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

#include <gromacs/analysisdata/datamodule.h>

+ Inheritance diagram for gmx::IAnalysisDataModule:

Description

Interface for a module that gets notified whenever data is added.

The interface provides one method (flags()) that describes features of data objects the module supports. Only most common features are included in the flags; custom checks can be implemented in the dataStarted() and/or parallelDataStarted() methods (see below). All other methods in the interface are callbacks that are called by the data object to which the module is attached to describe the data. See Parallelizable Handling of Output Data (analysisdata) for an overview of the notifications the modules receive, and Analysis output data handling for overview of the terminology.

Concrete modules typically do not directly derive from this interface, but from either AnalysisDataModuleSerial or AnalysisDataModuleParallel. Both these classes implement one of dataStarted()/parallelDataStarted() by forwarding the calls to the other method of this pair. This allows the module to only implement the initialization once, without needing to worry how to correctly handle both cases.

Currently, if the module throws an exception, it requires the analysis tool to terminate, since AbstractAnalysisData will be left in a state where it is not possible to continue processing. See a related todo item in AbstractAnalysisData.

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

virtual int flags () const =0
 Returns properties supported by the module. More...
 
virtual void dataStarted (AbstractAnalysisData *data)=0
 Called (once) when the data has been set up properly. More...
 
virtual bool parallelDataStarted (AbstractAnalysisData *data, const AnalysisDataParallelOptions &options)=0
 Called (once) for parallel data when the data has been set up. More...
 
virtual void frameStarted (const AnalysisDataFrameHeader &frame)=0
 Called at the start of each data frame. More...
 
virtual void pointsAdded (const AnalysisDataPointSetRef &points)=0
 Called one or more times during each data frame. More...
 
virtual void frameFinished (const AnalysisDataFrameHeader &header)=0
 Called when a data frame is finished. More...
 
virtual void frameFinishedSerial (int frameIndex)=0
 Called in sequential order for each frame after they are finished. More...
 
virtual void dataFinished ()=0
 Called (once) when no more data is available. 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

virtual void gmx::IAnalysisDataModule::dataFinished ( )
pure virtual
virtual void gmx::IAnalysisDataModule::dataStarted ( AbstractAnalysisData data)
pure virtual

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.

Implemented in gmx::AnalysisDataBinAverageModule, gmx::internal::BasicAverageHistogramModule, gmx::AnalysisDataModuleSerial, gmx::AbstractPlotModule, gmx::AnalysisDataFrameAverageModule, gmx::AnalysisDataAverageModule, gmx::analysismodules::anonymous_namespace{select.cpp}::IndexFileWriterModule, gmx::AnalysisDataLifetimeModule, gmx::AnalysisDataDisplacementModule, and gmx::AnalysisDataProxy.

virtual int gmx::IAnalysisDataModule::flags ( ) const
pure virtual

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.

Implemented in gmx::AnalysisDataBinAverageModule, gmx::AnalysisDataWeightedHistogramModule, gmx::AnalysisDataSimpleHistogramModule, gmx::internal::BasicAverageHistogramModule, gmx::AnalysisDataModuleParallel, gmx::AnalysisDataModuleSerial, gmx::AbstractPlotModule, gmx::AnalysisDataFrameAverageModule, gmx::AnalysisDataAverageModule, gmx::analysismodules::anonymous_namespace{select.cpp}::IndexFileWriterModule, gmx::AnalysisDataLifetimeModule, gmx::AnalysisDataDisplacementModule, and gmx::AnalysisDataProxy.

virtual void gmx::IAnalysisDataModule::frameFinished ( const AnalysisDataFrameHeader header)
pure virtual
virtual void gmx::IAnalysisDataModule::frameFinishedSerial ( int  frameIndex)
pure virtual

Called in sequential order for each frame after they are finished.

Parameters
[in]frameIndexIndex of the next finished frame.
Exceptions
unspecifiedCan 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.

Implemented in gmx::AnalysisDataWeightedHistogramModule, gmx::AnalysisDataSimpleHistogramModule, gmx::AnalysisDataModuleParallel, and gmx::AnalysisDataProxy.

virtual void gmx::IAnalysisDataModule::frameStarted ( const AnalysisDataFrameHeader frame)
pure virtual
virtual bool gmx::IAnalysisDataModule::parallelDataStarted ( AbstractAnalysisData data,
const AnalysisDataParallelOptions options 
)
pure virtual

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

Parameters
[in]dataData object to which the module is added.
[in]optionsParallelization properties of the input data.
Returns
true if the module can process the input in non-sequential order.
Exceptions
APIErrorif the provided data is not compatible.
unspecifiedCan 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).

Implemented in gmx::AnalysisDataWeightedHistogramModule, gmx::AnalysisDataSimpleHistogramModule, gmx::AnalysisDataModuleParallel, and gmx::AnalysisDataProxy.

virtual void gmx::IAnalysisDataModule::pointsAdded ( const AnalysisDataPointSetRef points)
pure virtual

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.

Implemented in gmx::AnalysisDataBinAverageModule, gmx::AnalysisDataWeightedHistogramModule, gmx::AnalysisDataSimpleHistogramModule, gmx::internal::BasicAverageHistogramModule, gmx::AnalysisDataVectorPlotModule, gmx::AnalysisDataModuleParallel, gmx::AnalysisDataPlotModule, gmx::AnalysisDataModuleSerial, gmx::AbstractPlotModule, gmx::AnalysisDataFrameAverageModule, gmx::AnalysisDataAverageModule, gmx::analysismodules::anonymous_namespace{select.cpp}::IndexFileWriterModule, gmx::AnalysisDataLifetimeModule, gmx::AnalysisDataDisplacementModule, and gmx::AnalysisDataProxy.


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