1 #ifndef __TRADEMGEN_BAS_CONTINUOUSATTRIBUTE_HPP 2 #define __TRADEMGEN_BAS_CONTINUOUSATTRIBUTE_HPP 11 #include <stdair/stdair_date_time_types.hpp> 12 #include <stdair/service/Logger.hpp> 32 const ContinuousDistribution_T& getCumulativeDistribution()
const {
33 return _cumulativeDistribution;
37 const ContinuousInverseDistribution_T& getInverseCumulativeDistribution ()
const {
38 return _inverseCumulativeDistribution;
44 void setCumulativeDistribution (
const ContinuousDistribution_T& iCumulativeDistribution) {
45 _cumulativeDistribution = iCumulativeDistribution;
52 const T
getValue (
const stdair::Probability_T& iCumulativeProbability)
const{
55 typename ContinuousInverseDistribution_T::const_iterator it =
56 _inverseCumulativeDistribution.lower_bound (lKey);
58 stdair::Probability_T cumulativeProbabilityNextPoint =
60 T valueNextPoint = it->second;
62 if (it == _inverseCumulativeDistribution.begin()) {
63 STDAIR_LOG_DEBUG (
"Last element");
64 return valueNextPoint;
68 stdair::Probability_T cumulativeProbabilityPreviousPoint =
70 T valuePreviousPoint = it->second;
71 if (cumulativeProbabilityNextPoint == cumulativeProbabilityPreviousPoint) {
72 return valuePreviousPoint;
75 return valuePreviousPoint + (valueNextPoint - valuePreviousPoint)
76 * (iCumulativeProbability - cumulativeProbabilityPreviousPoint)
77 / (cumulativeProbabilityNextPoint - cumulativeProbabilityPreviousPoint);
84 std::ostringstream oStr;
86 for (
typename ContinuousDistribution_T::const_iterator it =
87 _cumulativeDistribution.begin();
88 it != _cumulativeDistribution.end(); ++it, ++idx) {
92 oStr << it->first <<
":" 100 std::ostringstream oStr;
101 for (
typename ContinuousInverseDistribution_T::const_iterator it =
102 _inverseCumulativeDistribution.begin();
103 it != _inverseCumulativeDistribution.end(); ++it) {
105 <<
" value: " << it->second << std::endl;
117 : _cumulativeDistribution (iCumulativeDistribution) {
123 : _cumulativeDistribution (iContinuousAttribute._cumulativeDistribution),
124 _inverseCumulativeDistribution (iContinuousAttribute._inverseCumulativeDistribution) {
133 for (
typename ContinuousDistribution_T::iterator itCumulativeDistribution =
134 _cumulativeDistribution.begin();
135 itCumulativeDistribution != _cumulativeDistribution.end();
136 ++itCumulativeDistribution) {
137 _inverseCumulativeDistribution.
138 insert (
typename ContinuousInverseDistribution_T::
139 value_type (itCumulativeDistribution->second,
140 itCumulativeDistribution->first));
148 ContinuousDistribution_T _cumulativeDistribution;
151 ContinuousInverseDistribution_T _inverseCumulativeDistribution;
155 #endif // __STDAIR_BAS_CONTINUOUSATTRIBUTE_HPP
const std::string displayCumulativeDistribution() const
stdair::Probability_T DictionaryKey_T
const std::string displayInverseCumulativeDistribution() const
std::multimap< T, DictionaryKey_T > ContinuousDistribution_T
void determineInverseCumulativeDistributionFromCumulativeDistribution()
ContinuousAttribute(const ContinuousDistribution_T &iCumulativeDistribution)
static const DictionaryKey_T valueToKey(const stdair::Probability_T)
std::multimap< DictionaryKey_T, T > ContinuousInverseDistribution_T
const T getValue(const stdair::Probability_T &iCumulativeProbability) const
ContinuousAttribute(const ContinuousAttribute &iContinuousAttribute)
virtual ~ContinuousAttribute()
static const stdair::Probability_T keyToValue(const DictionaryKey_T)