#virtual #bindings #cpp #generate #input #structure #created

recgen

Rust bindings to ReCGen: Generate virtual compounds based on input structure

2 releases

0.1.2 Mar 19, 2023
0.1.1 Mar 15, 2023

#581 in Science

MIT license

9KB
78 lines

recgen-rust

Rust Wrapper of ReCGen

Logs

  • v0.1.1: Apple M1 dynamically linking
  • v0.1.0: intialized, ecfp-build done

Environmental Variables

  • RECGEN_INCL: header files for compiling
  • RECGEN_LIB: lib files for compiling
  • RECGEN_DB: sqlite database file
  • RECGEN_INPUT: directory where input files exist

Using conda to install openbabel and sqlite3

openbabel requires boost.

conda install -y -c anaconda sqlite 
conda install -y -c conda-forge boost-cpp openbabel
ln -s /Users/qw/miniconda3/envs/openbabel/lib/libboost_iostreams.dylib /usr/local/lib
export RECGEN_INCL=~/miniconda3/envs/openbabel/include
export RECGEN_LIB=~/miniconda3/envs/openbabel/lib

Findings about ReCGen

  • table "_s" includes id, smarts and content of SDF.
  • table "_f" includes id, smarts, fingerprints and number of overlap.

Make building works

from OB2.0 to OB3.0

  • OBElementTable has been removed, use OBElements:: instead
  • OBAtom::GetHvyDegree() (OB 2.x GetHvyValence())
  • The “Unset” methods for molecule, atom and bond flags have been removed, OBMol::UnsetAromaticPerceived() in OB 2.x is now OBMol::SetAromaticPerceived(false).

Code improvement:

WrapSQLit_Base deconstructor try to close the db connection. add a marker is_opened, try to close when it has been opened

About the Databse

what is column nof in the table frag_f?

WrapSQLite.cpp line 162, size of a vector of Overlap from BBMol.GetOverlap

how is Overlap created?

void Insert(deque<ECMol> &frags, int &nn)
bmol.SetOverlapFragments_Ref();
const int ECMol::he2[12]={85,100,101,102,104,105,106,107,108,109,110,111};
// At, Fm, Md, No, Rf, Db, Sg, Bh, Hs, Mt, Ds, Rg
while (tmp.find("[No]") != string::npos) tmp.replace(tmp.find("[No]"), 3, "[A;!R]");
while (tmp.find("[Fm]") != string::npos) tmp.replace(tmp.find("[Fm]"), 4, "a");
while (tmp.find("[Md]") != string::npos) tmp.replace(tmp.find("[Md]"), 4, "[A;R]");
while (tmp.find("[At]") != string::npos) tmp.replace(tmp.find("[At]"), 4, "*");
void ECMol::MkSMARTS(bool AddH) // specific SMART rule
void BBMol::SetOverlapFragments_Ref()
void SetOverlapFragments_Ref(int ele);
void SetOverlapFragments_Ref(string attr, int val);
void SetOverlapFragments_Fra();

Dependencies

~1.6–3MB
~38K SLoC