Пример #1
0
        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();
            }
        }
Пример #2
0
        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();
                }
            }
        }