30 mCount(0), mMaxValue(0), mMinValue(0), mMaxTime(0), mMinTime(0), mSum(0), mSquareSum(0), mAverage(0), mVariance(0), mQuantile05(0), mQuantile95(0)
46 if(mit->second.value==0)
continue;
78 FD_DX(
"DiscreteDensityFunction::Clear()");
101 FD_DX(
"DiskreteDensityFunction::Compile(" <<
mName <<
")");
106 integral+= (mit->second.timeint.UB()-mit->second.timeint.LB())* mit->second.value;
108 if(integral==0)
return;
109 double norm=1/integral;
111 mit->second.value*= norm;
123 double time = (mit->second.timeint.UB() -1 + mit->second.timeint.LB()) / 2.0;
124 double prob = (mit->second.timeint.UB() - mit->second.timeint.LB()) * mit->second.value;
139 double len=0, area=0;
141 for(mit=
Begin() ;mit!=
End(); mit++) {
142 len = mit->second.timeint.UB()-mit->second.timeint.LB();
143 area=len* mit->second.value;
144 if(integral + area >= 0.05)
break;
145 integral = integral + area;
147 if((mit!=
End()) && (integral + area >= 0.05)) {
148 if(mit->second.value>0.01)
149 mQuantile05 = mit->second.timeint.LB() + (0.05-integral)/mit->second.value;
160 len = mit->second.timeint.UB()-mit->second.timeint.LB();
161 area=len* mit->second.value;
162 if(integral + area >= 0.05)
break;
163 integral = integral + area;
165 if(integral +area >= 0.05) {
166 if(mit->second.value>0.01)
167 mQuantile95 = mit->second.timeint.UB() - (0.05-integral)/mit->second.value;
178 if(mit!=
End())
return mit->second;
189 std::stringstream ss;
190 ss <<
"% Discrete Density \"" <<
mName <<
"\"" <<
" characteristics:" << std::endl;
196 if(mit->second.value==0)
continue;
199 double pc=mit->second.value;
201 for(; pc>0; pc-=sc) ss <<
"#";
202 ss <<
" " << std::endl;
204 std::string res= ss.str();
225 mDim(100), mCountSum(0), mCountSquareSum(0)
233 FD_DX(
"SampledDensityFunction::Clear()");
244 FD_DX(
"SampledDensityFunction::Sample(" <<
Name() <<
"): duration " << duration);
247 if(duration<0)
return;
256 if(mit->second.timeint.In(duration)) {
257 FD_DX(
"SampledDensityFunction::Sample(): range found, count");
258 mit->second.count+=1;
263 FD_DX(
"SampledDensityFunction::Sample(): insert tailored support");
275 FD_DX(
"SampledDensityFunction::Sample(): merge");
280 for(mit2++; mit2!=
mCountMap.end(); mit1++, mit2++) {
281 Time::Type dur = mit2->second.timeint.UB() - mit1->second.timeint.LB();
282 double area = dur * (mit2->second.count + mit1->second.count);
283 if(area < minarea || minarea <0) { minarea=area; mmit=mit1;}
289 mmit->second.timeint.Merge(mit2->second.timeint);
290 mmit->second.count += mit2->second.count;
297 FD_DX(
"SampledDensityFunction::Compile(" <<
mName <<
")");
311 tent.
timeint = mit->second.timeint;
312 tent.
value = ((double) mit->second.count);
322 if(mit->second.timeint.UB() + 1 != nit->second.timeint.LB()) {
324 tent.
timeint.
LB(mit->second.timeint.UB() + 1);
325 tent.
timeint.
UB(nit->second.timeint.LB() - 1);
338 mit->second.timeint.LBincl(
true);
339 mit->second.timeint.UB(mit->second.timeint.UB()+1);
341 if(mit->second.timeint.UB() != nit->second.timeint.LB()) {
342 double middle = 0.5*(mit->second.timeint.UB() + nit->second.timeint.LB());
344 if(dmiddle <= mit->second.timeint.LB()) dmiddle= nit->second.timeint.LB();
345 mit->second.timeint.UB(dmiddle);
346 nit->second.timeint.LB(dmiddle);
349 if(mit->second.timeint.UB() <= mit->second.timeint.LB())
350 mit->second.timeint.UB(mit->second.timeint.LB()+1);
352 mit->second.value=mit->second.value /
353 (mit->second.timeint.UB() - mit->second.timeint.LB());
371 std::stringstream ss;
372 ss <<
"Sampled Density \"" <<
mName <<
"\"";
374 ss <<
"(-- " << mit->second.timeint.Str() <<
" " << mit->second.count <<
" --)";
double Value(Time::Type time) const
std::map< Time::Type, Entry > mValueMap
double Variance(void) const
const TimeInterval & TimeInt(Time::Type time) const
double Average(void) const
virtual void CompileNonConst(void)
const std::string & Name(void) const
CIterator End(void) const
const Entry & EntryAt(Time::Type time) const
double Quantile05(void) const
std::map< Time::Type, Entry >::iterator Iterator
DiscreteDensityFunction(void)
CIterator Begin(void) const
void Read(TokenReader &rTr)
std::string ToString(void) const
double Quantile95(void) const
Time::Type MaxTime(void) const
std::string Str(void) const
double MinValue(void) const
double MaxValue(void) const
CIterator At(Time::Type time) const
Time::Type MinTime(void) const
std::map< Time::Type, Entry >::const_iterator CIterator
std::map< Time::Type, CountEntry >::iterator CountIterator
std::map< Time::Type, CountEntry >::const_iterator CCountIterator
std::string SStr(void) const
virtual void CompileNonConst(void)
SampledDensityFunction(void)
void Sample(Time::Type time)
std::map< Time::Type, CountEntry > mCountMap
void ReadEnd(const std::string &rLabel)
void ReadBegin(const std::string &rLabel)
void WriteFloat(const double &val)
void WriteEnd(const std::string &rLabel)
void WriteBegin(const std::string &rLabel)
std::string ExpandString(const std::string &rString, unsigned int len)
std::string ToStringFloat(Float number)