/* $Revision: 11674 $ $Author: rajarshi $ $Date: 2008-07-20 22:05:08 -0400 (Sun, 20 Jul 2008) $ * * Copyright (C) 2008 Rajarshi Guha <rajarshi@users.sourceforge.net> * * Contact: cdk-devel@lists.sourceforge.net * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * All we ask is that proper credit is given for our work, which includes * - but is not limited to - adding the above copyright notice to the beginning * of your source code files, and to any copyright notice that you may distribute * with programs based on this work. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ package org.openscience.cdk.fingerprint; import org.openscience.cdk.annotations.TestClass; import org.openscience.cdk.annotations.TestMethod; import org.openscience.cdk.config.fragments.EStateFragments; import org.openscience.cdk.exception.CDKException; import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.smiles.smarts.SMARTSQueryTool; import java.util.BitSet; /** * This fingerprinter generates 79 bit fingerprints using the E-State * fragments. * * <p>The E-State fragments are those described in {@cdk.cite HALL1995} and * the SMARTS patterns were taken from * <a href="http://www.rdkit.org">RDKit</a>. Note that this fingerprint simply * indicates the presence or occurrence of the fragments. If you need counts * of the fragments take a look at {@link * org.openscience.cdk.qsar.descriptors.molecular.KierHallSmartsDescriptor}, * which also lists the substructures corresponding to each bit position. * * <p>This class assumes that aromaticity perception and atom typing have * been performed prior to generating the fingerprint * * @author Rajarhi Guha * @cdk.created 2008-07-23 * * @cdk.keyword fingerprint * @cdk.keyword similarity * @cdk.keyword estate * * @cdk.module fingerprint * @cdk.githash */ @TestClass("org.openscience.cdk.fingerprint.EStateFingerprinterTest") public class EStateFingerprinter implements IFingerprinter { private static final String[] patterns = EStateFragments.getSmarts(); @TestMethod("testFingerprint,testGetSize") public EStateFingerprinter() { } /** * Calculates the substructure fingerprint for the given AtomContainer. */ @TestMethod("testFingerprint") public BitSet getFingerprint(IAtomContainer atomContainer) throws CDKException { int bitsetLength = patterns.length; BitSet fingerPrint = new BitSet(bitsetLength); SMARTSQueryTool sqt = new SMARTSQueryTool("C"); for (int i = 0; i < patterns.length; i++) { sqt.setSmarts(patterns[i]); boolean status = sqt.matches(atomContainer); if (status) fingerPrint.set(i, true); } return fingerPrint; } @TestMethod("testGetSize") public int getSize() { return patterns.length; } }