public virtual void TestSort_Coefficients()
        {
            IChemObjectSet <T> set = (IChemObjectSet <T>)NewChemObject();

            IChemObjectBuilder builder = set.Builder;

            T a = NewContainerObject();
            T b = NewContainerObject();

            a.Atoms.Add(builder.NewAtom("C"));
            a.Atoms.Add(builder.NewAtom("C"));

            b.Atoms.Add(builder.NewAtom("C"));

            set.Add(a, 1);
            set.Add(b, 2);

            Assert.AreEqual(a, set[0]);
            Assert.AreEqual(1D, set.GetMultiplier(0));
            Assert.AreEqual(b, set[1]);
            Assert.AreEqual(2D, set.GetMultiplier(1));

            // sort by atom container count
            var orderedSet = set.OrderBy(n => n, new ComparerByCoefficients());

            AssertAreOrderLessEqual(
                new[] { a, b }.Cast <IChemObject>(),
                set.Cast <IChemObject>());
            Assert.IsTrue(Compares.AreDeepEqual(
                              new[] { 1D, 2D },
                              new[] { set.GetMultiplier(0), set.GetMultiplier(1) }));
        }
        public virtual void TestSetMultiplier_int_Double()
        {
            IChemObjectSet <T> som = (IChemObjectSet <T>)NewChemObject();

            som.Add(NewContainerObject());

            Assert.AreEqual(1.0, som.GetMultiplier(0).Value, 0.00001);
            som.SetMultiplier(0, 2.0);
            Assert.AreEqual(2.0, som.GetMultiplier(0).Value, 0.00001);
        }
        public virtual void TestSetMultiplier_IAtomContainer_Double()
        {
            IChemObjectSet <T> som = (IChemObjectSet <T>)NewChemObject();
            T container            = NewContainerObject();

            som.Add(container);

            Assert.AreEqual(1.0, som.GetMultiplier(container).Value, 0.00001);
            som.SetMultiplier(container, 2.0);
            Assert.AreEqual(2.0, som.GetMultiplier(container).Value, 0.00001);
        }
示例#4
0
 /// <summary>
 /// Writes a MoleculeSet to an Stream for the reaction.
 /// </summary>
 /// <param name="som">The MoleculeSet that is written to an Stream</param>
 private void WriteAtomContainerSet(IChemObjectSet <IAtomContainer> som)
 {
     for (int i = 0; i < som.Count; i++)
     {
         IAtomContainer mol = som[i];
         for (int j = 0; j < som.GetMultiplier(i); j++)
         {
             StringWriter sw = new StringWriter();
             writer.Write("$MOL");
             writer.Write('\n');
             MDLV2000Writer mdlwriter = null;
             try
             {
                 mdlwriter = new MDLV2000Writer(sw);
             }
             catch (Exception ex)
             {
                 Trace.TraceError(ex.Message);
                 Debug.WriteLine(ex);
                 throw new CDKException("Exception while creating MDLWriter: " + ex.Message, ex);
             }
             mdlwriter.Write(mol);
             mdlwriter.Close();
             writer.Write(sw.ToString());
         }
     }
 }
        public virtual void TestAddAtomContainer_IAtomContainer_Double()
        {
            IChemObjectSet <T> som = (IChemObjectSet <T>)NewChemObject();

            som.Add(NewContainerObject(), 2.0);
            Assert.AreEqual(1, som.Count);
            Assert.AreEqual(2.0, som.GetMultiplier(0).Value, 0.00001);
        }
        public virtual void TestGetMultiplier_IAtomContainer()
        {
            IChemObjectSet <T> som = (IChemObjectSet <T>)NewChemObject();

            som.Add(NewContainerObject());

            Assert.AreEqual(-1.0, som.GetMultiplier(NewContainerObject()).Value, 0.00001);
        }
        public virtual void TestSetMultipliers_arrayDouble()
        {
            IChemObjectSet <T> som = (IChemObjectSet <T>)NewChemObject();
            T container            = NewContainerObject();

            som.Add(container);
            T container2 = NewContainerObject();

            som.Add(container2);

            Assert.AreEqual(1.0, som.GetMultiplier(0).Value, 0.00001);
            Assert.AreEqual(1.0, som.GetMultiplier(1).Value, 0.00001);
            double?[] multipliers = new double?[2];
            multipliers[0] = 2.0;
            multipliers[1] = 3.0;
            som.SetMultipliers(multipliers);
            Assert.AreEqual(2.0, som.GetMultiplier(0).Value, 0.00001);
            Assert.AreEqual(3.0, som.GetMultiplier(1).Value, 0.00001);
        }
        /// <summary>
        /// </summary>
        /// <param name="set">The collection of IAtomContainer objects</param>
        /// <returns>The summed formal charges of all atoms in this set.</returns>
        public static double GetTotalFormalCharge(IChemObjectSet <IAtomContainer> set)
        {
            int charge = 0;

            for (int i = 0; i < set.Count; i++)
            {
                int    thisCharge = AtomContainerManipulator.GetTotalFormalCharge(set[i]);
                double stoich     = set.GetMultiplier(i).Value;
                charge += (int)(stoich * thisCharge);
            }
            return(charge);
        }
        public virtual void TestCloneMultiplier()
        {
            IChemObjectSet <T> containerSet = (IChemObjectSet <T>)NewChemObject();

            containerSet.Add(NewContainerObject(), 2);
            object clone = containerSet.Clone();

            Assert.IsTrue(clone is IChemObjectSet <T>);
            IChemObjectSet <T> clonedSet = (IChemObjectSet <T>)clone;

            Assert.AreNotSame(containerSet, clonedSet);
            Assert.AreEqual(2, containerSet.GetMultiplier(0).Value);
            Assert.AreEqual(2, clonedSet.GetMultiplier(0).Value);
        }
        public virtual void TestSortAtomContainers_WithMuliplier()
        {
            IChemObjectSet <T> som = (IChemObjectSet <T>)NewChemObject();
            T ac1 = NewContainerObject();

            som.Add(ac1, 2.0);
            ac1.SetProperty("multiplierSortCode", "2");
            T ac2 = NewContainerObject();

            som.Add(ac2, 1.0);
            ac2.SetProperty("multiplierSortCode", "1");
            som.Sort(new CodeComparer());
            Assert.AreEqual(2, som.Count);
            T newFirstAC = som[0];

            Assert.AreEqual(newFirstAC.GetProperty <object>("multiplierSortCode"), "1");
            // OK, sorting worked as intended
            // The multiplier should have been resorted too:
            Assert.AreEqual(1.0, som.GetMultiplier(newFirstAC).Value, 0.00001);
        }