/// <summary>
/// Returns a distribution formed by grouping the distributions of each predicted node.
/// </summary>
protected internal Dictionary <string, object> getGroupedDistribution(MultiVote multiVoteInstance)
{
Dictionary <object, double> joinedDist = new Dictionary <object, double>();
string distributionUnit = "counts";
Dictionary <object, double> predictionDist;
object distribution;
foreach (Dictionary <object, object> prediction in multiVoteInstance.Predictions)
{
// Equivalent to:
// JSONArray predictionDist = (JSONArray) prediction.get("distribution");
predictionDist = null;
distribution = prediction["distribution"];
if (distribution is IDictionary)
{
predictionDist = (Dictionary <object, double>)distribution;
}
else if ((distribution == null) || (!(distribution is JsonArray)))
{
predictionDist = new Dictionary <object, double>();
}
else
{
predictionDist = Utils.convertDistributionArrayToMap((JsonArray)distribution);
}
// Equivalent to:
// joinedDist = Utils.mergeDistributions(joinedDist, Utils.convertDistributionArrayToMap(predictionDist));
joinedDist = Utils.mergeDistributions(joinedDist, predictionDist);
if ("counts".Equals(distributionUnit) && joinedDist.Count > BINS_LIMIT)
{
distributionUnit = "bins";
}
joinedDist = Utils.mergeBins(joinedDist, BINS_LIMIT);
}
Dictionary <string, object> distributionInfo = new Dictionary <string, object>();
distributionInfo["distribution"] = Utils.convertDistributionMapToSortedArray(joinedDist);
distributionInfo["distributionUnit"] = distributionUnit;
return(distributionInfo);
}