Bevisuali.UX.MainWindow.OnScenarioInferenceUpdated C# (CSharp) Method

OnScenarioInferenceUpdated() private method

private OnScenarioInferenceUpdated ( IScenario scenario ) : void
scenario IScenario
return void
        void OnScenarioInferenceUpdated(IScenario scenario)
        {
            if (scenario.BayesianNetwork != Model.BayesianNetwork)
            {
                // Old inference result.
                return;
            }

            // Grab a copy of the results.
            var marginals = scenario.PosteriorMarginals;
            FObservation evidence = scenario.Evidence;
            var abbreviations = scenario.Workbench.BayesianNetworkVariableAbbreviations;

            Dispatcher.Invoke(delegate
            {
                // Make sure the scenario still exists by the time this is invoked.
                if (!Model.Scenarios.Any(s => s.Id == scenario.Id))
                {
                    return;
                }

                // Recover scenario id.
                int scenarioId = Convert.ToInt32(scenario.Id);

                // Update graph inspector with posteriors.
                xGraphInspector.SetInferenceResults(
                    scenario.PosteriorMarginals,
                    scenarioId,
                    evidence);

                // Update distribution inspectors.
                if (Model.SelectedVariable != null && scenario.Id == "1")
                {
                    var selectedVariable
                        = Model
                        .BayesianNetwork
                        .GetVariable(Model.SelectedVariable);
                    var selectedVariableParents
                        = selectedVariable
                        .Parents
                        .Select(p => Model.BayesianNetwork.GetVariable(p))
                        .ToList();

                    DiscreteDistribution distribution;
                    scenario.PosteriorMarginals.TryGetValue(
                        Model.SelectedVariable,
                        out distribution);

                    xMarginalPosteriorDistributions.SetDistribution(
                        selectedVariable,
                        abbreviations,
                        selectedVariableParents,
                        distribution);
                }

                WriteMessage("updating posteriors...");
            });
        }