public void SetInferenceResults( IDictionary<string, DiscreteDistribution> results, int scenarioId, FAI.Bayesian.Observation evidence) { if (scenarioId <= 0) { throw new ArgumentOutOfRangeException("ScenarioId"); } if (results != null && results.Count != 0) { foreach (var node in _nodes) { FRandomVariable variable = (FRandomVariable)node.Tag; DiscreteDistribution distribution; // See if this variable has a result in the incoming results. if (results.TryGetValue(variable.Name, out distribution)) { bool isEvidence = evidence.TryValueForVariable(variable.Name) != null; var slices = distribution .Masses .OrderBy(p => p.Key) .Select(p => p.Value) .ToArray(); node.SetSlices(slices, scenarioId, isEvidence); } } } else { foreach (var node in _nodes) { FRandomVariable variable = (FRandomVariable)node.Tag; bool isEvidence = evidence != null && evidence.TryValueForVariable(variable.Name) != null; node.SetSlices(new double[0], scenarioId, isEvidence); } } }