Katzlab dd76ab1d12 Added PTL2 Scripts
These are PTL2 files from Auden 2/9
2023-02-14 11:20:52 -05:00

65 lines
1.9 KiB
C++

// $Id: uniformDistribution.cpp 2712 2007-11-19 14:50:12Z itaymay $
#include "uniformDistribution.h"
uniformDistribution::uniformDistribution(const int numOfCategories, MDOUBLE lowerBound,
MDOUBLE upperBound) :distribution() {
_globalRate=1.0;
setUniformParameters(numOfCategories, lowerBound, upperBound);
}
//copy constructor
uniformDistribution::uniformDistribution(const uniformDistribution& other) :
_rates(other._rates),
_ratesProb(other._ratesProb),
_globalRate(other._globalRate),
_interval(other._interval),
_upperBound(other._upperBound),
_lowerBound(other._lowerBound)
{
}
void uniformDistribution::setUniformParameters(const int number_of_categories,
MDOUBLE lowerBound, MDOUBLE upperBound){
_upperBound = upperBound;
_lowerBound = lowerBound;
_interval = ((upperBound - lowerBound) / (number_of_categories+0.0));
_rates.clear();
_rates.resize(number_of_categories);
_ratesProb.erase(_ratesProb.begin(),_ratesProb.end());
_ratesProb.resize(number_of_categories, 1.0/number_of_categories);
//setting _rates[i] as the middle value of each category
for (int i = 0; i < number_of_categories; ++i) {
_rates[i] = _lowerBound + (_interval * (i + 0.5));
}
}
//returns the ith border between categories
//getBorder(0) = _lowerBound, getBorder(categories()) = _upperBound
MDOUBLE uniformDistribution::getBorder(int i) const {
return (i == categories()) ? _upperBound : (_rates[i] - (_interval/2));
}
const MDOUBLE uniformDistribution::getCumulativeProb(const MDOUBLE x) const
{
if (x<_lowerBound)
return 0;
else if (x>= _upperBound)
return 1;
else
return ((x-_lowerBound) / (_upperBound - _lowerBound));
}
void uniformDistribution::change_number_of_categories(int in_number_of_categories)
{
if (in_number_of_categories == categories())
return;
setUniformParameters(in_number_of_categories, _lowerBound, _upperBound);
}