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