/** * */ public FingerprintGenerator() { fingerprinter = new CircularFingerprinter(CLASS_ECFP4); }
/** * Size of the fingerprint * * @return */ public static int getFingerprinterSize() { return new CircularFingerprinter(CLASS_ECFP4).getSize(); }
private synchronized int[] getCircularFP(IAtomContainer mol) throws CDKException { CircularFingerprinter circularFingerprinter = new CircularFingerprinter(6, 1024); circularFingerprinter.setPerceiveStereo(true); IBitFingerprint bitFingerprint = circularFingerprinter.getBitFingerprint(mol); return bitFingerprint.getSetbits(); }
private synchronized int[] getCircularFP(IAtomContainer mol) throws CDKException { CircularFingerprinter circularFingerprinter = new CircularFingerprinter(6, 1024); circularFingerprinter.setPerceiveStereo(true); IBitFingerprint bitFingerprint = circularFingerprinter.getBitFingerprint(mol); return bitFingerprint.getSetbits(); }
if (mol == null || mol.getAtomCount() == 0) throw new CDKException("Molecule cannot be blank or null."); CircularFingerprinter circ = new CircularFingerprinter(classType); circ.setPerceiveStereo(optPerceiveStereo); circ.calculate(mol);
/** * For a given molecule, determines its fingerprints and uses them to calculate a Bayesian prediction. Note that this * value is unscaled, and so it only has relative meaning within the confines of the model, i.e. higher is more likely to * be active. * * @param mol molecular structure which cannot be blank or null * @return predictor value */ public double predict(IAtomContainer mol) throws CDKException { if (mol == null || mol.getAtomCount() == 0) throw new CDKException("Molecule cannot be blank or null."); CircularFingerprinter circ = new CircularFingerprinter(classType); circ.setPerceiveStereo(optPerceiveStereo); circ.calculate(mol); // gather all of the (folded) fingerprints (eliminating duplicates) final int AND_BITS = folding - 1; // e.g. 1024/0x400 -> 1023/0x3FF: chop off higher order bits Set<Integer> hashset = new HashSet<Integer>(); for (int n = circ.getFPCount() - 1; n >= 0; n--) { int code = circ.getFP(n).hashCode; if (folding > 0) code &= AND_BITS; hashset.add(code); } // sums the corresponding contributor for each hash code generated from the molecule; note that if the // molecule generates hash codes not originally in the model, they are discarded (i.e. 0 contribution) double val = 0; for (int h : hashset) { Double c = contribs.get(h); if (c != null) val += c; } return val; }
@Test public void testGetBitFingerprint() throws Exception { assert (trivialMol != null); CircularFingerprinter circ = new CircularFingerprinter(); IBitFingerprint result = circ.getBitFingerprint(trivialMol); BitSet wantBits = new BitSet(), gotBits = result.asBitSet(); final int[] REQUIRE_BITS = {19, 152, 293, 340, 439, 480, 507, 726, 762, 947, 993}; for (int b : REQUIRE_BITS) wantBits.set(b); if (!wantBits.equals(gotBits)) throw new CDKException("Got " + gotBits + ", wanted " + wantBits); }
@Test public void testVersion() { CircularFingerprinter fpr = new CircularFingerprinter(CircularFingerprinter.CLASS_ECFP4); String expected = "CDK-CircularFingerprinter/" + CDK.getVersion() + " classType=ECFP4 perceiveStereochemistry=false"; Assert.assertThat(fpr.getVersionDescription(), CoreMatchers.is(expected)); }
@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)); }
private void checkFPSmartsForMolecule(String moleculeSmiles, String expectedFPSmarts[][]) throws Exception { Set<String> expected = new HashSet<>(); for (String[] strs : expectedFPSmarts) Collections.addAll(expected, strs); // expectedFPSmarts[][] is a double array because for each smarts // several equivalent variants // of the smarts are given e.g. CCC C(C)C IAtomContainer mol = parser.parseSmiles(moleculeSmiles); CircularFingerprinter circ = new CircularFingerprinter(); circ.calculate(mol); SmartsFragmentExtractor subsmarts = new SmartsFragmentExtractor(mol); subsmarts.setMode(SmartsFragmentExtractor.MODE_JCOMPOUNDMAPPER); int numFP = circ.getFPCount(); Set<String> actual = new HashSet<>(); for (int i = 0; i < numFP; i++) { FP fp = circ.getFP(i); actual.add(subsmarts.generate(fp.atoms)); } assertThat(actual, everyItem(isIn(expected))); } }
private void validateFingerprints(String label, AtomContainer mol, int classType, CircularFingerprinter.FP[] validate) throws Exception { CircularFingerprinter circ = new CircularFingerprinter(classType); try { circ.calculate(mol);
IAtomContainer mol3 = mdlr.read(bldr.newAtomContainer()); CircularFingerprinter fpr = new CircularFingerprinter();
@Test public void testGetCountFingerprint() throws Exception { assert (trivialMol != null); CircularFingerprinter circ = new CircularFingerprinter(); ICountFingerprint result = circ.getCountFingerprint(trivialMol); final int[] ANSWER_KEY = {-414937772, 1, -1027418143, 1, 1627608083, 1, -868007456, 1, -1006701866, 1, -1059145289, 1, -801752141, 1, 790592664, 1, -289109509, 1, -1650154758, 1, 1286833445, 1}; int wantBits = ANSWER_KEY.length >> 1; boolean fail = result.numOfPopulatedbins() != wantBits; for (int n = 0; !fail && n < result.numOfPopulatedbins(); n++) { int gotHash = result.getHash(n), gotCount = result.getCount(n); boolean found = false; for (int i = 0; i < wantBits; i++) { int wantHash = ANSWER_KEY[i * 2], wantCount = ANSWER_KEY[i * 2 + 1]; if (gotHash == wantHash) { found = true; if (gotCount != wantCount) throw new CDKException("For hash " + gotHash + " got count " + gotCount + " but wanted " + wantCount); } } if (!found) { fail = true; break; } } if (fail) throw new CDKException("Hash values do not match."); }
@Test public void iminesDetectionDoesntCauseNPE() throws Exception { IAtomContainer pyrazole = new AtomContainer(6, 6, 0, 0); pyrazole.addAtom(atom("H", 0, 0)); pyrazole.addAtom(atom("N", 0, 0)); pyrazole.addAtom(atom("C", 0, 1)); pyrazole.addAtom(atom("C", 0, 1)); pyrazole.addAtom(atom("C", 0, 1)); pyrazole.addAtom(atom("N", 0, 0)); pyrazole.addBond(0, 1, IBond.Order.SINGLE); pyrazole.addBond(1, 2, IBond.Order.SINGLE); pyrazole.addBond(2, 3, IBond.Order.DOUBLE); pyrazole.addBond(3, 4, IBond.Order.SINGLE); pyrazole.addBond(4, 5, IBond.Order.DOUBLE); pyrazole.addBond(1, 5, IBond.Order.SINGLE); CircularFingerprinter circ = new CircularFingerprinter(CircularFingerprinter.CLASS_FCFP2); assertNotNull(circ.getBitFingerprint(pyrazole)); }
mol.getBond(0).setStereo(IBond.Stereo.UP); CircularFingerprinter circ = new CircularFingerprinter(CircularFingerprinter.CLASS_ECFP6); circ.setPerceiveStereo(true); IBitFingerprint fp0 = circ.getBitFingerprint(mol);
/** * @cdk.bug 1357 */ @Test public void partialCoordinatesDontCauseNPE() throws Exception { IAtomContainer m = new AtomContainer(); m.addAtom(atom("C", 3, 0.000, 0.000)); m.addAtom(atom("C", 0, 1.299, -0.750)); m.addAtom(atom("H", 0, 0)); m.addAtom(atom("O", 0, 1)); m.addAtom(atom("C", 2, 2.598, -0.000)); m.addAtom(atom("C", 3, 3.897, -0.750)); m.addBond(0, 1, IBond.Order.SINGLE); m.addBond(1, 2, IBond.Order.SINGLE); m.addBond(1, 3, IBond.Order.SINGLE, IBond.Stereo.DOWN); m.addBond(1, 4, IBond.Order.SINGLE); m.addBond(4, 5, IBond.Order.SINGLE); CircularFingerprinter circ = new CircularFingerprinter(CircularFingerprinter.CLASS_ECFP6); assertNotNull(circ.getBitFingerprint(m)); }