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