/// <summary> /// Search if the setOfAtomContainer contains the atomContainer /// </summary> /// <param name="set">ISetOfAtomContainer object where to search</param> /// <param name="atomContainer">IAtomContainer to search</param> /// <returns>True, if the atomContainer is contained</returns> private bool ExistAC(IChemObjectSet <IAtomContainer> set, IAtomContainer atomContainer) { IAtomContainer acClone = null; acClone = (IAtomContainer)atomContainer.Clone(); if (!lookingSymmetry) { /* remove all aromatic flags */ foreach (var atom in acClone.Atoms) { atom.IsAromatic = false; } foreach (var bond in acClone.Bonds) { bond.IsAromatic = false; } } for (int i = 0; i < acClone.Atoms.Count; i++) { acClone.Atoms[i].Id = "" + acClone.Atoms.IndexOf(acClone.Atoms[i]); } if (lookingSymmetry) { try { Aromaticity.CDKLegacy.Apply(acClone); } catch (CDKException e) { Console.Error.WriteLine(e.StackTrace); } } else { if (!lookingSymmetry) { /* remove all aromatic flags */ foreach (var atom in acClone.Atoms) { atom.IsAromatic = false; } foreach (var bond in acClone.Bonds) { bond.IsAromatic = false; } } } for (int i = 0; i < set.Count; i++) { var ss = set[i]; for (int j = 0; j < ss.Atoms.Count; j++) { ss.Atoms[j].Id = "" + ss.Atoms.IndexOf(ss.Atoms[j]); } try { if (!lookingSymmetry) { var qAC = QueryAtomContainerCreator.CreateSymbolChargeIDQueryContainer(acClone); if (new UniversalIsomorphismTester().IsIsomorph(ss, qAC)) { var qAC2 = QueryAtomContainerCreator.CreateSymbolAndBondOrderQueryContainer(acClone); if (new UniversalIsomorphismTester().IsIsomorph(ss, qAC2)) { return(true); } } } else { var qAC = QueryAtomContainerCreator.CreateSymbolAndChargeQueryContainer(acClone); Aromaticity.CDKLegacy.Apply(ss); if (new UniversalIsomorphismTester().IsIsomorph(ss, qAC)) { return(true); } } } catch (CDKException e1) { Console.Error.WriteLine(e1); Trace.TraceError(e1.Message); Debug.WriteLine(e1); } } return(false); }