/// <summary>
        /// Extract from a set of MolecularFormula the minimal occurrence of each element found and
        /// put the element and occurrence in a new IMolecularFormula.
        /// </summary>
        /// <param name="mfSet">The set of molecularFormules to inspect</param>
        /// <returns>A IMolecularFormula containing the minimal occurrence of the elements</returns>
        /// <seealso cref="GetMaxOccurrenceElements(IMolecularFormulaSet)"/>
        public static IMolecularFormula GetMinOccurrenceElements(IMolecularFormulaSet mfSet)
        {
            var molecularFormula = mfSet.Builder.NewMolecularFormula();

            foreach (var mf in mfSet)
            {
                foreach (var isotope in mf.Isotopes)
                {
                    var element   = isotope.Element;
                    int occur_new = MolecularFormulaManipulator.GetElementCount(mf, element);
                    if (!MolecularFormulaManipulator.ContainsElement(molecularFormula, element))
                    {
                        molecularFormula.Add(mfSet.Builder.NewIsotope(element), occur_new);
                    }
                    else
                    {
                        int occur_old = MolecularFormulaManipulator.GetElementCount(molecularFormula, element);
                        if (occur_new < occur_old)
                        {
                            MolecularFormulaManipulator.RemoveElement(molecularFormula, element);
                            molecularFormula.Add(mfSet.Builder.NewIsotope(element), occur_new);
                        }
                    }
                }
            }
            return(molecularFormula);
        }
 /// <summary>
 /// In the minimal IMolecularFormula must contain all those IElement found in the
 /// minimal IMolecularFormula.
 /// </summary>
 /// <param name="formulaMax">A IMolecularFormula which contains the maximal representation of the Elements</param>
 /// <param name="formulaMin">A IMolecularFormula which contains the minimal representation of the Elements</param>
 /// <returns>True, if the correlation is valid</returns>
 private static bool ValidCorrelation(IMolecularFormula formulaMin, IMolecularFormula formulaMax)
 {
     foreach (var element in MolecularFormulaManipulator.Elements(formulaMin))
     {
         if (!MolecularFormulaManipulator.ContainsElement(formulaMax, element))
         {
             return(false);
         }
     }
     return(true);
 }
Example #3
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);
         }
     }
 }