/** {@inheritDoc} */ @Override public BitSet getFingerprint(IAtomContainer mol) throws CDKException { return getBitFingerprint(mol).asBitSet(); } }
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; } } } }
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; } }
/** * Evaluates Tanimoto coefficient for two <code>IBitFingerprint</code>. * <p> * @param fingerprint1 fingerprint for the first molecule * @param fingerprint2 fingerprint for the second molecule * @return The Tanimoto coefficient * @throws IllegalArgumentException if bitsets are not of the same length */ public static double calculate(IBitFingerprint fingerprint1, IBitFingerprint fingerprint2) { if (fingerprint1.size() != fingerprint2.size()) { throw new IllegalArgumentException("Fingerprints must have the same size"); } int cardinality1 = fingerprint1.cardinality(); int cardinality2 = fingerprint2.cardinality(); // If the fingerprint is an IntArrayFingeprint that could mean a big // fingerprint so let's take the safe way out and create a // new IntArrayfingerprint IBitFingerprint one_and_two = fingerprint1 instanceof IntArrayFingerprint ? new IntArrayFingerprint( fingerprint1) : new BitSetFingerprint(fingerprint1); one_and_two.and(fingerprint2); double cardinalityCommon = one_and_two.cardinality(); return cardinalityCommon / (cardinality1 + cardinality2 - cardinalityCommon); }
@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())); }
@Test public void testgetBitFingerprint_IAtomContainer() throws java.lang.Exception { Fingerprinter fingerprinter = new Fingerprinter(); IAtomContainer mol = TestMoleculeFactory.makeIndole(); IBitFingerprint bs = fingerprinter.getBitFingerprint(mol); Assert.assertNotNull(bs); Assert.assertEquals(fingerprinter.getSize(), bs.size()); }
@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 protonsDontCauseNPE() throws Exception { IAtomContainer proton = new AtomContainer(1, 0, 0, 0); proton.addAtom(atom("H", +1, 0)); CircularFingerprinter circ = new CircularFingerprinter(CircularFingerprinter.CLASS_FCFP2); assertThat(circ.getBitFingerprint(proton).cardinality(), is(0)); }
@Test public void testCreate() { assertFalse(bitsetFP.get(0)); }
@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)); } } }
@Test public void testgetBitFingerprint_IAtomContainer() throws java.lang.Exception { ShortestPathFingerprinter fingerprinter = new ShortestPathFingerprinter(); IAtomContainer mol = TestMoleculeFactory.makeIndole(); AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol); IBitFingerprint bs = fingerprinter.getBitFingerprint(mol); Assert.assertNotNull(bs); Assert.assertEquals(fingerprinter.getSize(), bs.size()); }
@Test public void testRegression() throws Exception { IAtomContainer mol1 = TestMoleculeFactory.makeIndole(); IAtomContainer mol2 = TestMoleculeFactory.makePyrrole(); Fingerprinter fingerprinter = new Fingerprinter(1024, 8); IBitFingerprint bs1 = fingerprinter.getBitFingerprint(mol1); Assert.assertEquals( "Seems the fingerprint code has changed. This will cause a number of other tests to fail too!", 33, bs1.cardinality()); IBitFingerprint bs2 = fingerprinter.getBitFingerprint(mol2); Assert.assertEquals( "Seems the fingerprint code has changed. This will cause a number of other tests to fail too!", 13, bs2.cardinality()); }
@Test public void testEquals() throws Exception { IBitFingerprint fp1 = C.newInstance(); IBitFingerprint fp2 = C.newInstance(); for (IBitFingerprint fp : new IBitFingerprint[]{fp1, fp2}) { fp.set(0, true); fp.set(1, false); fp.set(2, true); } assertTrue("identical fingerprints should be equal", fp1.equals(fp2)); assertFalse("different fingerprints should not be equal", bitsetFP.equals(fp1)); assertTrue("equal fingerprints must have same hashcode", fp1.hashCode() == fp2.hashCode()); } }
@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)); }
public BitSet[] computeFingerprints(IAtomContainer mol) throws CDKException { final BitSet[] fingerprints = new BitSet[fingerprinters.size()]; int k=0; for (IFingerprinter fp : fingerprinters) { fingerprints[k] = fp.getBitFingerprint(mol).asBitSet(); assert (fingerprints[k].size() >= fp.getSize() && fingerprints[k].length() <= fp.getSize()); ++k; } return fingerprints; }
@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)); } } }