/** * Convert a mapping of features and their counts to a 1024-bit binary fingerprint. A single * bit is set for each pattern. * * @param features features to include * @return the continuous fingerprint * @see #makeBitFingerprint(java.util.Map, int, int) */ public static IBitFingerprint makeBitFingerprint(final Map<String,Integer> features) { return makeBitFingerprint(features, 1024, 1); }
@Override public ICountFingerprint getCountFingerprint(IAtomContainer container) throws CDKException { return FingerprinterTool.makeCountFingerprint(getRawFingerprint(container)); }
@Test public void testDifferences() throws Exception { BitSet bs1 = new BitSet(); BitSet bs2 = new BitSet(); bs1.set(0); bs2.set(0); bs1.set(1); bs1.set(2); bs2.set(2); bs1.set(3); bs2.set(4); Assert.assertEquals(3, FingerprinterTool.differences(bs1, bs2).size()); }
@Test public void pseudoAtomFingerprint() throws CDKException { final SmilesParser smipar = new SmilesParser(SilentChemObjectBuilder.getInstance()); final String query = "*1CCCC1"; final String indole = "N1CCCC1"; IAtomContainer queryMol = smipar.parseSmiles(query); IAtomContainer indoleMol = smipar.parseSmiles(indole); Fingerprinter fpr = new Fingerprinter(); BitSet fp1 = fpr.getFingerprint(queryMol); BitSet fp2 = fpr.getFingerprint(indoleMol); assertTrue(FingerprinterTool.isSubset(fp2, fp1)); assertFalse(FingerprinterTool.isSubset(fp1, fp2)); fpr.setHashPseudoAtoms(true); BitSet fp3 = fpr.getFingerprint(queryMol); BitSet fp4 = fpr.getFingerprint(indoleMol); assertFalse(FingerprinterTool.isSubset(fp4, fp3)); assertFalse(FingerprinterTool.isSubset(fp3, fp4)); }
@Test public void testListDifferences_BitSet_BitSet() throws Exception { BitSet bs1 = new BitSet(); BitSet bs2 = new BitSet(); bs1.set(0); bs2.set(0); bs1.set(1); bs1.set(2); bs2.set(2); bs1.set(3); bs2.set(4); // 2 bits set in bs1 which are clear in bs2 Assert.assertEquals(2, FingerprinterTool.listDifferences(bs2, bs1).size()); // 2 bits set in bs2 which are clear in bs1 Assert.assertEquals(1, FingerprinterTool.listDifferences(bs1, bs2).size()); }
@Test public void pseudoAtomFingerprintArom() throws CDKException { final SmilesParser smipar = new SmilesParser(SilentChemObjectBuilder.getInstance()); final String query = "*1cccc1"; final String indole = "o1cccc1"; IAtomContainer queryMol = smipar.parseSmiles(query); IAtomContainer indoleMol = smipar.parseSmiles(indole); Fingerprinter fpr = new Fingerprinter(); BitSet fp1 = fpr.getFingerprint(queryMol); BitSet fp2 = fpr.getFingerprint(indoleMol); assertTrue(FingerprinterTool.isSubset(fp2, fp1)); assertFalse(FingerprinterTool.isSubset(fp1, fp2)); fpr.setHashPseudoAtoms(true); BitSet fp3 = fpr.getFingerprint(queryMol); BitSet fp4 = fpr.getFingerprint(indoleMol); assertFalse(FingerprinterTool.isSubset(fp4, fp3)); assertFalse(FingerprinterTool.isSubset(fp3, fp4)); }
@Test public void testChebi() throws Exception { IAtomContainer searchmol = null; IAtomContainer findmol = null; String filename = "data/mdl/chebisearch.mol"; InputStream ins = this.getClass().getClassLoader().getResourceAsStream(filename); MDLV2000Reader reader = new MDLV2000Reader(ins); searchmol = reader.read(new AtomContainer()); reader.close(); filename = "data/mdl/chebifind.mol"; ins = this.getClass().getClassLoader().getResourceAsStream(filename); reader = new MDLV2000Reader(ins); findmol = reader.read(new AtomContainer()); reader.close(); IFingerprinter fingerprinter = new ExtendedFingerprinter(); BitSet superBS = fingerprinter.getBitFingerprint(findmol).asBitSet(); BitSet subBS = fingerprinter.getBitFingerprint(searchmol).asBitSet(); boolean isSubset = FingerprinterTool.isSubset(superBS, subBS); boolean isSubset2 = FingerprinterTool.isSubset(subBS, superBS); Assert.assertFalse(isSubset); Assert.assertFalse(isSubset2); }
/** * Convert a mapping of features and their counts to a binary fingerprint. A single bit is * set for each pattern. * * @param features features to include * @param len fingerprint length * @return the continuous fingerprint * @see #makeBitFingerprint(java.util.Map, int, int) */ public static IBitFingerprint makeBitFingerprint(final Map<String,Integer> features, int len) { return makeBitFingerprint(features, len, 1); }
@Test public void makeCountFingerprint() { Map<String,Integer> features = new HashMap<String,Integer>(); features.put("CCO", 1); features.put("CC", 2); features.put("C", 2); ICountFingerprint fp = FingerprinterTool.makeCountFingerprint(features); assertThat(fp.numOfPopulatedbins(), is(3)); assertThat(fp.getCountForHash("CCO".hashCode()), is(1)); assertThat(fp.getCountForHash("CC".hashCode()), is(2)); assertThat(fp.getCountForHash("C".hashCode()), is(2)); } }
@Test public void testgetBitFingerprint_IAtomContainer() throws java.lang.Exception { IFingerprinter fingerprinter = new ExtendedFingerprinter(); Assert.assertNotNull(fingerprinter); IAtomContainer mol = TestMoleculeFactory.makeIndole(); BitSet bs = fingerprinter.getBitFingerprint(mol).asBitSet(); IAtomContainer frag1 = TestMoleculeFactory.makePyrrole(); BitSet bs1 = fingerprinter.getBitFingerprint(frag1).asBitSet(); Assert.assertTrue(FingerprinterTool.isSubset(bs, bs1)); Assert.assertFalse(FingerprinterTool.isSubset(bs1, bs)); }
@Override public IBitFingerprint getBitFingerprint(IAtomContainer iAtomContainer) throws CDKException { return FingerprinterTool.makeBitFingerprint(getRawFingerprint(iAtomContainer)); }
@Test public void testExtendedFingerprinter_int_int() throws java.lang.Exception { IFingerprinter fingerprinter = new ExtendedFingerprinter(512, 7); Assert.assertNotNull(fingerprinter); IAtomContainer mol = TestMoleculeFactory.makeIndole(); BitSet bs = fingerprinter.getBitFingerprint(mol).asBitSet(); IAtomContainer frag1 = TestMoleculeFactory.makePyrrole(); BitSet bs1 = fingerprinter.getBitFingerprint(frag1).asBitSet(); Assert.assertTrue(FingerprinterTool.isSubset(bs, bs1)); Assert.assertFalse(FingerprinterTool.isSubset(bs1, bs)); }
@Test public void makeBitFingerprint() { Map<String,Integer> features = new HashMap<String,Integer>(); features.put("CCO", 1); features.put("CC", 1); features.put("C", 1); IBitFingerprint fp = FingerprinterTool.makeBitFingerprint(features, 1024, 1); assertThat(fp.cardinality(), is(3)); assertTrue(fp.get("CCO".hashCode() % 1024)); assertTrue(fp.get("CC".hashCode() % 1024)); assertTrue(fp.get("C".hashCode() % 1024)); }
@Test public void testExtendedFingerprinter_int() throws java.lang.Exception { IFingerprinter fingerprinter = new ExtendedFingerprinter(512); Assert.assertNotNull(fingerprinter); IAtomContainer mol = TestMoleculeFactory.makeIndole(); BitSet bs = fingerprinter.getBitFingerprint(mol).asBitSet(); IAtomContainer frag1 = TestMoleculeFactory.makePyrrole(); BitSet bs1 = fingerprinter.getBitFingerprint(frag1).asBitSet(); Assert.assertTrue(FingerprinterTool.isSubset(bs, bs1)); Assert.assertFalse(FingerprinterTool.isSubset(bs1, bs)); }
@Test public void testgetBitFingerprint_IAtomContainer_IRingSet_List() throws java.lang.Exception { ExtendedFingerprinter fingerprinter = new ExtendedFingerprinter(); Assert.assertNotNull(fingerprinter); IAtomContainer mol = TestMoleculeFactory.makeIndole(); IRingSet rs = Cycles.sssr(mol).toRingSet(); List<IRingSet> rslist = RingPartitioner.partitionRings(rs); BitSet bs = fingerprinter.getBitFingerprint(mol, rs, rslist).asBitSet(); IAtomContainer frag1 = TestMoleculeFactory.makePyrrole(); BitSet bs1 = fingerprinter.getBitFingerprint(frag1).asBitSet(); Assert.assertTrue(FingerprinterTool.isSubset(bs, bs1)); Assert.assertFalse(FingerprinterTool.isSubset(bs1, bs)); }
/** * @cdk.bug 853254 */ @Test public void testBug853254() throws Exception { IChemObjectBuilder builder = SilentChemObjectBuilder.getInstance(); String filename = "data/mdl/bug853254-2.mol"; InputStream ins = this.getClass().getClassLoader().getResourceAsStream(filename); MDLV2000Reader reader = new MDLV2000Reader(ins, Mode.STRICT); IAtomContainer superstructure = reader.read(builder.newAtomContainer()); filename = "data/mdl/bug853254-1.mol"; ins = this.getClass().getClassLoader().getResourceAsStream(filename); reader = new MDLV2000Reader(ins, Mode.STRICT); IAtomContainer substructure = 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(); BitSet superBS = fingerprinter.getBitFingerprint(superstructure).asBitSet(); BitSet subBS = fingerprinter.getBitFingerprint(substructure).asBitSet(); boolean isSubset = FingerprinterTool.isSubset(superBS, subBS); Assert.assertTrue(isSubset); }
@Test public void testIsSubset_BitSet_BitSet() throws java.lang.Exception { Fingerprinter fingerprinter = new Fingerprinter(); IAtomContainer mol = TestMoleculeFactory.makeIndole(); BitSet bs = fingerprinter.getBitFingerprint(mol).asBitSet(); IAtomContainer frag1 = TestMoleculeFactory.makePyrrole(); BitSet bs1 = fingerprinter.getBitFingerprint(frag1).asBitSet(); assertTrue(FingerprinterTool.isSubset(bs, bs1)); }
@Test public void testFingerprinter_int() throws java.lang.Exception { Fingerprinter fingerprinter = new Fingerprinter(512); Assert.assertNotNull(fingerprinter); IAtomContainer mol = TestMoleculeFactory.makeIndole(); BitSet bs = fingerprinter.getBitFingerprint(mol).asBitSet(); IAtomContainer frag1 = TestMoleculeFactory.makePyrrole(); BitSet bs1 = fingerprinter.getBitFingerprint(frag1).asBitSet(); assertTrue(FingerprinterTool.isSubset(bs, bs1)); }
/** * @cdk.bug 2819557 * @throws org.openscience.cdk.exception.CDKException */ @Test public void testBug2819557() throws CDKException { IAtomContainer butane = makeButane(); IAtomContainer propylAmine = makePropylAmine(); Fingerprinter fp = new Fingerprinter(); BitSet b1 = fp.getBitFingerprint(butane).asBitSet(); BitSet b2 = fp.getBitFingerprint(propylAmine).asBitSet(); Assert.assertFalse("butane should not be a substructure of propylamine", FingerprinterTool.isSubset(b2, b1)); }
@Test public void testFingerprinter_int_int() throws java.lang.Exception { Fingerprinter fingerprinter = new Fingerprinter(1024, 7); Assert.assertNotNull(fingerprinter); IAtomContainer mol = TestMoleculeFactory.makeIndole(); BitSet bs = fingerprinter.getBitFingerprint(mol).asBitSet(); IAtomContainer frag1 = TestMoleculeFactory.makePyrrole(); BitSet bs1 = fingerprinter.getBitFingerprint(frag1).asBitSet(); assertTrue(FingerprinterTool.isSubset(bs, bs1)); }