From 2fdecbed76c4db8dfe3f10f825fed9772e653197 Mon Sep 17 00:00:00 2001 From: Christoph Helma Date: Wed, 16 Sep 2015 16:52:18 +0200 Subject: generic openbabel fingerprints --- lib/compound.rb | 31 +++++++++++++++++++++++++++++-- test/compound.rb | 11 +++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/lib/compound.rb b/lib/compound.rb index 6adf3c0..7f175ca 100644 --- a/lib/compound.rb +++ b/lib/compound.rb @@ -42,6 +42,35 @@ module OpenTox compound end + def openbabel_fingerprint type="FP2" + fp = OpenBabel::OBFingerprint.find_fingerprint(type) + obmol = OpenBabel::OBMol.new + obconversion = OpenBabel::OBConversion.new + obconversion.set_in_format "smi" + obconversion.read_string obmol, smiles + result = OpenBabel::VectorUnsignedInt.new + fp.get_fingerprint(obmol,result) + # TODO: %ignore *::DescribeBits @ line 163 openbabel/scripts/openbabel-ruby.i + #p OpenBabel::OBFingerprint.describe_bits(result) + result = result.to_a + # convert result to a list of the bits that are set + # from openbabel/scripts/python/pybel.py line 830 + # see also http://openbabel.org/docs/dev/UseTheLibrary/Python_Pybel.html#fingerprints + bitsperint = OpenBabel::OBFingerprint.getbitsperint() + bits_set = [] + start = 1 + result.each do |x| + i = start + while x > 0 do + bits_set << i if (x % 2) == 1 + x >>= 1 + i += 1 + end + start += bitsperint + end + bits_set + end + # Create a compound from smiles string # @example # compound = OpenTox::Compound.from_smiles("c1ccccc1") @@ -202,8 +231,6 @@ module OpenTox $mongo["compounds"].aggregate(aggregate).collect{ |r| [r["_id"], r["tanimoto"]] } end -=begin -=end private diff --git a/test/compound.rb b/test/compound.rb index 06c19a2..6deba4e 100644 --- a/test/compound.rb +++ b/test/compound.rb @@ -97,4 +97,15 @@ print c.sdf c = Compound.from_inchi(inchi) assert_equal inchi, c.inchi end + + def test_openbabel_fingerprint + [ + "CC(=O)CC(C)C#N", + "CC(=O)CC(C)C", + "C(=O)CC(C)C#N", + ].each do |smi| + c = OpenTox::Compound.from_smiles smi + assert_equal c.openbabel_fingerprint("FP4").size, c.fp4.size + end + end end -- cgit v1.2.3