1 package search.db;
2 
3 import java.io.IOException;
4 import java.sql.SQLException;
5 
6 import resource.ResourceLocator;
7 import util.ConnectionUtil;
8 import util.MolImportUtil;
9 import util.SearchUtil;
10import util.TableOperations;
11import chemaxon.jchem.db.DatabaseSearchException;
12import chemaxon.jchem.db.JChemSearch;
13import chemaxon.jchem.db.TableTypeConstants;
14import chemaxon.jchem.db.TransferException;
15import chemaxon.sss.SearchConstants;
16import chemaxon.sss.search.JChemSearchOptions;
17import chemaxon.util.ConnectionHandler;
18
19/**
20 * Example code showing the various types of similarity searches on reaction tables.
21 * 
22 * @author JChem Base team, ChemAxon Ltd.
23 */
24public final class ReactionSimilaritySearchExample {
25
26    private static final String REACTION_TABLE = "reactionTable";
27    private static final String REACTION_FILE = "hits1_100.smiles";
28
29    private ConnectionHandler connHandler;
30
31    public static void main(String[] args) {
32        try {
33            new ReactionSimilaritySearchExample().run();
34        } catch (Exception e) {
35            e.printStackTrace();
36        }
37    }
38
39    private void run() throws Exception {
40        connHandler = ConnectionUtil.connectToDB();
41        try {
42            initReactionsTable();
43            search();
44        } finally {
45            ConnectionUtil.closeConnection(connHandler);
46        }
47    }
48
49    private void search() throws Exception, DatabaseSearchException, SQLException, IOException {
50
51        String query = "[Br:4][C:1]1=[CH:3][CH:6]=[CH:5][S:2]1>>"
52                + "[Br:4][C:1]1=[CH:3][CH:6]=[C:5]([S:2]1)N(=O)=O";
53        JChemSearchOptions searchOpts = new JChemSearchOptions(SearchConstants.SIMILARITY);
54        JChemSearch jcs =
55                SearchUtil.createJChemSearch(connHandler, query, REACTION_TABLE, searchOpts);
56
57        searchOpts = jcs.getSearchOptions();
58        float dissimThreshold = (float) 0.3;
59        String[] metrics =
60                { "ReactantTanimoto", "ProductTanimoto", "CoarseReactionTanimoto",
61                        "MediumReactionTanimoto", "StrictReactionTanimoto" };
62        for (String m : metrics) {
63            System.out.println("Metric: " + m);
64            searchOpts.setDissimilarityMetric(m);
65            searchOpts.setDissimilarityThreshold(dissimThreshold);
66            jcs.run();
67
68            int[] cdIDs = jcs.getResults();
69            System.out.println("Results using " + m);
70            SearchUtil.printSearchResults(cdIDs);
71        }
72
73    }
74
75    private void initReactionsTable() throws IOException, SQLException, TransferException {
76        TableOperations.createStructureTable(connHandler, REACTION_TABLE,
77                TableTypeConstants.TABLE_TYPE_REACTIONS);
78        MolImportUtil.databaseImport(ResourceLocator.getPath(REACTION_FILE), connHandler,
79                REACTION_TABLE);
80    }
81
82}
83