OpenMS
2.7.0
|
Provides access to linearly interpolated values (and derivatives) from discrete data points. Values beyond the given range of data points are implicitly taken as zero. More...
#include <OpenMS/MATH/MISC/LinearInterpolation.h>
Public Member Functions | |
Interpolated data | |
ValueType | value (KeyType arg_pos) const |
Returns the interpolated value. More... | |
void | addValue (KeyType arg_pos, ValueType arg_value) |
Performs linear resampling. The arg_value is split up and added to the data points around arg_pos. More... | |
ValueType | derivative (KeyType arg_pos) const |
Returns the interpolated derivative. More... | |
Discrete (non-interpolated) data | |
ContainerType & | getData () |
Returns the internal random access container from which interpolated values are being sampled. More... | |
ContainerType const & | getData () const |
Returns the internal random access container from which interpolated values are being sampled. More... | |
template<typename SourceContainer > | |
void | setData (SourceContainer const &data) |
Assigns data to the internal random access container from which interpolated values are being sampled. More... | |
bool | empty () const |
Returns true if getData() is empty. More... | |
Typedefs | |
typedef Value | value_type |
typedef Key | key_type |
typedef std::vector< value_type > | container_type |
typedef value_type | ValueType |
typedef key_type | KeyType |
typedef container_type | ContainerType |
LinearInterpolation (KeyType scale=1., KeyType offset=0.) | |
Constructors and destructor. More... | |
LinearInterpolation (LinearInterpolation const &arg) | |
Copy constructor. More... | |
LinearInterpolation & | operator= (LinearInterpolation const &arg) |
Assignment operator. More... | |
~LinearInterpolation ()=default | |
Destructor. More... | |
Transformation | |
KeyType | scale_ |
KeyType | offset_ |
KeyType | inside_ |
KeyType | outside_ |
ContainerType | data_ |
KeyType | key2index (KeyType pos) const |
The transformation from "outside" to "inside" coordinates. More... | |
KeyType | index2key (KeyType pos) const |
The transformation from "inside" to "outside" coordinates. More... | |
KeyType const & | getScale () const |
Accessor. "Scale" is the difference (in "outside" units) between consecutive entries in "Data". More... | |
void | setScale (KeyType const &scale) |
Accessor. "Scale" is the difference (in "outside" units) between consecutive entries in "Data". More... | |
KeyType const & | getOffset () const |
Accessor. "Offset" is the point (in "outside" units) which corresponds to "Data[0]". More... | |
void | setOffset (KeyType const &offset) |
Accessor. "Offset" is the point (in "outside" units) which corresponds to "Data[0]". More... | |
void | setMapping (KeyType const &scale, KeyType const &inside, KeyType const &outside) |
Specifies the mapping from "outside" to "inside" coordinates by the following data: More... | |
void | setMapping (KeyType const &inside_low, KeyType const &outside_low, KeyType const &inside_high, KeyType const &outside_high) |
Specifies the mapping from "outside" to "inside" coordinates by the following data: More... | |
KeyType const & | getInsideReferencePoint () const |
Accessor. See setMapping(). More... | |
KeyType const & | getOutsideReferencePoint () const |
Accessor. See setMapping(). More... | |
KeyType | supportMin () const |
Lower boundary of the support, in "outside" coordinates. More... | |
KeyType | supportMax () const |
Upper boundary of the support, in "outside" coordinates. More... | |
Provides access to linearly interpolated values (and derivatives) from discrete data points. Values beyond the given range of data points are implicitly taken as zero.
The input is just a vector of values ("Data"). These are interpreted as the y-coordinates at the x-coordinate positions 0,...,data_.size-1.
The interpolated data can also be scaled and shifted in the x-dimension by an affine mapping. That is, we have "inside" and "outside" x-coordinates. The affine mapping can be specified in two ways:
By default the identity mapping (scale=1, offset=0) is used.
Using the value() and derivative() methods you can sample linearly interpolated values for a given x-coordinate position of the data and the derivative of the data.
typedef std::vector<value_type> container_type |
typedef container_type ContainerType |
typedef Key key_type |
typedef Value value_type |
typedef value_type ValueType |
|
inline |
Constructors and destructor.
The first argument is the scale which is applied to the arguments of value() and derivative() before looking up the interpolated values in the container. The second argument is the offset, which is subtracted before everything else.
|
inline |
Copy constructor.
|
default |
Destructor.
Performs linear resampling. The arg_value is split up and added to the data points around arg_pos.
References LinearInterpolation< Key, Value >::data_, and LinearInterpolation< Key, Value >::key2index().
Returns the interpolated derivative.
Please drop me (= the maintainer) a message if you are using this.
References LinearInterpolation< Key, Value >::data_, and LinearInterpolation< Key, Value >::key2index().
|
inline |
Returns true
if getData() is empty.
References LinearInterpolation< Key, Value >::data_.
Referenced by LinearInterpolation< Key, Value >::supportMin().
|
inline |
Returns the internal random access container from which interpolated values are being sampled.
References LinearInterpolation< Key, Value >::data_.
|
inline |
Returns the internal random access container from which interpolated values are being sampled.
References LinearInterpolation< Key, Value >::data_.
|
inline |
Accessor. See setMapping().
References LinearInterpolation< Key, Value >::inside_.
|
inline |
Accessor. "Offset" is the point (in "outside" units) which corresponds to "Data[0]".
References LinearInterpolation< Key, Value >::offset_.
|
inline |
Accessor. See setMapping().
References LinearInterpolation< Key, Value >::outside_.
|
inline |
Accessor. "Scale" is the difference (in "outside" units) between consecutive entries in "Data".
References LinearInterpolation< Key, Value >::scale_.
The transformation from "inside" to "outside" coordinates.
References LinearInterpolation< Key, Value >::offset_, and LinearInterpolation< Key, Value >::scale_.
Referenced by LinearInterpolation< Key, Value >::supportMax(), and LinearInterpolation< Key, Value >::supportMin().
The transformation from "outside" to "inside" coordinates.
References LinearInterpolation< Key, Value >::offset_, and LinearInterpolation< Key, Value >::scale_.
Referenced by LinearInterpolation< Key, Value >::addValue(), LinearInterpolation< Key, Value >::derivative(), and LinearInterpolation< Key, Value >::value().
|
inline |
|
inline |
Assigns data to the internal random access container from which interpolated values are being sampled.
SourceContainer must be assignable to ContainerType.
References LinearInterpolation< Key, Value >::data_.
|
inline |
Specifies the mapping from "outside" to "inside" coordinates by the following data:
inside_low
and outside_low
: these axis positions are mapped onto each other.inside_high
and outside_high
: these axis positions are mapped onto each other.This four argument version is just a convenience overload for the three argument version, which see.
References LinearInterpolation< Key, Value >::setMapping().
Specifies the mapping from "outside" to "inside" coordinates by the following data:
scale
: the difference in outside coordinates between consecutive values in the data vector.inside
and outside
: these x-axis positions are mapped onto each other.
For example, when you have a complicated probability distribution which is in fact centered around zero (but you cannot have negative indices in the data vector), then you can arrange things such that inside is the mean of the pre-computed, shifted density values of that distribution and outside is the centroid position of, say, a peak in the real world which you want to model by a scaled and shifted version of the probability distribution.
References LinearInterpolation< Key, Value >::inside_, LinearInterpolation< Key, Value >::offset_, LinearInterpolation< Key, Value >::outside_, and LinearInterpolation< Key, Value >::scale_.
Referenced by LinearInterpolation< Key, Value >::setMapping().
|
inline |
Accessor. "Offset" is the point (in "outside" units) which corresponds to "Data[0]".
Note: Using this invalidates the inside and outside reference points.
References LinearInterpolation< Key, Value >::offset_.
|
inline |
Accessor. "Scale" is the difference (in "outside" units) between consecutive entries in "Data".
Note: Using this invalidates the inside and outside reference points.
References LinearInterpolation< Key, Value >::scale_.
|
inline |
Upper boundary of the support, in "outside" coordinates.
References LinearInterpolation< Key, Value >::data_, and LinearInterpolation< Key, Value >::index2key().
|
inline |
Lower boundary of the support, in "outside" coordinates.
References LinearInterpolation< Key, Value >::empty(), and LinearInterpolation< Key, Value >::index2key().
Returns the interpolated value.
References LinearInterpolation< Key, Value >::data_, and LinearInterpolation< Key, Value >::key2index().
|
protected |
Referenced by LinearInterpolation< Key, Value >::addValue(), LinearInterpolation< Key, Value >::derivative(), LinearInterpolation< Key, Value >::empty(), LinearInterpolation< Key, Value >::getData(), LinearInterpolation< Key, Value >::operator=(), LinearInterpolation< Key, Value >::setData(), LinearInterpolation< Key, Value >::supportMax(), and LinearInterpolation< Key, Value >::value().
|
protected |
|
protected |
Referenced by LinearInterpolation< Key, Value >::getOffset(), LinearInterpolation< Key, Value >::index2key(), LinearInterpolation< Key, Value >::key2index(), LinearInterpolation< Key, Value >::operator=(), LinearInterpolation< Key, Value >::setMapping(), and LinearInterpolation< Key, Value >::setOffset().
|
protected |
|
protected |
Referenced by LinearInterpolation< Key, Value >::getScale(), LinearInterpolation< Key, Value >::index2key(), LinearInterpolation< Key, Value >::key2index(), LinearInterpolation< Key, Value >::operator=(), LinearInterpolation< Key, Value >::setMapping(), and LinearInterpolation< Key, Value >::setScale().