/// <summary> /// </summary> /// <param name="mol"></param> /// <param name="mcss"></param> /// <param name="shouldMatchBonds"></param> /// <returns>IMolecule Set</returns> /// <exception cref="CDKException"></exception> private static IChemObjectSet <IAtomContainer> GetUncommon(IAtomContainer mol, IAtomContainer mcss, bool shouldMatchBonds) { List <int> atomSerialsToDelete = new List <int>(); var matches = CDKMCS.GetSubgraphAtomsMaps(mol, mcss, shouldMatchBonds); var mapList = matches[0]; foreach (var o in mapList) { CDKRMap rmap = (CDKRMap)o; atomSerialsToDelete.Add(rmap.Id1); } // at this point we have the serial numbers of the bonds to delete // we should get the actual bonds rather than delete by serial numbers List <IAtom> atomsToDelete = new List <IAtom>(); foreach (var serial in atomSerialsToDelete) { atomsToDelete.Add(mol.Atoms[serial]); } // now lets get rid of the bonds themselves foreach (var atom in atomsToDelete) { mol.RemoveAtomAndConnectedElectronContainers(atom); } // now we probably have a set of disconnected components // so lets get a set of individual atom containers for // corresponding to each component return(ConnectivityChecker.PartitionIntoMolecules(mol)); }
public void TestGetSubgraphAtomsMaps_IAtomContainer() { int[] result1 = { 6, 5, 7, 8, 0 }; int[] result2 = { 3, 4, 2, 1, 0 }; var mol = TestMoleculeFactory.MakeIndole(); var frag1 = TestMoleculeFactory.MakePyrrole(); AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(mol); AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(frag1); var adder = CDK.HydrogenAdder; adder.AddImplicitHydrogens(mol); adder = CDK.HydrogenAdder; adder.AddImplicitHydrogens(frag1); Aromaticity.CDKLegacy.Apply(mol); Aromaticity.CDKLegacy.Apply(frag1); var list = CDKMCS.GetSubgraphAtomsMaps(mol, frag1, true); var first = list[0]; for (int i = 0; i < first.Count; i++) { CDKRMap rmap = first[i]; Assert.AreEqual(rmap.Id1, result1[i]); Assert.AreEqual(rmap.Id2, result2[i]); } }