public void TestBug853254() { var builder = CDK.Builder; var filename = "NCDK.Data.MDL.bug853254-2.mol"; var ins = ResourceLoader.GetAsStream(filename); var reader = new MDLV2000Reader(ins, ChemObjectReaderMode.Strict); IAtomContainer superstructure = (IAtomContainer)reader.Read(builder.NewAtomContainer()); filename = "NCDK.Data.MDL.bug853254-1.mol"; ins = ResourceLoader.GetAsStream(filename); reader = new MDLV2000Reader(ins, ChemObjectReaderMode.Strict); IAtomContainer substructure = (IAtomContainer)reader.Read(builder.NewAtomContainer()); // these molecules are different resonance forms of the same molecule // make sure aromaticity is detected. although some fingerprinters do this // one should not expected all implementations to do so. AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(superstructure); AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(substructure); Aromaticity.CDKLegacy.Apply(superstructure); Aromaticity.CDKLegacy.Apply(substructure); IFingerprinter fingerprinter = GetBitFingerprinter(); BitArray superBS = fingerprinter.GetBitFingerprint(superstructure).AsBitSet(); BitArray subBS = fingerprinter.GetBitFingerprint(substructure).AsBitSet(); bool isSubset = FingerprinterTool.IsSubset(superBS, subBS); Assert.IsTrue(isSubset); }
public void TestBug931608() { var builder = CDK.Builder; var filename = "NCDK.Data.MDL.bug931608-1.mol"; var ins = ResourceLoader.GetAsStream(filename); var reader = new MDLV2000Reader(ins, ChemObjectReaderMode.Strict); IAtomContainer structure1 = (IAtomContainer)reader.Read(builder.NewAtomContainer()); filename = "NCDK.Data.MDL.bug931608-2.mol"; ins = ResourceLoader.GetAsStream(filename); reader = new MDLV2000Reader(ins, ChemObjectReaderMode.Strict); IAtomContainer structure2 = (IAtomContainer)reader.Read(builder.NewAtomContainer()); AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(structure1); AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(structure2); IFingerprinter fingerprinter = GetBitFingerprinter(); BitArray bs1 = fingerprinter.GetBitFingerprint(structure1).AsBitSet(); BitArray bs2 = fingerprinter.GetBitFingerprint(structure2).AsBitSet(); // now we do the bool XOR on the two bitsets, leading // to a bitset that has all the bits set to "true" which differ // between the two original bitsets bs1.Xor(bs2); // cardinality gives us the number of "true" bits in the // result of the XOR operation. int cardinality = BitArrays.Cardinality(bs1); Assert.AreEqual(0, cardinality); }
public override void TestBug706786() { IAtomContainer superStructure = Bug706786_1(); IAtomContainer subStructure = Bug706786_2(); AddImplicitHydrogens(superStructure); AddImplicitHydrogens(subStructure); // SMARTS is now correct and D will include H atoms, CDK had this wrong // for years (had it has non-H count). Whilst you can set the optional // SMARTS flavor CDK_LEGACY this is not correct AtomContainerManipulator.SuppressHydrogens(superStructure); AtomContainerManipulator.SuppressHydrogens(subStructure); IFingerprinter fpr = GetBitFingerprinter(); IBitFingerprint superBits = fpr.GetBitFingerprint(superStructure); IBitFingerprint subBits = fpr.GetBitFingerprint(subStructure); Assert.IsTrue(BitArrays.Equals( AsBitSet(0, 11, 13, 17, 40, 48, 136, 273, 274, 278, 286, 294, 299, 301, 304, 306), superBits.AsBitSet())); Assert.IsTrue(BitArrays.Equals( AsBitSet(1, 17, 273, 274, 278, 294, 306), subBits.AsBitSet())); }
public virtual void TestBug934819() { // inlined molecules - note this test fails if implicit hydrogens are // included. generally PubCheMFingerprint can't be used for substructure filter IAtomContainer superStructure = Bug934819_2(); IAtomContainer subStructure = Bug934819_1(); AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(superStructure); AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(subStructure); AddImplicitHydrogens(superStructure); AddImplicitHydrogens(subStructure); IFingerprinter fingerprinter = GetBitFingerprinter(); BitArray superBS = fingerprinter.GetBitFingerprint(superStructure).AsBitSet(); BitArray subBS = fingerprinter.GetBitFingerprint(subStructure).AsBitSet(); Assert.IsTrue(BitArrays.Equals(subBS, And(superBS, subBS))); }
public virtual void TestBug706786() { // inlined molecules - note this test fails if implicit hydrogens are // included. generally MACCS and ESTATE can't be used for substructure filter // check those subclasses which check the bits are set IAtomContainer superStructure = Bug706786_1(); IAtomContainer subStructure = Bug706786_2(); AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(superStructure); AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(subStructure); AddImplicitHydrogens(superStructure); AddImplicitHydrogens(subStructure); IFingerprinter fingerprinter = GetBitFingerprinter(); BitArray superBS = fingerprinter.GetBitFingerprint(superStructure).AsBitSet(); BitArray subBS = fingerprinter.GetBitFingerprint(subStructure).AsBitSet(); Assert.IsTrue(BitArrays.Equals(subBS, And(superBS, subBS))); }
public void TestBug771485() { var builder = CDK.Builder; var filename = "NCDK.Data.MDL.bug771485-1.mol"; var ins = ResourceLoader.GetAsStream(filename); var reader = new MDLV2000Reader(ins, ChemObjectReaderMode.Strict); IAtomContainer structure1 = (IAtomContainer)reader.Read(builder.NewAtomContainer()); filename = "NCDK.Data.MDL.bug771485-2.mol"; ins = ResourceLoader.GetAsStream(filename); reader = new MDLV2000Reader(ins, ChemObjectReaderMode.Strict); IAtomContainer structure2 = (IAtomContainer)reader.Read(builder.NewAtomContainer()); // these molecules are different resonance forms of the same molecule // make sure aromaticity is detected. although some fingerprinters do this // one should not expected all implementations to do so. AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(structure1); AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(structure2); Aromaticity.CDKLegacy.Apply(structure1); Aromaticity.CDKLegacy.Apply(structure2); AddImplicitHydrogens(structure1); AddImplicitHydrogens(structure2); Kekulization.Kekulize(structure1); Kekulization.Kekulize(structure2); // hydrogens loaded from MDL mol files if non-query. Structure 2 has // query aromatic bonds and the hydrogen counts are not assigned - ensure // this is done here. CDK.HydrogenAdder.AddImplicitHydrogens(structure1); CDK.HydrogenAdder.AddImplicitHydrogens(structure2); IFingerprinter fingerprinter = GetBitFingerprinter(); BitArray superBS = fingerprinter.GetBitFingerprint(structure2).AsBitSet(); BitArray subBS = fingerprinter.GetBitFingerprint(structure1).AsBitSet(); bool isSubset = FingerprinterTool.IsSubset(superBS, subBS); Assert.IsTrue(isSubset); }