summaryrefslogtreecommitdiff
path: root/application.rb
diff options
context:
space:
mode:
authorChristoph Helma <helma@in-silico.ch>2012-11-21 10:09:48 +0100
committerChristoph Helma <helma@in-silico.ch>2012-11-21 10:09:48 +0100
commitc38f9f2e4c2dec4ef163c6c76d64f5dbf4974a5a (patch)
tree4f4b71056b1e8728720fb2a5f6886dc2dfe634cd /application.rb
parent9661a67983ffc93ee02bc12b20b9afb38e199d79 (diff)
Initial GUI
Diffstat (limited to 'application.rb')
-rw-r--r--application.rb197
1 files changed, 179 insertions, 18 deletions
diff --git a/application.rb b/application.rb
index 2a77013..a3d46c3 100644
--- a/application.rb
+++ b/application.rb
@@ -1,22 +1,183 @@
-require 'sinatra'
-require "sinatra/reloader"
-require "haml"
-require 'yaml'
require "./pubchem.rb"
-also_reload './pubchem.rb'
-
-get '/?' do
- #@neighbors = OpenTox::PubChemNeighbors.new
- smiles = "OC(=O)C1=C(C=CC=C1)OC(=O)C"
- #smiles = "c1cc(CC)ccc1"
- #smiles = "CC(=O)Nc1ccc(O)cc1"
- smiles = "C1=CC(=C(C=C1Cl)Cl)OCC(=O)O"
- #@compound.from_smiles smiles
- #@neighbors.from_smiles smiles
+require 'rack/session/dalli'
+module OpenTox
+ class Application < Service
+ set :static, true
+ set :root, File.dirname(__FILE__)
+ also_reload './pubchem.rb'
+ #enable :sessions
+ use Rack::Session::Dalli, :cache => Dalli::Client.new
+
+ @@pug_uri = "http://pubchem.ncbi.nlm.nih.gov/rest/pug/"
+
+ helpers do
+
=begin
- File.open("compound.yaml","w+"){|f| f.puts @compound.to_yaml}
- @compound = YAML.load_file "compound.yaml"
+ def pubchem_search url
+ attempts = 0
+ result = nil
+ begin
+ attempts += 1
+ json = RestClient.get url, :timeout => 90000000
+ result = JSON.parse json
+ while result["Waiting"] do
+ sleep 2
+ listkey = result["Waiting"]["ListKey"]
+ result = pubchem_search File.join(@pug_uri, "compound", "listkey", listkey, "cids", "JSON")
+ end
+ rescue
+ if $!.message =~ /Timeout/i and attempts < 4
+ sleep 2
+ retry
+ elsif $!.message =~ /Timeout/i and attempts >= 4
+ File.open("timeouts","a+"){|f| f.puts url}
+ puts url
+ puts $!.message
+ elsif $!.message.match /404/
+ #not_found_error #TODO
+ else
+ puts url
+ puts $!.message
+ end
+ end
+ end
=end
- @neighbors = YAML.load_file "search.yaml"
- haml :index
+
+ def image_uri cid
+ File.join @@pug_uri, "compound", "cid", cid, "PNG"#?record_type=3d&image_size=small"
+ end
+
+ end
+
+ before '/cid/:cid/*' do
+ session[:compound] = PubChemCompound.new params[:cid] unless session[:compound] and session[:compound].cid == params[:cid]
+ end
+
+ get '/?' do
+ haml :index
+ end
+
+ get '/cid/:cid/?' do
+ session[:compound] = PubChemCompound.new params[:cid]
+ haml :compound
+ end
+
+ get '/search/?' do
+ #begin
+ cids = RestClientWrapper.get(File.join(@@pug_uri,"compound","name",URI.escape(params[:name]),"cids","TXT")).split("\n")
+ if cids.size == 1
+ session[:compound] = PubChemCompound.new cids.first
+ haml :compound
+ elsif cids.size > 1
+ @compounds = cids.collect{|cid| PubChemCompound.new cid }
+ haml :select
+ end
+ #rescue
+ #haml :not_found
+ #end
+ end
+
+ get '/cid/:cid/targets/?' do
+ if params[:cid] == session[:compound].cid
+ @assays = session[:compound].targets
+ else
+ @assays = PubChemCompound.new(params[:cid]).targets
+ end
+ haml :targets, :layout => false
+ end
+
+ get '/cid/:cid/nontargets/?' do
+ if params[:cid] == session[:compound].cid
+ @assays = session[:compound].non_targets
+ else
+ @assays = PubChemCompound.new(params[:cid]).non_targets
+ end
+ haml :targets, :layout => false
+ end
+
+ get '/cid/:cid/other_active_assays/?' do
+ if params[:cid] == session[:compound].cid
+ @assays = session[:compound].active_assays - session[:compound].targets
+ else
+ compound = PubChemCompound.new(params[:cid])
+ @assays = compound.active_assays - compound.targets
+ end
+ haml :assays, :layout => false
+ end
+
+ get '/cid/:cid/other_inactive_assays/?' do
+ if params[:cid] == session[:compound].cid
+ @assays = session[:compound].inactive_assays - session[:compound].non_targets
+ else
+ compound = PubChemCompound.new(params[:cid])
+ @assays = compound.inactive_assays - compound.non_targets
+ end
+ haml :assays, :layout => false
+ end
+
+ get '/cid/:cid/predicted_targets/?' do
+ if params[:cid] == session[:compound].cid
+ @assays = session[:compound].predicted_targets
+ else
+ @assays = PubChemCompound.new(params[:cid]).predicted_targets
+ end
+ haml :predicted_targets, :layout => false
+ end
+
+ get '/cid/:cid/predicted_nontargets/?' do
+ if params[:cid] == session[:compound].cid
+ @assays = session[:compound].predicted_non_targets
+ else
+ @assays = PubChemCompound.new(params[:cid]).predicted_non_targets
+ end
+ haml :predicted_targets, :layout => false
+ end
+
+ get '/cid/:cid/other_predicted_active_assays/?' do
+ if params[:cid] == session[:compound].cid
+ @assays = session[:compound].predicted_active_assays - session[:compound].predicted_targets
+ else
+ compound = PubChemCompound.new(params[:cid])
+ @assays = compound.predicted_active_assays - compound.predicted_targets
+ end
+ haml :predicted_assays, :layout => false
+ end
+
+ get '/cid/:cid/other_predicted_inactive_assays/?' do
+ if params[:cid] == session[:compound].cid
+ @assays = session[:compound].predicted_inactive_assays - session[:compound].predicted_non_targets
+ else
+ compound = PubChemCompound.new(params[:cid])
+ @assays = compound.predicted_inactive_assays - compound.predicted_non_targets
+ end
+ haml :assays, :layout => false
+ end
+
+ get '/cid/:cid/neighbors/?' do
+ haml :neighbors, :layout => false
+ end
+
+
+ get '/cid/:cid/cosine/:cid2/?' do
+ session[:compound].cosine(PubChemCompound.new(params[:cid2])).to_s
+ end
+
+ get '/fp/?' do
+ @fp = []
+ YAML.load_file("false_positives.yaml").each do |pred|
+ pred[:fp_targets].each do |gi,t|
+ @fp << {
+ "CID" => pred[:cid],
+ "Target GI" => gi,
+ "p_active" => t[:p][:active].first,
+ "p_inactive" => t[:p][:inactive].first,
+ :assays => t[:measured],
+ :neighbors => t[:neighbors]
+ }
+ end
+ end
+ @fp.sort!{|a,b| b["p_active"] <=> a["p_active"]}
+ haml :fp
+ end
+ end
end