From 6a2c3f2100d030c30b7d8ac8c95dcece7edb040c Mon Sep 17 00:00:00 2001 From: Christoph Helma Date: Tue, 8 Sep 2009 16:04:23 +0200 Subject: api separated into individual components, adapted for new webservice versions --- lib/compound.rb | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 lib/compound.rb (limited to 'lib/compound.rb') diff --git a/lib/compound.rb b/lib/compound.rb new file mode 100644 index 0000000..4652770 --- /dev/null +++ b/lib/compound.rb @@ -0,0 +1,67 @@ +module OpenTox + + # uri: /compound/:inchi + class Compound < OpenTox + + attr_reader :inchi + + # Initialize with :uri => uri, :smiles => smiles or :name => name (name can be also an InChI/InChiKey, CAS number, etc) + def initialize(params) + @@cactus_uri="http://cactus.nci.nih.gov/chemical/structure/" + if params[:smiles] + @inchi = smiles2inchi(params[:smiles]) + @uri = File.join(@@config[:services]["opentox-dataset"],"compound",@inchi) + elsif params[:inchi] + @inchi = inchi + @uri = File.join(@@config[:services]["opentox-dataset"],"compound",@inchi) + elsif params[:name] + @inchi = RestClient.get "#{@@cactus_uri}#{params[:name]}/stdinchi" + @uri = File.join(@@config[:services]["opentox-dataset"],"compound",@inchi) + elsif params[:uri] + @inchi = params[:uri].sub(/^.*InChI/, 'InChI') + @uri = params[:uri] + end + end + + # Get the (canonical) smiles + def smiles + obconversion(@inchi,'inchi','can') + end + + def sdf + obconversion(@inchi,'inchi','sdf') + end + + # Matchs a smarts string + def match?(smarts) + obconversion = OpenBabel::OBConversion.new + obmol = OpenBabel::OBMol.new + obconversion.set_in_format('inchi') + obconversion.read_string(obmol,@inchi) + smarts_pattern = OpenBabel::OBSmartsPattern.new + smarts_pattern.init(smarts) + smarts_pattern.match(obmol) + end + + # Match an array of smarts features, returns matching features + def match(smarts_features) + smarts_features.all_features.collect{ |smarts| smarts if self.match?(smarts.name) }.compact + end + + def smiles2inchi(smiles) + obconversion(smiles,'smi','inchi') + end + + def smiles2cansmi(smiles) + obconversion(smiles,'smi','can') + end + + def obconversion(identifier,input_format,output_format) + obconversion = OpenBabel::OBConversion.new + obmol = OpenBabel::OBMol.new + obconversion.set_in_and_out_formats input_format, output_format + obconversion.read_string obmol, identifier + obconversion.write_string(obmol).gsub(/\s/,'').chomp + end + end +end -- cgit v1.2.3