#ifndef _EXTREME_VAL_DISTRIBUTION
#define _EXTREME_VAL_DISTRIBUTION
#include "definitions.h"
#define EULER_CONSTANT 0.5772156649015328606065120900824024310421593359399235
/*
The extreme value distribution is used to model the largest 
value from a large collection of random observations from the 
same distribution.
1. The distribution has two parameters: 
a location parameter alpha and a scale parameter beta. 
2. The cumulative distribution function (CDF) is:
exp(-exp(-(x-alpha)/beta))
3. Mean: E(x) = alpha + beta*EULER_CONSTANT
   STD(x) = beta * pi / sqrt(6)  
*/
class extremeValDistribution
{
public:
	extremeValDistribution();
	extremeValDistribution(const extremeValDistribution& other);
	extremeValDistribution& operator=(const extremeValDistribution& other);
	virtual ~extremeValDistribution();
	//fit the alpha and beta parameters from a population mean and std
	void fitParametersFromMoments(MDOUBLE exp, MDOUBLE std);

	MDOUBLE getCDF(MDOUBLE score) const;
	MDOUBLE getInverseCDF(MDOUBLE pVal) const;
private:
	MDOUBLE _alpha;
	MDOUBLE _beta;

};
#endif //_EXTREME_VAL_DISTRIBUTION
