/**
* @file LHCumulativeGauss.h
* @author Erik Rodner
* @date 02/17/2010

*/
#ifndef _NICE_OBJREC_LHCUMULATIVEGAUSSINCLUDE
#define _NICE_OBJREC_LHCUMULATIVEGAUSSINCLUDE

#include "LikelihoodFunction.h"

namespace OBJREC
{

/** @class LHCumulativeGauss
 * cumulative gauss function
 *
 * @author Erik Rodner
 */
class LHCumulativeGauss : public LikelihoodFunction
{

  protected:
    double lengthScale;
    double bias;

  public:

    /** a length scale of the likelihood function correspondes
     * to a an inverse scaling of the gp prior, thus you
     * could optimize this parameter by optimizing a hyperparameter
     * of the kernel function */
    LHCumulativeGauss ( double lengthScale = 1.0, double bias = 0.0 );

    /** needed for hyperparameter estimation */
    double thirdgrad ( double y, double f ) const;
    double hessian ( double y, double f ) const;
    double gradient ( double y, double f ) const;
    double logLike ( double y, double f ) const;
    double likelihood ( double y, double f ) const;

    double predictAnalytically ( double fmean, double fvariance ) const;

    static double stdNormPDF ( double x );
};

}

#endif
