@Override public void and(IBitFingerprint fingerprint) { if (bitset.size() != fingerprint.size()) { throw new IllegalArgumentException("Fingerprints must have same size"); } if (fingerprint instanceof BitSetFingerprint) { bitset.and(((BitSetFingerprint) fingerprint).bitset); } else { for (int i = 0; i < bitset.size(); i++) { bitset.set(i, bitset.get(i) && fingerprint.get(i)); } } }
public BitSetFingerprint(IBitFingerprint fingerprint) { if (fingerprint instanceof BitSetFingerprint) { bitset = (BitSet) ((BitSetFingerprint) fingerprint).bitset.clone(); } else { BitSet bitSet = new BitSet(); for (int i = 0; i < fingerprint.size(); i++) { bitSet.set(i, fingerprint.get(i)); } this.bitset = bitSet; } }
@Override public void or(IBitFingerprint fingerprint) { if (bitset.size() != fingerprint.size()) { throw new IllegalArgumentException("Fingerprints must have same size"); } if (fingerprint instanceof BitSetFingerprint) { bitset.or(((BitSetFingerprint) fingerprint).bitset); } else { for (int i = 0; i < bitset.size(); i++) { bitset.set(i, bitset.get(i) || fingerprint.get(i)); } } }
public IntArrayFingerprint(IBitFingerprint fingerprint) { // if it is an IntArrayFingerprint we can do faster (System.arraycopy) if (fingerprint instanceof IntArrayFingerprint) { IntArrayFingerprint iaFP = (IntArrayFingerprint) fingerprint; trueBits = new int[iaFP.trueBits.length]; System.arraycopy(iaFP.trueBits, 0, trueBits, 0, trueBits.length); } else { trueBits = new int[fingerprint.cardinality()]; int index = 0; for (int i = 0; i < fingerprint.size(); i++) { if (fingerprint.get(i)) { trueBits[index++] = i; } } } }
@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 testCreate() { assertFalse(bitsetFP.get(0)); }
@Test public void testFunctionalGroupsBinary() throws Exception { IFingerprinter printer = new SubstructureFingerprinter(); Assert.assertEquals(307, printer.getSize()); SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance()); IAtomContainer mol1 = sp.parseSmiles("c1ccccc1CCC"); IBitFingerprint fp = printer.getBitFingerprint(mol1); Assert.assertNotNull(fp); Assert.assertTrue(fp.get(273)); Assert.assertTrue(fp.get(0)); Assert.assertTrue(fp.get(1)); Assert.assertFalse(fp.get(100)); }
@Test public void testUserFunctionalGroups() throws Exception { String[] smarts = {"c1ccccc1", "[CX4H3][#6]", "[CX2]#[CX2]"}; IFingerprinter printer = new SubstructureFingerprinter(smarts); Assert.assertEquals(3, printer.getSize()); SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance()); IAtomContainer mol1 = sp.parseSmiles("c1ccccc1CCC"); IBitFingerprint fp = printer.getBitFingerprint(mol1); Assert.assertNotNull(fp); Assert.assertTrue(fp.get(0)); Assert.assertTrue(fp.get(1)); Assert.assertFalse(fp.get(2)); mol1 = sp.parseSmiles("C=C=C"); fp = printer.getBitFingerprint(mol1); Assert.assertNotNull(fp); Assert.assertFalse(fp.get(0)); Assert.assertFalse(fp.get(1)); Assert.assertFalse(fp.get(2)); }
/** * @cdk.bug 2871303 * * While this test fails, Daylight says that the * SMARTS pattern used for vinylogous ester should * match benzaldehyde twice. So according to the * supplied definition this answer is actually correct. */ @Ignore("the SMARTS pattern vinylogous ester is not strict enough - we can not fix this") public void testVinylogousEster() throws Exception { String benzaldehyde = "c1ccccc1C=O"; IFingerprinter fprinter = new SubstructureFingerprinter(); SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance()); IBitFingerprint fp = fprinter.getBitFingerprint(sp.parseSmiles(benzaldehyde)); Assert.assertFalse("Bit 136 (vinylogous ester) is set to true", fp.get(136)); }
@Test public void testFingerprint() throws Exception { SmilesParser parser = new SmilesParser(SilentChemObjectBuilder.getInstance()); IFingerprinter printer = new EStateFingerprinter(); IBitFingerprint bs1 = printer.getBitFingerprint(parser.parseSmiles("C=C-C#N")); IBitFingerprint bs2 = printer.getBitFingerprint(parser.parseSmiles("C=CCC(O)CC#N")); Assert.assertEquals(79, printer.getSize()); Assert.assertTrue(bs1.get(7)); Assert.assertTrue(bs1.get(10)); Assert.assertTrue(FingerprinterTool.isSubset(bs2.asBitSet(), bs1.asBitSet())); }