예제 #1
0
        private GlycanTreeForDrawer ConnectTree(List <GlycanTreeForDrawer> argList)
        {
            GlycanTreeForDrawer Tree = argList[0];

            if (argList.Count == 1)
            {
                return(argList[0]);
            }
            else
            {
                for (int i = 1; i < argList.Count; i++)
                {
                    if (Tree.GetChild.Count == 0)
                    {
                        Tree.AddChild(argList[i]);
                    }
                    else
                    {
                        GlycanTreeForDrawer GI = Tree.GetChild[0];
                        while (GI.GetChild.Count != 0)
                        {
                            GI = GI.GetChild[0];
                        }
                        GI.AddChild(argList[i]);
                    }
                }
                return(Tree);
            }
        }
예제 #2
0
        private void ConstructTree()
        {
            string[] glycans   = _iupac.Replace(" ", "").Replace("??", "-").Split('-');
            Stack    TreeStake = new Stack();

            for (int i = 0; i < glycans.Length; i++)
            {
                if (glycans[i].Contains(")("))
                {
                    TreeStake.Push(")");
                    TreeStake.Push("(");
                    TreeStake.Push(new GlycanTreeForDrawer(String2GlycanType(glycans[i])));
                }
                else if (glycans[i].Contains("("))
                {
                    List <GlycanTreeForDrawer> GI = new List <GlycanTreeForDrawer>();
                    while (TreeStake.Count != 0 && TreeStake.Peek().ToString() != ")" && TreeStake.Peek().ToString() != "(")
                    {
                        GI.Add((GlycanTreeForDrawer)TreeStake.Pop());
                    }
                    TreeStake.Push(ConnectTree(GI));


                    TreeStake.Push("(");
                    TreeStake.Push(new GlycanTreeForDrawer(String2GlycanType(glycans[i])));
                }
                else if (glycans[i].Contains(")"))
                {
                    List <GlycanTreeForDrawer> GILst = new List <GlycanTreeForDrawer>();
                    while (TreeStake.Count != 0 && TreeStake.Peek().ToString() != ")" && TreeStake.Peek().ToString() != "(")
                    {
                        GILst.Add((GlycanTreeForDrawer)TreeStake.Pop());
                    }
                    TreeStake.Push(ConnectTree(GILst));

                    TreeStake.Push(new GlycanTreeForDrawer(String2GlycanType(glycans[i])));
                    GlycanTreeForDrawer GI    = (GlycanTreeForDrawer)TreeStake.Pop();
                    GlycanTreeForDrawer child = (GlycanTreeForDrawer)TreeStake.Pop();
                    child.Parent = GI;
                    GI.AddChild(child);
                    TreeStake.Pop();                        //(
                    if (TreeStake.Peek().ToString() == ")") //One More Link
                    {
                        TreeStake.Pop();                    //)
                        child        = (GlycanTreeForDrawer)TreeStake.Pop();
                        child.Parent = GI;
                        GI.AddChild(child);
                        TreeStake.Pop();                        //(
                        if (TreeStake.Peek().ToString() == ")") //One More Link
                        {
                            TreeStake.Pop();                    //)
                            child        = (GlycanTreeForDrawer)TreeStake.Pop();
                            child.Parent = GI;
                            GI.AddChild(child);
                            TreeStake.Pop();//(
                        }
                        child        = (GlycanTreeForDrawer)TreeStake.Pop();
                        child.Parent = GI;
                        GI.AddChild(child);
                    }
                    else
                    {
                        child        = (GlycanTreeForDrawer)TreeStake.Pop();
                        child.Parent = GI;
                        GI.AddChild(child);
                    }
                    TreeStake.Push(GI);
                }
                else
                {
                    if (TreeStake.Count != 0 && TreeStake.Peek().ToString() != ")" && TreeStake.Peek().ToString() != "(")
                    {
                        GlycanTreeForDrawer GI    = new GlycanTreeForDrawer(String2GlycanType(glycans[i]));
                        GlycanTreeForDrawer child = (GlycanTreeForDrawer)TreeStake.Pop();
                        child.Parent = GI;
                        GI.AddChild(child);
                        TreeStake.Push(GI);
                    }
                    else
                    {
                        TreeStake.Push(new GlycanTreeForDrawer(String2GlycanType(glycans[i])));
                    }
                }
            }
            GTree = (GlycanTreeForDrawer)TreeStake.Pop();
            if (TreeStake.Count != 0)
            {
                throw new Exception("Steak is not zero,Parsing Error");
            }
            GTree.UpdateDistance(-1);
            if (!_isBW)
            {
                AssignColor();
            }
        }
예제 #3
0
        private void ConstructTree()
        {
            string[] glycans = _iupac.Replace(" ", "").Replace("??", "-").Split('-');
            Stack TreeStake = new Stack();
            for (int i = 0; i < glycans.Length; i++)
            {
                if (glycans[i].Contains(")("))
                {
                    TreeStake.Push(")");
                    TreeStake.Push("(");
                    TreeStake.Push(new GlycanTreeForDrawer(String2GlycanType(glycans[i])));
                }
                else if (glycans[i].Contains("("))
                {
                    List<GlycanTreeForDrawer> GI = new List<GlycanTreeForDrawer>();
                    while (TreeStake.Count != 0 && TreeStake.Peek().ToString() != ")" && TreeStake.Peek().ToString() != "(")
                    {
                        GI.Add((GlycanTreeForDrawer)TreeStake.Pop());
                    }
                    TreeStake.Push(ConnectTree(GI));

                    TreeStake.Push("(");
                    TreeStake.Push(new GlycanTreeForDrawer(String2GlycanType(glycans[i])));
                }
                else if (glycans[i].Contains(")"))
                {
                    List<GlycanTreeForDrawer> GILst = new List<GlycanTreeForDrawer>();
                    while (TreeStake.Count != 0 && TreeStake.Peek().ToString() != ")" && TreeStake.Peek().ToString() != "(")
                    {
                        GILst.Add((GlycanTreeForDrawer)TreeStake.Pop());
                    }
                    TreeStake.Push(ConnectTree(GILst));

                    TreeStake.Push(new GlycanTreeForDrawer(String2GlycanType(glycans[i])));
                    GlycanTreeForDrawer GI = (GlycanTreeForDrawer)TreeStake.Pop();
                    GlycanTreeForDrawer child = (GlycanTreeForDrawer)TreeStake.Pop();
                    child.Parent = GI;
                    GI.AddChild(child);
                    TreeStake.Pop(); //(
                    if (TreeStake.Peek().ToString() == ")") //One More Link
                    {
                        TreeStake.Pop();//)
                        child = (GlycanTreeForDrawer)TreeStake.Pop();
                        child.Parent = GI;
                        GI.AddChild(child);
                        TreeStake.Pop();//(
                        if (TreeStake.Peek().ToString() == ")") //One More Link
                        {
                            TreeStake.Pop();//)
                            child = (GlycanTreeForDrawer)TreeStake.Pop();
                            child.Parent = GI;
                            GI.AddChild(child);
                            TreeStake.Pop();//(
                        }
                        child = (GlycanTreeForDrawer)TreeStake.Pop();
                        child.Parent = GI;
                        GI.AddChild(child);
                    }
                    else
                    {
                        child = (GlycanTreeForDrawer)TreeStake.Pop();
                        child.Parent = GI;
                        GI.AddChild(child);
                    }
                    TreeStake.Push(GI);
                }
                else
                {
                    if (TreeStake.Count != 0 && TreeStake.Peek().ToString() != ")" && TreeStake.Peek().ToString() != "(")
                    {
                        GlycanTreeForDrawer GI = new GlycanTreeForDrawer(String2GlycanType(glycans[i]));
                        GlycanTreeForDrawer child = (GlycanTreeForDrawer)TreeStake.Pop();
                        child.Parent = GI;
                        GI.AddChild(child);
                        TreeStake.Push(GI);
                    }
                    else
                    {
                        TreeStake.Push(new GlycanTreeForDrawer(String2GlycanType(glycans[i])));
                    }
                }
            }
            GTree = (GlycanTreeForDrawer)TreeStake.Pop();
            if (TreeStake.Count != 0)
            {
                throw new Exception("Steak is not zero,Parsing Error");
            }
            GTree.UpdateDistance(-1);
             if(!_isBW)
            {
                AssignColor();
            }
        }