37 listStarts_(
pTraits<Type>::nComponents, 0)
46 listStarts_(
pTraits<Type>::nComponents, 0)
54 binWidth_(d.binWidth()),
55 listStarts_(d.listStarts())
73 scalar sumOfWeights = 0.0;
75 forAll(cmptDistribution, i)
77 sumOfWeights += cmptDistribution[i];
91 keys[
k] += listStarts_[cmpt];
107 if (cmptDistribution.empty())
111 cmptDistribution.
setSize(2, 0.0);
113 listStarts_[cmpt] =
n;
118 label listIndex = -1;
120 label& listStart = listStarts_[cmpt];
122 label testIndex =
n - listStart;
133 forAll(cmptDistribution, i)
135 newCmptDistribution[i + sOld] = cmptDistribution[i];
138 cmptDistribution = newCmptDistribution;
143 listIndex = index(cmpt,
n);
145 else if (testIndex > cmptDistribution.
size() - 1)
149 cmptDistribution.
setSize(2*cmptDistribution.
size(), 0.0);
153 listIndex = index(cmpt,
n);
157 listIndex =
n - listStart;
176 forAll(cmptDistribution, i)
178 if (cmptDistribution[i] > 0.0)
180 if (limits.
first() == -1)
201 for (
direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++)
205 scalar totalCmptWeight = totalWeight(cmpt);
232 for (
direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++)
238 if (normDist.
size() == 1)
245 && normDist[0].second()*
component(binWidth_, cmpt) > 0.5
256 scalar Sk = (normDist[0].second())*
component(binWidth_, cmpt);
258 setComponent(medianValue, cmpt) = 0.5*(xk - xkm1)/(Sk) + xkm1;
262 label previousNonZeroIndex = 0;
264 scalar cumulative = 0.0;
271 + (normDist[nD].second()*
component(binWidth_, cmpt))
280 normDist[previousNonZeroIndex].first()
285 + (normDist[nD].second()*
component(binWidth_, cmpt));
287 scalar Skm1 = cumulative;
290 (0.5 - Skm1)*(xk - xkm1)/(Sk - Skm1) + xkm1;
294 else if (
mag(normDist[nD].second()) > VSMALL)
297 normDist[nD].second()*
component(binWidth_, cmpt);
299 previousNonZeroIndex = nD;
314 const Type& valueToAdd,
318 for (
direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++)
326 label listIndex = index(cmpt,
n);
328 cmptDistribution[listIndex] +=
component(weight, cmpt);
339 for (
direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++)
343 if (cmptDistribution.empty())
348 scalar totalCmptWeight = totalWeight(cmpt);
367 normDist[i].first() =
368 (0.5 + scalar(key))*
component(binWidth_, cmpt);
370 normDist[i].second() =
377 return normDistribution;
387 for (
direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++)
391 if (cmptDistribution.empty())
413 rawDist[i].first() = (0.5 + scalar(key))*
component(binWidth_, cmpt);
415 rawDist[i].second() = cmptDistribution[
k];
419 return rawDistribution;
430 normalisedDistribution;
432 for (
direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++)
435 normalisedDistribution[cmpt];
438 cumulativeNormalisedDistribution[cmpt];
444 cumNormalisedCmpt[i].first() =
445 normalisedCmpt[i].first()
448 cumNormalisedCmpt[i].second() =
449 normalisedCmpt[i].second()*
component(binWidth_, cmpt) +
sum;
451 sum = cumNormalisedCmpt[i].second();
455 return cumulativeNormalisedDistribution;
467 for (
direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++)
477 cumRawCmpt[i].first() =
481 cumRawCmpt[i].second() = rawCmpt[i].second() +
sum;
483 sum = cumRawCmpt[i].second();
487 return cumulativeRawDistribution;
494 for (
direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++)
496 (*this)[cmpt].clear();
498 listStarts_[cmpt] = 0;
510 for (
direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++)
518 os <<
"# key normalised raw" <<
endl;
522 os << normPairs[i].first()
523 <<
' ' << normPairs[i].second()
524 <<
' ' << rawPairs[i].second()
533 for (
direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++)
544 os <<
"# key normalised raw" <<
endl;
548 os << normPairs[i].first()
549 <<
' ' << normPairs[i].second()
550 <<
' ' << rawPairs[i].second()
569 <<
"Attempted assignment to self"
575 binWidth_ = rhs.binWidth();
577 listStarts_ = rhs.listStarts();
595 is.check(
"Istream& operator>>(Istream&, Distribution<Type>&)");
605 const Distribution<Type>& d
608 os << static_cast<const List< List<scalar> >& >(d)
613 os.check(
"Ostream& operator<<(Ostream&, " "const Distribution&)");
624 const Distribution<Type>& d1,
625 const Distribution<Type>& d2
629 Distribution<Type> d(
max(d1.
binWidth(), d2.binWidth()));
633 rawDists[0] = d1.
raw();
634 rawDists[1] = d2.raw();
638 for (
direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++)
646 scalar valueToAdd = cmptRaw[rI].first();
647 scalar cmptWeight = cmptRaw[rI].second();
661 label listIndex = d.index(cmpt,
n);
663 cmptDistribution[listIndex] += cmptWeight;
668 return Distribution<Type>(d);