summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgebele <gebele@in-silico.ch>2014-02-20 16:27:03 +0100
committergebele <gebele@in-silico.ch>2014-02-20 16:27:03 +0100
commite95e31449ef13b2e0f11ae7d209a12417ddcdc80 (patch)
tree74acfa18aad9e3dc1db40b44519f798a29dca2e6
parent55942467844eb07128749cf0655e79e1b9f80a88 (diff)
parentecae07354c9a6b7f13fdf70ef832ccafc9c64d05 (diff)
Merge branch 'fileoutput' into feature/hide_elements
Conflicts: application.rb views/layout.haml views/neighbors.haml views/style.scss
-rw-r--r--application.rb102
-rw-r--r--views/layout.haml4
-rw-r--r--views/style.scss5
3 files changed, 97 insertions, 14 deletions
diff --git a/application.rb b/application.rb
index 4cd247f..02b8978 100644
--- a/application.rb
+++ b/application.rb
@@ -12,6 +12,7 @@ class Application < Sinatra::Base
set :root, File.dirname(__FILE__)
# doc @ http://pubchem.ncbi.nlm.nih.gov/pug_rest/
+ # doc @ http://pubchem.ncbi.nlm.nih.gov/pug_rest/PUG_REST.html
PUG_URI = "http://pubchem.ncbi.nlm.nih.gov/rest/pug/"
SIMILARITY_THRESHOLD = 90
MAX_NEIGHBORS = 100
@@ -116,6 +117,53 @@ class Application < Sinatra::Base
end
end
+ def csv_file type
+ case type
+ when "target"
+ out = "\"Target Name\";\"Target GeneID\";\"Assay IDs\"\n"
+ @assays.collect{|a| [a["Target Name"],a["Target GI"]]}.uniq.sort{|a,b| a[0] <=> b[0]}.each do |target|
+ out += "\"#{target.first}\";\"#{target.last}\";\"" + @assays.select{|a| a["Target GI"] == target.last}.collect{|assay| "http://pubchem.ncbi.nlm.nih.gov/assay/assay.cgi?aid=#{assay["AID"]}"}.join(", ") + "\"\n"
+ end
+ when "target_readacross"
+ out = "\"Target Name\";\"Target GeneID\";\"Assay ID\";\"p_active\";\"p_inactive\"\n"
+ @assays.sort{|a,b| [b["p_active"],b["p_inactive"]].max <=> [a["p_active"],a["p_inactive"]].max}.each do |assay|
+ out += "\"#{assay['Target Name']}\";\"#{assay['Target GI']}\";\"http://pubchem.ncbi.nlm.nih.gov/assay/assay.cgi?aid=#{assay['AID']}\";\"#{assay['p_active'].to_f.round(3)}\";\"#{assay['p_inactive'].to_f.round(3)}\"\n"
+ end
+ when "assays"
+ out = "\"Assay Name\";\"Assay ID\"\n"
+ @assays.sort{|a,b| a["Assay Name"] <=> b["Assay Name"]}.each do |assay|
+ out += "\"#{assay['Assay Name']}\";\"http://pubchem.ncbi.nlm.nih.gov/assay/assay.cgi?aid=#{assay['AID']}\"\n"
+ end
+ when "predicted_assays"
+ out = "\"Assay Name\";\"Assay ID\";\"p_active\";\"p_inactive\"\n"
+ @assays.sort{|a,b| [b["p_active"],b["p_inactive"]].max <=> [a["p_active"],a["p_inactive"]].max}.each do |assay|
+ out += "\"#{assay['Assay Name']}\";\"http://pubchem.ncbi.nlm.nih.gov/assay/assay.cgi?aid=#{assay['AID']}\";\"#{assay["p_active"].to_f.round(3)}\";\"#{assay["p_inactive"].to_f.round(3)}\"\n"
+ end
+ when "neighbors"
+ out = "\"Compound Name\";\"Similarity\"\n"
+ idx = 0
+ while idx < 10
+ neighbors(@cid).each do |n|
+ unless assays(n,"active").empty? and assays(n,"inactive").empty?
+ out += "\"#{name n}\";\"#{similarity(@cid,n).round(3)}\"\n"
+ idx += 1
+ end
+ end
+ end
+ end
+ out
+ end
+
+ def set_accept
+ case File.extname(params[:file])
+ when ".csv"
+ @accept = "text/csv"
+ when ".json"
+ @accept = "application/json"
+ end
+ response['Content-Type'] = @accept
+ end
+
before '/pug/*' do
content_type 'application/json'
@result = CACHE.get request.path
@@ -127,6 +175,7 @@ class Application < Sinatra::Base
end
before '/cid/:cid/*' do
+ @accept = request.env['HTTP_ACCEPT']
@cid = params[:cid]
end
@@ -156,28 +205,61 @@ class Application < Sinatra::Base
end
end
- get '/cid/:cid/targets/:outcome' do
+ get '/cid/:cid/targets/:outcome/?:file?' do
@assays = targets params[:cid], params[:outcome]
- @assays and !@assays.empty? ? haml(:targets, :layout => false) : "<p><em>No PubChem data</em></p>"
+ set_accept if params[:file]
+ if @accept == "application/json"
+ @assays and !@assays.empty? ? JSON.pretty_generate(@assays) : "No PubChem data\n"
+ elsif @accept == "text/csv"
+ @assays and !@assays.empty? ? csv_file("target") : "No PubChem data\n"
+ else
+ @assays and !@assays.empty? ? haml(:targets, :layout => false) : "<p><em>No PubChem data</em></p>"
+ end
end
- get '/cid/:cid/assays/:outcome' do
+ get '/cid/:cid/assays/:outcome/?:file?' do
@assays = assays(params[:cid], params[:outcome]) - targets(params[:cid], params[:outcome])
- @assays and !@assays.empty? ? haml(:assays, :layout => false) : "<p><em>No PubChem data</em></p>"
+ set_accept if params[:file]
+ if @accept == "application/json"
+ @assays and !@assays.empty? ? JSON.pretty_generate(@assays) : "No PubChem data\n"
+ elsif @accept == "text/csv"
+ @assays and !@assays.empty? ? csv_file("assays") : "No PubChem data\n"
+ else
+ @assays and !@assays.empty? ? haml(:assays, :layout => false) : "<p><em>No PubChem data</em></p>"
+ end
end
- get '/cid/:cid/prediction/assays/:outcome' do
+ get '/cid/:cid/prediction/assays/:outcome/?:file?' do
@assays = predicted_assays(params[:cid], params[:outcome]) - predicted_targets(params[:cid], params[:outcome])
- @assays and !@assays.empty? ? haml(:predicted_assays, :layout => false) : "<p><em>Insufficient PubChem data for read across predictions.</em></p>"
+ set_accept if params[:file]
+ if @accept == "application/json"
+ @assays and !@assays.empty? ? JSON.pretty_generate(@assays) : "No PubChem data\n"
+ elsif @accept == "text/csv"
+ @assays and !@assays.empty? ? csv_file("predicted_assays") : "No PubChem data\n"
+ else
+ @assays and !@assays.empty? ? haml(:predicted_assays, :layout => false) : "<p><em>Insuffucient PubChem data for read across predictions.</em></p>"
+ end
end
- get '/cid/:cid/prediction/targets/:outcome' do
+ get '/cid/:cid/prediction/targets/:outcome/?:file?' do
@assays = predicted_targets params[:cid], params[:outcome]
- @assays and !@assays.empty? ? haml(:predicted_targets, :layout => false) : "<p><em>Insufficient PubChem data for read across predictions.</em></p>"
+ set_accept if params[:file]
+ if @accept == "application/json"
+ @assays and !@assays.empty? ? JSON.pretty_generate(@assays) : "No PubChem data\n"
+ elsif @accept == "text/csv"
+ @assays and !@assays.empty? ? csv_file("target_readacross") : "No PubChem data\n"
+ else
+ @assays and !@assays.empty? ? haml(:predicted_targets, :layout => false) : "<p><em>Insuffucient PubChem data for read across predictions.</em></p>"
+ end
end
- get '/cid/:cid/neighbors/?' do
- haml :neighbors, :layout => false
+ get '/cid/:cid/neighbors/?:file?' do
+ set_accept if params[:file]
+ if @accept == "text/csv"
+ csv_file("neighbors")
+ else
+ haml :neighbors, :layout => false
+ end
end
get '/pug/cid/:cid/name' do
diff --git a/views/layout.haml b/views/layout.haml
index 280301b..b6b4c0e 100644
--- a/views/layout.haml
+++ b/views/layout.haml
@@ -13,7 +13,8 @@
url: uri,
//timeout: 120000;
success: function(data){
- data = "<h4>"+title+"</h4>"+"<button onclick='hide(\"" + title + "\",\"" + element + "\",\"" + uri + "\");'>Hide</button>" + data;
+ var slash = new RegExp("/","g");
+ data = "<h4>"+title+"</h4>"+"<button onclick='hide(\"" + title + "\",\"" + element + "\",\"" + uri + "\");'>Hide</button> <a href=\"" + uri + "/" + uri.replace("/cid/", "").replace(slash,'-') + ".csv\"> (csv)</a>" + data;
$(element).html(data);
},
error: function(data,textStatus,message){
@@ -117,4 +118,3 @@
return false;
});
});
-
diff --git a/views/style.scss b/views/style.scss
index 1ec0990..25833e7 100644
--- a/views/style.scss
+++ b/views/style.scss
@@ -39,9 +39,10 @@ h4 {
/* tables */
th {
- color: #333;
+ color: #000;
text-align: left;
- font-size: 1em;
+ font-size: 1.1em;
+ padding: 8px 0;
}
td {
vertical-align: top;