Gromacs  2018.8
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
List of all members | Public Member Functions
gmx::AnalysisDataProxy Class Reference

#include <gromacs/analysisdata/dataproxy.h>

+ Inheritance diagram for gmx::AnalysisDataProxy:
+ Collaboration diagram for gmx::AnalysisDataProxy:

Description

Internal implementation class used to implement column modules.

This class serves as a proxy between AbstractAnalysisData and the attached IAnalysisDataModule object. For each notification that AbstractAnalysisData sends, it maps it such that only the relevant columns are visible to the IAnalysisDataModule. Similarly, it implements the frame access methods of AbstractAnalysisData such that only the relevant columns are returned.

Public Member Functions

 AnalysisDataProxy (int firstColumn, int columnSpan, AbstractAnalysisData *data)
 Creates a proxy object that only presents certain columns. More...
 
virtual int frameCount () const
 Returns the total number of frames in the data. More...
 
virtual int flags () const
 Returns properties supported by the module. More...
 
virtual void dataStarted (AbstractAnalysisData *data)
 Called (once) when the data has been set up properly. More...
 
virtual bool parallelDataStarted (AbstractAnalysisData *data, const AnalysisDataParallelOptions &options)
 Called (once) for parallel data when the data has been set up. More...
 
virtual void frameStarted (const AnalysisDataFrameHeader &frame)
 Called at the start of each data frame. More...
 
virtual void pointsAdded (const AnalysisDataPointSetRef &points)
 Called one or more times during each data frame. More...
 
virtual void frameFinished (const AnalysisDataFrameHeader &header)
 Called when a data frame is finished. More...
 
virtual void frameFinishedSerial (int frameIndex)
 Called in sequential order for each frame after they are finished. More...
 
virtual void dataFinished ()
 Called (once) when no more data is available. More...
 
- Public Member Functions inherited from gmx::AbstractAnalysisData
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 (AnalysisDataModulePointer module)
 Adds a module to process the data. More...
 
void addColumnModule (int col, int span, 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...
 

Additional Inherited Members

- Public Types inherited from gmx::IAnalysisDataModule
enum  Flag {
  efAllowMultipoint = 1<<0, efOnlyMultipoint = 1<<1, efAllowMulticolumn = 1<<2, efAllowMissing = 1<<3,
  efAllowMultipleDataSets = 1<<4
}
 Possible flags for flags(). More...
 
- Protected Member Functions inherited from gmx::AbstractAnalysisData
 AbstractAnalysisData ()
 Initializes a new analysis data object. More...
 
void setDataSetCount (int dataSetCount)
 Sets the number of data sets. More...
 
void setColumnCount (int dataSet, int columnCount)
 Sets the number of columns for a data set. More...
 
void setMultipoint (bool bMultipoint)
 Sets whether the data has multiple points per column in a frame. More...
 
AnalysisDataModuleManagermoduleManager ()
 Returns the module manager to use for calling notification methods.
 
const AnalysisDataModuleManagermoduleManager () const
 Returns the module manager to use for calling notification methods.
 

Constructor & Destructor Documentation

gmx::AnalysisDataProxy::AnalysisDataProxy ( int  firstColumn,
int  columnSpan,
AbstractAnalysisData data 
)

Creates a proxy object that only presents certain columns.

Parameters
[in]firstColumnFirst column to present.
[in]columnSpanNumber of columns to present.
[in]dataData object that should be wrapped.

Does not throw.

Member Function Documentation

void gmx::AnalysisDataProxy::dataFinished ( )
virtual

Called (once) when no more data is available.

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

Implements gmx::IAnalysisDataModule.

void gmx::AnalysisDataProxy::dataStarted ( AbstractAnalysisData data)
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.

Implements gmx::IAnalysisDataModule.

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

Implements gmx::IAnalysisDataModule.

int gmx::AnalysisDataProxy::frameCount ( ) const
virtual

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.

Derived classes should implement this to return the number of frames. The frame count should not be incremented before tryGetDataFrameInternal() can return the new frame. The frame count must be incremented before AnalysisDataModuleManager::notifyFrameFinish() is called.

Implements gmx::AbstractAnalysisData.

void gmx::AnalysisDataProxy::frameFinished ( const AnalysisDataFrameHeader header)
virtual

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::IAnalysisDataModule.

void gmx::AnalysisDataProxy::frameFinishedSerial ( int  frameIndex)
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 downsteam serial modules; AnalysisDataModuleSerial provides an empty implementation, as there frameFinished() can be used for the same purpose.

Implements gmx::IAnalysisDataModule.

void gmx::AnalysisDataProxy::frameStarted ( const AnalysisDataFrameHeader frame)
virtual

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::IAnalysisDataModule.

bool gmx::AnalysisDataProxy::parallelDataStarted ( AbstractAnalysisData data,
const AnalysisDataParallelOptions options 
)
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).

Implements gmx::IAnalysisDataModule.

void gmx::AnalysisDataProxy::pointsAdded ( const AnalysisDataPointSetRef points)
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.

Implements gmx::IAnalysisDataModule.


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