diff --git a/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java b/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java index b65416fb578e58cbfab95d71fddf6b7e1182eb8d..43c80637808636a700db3cfc5fc107a374dd34ec 100644 --- a/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java +++ b/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java @@ -293,6 +293,7 @@ public class ExperimentApi extends WokenClientController { new Thread(() -> { String query = experiment.computeExaremeQuery(params); String url = miningExaremeQueryUrl + "/" + algoCode; + // Results are stored in the experiment object try { StringBuilder results = new StringBuilder(); diff --git a/src/main/java/eu/hbp/mip/model/Experiment.java b/src/main/java/eu/hbp/mip/model/Experiment.java index 377e1f00b95e341ec970e58b20c1b584403e5c3b..c42fb6eb88381396d1e640a872e757d3048010d8 100644 --- a/src/main/java/eu/hbp/mip/model/Experiment.java +++ b/src/main/java/eu/hbp/mip/model/Experiment.java @@ -138,13 +138,39 @@ public class Experiment { public String computeExaremeQuery(List<AlgorithmParam> params) { List<ExaremeQueryElement> queryElements = new LinkedList<>(); + // parameters + String design = ""; + if (params != null) { + for (AlgorithmParam p : params) + { + ExaremeQueryElement paramEl = new ExaremeQueryElement(); + paramEl.setName(p.getCode()); + paramEl.setDesc(""); + paramEl.setValue(p.getValue()); + queryElements.add(paramEl); + + if (p.getCode().equals("design")) { + design = p.getValue(); + } + } + } + + List<String> variables = new ArrayList<>(); + List<String> covariables = new ArrayList<>(); + List<String> groupings = new ArrayList<>(); + + for (Variable var : model.getQuery().getVariables()) { variables.add(var.getCode()); } + for (Variable var : model.getQuery().getCovariables()) { covariables.add(var.getCode()); } + for (Variable var : model.getQuery().getGrouping()) { groupings.add(var.getCode()); } + // Set algorithm specific queries - if (this.isExaremeAlgorithm()._2.equals(WP_K_MEANS)) { + String algoName = this.isExaremeAlgorithm()._2; + if (algoName.equals(WP_K_MEANS)) { // columns List<String> columns = new ArrayList<>(); - for (Variable var : model.getQuery().getVariables()) { columns.add(var.getCode()); } - for (Variable var : model.getQuery().getCovariables()) { columns.add(var.getCode()); } - for (Variable var : model.getQuery().getGrouping()) { columns.add(var.getCode()); } + columns.addAll(variables); + columns.addAll(covariables); + columns.addAll(groupings); StringBuilder sb = new StringBuilder(); int i = 0; for (String s : columns) @@ -160,18 +186,38 @@ public class Experiment { columnsEl.setDesc(""); columnsEl.setValue(sb.toString()); queryElements.add(columnsEl); - } + } else if (algoName.equals(WP_LINEAR_REGRESSION)) { + List<String> vars = new ArrayList<>(); + vars.addAll(variables); + vars.addAll(covariables); - // parameters - if (params != null) { - for (AlgorithmParam p : params) + String operator = design.equals("factorial") ? "*" : "+"; + StringBuilder sb = new StringBuilder(); + int i = 0; + for (String s : vars) { - ExaremeQueryElement paramEl = new ExaremeQueryElement(); - paramEl.setName(p.getCode()); - paramEl.setDesc(""); - paramEl.setValue(p.getValue()); - queryElements.add(paramEl); + i++; + sb.append(s); + if (i < vars.size()) { + sb.append(operator); + } + } + ExaremeQueryElement xEl = new ExaremeQueryElement(); + xEl.setName("x"); + xEl.setDesc(""); + xEl.setValue(sb.toString()); + queryElements.add(xEl); + + StringBuilder sby = new StringBuilder(); + for (String s : variables) + { + sby.append(s); } + ExaremeQueryElement yEl = new ExaremeQueryElement(); + yEl.setName("y"); + yEl.setDesc(""); + yEl.setValue(sby.toString()); + queryElements.add(yEl); } // datasets @@ -190,8 +236,7 @@ public class Experiment { ExaremeQueryElement datasetsEl = new ExaremeQueryElement(); datasetsEl.setName("dataset"); datasetsEl.setDesc(""); - datasetsEl.setValue("adni,ppmi,edsd"); -// datasetsEl.setValue(datasets.toString()); + datasetsEl.setValue(datasets.toString()); queryElements.add(datasetsEl); return gson.toJson(queryElements); diff --git a/src/main/resources/data/exareme_algorithms.json b/src/main/resources/data/exareme_algorithms.json index 1e4ade443bcd959365991bb7abf4975bd038976a..4f05bb102fe2c5305ddd820f0cf9a10e4b3ef20d 100644 --- a/src/main/resources/data/exareme_algorithms.json +++ b/src/main/resources/data/exareme_algorithms.json @@ -7,23 +7,23 @@ "description": "Linear Regression using Exareme services", "parameters": [ { - "code": "x", - "label": "x", - "type": "string", - "description": "The expression for x-axis" - }, - { - "code": "y", - "label": "y", - "type": "string", - "description": "The expression for y-axis" + "code": "design", + "default_value": "factorial", + "description": "The type of multi-factors design. Choose 'factorial' to enable interactions analysis or 'additive' for a model without no interaction at all.", + "label": "design", + "type": "enumeration", + "values": [ + "factorial", + "additive" + ] } ], "constraints": { "variable": { - "real": true, - "binominal": true, - "polynominal": true + "binominal": false, + "integer": true, + "polynominal": false, + "real": true } } },