public virtual void TestRemoveAtomContainer_IAtomContainer()
        {
            IChemObjectSet <T> som = (IChemObjectSet <T>)NewChemObject();
            T ac1 = NewContainerObject();
            T ac2 = NewContainerObject();

            som.Add(ac1);
            som.Add(ac2);
            som.Remove(ac1);
            Assert.AreEqual(1, som.Count);
            Assert.AreEqual(ac2, som[0]);
        }
Пример #2
0
 private static void filterInorganicsFromIterator(IChemObjectSet <IAtomContainer> rxnIt)
 {
     for (int i = rxnIt.Count - 1; i >= 0; --i)
     {
         var sub     = rxnIt[i];
         var formula = MolecularFormulaManipulator.GetMolecularFormula(sub);
         if (!MolecularFormulaManipulator.ContainsElement(formula, ChemicalElement.C))
         {
             rxnIt.Remove(sub);
         }
     }
 }
        public virtual void TestBug2679343()
        {
            IChemObjectSet <T> som = (IChemObjectSet <T>)NewChemObject();
            T ac1 = NewContainerObject();
            T ac2 = NewContainerObject();

            som.Add(ac1);
            som.Add(ac2);
            som.Add(ac2);
            Assert.AreEqual(3, som.Count);
            som.Remove(ac2);
            Assert.AreEqual(1, som.Count);
        }
 public static void RemoveElectronContainer(IChemObjectSet <IAtomContainer> set, IElectronContainer electrons)
 {
     foreach (var atomContainer in set)
     {
         if (atomContainer.Contains(electrons))
         {
             atomContainer.Remove(electrons);
             var molecules = ConnectivityChecker.PartitionIntoMolecules(atomContainer);
             if (molecules.Count > 1)
             {
                 set.Remove(atomContainer);
                 for (int k = 0; k < molecules.Count; k++)
                 {
                     set.Add(molecules[k]);
                 }
             }
             return;
         }
     }
 }
        internal IAtomContainer Generate2(IChemObjectSet <IAtomContainer> atomContainers)
        {
            int  iteration      = 0;
            bool structureFound = false;

            do
            {
                iteration++;
                bool bondFormed;
                do
                {
                    bondFormed = false;
                    var atomContainersArray = atomContainers.ToList();
                    for (var atomContainersArrayIndex = 0; atomContainersArrayIndex < atomContainersArray.Count; atomContainersArrayIndex++)
                    {
                        var ac = atomContainersArray[atomContainersArrayIndex];
                        if (ac == null)
                        {
                            continue;
                        }

                        var atoms = ac.Atoms.ToList(); // ToList is required because some atoms are added to ac.Atoms in the loop.
                        foreach (var atom in atoms)
                        {
                            if (!satCheck.IsSaturated(atom, ac))
                            {
                                var partner = GetAnotherUnsaturatedNode(atom, ac, atomContainers);
                                if (partner != null)
                                {
                                    var toadd = AtomContainerSetManipulator.GetRelevantAtomContainer(atomContainers, partner);
                                    var cmax1 = satCheck.GetCurrentMaxBondOrder(atom, ac);
                                    var cmax2 = satCheck.GetCurrentMaxBondOrder(partner, toadd);
                                    var max   = Math.Min(cmax1, cmax2);
                                    var order = Math.Min(Math.Max(1, max), 3); //(double)Math.Round(Math.Random() * max)
                                    Debug.WriteLine($"cmax1, cmax2, max, order: {cmax1}, {cmax2}, {max}, {order}");
                                    if (toadd != ac)
                                    {
                                        var indexToRemove = atomContainersArray.IndexOf(toadd);
                                        if (indexToRemove != -1)
                                        {
                                            atomContainersArray[indexToRemove] = null;
                                        }
                                        atomContainers.Remove(toadd);
                                        ac.Add(toadd);
                                    }
                                    ac.Bonds.Add(ac.Builder.NewBond(atom, partner, BondManipulator.CreateBondOrder(order)));
                                    bondFormed = true;
                                }
                            }
                        }
                    }
                } while (bondFormed);
                if (atomContainers.Count == 1 &&
                    satCheck.IsSaturated(atomContainers[0]))
                {
                    structureFound = true;
                }
            } while (!structureFound && iteration < 5);
            if (atomContainers.Count == 1 && satCheck.IsSaturated(atomContainers[0]))
            {
                structureFound = true;
            }
            if (!structureFound)
            {
                return(null);
            }
            return(atomContainers[0]);
        }