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); } }
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(); } }
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(); } }