@Override public IFingerprinter getBitFingerprinter() { return new MACCSFingerprinter(); }
private MaccsKey[] readKeyDef(final IChemObjectBuilder builder) throws IOException, CDKException { List<MaccsKey> keys = new ArrayList<MaccsKey>(166); BufferedReader reader = new BufferedReader(new InputStreamReader(getClass() .getResourceAsStream(KEY_DEFINITIONS))); // now process the keys String line; while ((line = reader.readLine()) != null) { if (line.charAt(0) == '#') continue; String data = line.substring(0, line.indexOf('|')).trim(); String[] toks = data.split("\\s"); keys.add(new MaccsKey(toks[1], createPattern(toks[1], builder), Integer.parseInt(toks[2]))); } if (keys.size() != 166) throw new CDKException("Found " + keys.size() + " keys during setup. Should be 166"); return keys.toArray(new MaccsKey[166]); }
/** * Access MACCS keys definitions. * * @return array of MACCS keys. * @throws CDKException maccs keys could not be loaded */ private MaccsKey[] keys(final IChemObjectBuilder builder) throws CDKException { MaccsKey[] result = keys; if (result == null) { synchronized (lock) { result = keys; if (result == null) { try { keys = result = readKeyDef(builder); } catch (IOException e) { throw new CDKException("could not read MACCS definitions", e); } } } } return result; }
public IBitFingerprint getBitFingerprint(IAtomContainer container) throws CDKException { MaccsKey[] keys = keys(container.getBuilder()); BitSet fp = new BitSet(keys.length); if (numAtoms > 1 && visitPart(visit, adjlist, 0, -1) < numAtoms) fp.set(165); break; if (isAromPath(path, bmap)) { numArom++; if (numArom == 2)
private static int visitPart(boolean[] visit, int[][] g, int beg, int prev) { visit[beg] = true; int visited = 1; for (int end : g[beg]) { if (end != prev && !visit[end]) visited += visitPart(visit, g, end, beg); } return visited; }
public static List<IFingerprinter> createListOfFingerprints() { return Arrays.asList( (IFingerprinter) new OpenBabelFingerprinter(), (IFingerprinter) new SubstructureFingerprinter(), (IFingerprinter) new MACCSFingerprinter(), (IFingerprinter) new PubchemFingerprinter(DefaultChemObjectBuilder.getInstance()), (IFingerprinter) new KlekotaRothFingerprinter(), (IFingerprinter) new ECFPFingerprinter() ); }
public MACCSFingerprinter(IChemObjectBuilder builder) { try { keys = readKeyDef(builder); } catch (IOException e) { logger.debug(e); } catch (CDKException e) { logger.debug(e); } }
public static List<IFingerprinter> createExtendedListOfFingerprints() { return Arrays.asList( (IFingerprinter) new OpenBabelFingerprinter(), (IFingerprinter) new SubstructureFingerprinter(), (IFingerprinter) new MACCSFingerprinter(), (IFingerprinter) new PubchemFingerprinter(DefaultChemObjectBuilder.getInstance()), (IFingerprinter) new KlekotaRothFingerprinter(), (IFingerprinter) new SphericalFingerprint() ); }
public static List<IFingerprinter> createListOfAllFingerprints() { return Arrays.asList( (IFingerprinter) new OpenBabelFingerprinter(), // 55 (0..54) (IFingerprinter) new SubstructureFingerprinter(), // 307 (55..361) (IFingerprinter) new MACCSFingerprinter(),// 166 (362..527) (IFingerprinter) new PubchemFingerprinter( DefaultChemObjectBuilder.getInstance()), // 881 (528..1408) (IFingerprinter) new KlekotaRothFingerprinter(), // 4860 (1409..6269) (IFingerprinter) new SphericalFingerprint(), (IFingerprinter) new ECFPFingerprinter() ); }
public Fingerprinter getFingerprinter(ComputeOpts opts) throws CDKException { if (opts.isCfm() || opts.isKlekotha() || opts.isMaccs() || opts.isOpenbabel() || opts.isPubchem()) { ArrayList<IFingerprinter> fingerprinters = new ArrayList<IFingerprinter>(); if (opts.isOpenbabel()) fingerprinters.add(new OpenBabelFingerprinter()); if (opts.isMaccs()) fingerprinters.add(new MACCSFingerprinter()); if (opts.isPubchem()) fingerprinters.add(new PubchemFingerprinter(DefaultChemObjectBuilder.getInstance())); if (opts.isKlekotha()) fingerprinters.add(new KlekotaRothFingerprinter()); if (opts.isPath()) fingerprinters.add(new MarcusPathFingerprinter()); if (opts.isCfm()) fingerprinters.add(new CFMFingerprinter()); if (opts.isNeighbourhood()) fingerprinters.add(new NeighbourhoodFingerprinter()); return new Fingerprinter(fingerprinters); } else return new Fingerprinter(); }
private static List<IFingerprinter> getFingerprintList(ComputeOpts opts) { final List<IFingerprinter> list = new ArrayList<IFingerprinter>(); if (opts.isAll()) return Fingerprinter.createListOfAllFingerprints(); if (opts.isExtended()) return Fingerprinter.createExtendedListOfFingerprints(); if (opts.isOpenbabel()) { list.add(new OpenBabelFingerprinter()); list.add(new SubstructureFingerprinter()); } if (opts.isMaccs()) list.add(new MACCSFingerprinter()); if (opts.isPubchem()) list.add(new PubchemFingerprinter(DefaultChemObjectBuilder.getInstance())); if (opts.isKlekotha()) list.add(new KlekotaRothFingerprinter()); if (opts.isPath()) list.add(new MarcusPathFingerprinter()); if (opts.isNeighbourhood()) list.add(new NeighbourhoodFingerprinter()); if (opts.isSpherical()) list.add(new SphericalFingerprint()); if (list.size() > 0) { return list; } else { return Fingerprinter.createListOfFingerprints(); } }
public static IFingerprinter getFingerprinterByName(String name) { switch (name.toLowerCase()) { case "openbabel": return new OpenBabelFingerprinter(); case "substructure": return new SubstructureFingerprinter(); case "maccs": return new MACCSFingerprinter(); case "pubchem": return new PubchemFingerprinter(DefaultChemObjectBuilder.getInstance()); case "klekota": case "klekota_roth": return new KlekotaRothFingerprinter(); case "path": return new MarcusPathFingerprinter(); case "neighbours": return new NeighbourhoodFingerprinter(); case "spheres": return new SphericalFingerprint(); case "ecfp": return new ECFPFingerprinter(); default: throw new IllegalArgumentException("Unknown fingerprinter: " + name); } }
public static IFingerprinter getFingerprinter(CdkFingerprintVersion.USED_FINGERPRINTS fp) { switch (fp) { case OPENBABEL: return new OpenBabelFingerprinter(); case SUBSTRUCTURE: return new SubstructureFingerprinter(); case MACCS: return new MACCSFingerprinter(); case PUBCHEM: return new PubchemFingerprinter(DefaultChemObjectBuilder.getInstance()); case KLEKOTA_ROTH: return new KlekotaRothFingerprinter(); case ECFP: return new ECFPFingerprinter(); case CLASSYFIRE_SMARTS: return new ClassyFireSmartsFingerprint(); case SHORTEST_PATH: return new ShortestPathFingerprinter(); case BIOSMARTS: return new BiosmartsFingerprinter(); case RINGSYSTEMS: return new RingsystemFingerprinter(); default: throw new IllegalArgumentException(); } }
@Test public void getsize() throws Exception { IFingerprinter printer = new MACCSFingerprinter(SilentChemObjectBuilder.getInstance()); Assert.assertEquals(166, printer.getSize()); }
/** * Using MACCS keys, these molecules are not considered substructures * and should only be used for similarity. This is because the MACCS * fragments match hydrogen counts. */ @Test @Override public void testBug706786() throws Exception { IAtomContainer superStructure = bug706786_1(); IAtomContainer subStructure = bug706786_2(); AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(superStructure); AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(subStructure); addImplicitHydrogens(superStructure); addImplicitHydrogens(subStructure); IFingerprinter fpr = new MACCSFingerprinter(); IBitFingerprint superBits = fpr.getBitFingerprint(superStructure); IBitFingerprint subBits = fpr.getBitFingerprint(subStructure); assertThat( superBits.asBitSet(), is(asBitSet(53, 56, 65, 71, 73, 88, 97, 104, 111, 112, 126, 130, 136, 138, 139, 140, 142, 143, 144, 145, 148, 149, 151, 153, 156, 158, 159, 161, 162, 163, 164))); assertThat( subBits.asBitSet(), is(asBitSet(56, 97, 104, 108, 112, 117, 131, 136, 143, 144, 146, 151, 152, 156, 161, 162, 163, 164))); }
@Test public void testFingerprint() throws Exception { SmilesParser parser = new SmilesParser(SilentChemObjectBuilder.getInstance()); IFingerprinter printer = new MACCSFingerprinter(); IAtomContainer mol1 = parser.parseSmiles("c1ccccc1CCc1ccccc1"); IAtomContainer mol2 = parser.parseSmiles("c1ccccc1CC"); IAtomContainer mol3 = parser.parseSmiles("CCC.CCC"); AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol1); AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol2); AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol3); Aromaticity.cdkLegacy().apply(mol1); Aromaticity.cdkLegacy().apply(mol2); Aromaticity.cdkLegacy().apply(mol3); BitSet bs1 = printer.getBitFingerprint(mol1).asBitSet(); BitSet bs2 = printer.getBitFingerprint(mol2).asBitSet(); BitSet bs3 = printer.getBitFingerprint(mol3).asBitSet(); Assert.assertEquals(166, printer.getSize()); Assert.assertFalse(bs1.get(165)); Assert.assertTrue(bs1.get(124)); Assert.assertFalse(bs2.get(124)); Assert.assertTrue(bs3.get(165)); Assert.assertFalse(FingerprinterTool.isSubset(bs1, bs2)); }
@Test public void testfp2() throws Exception { SmilesParser parser = new SmilesParser(SilentChemObjectBuilder.getInstance()); IFingerprinter printer = new MACCSFingerprinter(); IAtomContainer mol1 = parser.parseSmiles("CC(N)CCCN"); IAtomContainer mol2 = parser.parseSmiles("CC(N)CCC"); IAtomContainer mol3 = parser.parseSmiles("CCCC"); AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol1); AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol2); AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol3); Aromaticity.cdkLegacy().apply(mol1); Aromaticity.cdkLegacy().apply(mol2); Aromaticity.cdkLegacy().apply(mol3); BitSet bs1 = printer.getBitFingerprint(mol1).asBitSet(); BitSet bs2 = printer.getBitFingerprint(mol2).asBitSet(); BitSet bs3 = printer.getBitFingerprint(mol3).asBitSet(); Assert.assertFalse(bs1.get(124)); Assert.assertFalse(bs2.get(124)); Assert.assertFalse(bs3.get(124)); Assert.assertFalse(FingerprinterTool.isSubset(bs1, bs2)); Assert.assertTrue(FingerprinterTool.isSubset(bs2, bs3)); }