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

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

+ Inheritance diagram for gmx::AbstractAverageHistogram:
+ Collaboration diagram for gmx::AbstractAverageHistogram:

Description

Base class for representing histograms averaged over frames.

The averaging module for a per-frame histogram is always created by the histogram module class (e.g., AnalysisDataSimpleHistogramModule), and can be accessed using, e.g., AnalysisDataSimpleHistogramModule::averager(). The user can alter some properties of the average histogram directly, but the main use of the object is to postprocess the histogram once the calculation is finished.

This class can represent multiple histograms in one object: each column in the data is an independent histogram. The X values correspond to center of the bins, except for a cumulative histogram made with makeCumulative().

Public Member Functions

const AnalysisHistogramSettingssettings () const
 Returns bin properties for the histogram.
 
AverageHistogramPointer resampleDoubleBinWidth (bool bIntegerBins) const
 Creates a copy of the histogram with double the bin width. More...
 
AverageHistogramPointer clone () const
 Creates a deep copy of the histogram. More...
 
void normalizeProbability ()
 Normalizes the histogram such that the integral over it is one.
 
void makeCumulative ()
 Makes the histograms cumulative by summing up each bin to all bins after it. More...
 
void scaleSingle (int index, real factor)
 Scales a single histogram by a uniform scaling factor.
 
void scaleAll (real factor)
 Scales all histograms by a uniform scaling factor.
 
void scaleAllByVector (const real factor[])
 Scales the value of each bin by a different scaling factor.
 
void done ()
 Notifies attached modules of the histogram data. 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 AnalysisDataValuevalue (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

 AbstractAverageHistogram ()
 Creates a histogram module with undefined bins. More...
 
 AbstractAverageHistogram (const AnalysisHistogramSettings &settings)
 Creates a histogram module with defined bin parameters.
 
void init (const AnalysisHistogramSettings &settings)
 (Re)initializes the histogram from settings.
 
AnalysisDataValuevalue (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 setColumnCount (int dataSet, int columnCount)
 Sets the number of columns for a data set. 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...
 
void setDataSetCount (int dataSetCount)
 Sets the number of data sets. 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.
 

Static Protected Member Functions

static void copyContents (const AbstractAnalysisArrayData *src, AbstractAnalysisArrayData *dest)
 Copies the contents into a new object. More...
 

Constructor & Destructor Documentation

gmx::AbstractAverageHistogram::AbstractAverageHistogram ( )
protected

Creates a histogram module with undefined bins.

Bin parameters must be defined with init() before data input is started.

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::AbstractAnalysisArrayData::allocateValues ( )
protectedinherited

Allocates memory for the values.

Exceptions
std::bad_allocif memory allocation fails.

setColumnCount() and setRowCount() must have been called.

Strong exception safety guarantee.

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).
AverageHistogramPointer gmx::AbstractAverageHistogram::clone ( ) const

Creates a deep copy of the histogram.

Exceptions
std::bad_allocif out of memory.

The returned histogram is not necessarily of the same dynamic type as the original object, but contains the same data from the point of view of the AbstractAverageHistogram interface.

The caller is responsible of deleting the returned object.

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. Derived classes should set the number of columns with setColumnCount(), within the above limitations.

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::AbstractAnalysisArrayData::copyContents ( const AbstractAnalysisArrayData src,
AbstractAnalysisArrayData dest 
)
staticprotectedinherited

Copies the contents into a new object.

Parameters
[in]srcObject to copy data from.
[in,out]destEmpty array data object to copy data to.
Exceptions
std::bad_allocif memory allocation for dest fails.

dest should not have previous contents.

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. Derived classes should set the number of columns with setDataSetCount(), within the above limitations.

Does not throw.

void gmx::AbstractAverageHistogram::done ( )
inline

Notifies attached modules of the histogram data.

After this function has been called, it is no longer possible to alter the histogram.

int gmx::AbstractAnalysisArrayData::frameCount ( ) const
inlineoverridevirtualinherited

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.

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. Derived classes can change the type by calling setMultipoint() subject to the above restriction. If this is not done, the function always returns false.

Does not throw.

void gmx::AbstractAverageHistogram::makeCumulative ( )

Makes the histograms cumulative by summing up each bin to all bins after it.

The X values in the data are adjusted such that they match the right edges of bins instead of bin centers.

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()
AverageHistogramPointer gmx::AbstractAverageHistogram::resampleDoubleBinWidth ( bool  bIntegerBins) const

Creates a copy of the histogram with double the bin width.

Parameters
[in]bIntegerBinsIf true, the first bin in the result will cover the first bin from the source. Otherwise, the first bin will cover first two bins from the source.
Exceptions
std::bad_allocif out of memory.

The caller is responsible of deleting the returned object.

int gmx::AbstractAnalysisArrayData::rowCount ( ) const
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.

void gmx::AbstractAnalysisArrayData::setColumnCount ( int  ncols)
protectedinherited

Sets the number of columns in the data array.

Parameters
[in]ncolsNumber of columns in the data.

Cannot be called after allocateValues().

See AbstractAnalysisData::setColumnCount() for exception behavior.

void gmx::AbstractAnalysisData::setColumnCount ( int  dataSet,
int  columnCount 
)
protectedinherited

Sets the number of columns for a data set.

Parameters
[in]dataSetZero-based index of the data set.
[in]columnCountNumber of columns in dataSet (must be > 0).
Exceptions
APIErrorif modules have been added that are not compatible with the new column count.

Must be called at least once for each data set before AnalysisDataModuleManager::notifyDataStart(). Can be called only before AnalysisDataModuleManager::notifyDataStart(). Multiple calls are allowed before that point; the last call takes effect.

Strong exception safety.

See Also
columnCount()
void gmx::AbstractAnalysisData::setDataSetCount ( int  dataSetCount)
protectedinherited

Sets the number of data sets.

Parameters
[in]dataSetCountNumber of data sets (must be > 0).
Exceptions
std::bad_allocif out of memory.
APIErrorif modules have been added that are not compatible with the new data set count.

It not called, the data object has a single data set. Can be called only before AnalysisDataModuleManager::notifyDataStart(). Multiple calls are allowed before that point; the last call takes effect.

Strong exception safety.

See Also
dataSetCount()
void gmx::AbstractAnalysisData::setMultipoint ( bool  bMultipoint)
protectedinherited

Sets whether the data has multiple points per column in a frame.

Parameters
[in]bMultipointWhether multiple points per column are possible.
Exceptions
APIErrorif modules have been added that are not compatible with the new setting.

If not called, only a single point per column is allowed. Can be called only before AnalysisDataModuleManager::notifyDataStart(). Multiple calls are allowed before that point; the last call takes effect.

Strong exception safety.

See Also
isMultipoint()
void gmx::AbstractAnalysisArrayData::setRowCount ( int  rowCount)
protectedinherited

Sets the number of rows in the data array.

Parameters
[in]rowCountNumber of rows in the data.

Cannot be called after allocateValues().

Does not throw.

void gmx::AbstractAnalysisArrayData::setXAxis ( real  start,
real  step 
)
protectedinherited

Sets the values reported as x values for frames.

Parameters
[in]startx value for the first frame.
[in]stepStep between x values of successive frames.

Must not be called after valuesReady(). Any values set with setXAxisValue() are overwritten.

Does not throw.

void gmx::AbstractAnalysisArrayData::setXAxisValue ( int  row,
real  value 
)
protectedinherited

Sets a single value reported as x value for frames.

Parameters
[in]rowRow/frame for which to set the value.
[in]valuex value for the frame specified by row.

Must not be called after valuesReady().

Does not throw.

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()
void gmx::AbstractAnalysisArrayData::valuesReady ( )
protectedinherited

Notifies modules of the data.

Exceptions
unspecifiedAny 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.


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