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);
        }
Esempio n. 3
0
        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);
        }