/** 
* @file PDFMultinomial.h
* @brief Multinomial distribution
* @author Erik Rodner
* @date 01/29/2008

*/
#ifndef PDFMultinomialINCLUDE
#define PDFMultinomialINCLUDE

#include "core/image/ImageT.h"
#include "core/vector/VectorT.h"
#include "core/vector/MatrixT.h"

#include "PDF.h"


namespace OBJREC {

/** Multinomial distribution */
class PDFMultinomial : public PDF
{

    protected:
	/** dimension of this random variable */
	int dimension;

	/** parameter of the multinomial containing
	    all probabilities for each component */
	// refactor-nice.pl: check this substitution
	// old: Vector theta;
	NICE::Vector theta;

	/** number of trails */
	int N;

    public:
  
	/** simple constructor */
	PDFMultinomial( int dimension );
	// refactor-nice.pl: check this substitution
	// old: PDFMultinomial( const Vector & theta, int N );
	PDFMultinomial( const NICE::Vector & theta, int N );

	/** simple destructor */
	virtual ~PDFMultinomial();

	// refactor-nice.pl: check this substitution
	// old: double getNLogDensity ( const Vector & x ) const;
	double getNLogDensity ( const NICE::Vector & x ) const;
	// refactor-nice.pl: check this substitution
	// old: double getProb ( const Vector & x ) const;
	double getProb ( const NICE::Vector & x ) const;
	int getDimension () const; 

	void sample ( NICE::VVector & samples, int count ) const;
	int sample () const;

	double getDiscreteProbability ( int index ) const;
};


} // namespace

#endif
