diff options
author | Christoph Helma <helma@in-silico.de> | 2009-08-13 16:03:21 +0200 |
---|---|---|
committer | Christoph Helma <helma@in-silico.de> | 2009-08-13 16:03:21 +0200 |
commit | 632f04c25f83c9d11adaa5f1b53af296ee16a7ea (patch) | |
tree | 936ad013a09363b6605e8e5d249d74cf590e4adb /application.rb | |
parent | cf4caa7e243b80017105f8dee8f5a85c933692d7 (diff) |
smiles generation and smarts matching with openbabel, canonical smiles as identifier, rake task for installation
Diffstat (limited to 'application.rb')
-rw-r--r-- | application.rb | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/application.rb b/application.rb new file mode 100644 index 0000000..845895d --- /dev/null +++ b/application.rb @@ -0,0 +1,58 @@ +[ 'rubygems', 'sinatra', 'rest_client', 'sinatra/url_for', 'sinatra/respond_to', 'openbabel' ].each do |lib| + require lib +end + +mime :smiles, "chemical/x-daylight-smiles" +mime :inchi, "chemical/x-inchi" +mime :sdf, "chemical/x-mdl-sdfile" +mime :image, "image/gif" +mime :names, "text/plain" + +CACTUS_URI="http://cactus.nci.nih.gov/chemical/structure/" + +get '/*/match/*' do + smiles = URI.decode(params[:splat][0]) + smarts = URI.decode(params[:splat][1]) + smi2mol = OpenBabel::OBConversion.new + smi2mol.set_in_format('smi') + obmol = OpenBabel::OBMol.new + smi2mol.read_string(obmol,smiles) + obmol.add_hydrogens + smarts_pattern = OpenBabel::OBSmartsPattern.new + smarts_pattern.init(smarts) + if smarts_pattern.match(obmol) + 'true' + else + 'false' + end +end + +get %r{/(.+)} do |cansmi| # catches all remaining get requests + respond_to do |format| + format.html { URI.unescape(cansmi).chomp } + format.text { URI.unescape(cansmi).chomp } + format.smiles { URI.unescape(cansmi).chomp } + format.names { RestClient.get "#{CACTUS_URI}#{cansmi}/names" } + format.inchi { RestClient.get "#{CACTUS_URI}#{cansmi}/stdinchi" } + format.sdf { RestClient.get "#{CACTUS_URI}#{cansmi}/sdf" } + format.image { "#{CACTUS_URI}#{cansmi}/image" } + end +end + +post '/' do + if params[:smiles] + cansmi = canonical_smiles(URI.unescape(params[:smiles]),'smi').gsub(/\s+/,'') + elsif params[:name] + cansmi = RestClient.get "#{CACTUS_URI}#{params[:name]}/smiles" + end + url_for("/", :full) + URI.escape(cansmi, /[^\w]/) +end + +def canonical_smiles(identifier,format) + conversion = OpenBabel::OBConversion.new + conversion.set_in_and_out_formats format, 'can' + mol = OpenBabel::OBMol.new + conversion.read_string mol, identifier + conversion.write_string mol +end + |