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 <<
" --)";