public void Update(ITableNGlycanProxy glycan, ITableNGlycanProxy source) { if (glycan is ITableNGlycanMassProxy && source is ITableNGlycanMassProxy) { (glycan as ITableNGlycanMassProxy).AddRangeMass((source as ITableNGlycanMassProxy).GetMass()); (glycan as ITableNGlycanMassProxy).AddCoreRangeMass((source as ITableNGlycanMassProxy).GetCoreMass()); } else { throw new InvalidCastException("Proxy can not cast to MassProxy"); } }
public List <IGlycan> Create() { Queue <ITableNGlycanProxy> queue = new Queue <ITableNGlycanProxy>(); Dictionary <string, ITableNGlycanProxy> visited = new Dictionary <string, ITableNGlycanProxy>(); queue.Enqueue(root); List <IGlycan> glycans = new List <IGlycan>(); while (queue.Count > 0) { ITableNGlycanProxy node = queue.Dequeue(); foreach (MonosaccharideType suger in Enum.GetValues(typeof(MonosaccharideType))) { List <ITableNGlycan> neighbors = node.Growth(suger); foreach (ITableNGlycan n in neighbors) { string id = n.GetName(); try { if (generator.Criteria(n)) { if (!visited.ContainsKey(id)) { ITableNGlycanProxy proxy = generator.Generate(n); queue.Enqueue(proxy); visited.Add(id, proxy); glycans.Add(proxy); } generator.Update(visited[id], node); } } catch (Exception e) { Console.WriteLine("Exception occurs at " + id); Console.WriteLine(e.Message); } } } } return(glycans); }
public GeneralTableNGlycanCreator(ITableNGlycanProxyGenerator generator, ITableNGlycanProxy glycan) { this.generator = generator; root = glycan; }