/// <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); }