public void SetInterestVariables(IEnumerable<string> variableNames)
{
if (variableNames == null)
{
// Reset.
foreach (var node in _nodes)
{
if (node.State == GraphNode.StateEnum.Minimized)
{
node.State = GraphNode.StateEnum.Idling;
}
}
foreach (var edge in _edges)
{
edge.State = GraphEdge.StateEnum.Normal;
}
_interestVariables = null;
}
else
{
// Minimize non-interest nodes. Reset interest nodes.
List<GraphNode> nodesNotMinimized = new List<GraphNode>();
foreach (var node in _nodes)
{
FRandomVariable rv = (FRandomVariable)node.Tag;
if (variableNames.Contains(rv.Name))
{
nodesNotMinimized.Add(node);
if (node.State == GraphNode.StateEnum.Minimized)
{
node.State = GraphNode.StateEnum.Idling;
}
}
else
{
if (node.State != GraphNode.StateEnum.Minimized
&& node.State == GraphNode.StateEnum.Idling)
{
node.State = GraphNode.StateEnum.Minimized;
_edges
.Where(e => e.To == node || e.From == node)
.ForAll(n => n.State = GraphEdge.StateEnum.Minimized);
}
}
}
// Ensure edges that are between non-minimized nodes are set
// to normal state.
foreach (var edge in _edges)
{
if (nodesNotMinimized.Contains(edge.To)
&& nodesNotMinimized.Contains(edge.From))
{
edge.State = GraphEdge.StateEnum.Normal;
}
}
// Store.
_interestVariables = variableNames.ToList();
}
}