public void FindCommonFragments(HasseNode newNode) { bool CompareToAll = false; bool CompareToSiblings = false; if (newNode.NodeType == HasseNode.HasseNodeTypes.ROOT) return; /* List<HasseNode> DifferenceNodes = new List<HasseNode>(); foreach (HasseEdge E in newNode.EdgesToCovered) { foreach (HasseNode N in E.LinkedNodes) { DifferenceNodes.Add(N); } } */ if (newNode.IsLeafNode()) { CompareToAll = true; } else { CompareToSiblings = true; } //CompareToAll = true; /* if (DifferenceNodes.Count() == 0) { CompareToAll = true; System.Diagnostics.Debug.WriteLine("Zero differencenodes! "); } else { System.Diagnostics.Debug.WriteLine( DifferenceNodes.Count().ToString () + " differencenodes "); } */ List<HasseNode> MCSPartners = new List<HasseNode>(); // loop all diagram nodes to see if at least one element is in common // one, because it can repeat and be involved in a match, like AXXY to BXXZ //foreach (HasseNode N in HasseDiagramNodes.NodesWithOneOfElements(Elements)) foreach (HasseNode N in HasseDiagramNodes.Values ) { if (N.NodeType != HasseNode.HasseNodeTypes.ROOT ) { // System.Diagnostics.Debug.WriteLine("each N " + ((ChemHasseNode)N).Molecule().smiles()); if (CompareToAll == true) { MCSPartners.Add(N); continue; } } } if (CompareToSiblings) { foreach (HasseNode N in newNode.GetSiblings()) { if (!MCSPartners.Contains(N)) MCSPartners.Add(N); } } float selectivity = (float)MCSPartners.Count / (float)HasseDiagramNodes.Count; // if (selectivity < 0.01) System.Diagnostics.Debugger.Break(); // System.Diagnostics.Debug.WriteLine(selectivity); foreach (HasseNode N in MCSPartners) { System.Diagnostics.Stopwatch sw = new Stopwatch() ; sw.Start(); bool debugMCS = Convert.ToBoolean(DEBUGLEVEL & DEBUG_MCS ); bool FoundMCS = newNode.GetMaxCommonFragments(newNode, N, debugMCS, FragmentInsertionQueue, MINIMUM_FRAGMENT_SIZE); long elapsed = sw.ElapsedMilliseconds; if (elapsed > 5000) System.Diagnostics.Debugger.Break(); } }
public void FindCommonFragments(HasseNode newNode) { bool CompareToAll = false; bool CompareToSiblings = false; if (newNode.NodeType == HasseNode.HasseNodeTypes.ROOT) { return; } /* * List<HasseNode> DifferenceNodes = new List<HasseNode>(); * foreach (HasseEdge E in newNode.EdgesToCovered) * { * foreach (HasseNode N in E.LinkedNodes) * { * DifferenceNodes.Add(N); * } * } */ if (newNode.IsLeafNode()) { CompareToAll = true; } else { CompareToSiblings = true; } //CompareToAll = true; /* * if (DifferenceNodes.Count() == 0) * { * CompareToAll = true; * System.Diagnostics.Debug.WriteLine("Zero differencenodes! "); * } * else * { * System.Diagnostics.Debug.WriteLine( DifferenceNodes.Count().ToString () + " differencenodes "); * } */ List <HasseNode> MCSPartners = new List <HasseNode>(); // loop all diagram nodes to see if at least one element is in common // one, because it can repeat and be involved in a match, like AXXY to BXXZ //foreach (HasseNode N in HasseDiagramNodes.NodesWithOneOfElements(Elements)) foreach (HasseNode N in HasseDiagramNodes.Values) { if (N.NodeType != HasseNode.HasseNodeTypes.ROOT) { // System.Diagnostics.Debug.WriteLine("each N " + ((ChemHasseNode)N).Molecule().smiles()); if (CompareToAll == true) { MCSPartners.Add(N); continue; } } } if (CompareToSiblings) { foreach (HasseNode N in newNode.GetSiblings()) { if (!MCSPartners.Contains(N)) { MCSPartners.Add(N); } } } float selectivity = (float)MCSPartners.Count / (float)HasseDiagramNodes.Count; // if (selectivity < 0.01) System.Diagnostics.Debugger.Break(); // System.Diagnostics.Debug.WriteLine(selectivity); foreach (HasseNode N in MCSPartners) { System.Diagnostics.Stopwatch sw = new Stopwatch(); sw.Start(); bool debugMCS = Convert.ToBoolean(DEBUGLEVEL & DEBUG_MCS); bool FoundMCS = newNode.GetMaxCommonFragments(newNode, N, debugMCS, FragmentInsertionQueue, MINIMUM_FRAGMENT_SIZE); long elapsed = sw.ElapsedMilliseconds; if (elapsed > 5000) { System.Diagnostics.Debugger.Break(); } } }