1 package search.db;
2
3 import util.ConnectionUtil;
4 import util.SearchUtil;
5 import util.TableOperations;
6 import chemaxon.descriptors.GenerateMD;
7 import chemaxon.jchem.db.JChemSearch;
8 import chemaxon.sss.SearchConstants;
9 import chemaxon.sss.search.JChemSearchOptions;
10import chemaxon.util.ConnectionHandler;
11
12
19public final class SimilaritySearchExample {
20
21 private static final String TABLE_NAME = "similaritySearchTable";
22 private static final float DISSIMILARITY_THRESHOLD = 0.65F;
23 private static final String[] DESCRIPTORS = { "Pharmacophore", "HDonor", "HAcceptor" };
24
25 private ConnectionHandler connHandler;
26
27 public static void main(String[] args) {
28 try {
29 new SimilaritySearchExample().run();
30 } catch (Exception e) {
31 e.printStackTrace();
32 }
33 }
34
35 private void run() throws Exception {
36 connHandler = ConnectionUtil.connectToDB();
37 try {
38 TableOperations.setupMoleculeTable(connHandler, TABLE_NAME);
39 generateDescriptors();
40 performSimpleSimilaritySearch();
41 performSimilaritySearchOnDescriptorTable();
42 } finally {
43 ConnectionUtil.closeConnection(connHandler);
44 }
45 }
46
47
52 private void performSimpleSimilaritySearch() throws Exception {
53 String query = "C[Si](C)(C)CC1=CC=CC=C1";
54
55 JChemSearchOptions searchOpts = new JChemSearchOptions(SearchConstants.SIMILARITY);
56 JChemSearch jcs =
57 SearchUtil.createJChemSearch(connHandler, query, TABLE_NAME, searchOpts);
58
59 searchOpts.setDissimilarityThreshold(DISSIMILARITY_THRESHOLD);
60 jcs.setSearchOptions(searchOpts);
61 jcs.setQueryStructure(query);
62
63 jcs.run();
64
65 int[] cdIDs = jcs.getResults();
66 System.out.println("Results using chemical hashed fingerprint:");
67 SearchUtil.printSearchResults(cdIDs);
68 }
69
70
76 private void performSimilaritySearchOnDescriptorTable() throws Exception {
77 String query = "C[Si](C)(C)CC1=CC=CC=C1";
78
79 JChemSearchOptions searchOpts = new JChemSearchOptions(SearchConstants.SIMILARITY);
80 searchOpts.setDissimilarityThreshold(DISSIMILARITY_THRESHOLD);
81 JChemSearch jcs =
82 SearchUtil.createJChemSearch(connHandler, query, TABLE_NAME, searchOpts);
83
84 for (String desc : DESCRIPTORS) {
85 searchOpts.setDescriptorName(desc);
87
88 jcs.setSearchOptions(searchOpts);
89 jcs.setQueryStructure(query);
90
91 jcs.run();
92
93 int[] cdIDs = jcs.getResults();
94 String descName = "descriptor: " + desc;
95 System.out.println("Results using " + descName);
96 SearchUtil.printSearchResults(cdIDs);
97 }
98 }
99
00
05 private void generateDescriptors() throws Exception {
06
07 System.out.println("Generating descriptors...");
08
09 GenerateMD gmd = new GenerateMD(DESCRIPTORS.length);
11 gmd.setConnectionHandler(connHandler);
12 gmd.setStructureTableName(TABLE_NAME);
13
14 String settings = null;
15
18 gmd.setDescriptor(0, DESCRIPTORS[0], "PF", settings, null);
20 gmd.setDescriptor(1, DESCRIPTORS[1], "HDon", settings, null);
21 gmd.setDescriptor(2, DESCRIPTORS[2], "HAcc", settings, null);
22
23 gmd.init();
24 gmd.run();
25 }
26
27}
28