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;
224 mDim(100), mCountSum(0), mCountSquareSum(0)
232 FD_DX(
"SampledDensityFunction::Clear()");
243 FD_DX(
"SampledDensityFunction::Sample(" <<
Name() <<
"): duration " << duration);
246 if(duration<0)
return;
255 if(mit->second.timeint.In(duration)) {
256 FD_DX(
"SampledDensityFunction::Sample(): range found, count");
257 mit->second.count+=1;
262 FD_DX(
"SampledDensityFunction::Sample(): insert tailored support");
274 FD_DX(
"SampledDensityFunction::Sample(): merge");
279 for(mit2++; mit2!=
mCountMap.end(); mit1++, mit2++) {
280 tpTime::Type dur = mit2->second.timeint.UB() - mit1->second.timeint.LB();
281 double area = dur * (mit2->second.count + mit1->second.count);
282 if(area < minarea || minarea <0) { minarea=area; mmit=mit1;}
288 mmit->second.timeint.Merge(mit2->second.timeint);
289 mmit->second.count += mit2->second.count;
296 FD_DX(
"SampledDensityFunction::Compile(" <<
mName <<
")");
310 tent.
timeint = mit->second.timeint;
311 tent.
value = ((double) mit->second.count);
321 if(mit->second.timeint.UB() + 1 != nit->second.timeint.LB()) {
323 tent.
timeint.
LB(mit->second.timeint.UB() + 1);
324 tent.
timeint.
UB(nit->second.timeint.LB() - 1);
337 mit->second.timeint.LBincl(
true);
338 mit->second.timeint.UB(mit->second.timeint.UB()+1);
340 if(mit->second.timeint.UB() != nit->second.timeint.LB()) {
341 double middle = 0.5*(mit->second.timeint.UB() + nit->second.timeint.LB());
343 if(dmiddle <= mit->second.timeint.LB()) dmiddle= nit->second.timeint.LB();
344 mit->second.timeint.UB(dmiddle);
345 nit->second.timeint.LB(dmiddle);
348 if(mit->second.timeint.UB() <= mit->second.timeint.LB())
349 mit->second.timeint.UB(mit->second.timeint.LB()+1);
351 mit->second.value=mit->second.value /
352 (mit->second.timeint.UB() - mit->second.timeint.LB());
370 std::stringstream ss;
371 ss <<
"Sampled Density \"" <<
mName <<
"\"";
373 ss <<
"(-- " << mit->second.timeint.Str() <<
" " << mit->second.count <<
" --)";