summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrautenberg <rautenberg@in-silico.ch>2016-09-08 11:49:50 +0200
committerrautenberg <rautenberg@in-silico.ch>2016-09-08 11:49:50 +0200
commit01141de159d7b39209b284df9230127aef09a793 (patch)
tree8da80fcf93003a3f79e7d898abb5de4e97e1b1d4
parent7e052d246daa76b178b1ad6199743f9d16d9ad30 (diff)
add initial reporting on QMRF
-rw-r--r--api/api.json89
-rw-r--r--lib/lazar-rest.rb2
-rw-r--r--lib/report.rb70
3 files changed, 161 insertions, 0 deletions
diff --git a/api/api.json b/api/api.json
index abc4a0b..550c547 100644
--- a/api/api.json
+++ b/api/api.json
@@ -143,6 +143,91 @@
}
}
},
+ "/model/report": {
+ "get": {
+ "tags": [
+ "report"
+ ],
+ "description": "Get a list of QMRF reports",
+ "parameters": [
+ {
+ "name": "accept",
+ "in": "header",
+ "description": "requested Content-Type",
+ "required": true,
+ "type": "string",
+ "enum": [
+ "text/uri-list",
+ "application/json"
+ ]
+ }
+ ],
+ "produces": [
+ "text/uri-list",
+ "application/json"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/200"
+ },
+ "400": {
+ "$ref": "#/responses/400"
+ },
+ "401": {
+ "$ref": "#/responses/401"
+ },
+ "404": {
+ "$ref": "#/responses/404"
+ },
+ "500": {
+ "$ref": "#/responses/500"
+ }
+ }
+ }
+ },
+ "/model/report/{id}": {
+ "get": {
+ "tags": [
+ "report"
+ ],
+ "description": "Get a QMRF report",
+ "parameters": [
+ {
+ "name": "accept",
+ "in": "header",
+ "description": "requested Content-Type",
+ "required": true,
+ "type": "string",
+ "enum": [
+ "application/xml"
+ ]
+ },
+ {
+ "$ref": "#/parameters/id"
+ }
+ ],
+ "produces": [
+ "application/xml"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/200"
+ },
+ "400": {
+ "$ref": "#/responses/400"
+ },
+ "401": {
+ "$ref": "#/responses/401"
+ },
+ "403": {
+ "$ref": "#/responses/403"
+ },
+ "404": {
+ "$ref": "#/responses/404"
+ }
+ }
+ }
+ },
"/dataset": {
"get": {
"tags": [
@@ -1062,6 +1147,10 @@
{
"name": "feature",
"description": "Feature"
+ },
+ {
+ "name": "report",
+ "description": "QMRF Reporting"
}
]
} \ No newline at end of file
diff --git a/lib/lazar-rest.rb b/lib/lazar-rest.rb
index 7514ba1..2de3998 100644
--- a/lib/lazar-rest.rb
+++ b/lib/lazar-rest.rb
@@ -1,5 +1,6 @@
require "sinatra"
require "../lazar/lib/lazar.rb"
+require "../qsar-report/lib/qsar-report.rb"
include OpenTox
require 'rack/cors'
@@ -30,6 +31,7 @@ end
"feature.rb",
"model.rb",
"nanoparticle.rb",
+ "report.rb",
"substance.rb",
"validation.rb"
].each{ |f| require_relative f }
diff --git a/lib/report.rb b/lib/report.rb
new file mode 100644
index 0000000..c8b8165
--- /dev/null
+++ b/lib/report.rb
@@ -0,0 +1,70 @@
+# Get a list of all possible reports to prediction models
+# @param [Header] Accept one of text/uri-list,
+# @return [text/uri-list] list of all prediction models
+get "/model/report/?" do
+ models = Model::Prediction.all
+ case @accept
+ when "text/uri-list"
+ uri_list = models.collect{|model| uri("/model/report/#{model.model_id}")}
+ return uri_list.join("\n") + "\n"
+ when "application/json"
+ reports = [{}]
+ #models = JSON.parse models.to_json
+ models.each_index do |idx|
+ reports[idx] = {}
+ reports[idx][:URI] = uri("/model/report/#{models[idx]["model_id"]}")
+ reports[idx][:repeated_crossvalidation_uri] = uri("/validation/repeatedcrossvalidation/#{models[idx]["repeated_crossvalidation_id"]}") if models[idx]["repeated_crossvalidation_id"]
+ reports[idx][:leave_one_out_validation_uri] = uri("/validation/leaveoneoutvalidation/#{models[idx]["leave_one_out_validation_id"]}") if models[idx]["leave_one_out_validation_id"]
+ reports[idx][:training_dataset_URI] = uri("/dataset/#{models[idx].training_dataset.id}") if models[idx].training_dataset.id
+ end
+ return reports.to_json
+ else
+ bad_request_error "Mime type #{@accept} is not supported."
+ end
+end
+
+get "/model/report/:id/?" do
+ model = Model::Lazar.find params[:id]
+ resource_not_found_error "Model with id: #{params[:id]} not found." unless model
+ prediction_model = Model::Prediction.find_by :model_id => params[:id]
+
+ report = OpenTox::QMRFReport.new
+
+ # QSAR Identifier Title 1.1
+ report.value "QSAR_title", "Lazar model for #{prediction_model.species} #{prediction_model.endpoint}"
+
+ # Software coding the model 1.3
+ report.change_catalog :software_catalog, :firstsoftware, {:name => "lazar", :description => "lazar Lazy Structure- Activity Relationships", :number => "1", :url => "https://lazar.in-silico.ch", :contact => "info@in-silico.ch"}
+ report.ref_catalog :QSAR_software, :software_catalog, :firstsoftware
+
+ # Date of QMRF 2.1
+ report.value "qmrf_date", "#{Time.now.strftime('%d %B %Y')}"
+
+ # QMRF author(s) and contact details 2.1
+ report.change_catalog :authors_catalog, :firstauthor, {:name => "Christoph Helma", :affiliation => "in silico toxicology gmbh", :contact => "Rastatterstr. 41, CH-4057 Basel", :email => "info@in-silico.ch", :number => "1", :url => "www.in-silico.ch"}
+ report.ref_catalog :qmrf_authors, :authors_catalog, :firstauthor
+
+ # Model developer(s) and contact details 2.5
+ report.change_catalog :authors_catalog, :modelauthor, {:name => "Christoph Helma", :affiliation => "in silico toxicology gmbh", :contact => "Rastatterstr. 41, CH-4057 Basel", :email => "info@in-silico.ch", :number => "1", :url => "www.in-silico.ch"}
+ report.ref_catalog :model_authors, :authors_catalog, :modelauthor
+
+ # Date of model development and/or publication 2.6
+ report.value "model_date", "#{Time.parse(model.created_at.to_s).strftime('%Y')}"
+
+ # Reference(s) to main scientific papers and/or software package 2.7
+ report.change_catalog :publications_catalog, :publications_catalog_1, {:title => "lazar: a modular predictive toxicology framework", :url => "http://dx.doi.org/10.3389/fphar.2013.00038"}
+ report.ref_catalog :references, :publications_catalog, :publications_catalog_1
+
+ # Species 3.1
+ report.value "model_species", prediction_model.species
+
+ # Endpoint 3.2
+ report.change_catalog :endpoints_catalog, :endpoints_catalog_1, {:name => prediction_model.endpoint, :group => ""}
+ report.ref_catalog :model_endpoint, :endpoints_catalog, :endpoints_catalog_1
+
+ # Endpoint Units 3.4
+ report.value "endpoint_units", "#{prediction_model.unit}"
+ response['Content-Type'] = "application/xml"
+ return report.to_xml
+
+end