1 #ifndef __STDAIR_BAS_CATEGORICALATTRIBUTE_HPP
2 #define __STDAIR_BAS_CATEGORICALATTRIBUTE_HPP
11 #include <stdair/STDAIR_Types.hpp>
12 #include <stdair/basic/DictionaryManager.hpp>
41 const ProbabilityMassFunction_T& getProbabilityMassFunction()
const {
42 return _probabilityMassFunction;
48 const InverseCumulativeDistribution_T& getInverseCumulativeDistribution()
const {
49 return _inverseCumulativeDistribution;
56 void setProbabilityMassFunction (
const ProbabilityMassFunction_T& iProbabilityMassFunction) {
57 _probabilityMassFunction = iProbabilityMassFunction;
67 const T&
getValue (
const Probability_T& iCumulativeProbability)
const {
70 DictionaryManager::valueToKey (iCumulativeProbability);
72 InverseCumulativeDistribution_T::const_iterator itT =
73 _inverseCumulativeDistribution.find (lKey);
75 if (itT == _inverseCumulativeDistribution.end()) {
76 std::ostringstream oStr;
77 oStr <<
"The following cumulative probability is out of range: "
79 throw IndexOutOfRangeException (oStr.str());
92 std::ostringstream oStr;
95 for (
typename ProbabilityMassFunction_T::const_iterator it =
96 _probabilityMassFunction.begin();
97 it != _probabilityMassFunction.end(); ++it, ++idx) {
101 oStr << it->first <<
":"
102 << DictionaryManager::keyToValue (it->second);
112 std::ostringstream oStr;
114 for (
typename InverseCumulativeDistribution_T::const_iterator it =
115 _inverseCumulativeDistribution.begin();
116 it != _inverseCumulativeDistribution.end(); ++it) {
117 oStr <<
"cumulative prob: " << DictionaryManager::keyToValue (it->first)
118 <<
" value: " << it->second << std::endl;
130 : _probabilityMassFunction (iProbabilityMassFunction) {
143 : _probabilityMassFunction (iCategoricalAttribute._probabilityMassFunction) {
159 Probability_T cumulative_probability_so_far = 0.0;
160 for (
typename ProbabilityMassFunction_T::const_iterator
161 itProbabilityMassFunction = _probabilityMassFunction.begin();
162 itProbabilityMassFunction != _probabilityMassFunction.end();
163 ++itProbabilityMassFunction) {
165 Probability_T attribute_probability_mass =
166 DictionaryManager::keyToValue (itProbabilityMassFunction->second);
168 if (attribute_probability_mass > 0) {
169 T attribute_value = itProbabilityMassFunction->first;
170 cumulative_probability_so_far += attribute_probability_mass;
173 DictionaryManager::valueToKey (cumulative_probability_so_far);
176 _inverseCumulativeDistribution.
177 insert (
typename InverseCumulativeDistribution_T::
178 value_type (lKey, attribute_value));
188 ProbabilityMassFunction_T _probabilityMassFunction;
193 InverseCumulativeDistribution_T _inverseCumulativeDistribution;
196 #endif // __STDAIR_BAS_CATEGORICALATTRIBUTE_HPP
std::map< DictionaryKey_T, T > InverseCumulativeDistribution_T
CategoricalAttribute(const CategoricalAttribute &iCategoricalAttribute)
CategoricalAttribute(const ProbabilityMassFunction_T &iProbabilityMassFunction)
void determineInverseCumulativeDistributionFromProbabilityMassFunction()
std::map< T, DictionaryKey_T > ProbabilityMassFunction_T
Class modeling the distribution of values that can be taken by a categorical attribute.
const std::string displayProbabilityMassFunction() const
stdair::Probability_T DictionaryKey_T
const T & getValue(const Probability_T &iCumulativeProbability) const
virtual ~CategoricalAttribute()
const std::string displayInverseCumulativeDistribution() const