25 #ifndef LSST_AFW_MATH_GAUSSIAN_PROCESS_H 
   26 #define LSST_AFW_MATH_GAUSSIAN_PROCESS_H 
   28 #include <Eigen/Dense> 
   31 #include "ndarray/eigen.h" 
  114     double _before, _beginning;
 
  115     double _eigenTime, _iterationTime, _searchTime, _varianceTime, _totalTime;
 
  116     int _interpolationCount;
 
  125 template <
typename T>
 
  150     virtual T operator()(ndarray::Array<const T, 1, 1> 
const &p1,
 
  151                          ndarray::Array<const T, 1, 1> 
const &p2) 
const;
 
  163 template <
typename T>
 
  176     T operator()(ndarray::Array<const T, 1, 1> 
const &, ndarray::Array<const T, 1, 1> 
const &) 
const override;
 
  192 template <
typename T>
 
  209     T operator()(ndarray::Array<const T, 1, 1> 
const &, ndarray::Array<const T, 1, 1> 
const &) 
const override;
 
  212     double _sigma0, _sigma1;
 
  223 template <
typename T>
 
  245     void Initialize(ndarray::Array<T, 2, 2> 
const &dt);
 
  262     void findNeighbors(ndarray::Array<int, 1, 1> neighdex, ndarray::Array<double, 1, 1> dd,
 
  263                        ndarray::Array<const T, 1, 1> 
const &v, 
int n_nn) 
const;
 
  295     ndarray::Array<T, 1, 1> 
getData(
int ipt) 
const;
 
  304     void addPoint(ndarray::Array<const T, 1, 1> 
const &v);
 
  328     void getTreeNode(ndarray::Array<int, 1, 1> 
const &v, 
int dex) 
const;
 
  331     ndarray::Array<int, 2, 2> _tree;
 
  332     ndarray::Array<int, 1, 1> _inn;
 
  333     ndarray::Array<T, 2, 2> _data;
 
  335     enum { DIMENSION, LT, GEQ, PARENT };
 
  350     int _npts, _dimensions, _room, _roomStep, _masterParent;
 
  351     mutable int _neighborsFound, _neighborsWanted;
 
  357     mutable ndarray::Array<double, 1, 1> _neighborDistances;
 
  358     mutable ndarray::Array<int, 1, 1> _neighborCandidates;
 
  372     void _organize(ndarray::Array<int, 1, 1> 
const &use, 
int ct, 
int parent, 
int dir);
 
  379     int _findNode(ndarray::Array<const T, 1, 1> 
const &v) 
const;
 
  397     void _lookForNeighbors(ndarray::Array<const T, 1, 1> 
const &v, 
int consider, 
int from) 
const;
 
  402     int _testTree() 
const;
 
  417     int _walkUpTree(
int target, 
int dir, 
int root) 
const;
 
  427     void _count(
int where, 
int *ct) 
const;
 
  434     void _descend(
int root);
 
  441     void _reassign(
int target);
 
  446     double _distance(ndarray::Array<const T, 1, 1> 
const &p1, ndarray::Array<const T, 1, 1> 
const &p2) 
const;
 
  470 template <
typename T>
 
  493     GaussianProcess(ndarray::Array<T, 2, 2> 
const &dataIn, ndarray::Array<T, 1, 1> 
const &ff,
 
  515     GaussianProcess(ndarray::Array<T, 2, 2> 
const &dataIn, ndarray::Array<T, 1, 1> 
const &mn,
 
  516                     ndarray::Array<T, 1, 1> 
const &mx, ndarray::Array<T, 1, 1> 
const &ff,
 
  530     GaussianProcess(ndarray::Array<T, 2, 2> 
const &dataIn, ndarray::Array<T, 2, 2> 
const &ff,
 
  548     GaussianProcess(ndarray::Array<T, 2, 2> 
const &dataIn, ndarray::Array<T, 1, 1> 
const &mn,
 
  549                     ndarray::Array<T, 1, 1> 
const &mx, ndarray::Array<T, 2, 2> 
const &ff,
 
  572     void getData(ndarray::Array<T, 2, 2> pts, ndarray::Array<T, 1, 1> fn,
 
  573                  ndarray::Array<int, 1, 1> indices) 
const;
 
  584     void getData(ndarray::Array<T, 2, 2> pts, ndarray::Array<T, 2, 2> fn,
 
  585                  ndarray::Array<int, 1, 1> indices) 
const;
 
  605                   int numberOfNeighbors) 
const;
 
  622                      ndarray::Array<T, 1, 1> 
const &vin, 
int numberOfNeighbors) 
const;
 
  660                          int numberOfNeighbors) 
const;
 
  684                           ndarray::Array<T, 2, 2> 
const &queries) 
const;
 
  703     void batchInterpolate(ndarray::Array<T, 1, 1> mu, ndarray::Array<T, 2, 2> 
const &queries) 
const;
 
  710                           ndarray::Array<T, 2, 2> 
const &queries) 
const;
 
  716     void batchInterpolate(ndarray::Array<T, 2, 2> mu, ndarray::Array<T, 2, 2> 
const &queries) 
const;
 
  734     void addPoint(ndarray::Array<T, 1, 1> 
const &vin, 
T f);
 
  745     void addPoint(ndarray::Array<T, 1, 1> 
const &vin, ndarray::Array<T, 1, 1> 
const &f);
 
  806     int _npts, _useMaxMin, _dimensions, _room, _roomStep, _nFunctions;
 
  808     T _krigingParameter, _lambda;
 
  810     ndarray::Array<T, 1, 1> _max, _min;
 
  811     ndarray::Array<T, 2, 2> _function;
 
Key< Flag > const  & target
 
Interface for DateTime class.
 
table::Key< double > sigma1
 
The parent class of covariogram functions for use in Gaussian Process interpolation.
 
Covariogram()
construct a Covariogram assigning default values to the hyper parameters
 
Covariogram & operator=(Covariogram &&)=delete
 
Covariogram(const Covariogram &)=delete
 
virtual T operator()(ndarray::Array< const T, 1, 1 > const &p1, ndarray::Array< const T, 1, 1 > const &p2) const
Actually evaluate the covariogram function relating two points you want to interpolate from.
 
Covariogram(Covariogram &&)=delete
 
Covariogram & operator=(const Covariogram &)=delete
 
Stores values of a function sampled on an image and allows you to interpolate the function to unsampl...
 
GaussianProcessTimer & getTimes() const
Give the user acces to _timer, an object keeping track of the time spent on various processes within ...
 
void setLambda(T lambda)
set the value of the hyperparameter _lambda
 
int getDim() const
return the dimensionality of data points stored in the GaussianProcess
 
GaussianProcess & operator=(GaussianProcess &&)=delete
 
void setKrigingParameter(T kk)
Assign a value to the Kriging paramter.
 
void addPoint(ndarray::Array< T, 1, 1 > const &vin, T f)
Add a point to the pool of data used by GaussianProcess for interpolation.
 
void batchInterpolate(ndarray::Array< T, 1, 1 > mu, ndarray::Array< T, 1, 1 > variance, ndarray::Array< T, 2, 2 > const &queries) const
Interpolate a list of query points using all of the input data (rather than nearest neighbors)
 
GaussianProcess(const GaussianProcess &)=delete
 
T interpolate(ndarray::Array< T, 1, 1 > variance, ndarray::Array< T, 1, 1 > const &vin, int numberOfNeighbors) const
Interpolate the function value at one point using a specified number of nearest neighbors.
 
T selfInterpolate(ndarray::Array< T, 1, 1 > variance, int dex, int numberOfNeighbors) const
This method will interpolate the function on a data point for purposes of optimizing hyper parameters...
 
void removePoint(int dex)
This will remove a point from the data set.
 
void setCovariogram(std::shared_ptr< Covariogram< T > > const &covar)
Assign a different covariogram to this GaussianProcess.
 
void getData(ndarray::Array< T, 2, 2 > pts, ndarray::Array< T, 1, 1 > fn, ndarray::Array< int, 1, 1 > indices) const
Return a sub-sample the data underlying the Gaussian Process.
 
GaussianProcess & operator=(const GaussianProcess &)=delete
 
GaussianProcess(GaussianProcess &&)=delete
 
int getNPoints() const
return the number of data points stored in the GaussianProcess
 
This is a structure for keeping track of how long the interpolation methods spend on different parts ...
 
~GaussianProcessTimer()=default
 
void addToSearch()
Adds time to _searchTime.
 
void addToVariance()
Adds time to _varianceTime.
 
void addToIteration()
Adds time to _iterationTime.
 
void start()
Starts the timer for an individual call to an interpolation routine.
 
void display()
Displays the current values of all times and _interpolationCount.
 
GaussianProcessTimer(GaussianProcessTimer const &)=default
 
GaussianProcessTimer & operator=(GaussianProcessTimer &&)=default
 
void reset()
Resets all of the data members of GaussianProcessTimer to zero.
 
void addToEigen()
Adds time to _eigenTime.
 
GaussianProcessTimer & operator=(GaussianProcessTimer const &)=default
 
void addToTotal(int i)
Adds time to _totalTime and adds counts to _interpolationCount.
 
GaussianProcessTimer(GaussianProcessTimer &&)=default
 
The data for GaussianProcess is stored in a KD tree to facilitate nearest-neighbor searches.
 
KdTree(const KdTree &)=delete
 
KdTree & operator=(const KdTree &)=delete
 
void removePoint(int dex)
Remove a point from the tree.
 
void findNeighbors(ndarray::Array< int, 1, 1 > neighdex, ndarray::Array< double, 1, 1 > dd, ndarray::Array< const T, 1, 1 > const &v, int n_nn) const
Find the nearest neighbors of a point.
 
void addPoint(ndarray::Array< const T, 1, 1 > const &v)
Add a point to the tree.
 
void Initialize(ndarray::Array< T, 2, 2 > const &dt)
Build a KD Tree to store the data for GaussianProcess.
 
void getTreeNode(ndarray::Array< int, 1, 1 > const &v, int dex) const
Return the _tree information for a given data point.
 
int getNPoints() const
return the number of data points stored in the tree
 
KdTree & operator=(KdTree &&)=delete
 
T getData(int ipt, int idim) const
Return one element of one node on the tree.
 
a Covariogram that recreates a neural network with one hidden layer and infinite units in that layer
 
void setSigma0(double sigma0)
set the _sigma0 hyper parameter
 
~NeuralNetCovariogram() override
 
T operator()(ndarray::Array< const T, 1, 1 > const &, ndarray::Array< const T, 1, 1 > const &) const override
Actually evaluate the covariogram function relating two points you want to interpolate from.
 
void setSigma1(double sigma1)
set the _sigma1 hyper parameter
 
void setEllSquared(double ellSquared)
set the _ellSquared hyper parameter (the square of the characteristic length scale of the covariogram...
 
~SquaredExpCovariogram() override
 
T operator()(ndarray::Array< const T, 1, 1 > const &, ndarray::Array< const T, 1, 1 > const &) const override
Actually evaluate the covariogram function relating two points you want to interpolate from.
 
A base class for image defects.