chiral_db/
lib.rs

1pub mod types;
2mod config;
3mod utils;
4pub mod fingerprint;
5pub mod similarity;
6pub mod substructure;
7
8#[derive(Debug)]
9pub struct ChiralDB {
10    fp_docs: fingerprint::FingerprintDB,
11    smiles_docs: substructure::SmilesDB,
12    // ob_molecule_docs: types::DBOpenBabelMolecule
13}
14
15impl ChiralDB {
16    pub fn new() -> Self {
17        let conf = config::load_configuration();
18        let fp_docs = fingerprint::load_fingerprint_db(&conf);
19        let smiles_docs = substructure::load_smiles_db(&conf);
20        // let ob_molecule_docs = substructure::load_ob_mol_db(&smiles_docs);
21
22        Self { fp_docs, smiles_docs }
23    }
24
25    fn desc_fingerprint_db(&self) -> String {
26        let mut desc: Vec<String> = vec![vec!["Name", "Entries", "FP Type"].join("\t\t"), "=".repeat(50)];
27        desc.extend(self.fp_docs.keys().map(|key| format!("{}\t\t{}", key, self.fp_docs[key].as_ref().desc())).collect::<Vec<String>>());
28        desc.join("\n")
29    }
30
31    fn desc_smiles_db(&self) -> String {
32        let mut desc: Vec<String> = vec![vec!["Name", "Entries"].join("\t\t"), "=".repeat(50)];
33        desc.extend(self.smiles_docs.keys().map(|key| format!("{}\t\t{}", key, self.smiles_docs[key].as_ref().desc())).collect::<Vec<String>>());
34        desc.join("\n")
35    }
36
37    pub fn desc(&self) -> String {
38        vec![
39            self.desc_fingerprint_db(),
40            self.desc_smiles_db()
41        ].join("\n".repeat(3).as_str())
42    }
43
44    pub fn query_similarity_for_smiles(&self, doc_name: &String, smiles: &String, cut_off: f32) -> types::ResultSimilarity {
45        if self.fp_docs.contains_key(doc_name) {
46            similarity::query_similarity_for_smiles(smiles, &self.fp_docs[doc_name], cut_off)
47        } else {
48            types::ResultSimilarity::new()
49        }
50    }
51
52    pub fn query_substructure_for_smarts(&self, doc_name: &String, smarts: &types::SMARTS) -> types::ResultSubstructure {
53        if self.smiles_docs.contains_key(doc_name) {
54            substructure::query_substructure(&types::Toolkit::OpenBabel, smarts, &self.smiles_docs[doc_name])
55        } else {
56            types::ResultSubstructure::new()
57        }
58    }
59}