From 9b28faf75acb5a74ac0fac37433fbed4d1d39c7c Mon Sep 17 00:00:00 2001 From: gebele Date: Mon, 24 Sep 2018 14:33:43 +0000 Subject: allow tab separated smi files --- application.rb | 57 +++++++++++++++++++++++++-------------------------------- 1 file changed, 25 insertions(+), 32 deletions(-) (limited to 'application.rb') diff --git a/application.rb b/application.rb index f30361e..e6ca7c2 100644 --- a/application.rb +++ b/application.rb @@ -38,7 +38,6 @@ get '/predict/?' do @existing_datasets = dataset_storage @models = Model::Validation.all @models = @models.delete_if{|m| m.model.name =~ /\b(Net cell association)\b/} - #endpoints = @models.collect{|m| m.endpoint =~ /LOAEL/ ? m.endpoint+" (lazar)" : m.endpoint} endpoints = @models.collect{|m| m.endpoint if m.endpoint != "Mutagenicity"}.compact endpoints << "Oral toxicity (Cramer rules)" endpoints << "Lowest observed adverse effect level (LOAEL) (Mazzatorta)" @@ -173,21 +172,21 @@ get '/download/dataset/:id' do response['Content-Type'] = "text/csv" dataset = Batch.find params[:id] tempfile = Tempfile.new - tempfile.write(File.read("tmp/"+dataset.name+".csv")) + tempfile.write(File.read(dataset.source)) tempfile.rewind - send_file tempfile, :filename => dataset.name+".csv", :type => "text/csv", :disposition => "attachment" + send_file tempfile, :filename => dataset.source, :type => (dataset.source =~ /\.smi$/ ? "chemical/x-daylight-smiles" : "text/csv"), :disposition => "attachment" end get '/delete/dataset/:id' do dataset = Batch.find params[:id] dataset.delete - File.delete File.join("tmp/"+dataset.name+".csv") + File.delete File.join(dataset.source) redirect to("/") end get '/predict/csv/:task/:model/:filename/?' do response['Content-Type'] = "text/csv" - filename = params[:filename] =~ /\.csv$/ ? params[:filename].gsub(/\.csv$/,"") : params[:filename] + filename = params[:filename] task = Task.find params[:task].to_s m = Model::Validation.find params[:model].to_s unless params[:model] =~ /Cramer|Mazzatorta/ dataset = Batch.find_by(:name => filename) @@ -218,7 +217,7 @@ get '/predict/csv/:task/:model/:filename/?' do end end if params[:model] == "Mazzatorta" - endpoint = "Lowest observed adverse effect level (LOAEL) (Rats) (Mazzatorta)" + endpoint = "Lowest observed adverse effect level (LOAEL) (Rat) (Mazzatorta)" elsif params[:model] == "Cramer" endpoint = "Oral_toxicity_(Cramer_rules)" else @@ -293,38 +292,32 @@ post '/predict/?' do @filename = @dataset.name end if !params[:fileselect].blank? - if params[:fileselect][:filename] !~ /\.csv$/ - bad_request_error "Wrong file extension for '#{params[:fileselect][:filename]}'. Please upload a CSV file." + if params[:fileselect][:filename] !~ /\.csv$|\.smi$/ + bad_request_error "Wrong file extension for '#{params[:fileselect][:filename]}'. Please upload a .csv or .smi file." end - @filename = params[:fileselect][:filename] - begin - @dataset = Batch.find_by(:name => params[:fileselect][:filename].sub(/\.csv$/,"")) - if @dataset - $logger.debug "Take file from database." + @filename = params[:fileselect][:filename].gsub(/\.csv$|\.smi$/,"") + @dataset = Batch.find_by(:name => @filename) + if @dataset + $logger.debug "Take file from database." + @compounds = @dataset.compounds + @identifiers = @dataset.identifiers + @ids = @dataset.ids + else + File.open('tmp/' + params[:fileselect][:filename], "w") do |f| + f.write(params[:fileselect][:tempfile].read) + end + input = Batch.from_csv_file File.join("tmp", params[:fileselect][:filename]) + $logger.debug "Processing '#{params[:fileselect][:filename]}'" + if input.class == OpenTox::Batch + @dataset = input @compounds = @dataset.compounds @identifiers = @dataset.identifiers @ids = @dataset.ids else - File.open('tmp/' + params[:fileselect][:filename], "w") do |f| - f.write(params[:fileselect][:tempfile].read) - end - input = Batch.from_csv_file File.join("tmp", params[:fileselect][:filename]) - $logger.debug "Processing '#{params[:fileselect][:filename]}'" - if input.class == OpenTox::Batch - @dataset = input - @compounds = @dataset.compounds - @identifiers = @dataset.identifiers - @ids = @dataset.ids - else - File.delete File.join("tmp", params[:fileselect][:filename]) - bad_request_error "Could not serialize file '#{@filename}'." - end + File.delete File.join("tmp", params[:fileselect][:filename]) + bad_request_error "Could not serialize file '#{@filename}'." end - rescue - File.delete File.join("tmp", params[:fileselect][:filename]) - bad_request_error "Could not serialize file '#{@filename}'." end - if @compounds.size == 0 message = @dataset.warnings @dataset.delete @@ -455,7 +448,7 @@ post '/predict/?' do compounds = @compounds.collect{|cid| c = Compound.find cid; c.smiles} prediction = LoaelMazzatorta.predict(compounds) output = {} - output["model_name"] = "Lowest observed adverse effect level (LOAEL) (Rats) (Mazzatorta)" + output["model_name"] = "Lowest observed adverse effect level (LOAEL) (Rat) (Mazzatorta)" output["mazzatorta"] = [] #output["mazzatorta"] = prediction # header -- cgit v1.2.3