bool MoleculePatternWasUsed(MoleculePattern moleculePattern, List <Molecule> molecules)
 {
     foreach (Molecule molecule in molecules)
     {
         if (molecule.stateWasUpdated && moleculePattern.Matches(molecule))
         {
             return(true);
         }
     }
     return(false);
 }
        public virtual void SetStateOfComplex(Molecule molecule1, MoleculePattern productMolecule1, Molecule molecule2, MoleculePattern productMolecule2)
        {
            //get references to the reaction center molecules in this complex pattern
            MoleculePattern productMoleculeRef1 = null, productMoleculeRef2 = null;

            foreach (string moleculeName in moleculePatterns.Keys)
            {
                foreach (MoleculePattern moleculePattern in moleculePatterns[moleculeName])
                {
                    if (productMolecule1.Matches(moleculePattern))
                    {
                        productMoleculeRef1 = moleculePattern;
                    }
                    else if (productMolecule2.Matches(moleculePattern))
                    {
                        productMoleculeRef2 = moleculePattern;
                    }
                }
            }

            //set states of attached molecules
            SetProductStatesOfAttachedMolecules(molecule1, productMoleculeRef1);
            SetProductStatesOfAttachedMolecules(molecule2, productMoleculeRef2);
        }