virgil/commit
ADD PRR measurements to wizard.
author | Michiel Hildebrand |
---|---|
Thu Mar 14 18:24:03 2013 +0100 | |
committer | Michiel Hildebrand |
Thu Mar 14 18:24:03 2013 +0100 | |
commit | 6ce33cc8f2721cd8b81313c57c4c8dc693ffedfd |
tree | 1ddb41be2fce6bc0ae3862db112fca311cdfb6f6 |
parent | b44b86c05f824c2d7073c0c32f469904e92da38b |
Diff style: patch stat
diff --git a/api/measurements.pl b/api/measurements.pl new file mode 100644 index 0000000..304b939 --- /dev/null +++ b/api/measurements.pl @@ -0,0 +1,77 @@ +:- module(measurements, + [flush_virgil_cache/0 + ]). + +:- use_module(library(http/http_dispatch)). +:- use_module(library(http/http_parameters)). +:- use_module(library(http/http_json)). +:- use_module(library(aers_report)). +:- use_module(library(count)). + +:- http_handler(cliopatria(aers/api/measurements/prr), http_measurements_prr, []). + +:- dynamic + virgil_cache/2. + +http_measurements_prr(Request) :- + http_parameters(Request, + ['drugnames[]'(Drugs, + [list(atom)]), + 'reactions[]'(Reactions, + [list(atom) + ]) + ]), + prr_per_reaction(Reactions, Drugs, PRRs), + reply_json(PRRs). + + +prr_per_reaction([], _, []). +prr_per_reaction([Reaction|Rs], Drugs, [Obj|Os]) :- + Obj = json([reaction=Reaction, prr=PRR, prov=Prov]), + prr(Drugs, Reaction, PRR, Prov), + prr_per_reaction(Rs, Drugs, Os). + +prr(Drugs, Reaction, PRR, Prov) :- + drug_reactions(Drugs, DRs), + length(DRs, D), + proof_count(member(Reaction-_, DRs), DE), + reaction_count(Reaction, E), + cc_count(A), + + PRR is (DE/D)/((E-DE)/(A-D)), + + Prov = json([drug=D, + reaction=E, + drugreaction=DE, + all=A + ]). + %Prov = (DE/D)/((E-DE)/(A-D)). + + +drug_reactions(Drugs, DRs) :- + virgil_cache(drug(Drugs), DRs), + !. +drug_reactions(Drugs, DRs) :- + setof(R-Report, reaction(Drugs, [], R, Report), DRs), + assert(virgil_cache(drug(Drugs), DRs)). + +reaction_count(Reaction, Count) :- + virgil_cache(reaction(Reaction), Count), + !. +reaction_count(Reaction, Count) :- + setof(R, report([], [Reaction], [], R), Es), + length(Es, Count), + assert(virgil_cache(reaction(Reaction), Count)). + +cc_count(Count) :- + virgil_cache(cc, Count), + !. +cc_count(Count) :- + setof(R, report([], [], [], R), As), + length(As, Count), + assert(virgil_cache(cc, Count)). + + +flush_virgil_cache :- + retractall(virgil_cache(_, _)). + diff --git a/api/reactions.pl b/api/reactions.pl index 5c13f8a..477afaa 100644 --- a/api/reactions.pl +++ b/api/reactions.pl @@ -3,8 +3,6 @@ :- use_module(library(http/http_dispatch)). :- use_module(library(http/http_parameters)). -:- use_module(library(semweb/rdf_db)). -:- use_module(library(semweb/rdf_label)). :- use_module(library(util)). :- use_module(library(http/http_json)). :- use_module(library(aers_report)). @@ -40,15 +38,6 @@ http_reactions(Request) :- reaction_obj(C-R, json([reaction=R, count=C])). -reaction(Drugs, Filter, Reaction, Report) :- - ( Drugs = [_|_] - -> report_by_drug(Drugs, Report) - ; true - ), - report_by_filter(Filter, Report), - rdf(Report, aers:reaction, Reaction_Lit), - literal_text(Reaction_Lit, Reaction). - %% http_reaction_count(+Request) http_reaction_count(Request) :- diff --git a/config-available/virgil.pl b/config-available/virgil.pl index 9d221be..27c17cd 100644 --- a/config-available/virgil.pl +++ b/config-available/virgil.pl @@ -13,6 +13,7 @@ :- load_files([ api(drugs), api(reactions), api(reports), + api(measurements), applications(virgil) ], [ silent(true), diff --git a/lib/aers_report.pl b/lib/aers_report.pl index 7fb39de..8d07ae3 100644 --- a/lib/aers_report.pl +++ b/lib/aers_report.pl @@ -1,10 +1,12 @@ :- module(aers_report, [report/4, report_by_drug/2, - report_by_filter/2 + report_by_filter/2, + reaction/4 ]). :- use_module(library(semweb/rdf_db)). +:- use_module(library(semweb/rdf_label)). report(Drugs, Reactions, Filter, Report) :- ( Drugs = [_|_] @@ -30,3 +32,14 @@ report_by_reaction([_|T], Report) :- report_by_filter([], Report) :- rdf(Report, rdf:type, aers:'Report'). + +%% reaction(+Drugs, +Filter, ?Reaction, -Report) + +reaction(Drugs, Filter, Reaction, Report) :- + ( Drugs = [_|_] + -> report_by_drug(Drugs, Report) + ; true + ), + report_by_filter(Filter, Report), + rdf(Report, aers:reaction, Reaction_Lit), + literal_text(Reaction_Lit, Reaction). diff --git a/web/html/wizard.html b/web/html/wizard.html index d99bdf1..29ccfbe 100644 --- a/web/html/wizard.html +++ b/web/html/wizard.html @@ -148,6 +148,10 @@ <div class="step-pane" id="measurements"> <h3>Measurements</h3> + <table class="table"> + <thead><tr><th>Reaction</th><th>PRR</th></tr></thead> + <tbody></tbody> + </table> </div> </div> @@ -160,6 +164,7 @@ brandsURL = '../aers/api/drug/brands', synonymsURL = '../aers/api/drug/synonyms', reactionsURL = '../aers/api/reactions'; + prrURL = '../aers/api/measurements/prr'; $(function() { function getURLParameter(name) { @@ -176,6 +181,14 @@ return drugs; } + function getReactions() { + var reactions = []; + $('#reactions .labelbox input[type=checkbox]:checked').each(function(i,e) { + reactions.push($(e).val()); + }); + return reactions; + } + $.fn.updateDrugNames = function(drugs) { var labelbox = $(this).find(".labelbox"); $.ajax(mentionsURL, { @@ -202,13 +215,34 @@ success: function(o) { $(o.reactions).each(function(i, e) { labelbox.append( - '<label class="checkbox"><input type="checkbox">' + '<label class="checkbox"><input type="checkbox" value="'+e.reaction+'">' +e.reaction+'<span class="badge">'+e.count+'</span></label>'); }); } }); }; + $.fn.updateMeasurements = function() { + var drugnames = getDrugNames(), + reactions = getReactions(), + table = $(this).find('tbody'); + + table.html(""); + + $.ajax(prrURL, { + dataType:"json", + data:{ + drugnames:drugnames, + reactions:reactions + }, + success: function(o) { + $(o).each(function(i,e) { + table.append('<tr><td>'+e.reaction+'</td><td>'+e.prr+'</td></tr>'); + }) + } + }); + } + // setup the checkbox toggle buttons $('button[data-toggle=select]').each(function () { @@ -266,6 +300,9 @@ if(o.step==1&&o.direction=="next") { $("#reactions").updateReactions(); } + else if(o.step==2&&o.direction=="next") { + $("#measurements").updateMeasurements(); + } }); });