Skip to content
Snippets Groups Projects
Commit f65d30a7 authored by Manuel Spuhler's avatar Manuel Spuhler
Browse files

Exareme setup WIP

parent 10fe6edc
No related branches found
No related tags found
No related merge requests found
......@@ -76,11 +76,12 @@ public class ExperimentApi extends WokenClientController {
experiment.setName(expQuery.getName());
experiment.setCreatedBy(user);
experiment.setModel(modelRepository.findOne(expQuery.getModel()));
experiment.setSource(expQuery.getSource());
experimentRepository.save(experiment);
LOGGER.info("Experiment saved");
if (!experiment.isExaremeAlgorithm()._1) {
if (experiment.getSource() != "exareme") {
sendExperiment(experiment);
} else {
String algoCode = expQuery.getAlgorithms().get(0).getCode();
......@@ -286,7 +287,7 @@ public class ExperimentApi extends WokenClientController {
// >> Temporary: we should integrate exareme in a proper way in the future
// this runs in the background. For future optimization: use a thread pool
new Thread(() -> {
String query = experiment.computeExaremeQuery(params);
String query = ""; //experiment.computeExaremeQuery(params);
String url = miningExaremeQueryUrl + "/" + algoCode;
// Results are stored in the experiment object
......
......@@ -26,7 +26,7 @@ public class MethodsApi extends WokenClientController {
private static final Logger LOGGER = LoggerFactory.getLogger(MethodsApi.class);
private static final Gson gson = new Gson();
d
@Value("#{'${services.exareme.algorithmsUrl:http://localhost:9090/mining/algorithms.json}'}")
private String exaremeAlgorithmsUrl;
......
......@@ -19,7 +19,6 @@ import scala.collection.JavaConversions;
import javax.persistence.*;
import java.lang.reflect.Type;
import java.util.*;
import scala.Tuple2;
/**
* Created by habfast on 21/04/16.
......@@ -28,12 +27,6 @@ import scala.Tuple2;
@Table(name = "`experiment`")
public class Experiment {
public static final String WP_K_MEANS = "K_MEANS";
public static final String WP_LINEAR_REGRESSION = "WP_LINEAR_REGRESSION";
public static final String WP_VARIABLES_HISTOGRAM = "WP_VARIABLES_HISTOGRAM";
public static final String WP_REGRESSION_TREE = "PIPELINE_ISOUP_REGRESSION_TREE_SERIALIZER";
public static final String WP_MODEL_TREE = "PIPELINE_ISOUP_MODEL_TREE_SERIALIZER";
private static final Logger LOGGER = LoggerFactory.getLogger(Experiment.class);
private static final Gson gson = new Gson();
......@@ -89,6 +82,10 @@ public class Experiment {
@Expose
private boolean resultsViewed = false;
@Column(columnDefinition="TEXT")
@Expose
private String source;
public Experiment() {
/*
* Empty constructor is needed by Hibernate
......@@ -137,159 +134,10 @@ public class Experiment {
validationsSeq, Option.empty());
}
private String chainsParams(List<String> params, String operator) {
StringBuilder sb = new StringBuilder();
int i = 0;
for (String s : params)
{
i++;
sb.append(s);
if (i < params.size()) {
sb.append(operator);
}
}
return sb.toString();
}
public String computeExaremeQuery(List<AlgorithmParam> params) {
List<ExaremeQueryElement> queryElements = new LinkedList<>();
// parameters
String design = ""; // TODO: don't assign to a global
String nobuckets = "";
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();
}
if (p.getCode().equals("nobuckets")) {
nobuckets = 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
String algoName = this.isExaremeAlgorithm()._2;
if (algoName.equals(WP_K_MEANS)) {
// columns
List<String> columns = variables;
columns.addAll(covariables);
columns.addAll(groupings);
ExaremeQueryElement columnsEl = new ExaremeQueryElement();
columnsEl.setName("columns");
columnsEl.setDesc("");
columnsEl.setValue(chainsParams(columns, ","));
queryElements.add(columnsEl);
} else if (algoName.equals(WP_LINEAR_REGRESSION)) {
List<String> nominals = covariables.isEmpty() ? groupings : covariables;
nominals.addAll(groupings);
String operator = design.equals("factorial") ? "*" : "+";
ExaremeQueryElement xEl = new ExaremeQueryElement();
xEl.setName("x");
xEl.setDesc("");
xEl.setValue(chainsParams(nominals, operator));
queryElements.add(xEl);
ExaremeQueryElement yEl = new ExaremeQueryElement();
yEl.setName("y");
yEl.setDesc("");
yEl.setValue(chainsParams(variables, ","));
queryElements.add(yEl);
} else if (algoName.equals(WP_VARIABLES_HISTOGRAM)) {
List<String> column1 = variables;
ExaremeQueryElement columnsEl = new ExaremeQueryElement();
columnsEl.setName("column1");
columnsEl.setDesc("");
columnsEl.setValue(chainsParams(column1, ","));
queryElements.add(columnsEl);
List<String> column2 = covariables.isEmpty() ? groupings : covariables;
ExaremeQueryElement columnsEl2 = new ExaremeQueryElement();
columnsEl2.setName("column2");
columnsEl2.setDesc("");
columnsEl2.setValue(chainsParams(column2, ","));
queryElements.add(columnsEl2);
if (!nobuckets.isEmpty()) {
ExaremeQueryElement columnsEl3 = new ExaremeQueryElement();
columnsEl3.setName("nobuckets");
columnsEl3.setDesc("");
columnsEl3.setValue(nobuckets);
queryElements.add(columnsEl3);
}
} else if (algoName.equals(WP_REGRESSION_TREE) || algoName.equals(WP_MODEL_TREE)) {
List<String> target = variables;
List<String> descriptive = covariables.isEmpty() ? groupings : covariables;
descriptive.addAll(groupings);
ExaremeQueryElement xEl = new ExaremeQueryElement();
xEl.setName("target_attributes");
xEl.setDesc("");
xEl.setValue(chainsParams(target, ","));
queryElements.add(xEl);
ExaremeQueryElement yEl = new ExaremeQueryElement();
yEl.setName("descriptive_attributes");
yEl.setDesc("");
yEl.setValue(chainsParams(descriptive, ","));
queryElements.add(yEl);
}
// datasets
StringBuilder datasets = new StringBuilder();
List<Variable> trainingDatasets = model.getQuery().getTrainingDatasets();
int j = 0;
for (Variable var : trainingDatasets)
{
j++;
datasets.append(var.getCode());
if (j < trainingDatasets.size() ) {
datasets.append(",");
}
}
ExaremeQueryElement datasetsEl = new ExaremeQueryElement();
datasetsEl.setName("dataset");
datasetsEl.setDesc("");
// datasetsEl.setValue("adni,ppmi,edsd,fbf,clm");
datasetsEl.setValue(datasets.toString());
queryElements.add(datasetsEl);
// filter
String filter = model.getQuery().getFilters();
ExaremeQueryElement filterEl = new ExaremeQueryElement();
filterEl.setName("filter");
filterEl.setDesc("");
filterEl.setValue(filter);
queryElements.add(filterEl);
return gson.toJson(queryElements);
}
public JsonObject jsonify() {
JsonObject exp = gson.toJsonTree(this).getAsJsonObject();
JsonParser parser = new JsonParser();
Tuple2<Boolean, String> isExaremeAlgorithm = this.isExaremeAlgorithm();
Boolean isExaremeAlgorithm = this.getSource() == "exareme";
if (this.algorithms != null)
{
......@@ -308,7 +156,7 @@ public class Experiment {
if (this.result != null && !this.hasServerError) {
exp.remove("result");
if (!isExaremeAlgorithm._1) {
if (!isExaremeAlgorithm) {
JsonElement jsonResult = parser.parse(this.result);
exp.add("result", jsonResult);
} else {
......@@ -331,18 +179,6 @@ public class Experiment {
JsonObject jsonData = tryJson;
jsonObjectResult.add("data", jsonData);
// add mime-type
String algo = isExaremeAlgorithm._2;
if (jsonData.get("Error") != null) {
jsonObjectResult.add("type", new JsonPrimitive("text/plain+error"));
} else if (algo.equals( WP_K_MEANS) || algo.equals( WP_VARIABLES_HISTOGRAM)) {
jsonObjectResult.add("type", new JsonPrimitive("application/vnd.highcharts+json"));
} else if (algo.equals(WP_LINEAR_REGRESSION)) {
jsonObjectResult.add("type", new JsonPrimitive("application/vnd.dataresource+json"));
} else if (algo.equals(WP_REGRESSION_TREE) || algo.equals(WP_MODEL_TREE)) {
jsonObjectResult.add("type", new JsonPrimitive("application/vnd.visjs+javascript"));
}
jsonArrayResult.add(jsonObjectResult);
exp.add("result", jsonArrayResult);
......@@ -456,29 +292,11 @@ public class Experiment {
this.shared = shared;
}
public Tuple2<Boolean, String> isExaremeAlgorithm() {
Boolean isExareme = false;
String algorithm = "";
String algorithms = this.algorithms;
if (algorithms.contains(WP_K_MEANS)) {
isExareme = true;
algorithm = WP_K_MEANS;
} else if (algorithms.contains(WP_LINEAR_REGRESSION)) {
isExareme = true;
algorithm = WP_LINEAR_REGRESSION;
} else if (algorithms.contains(WP_VARIABLES_HISTOGRAM)) {
isExareme = true;
algorithm = WP_VARIABLES_HISTOGRAM;
} else if (algorithms.contains(WP_REGRESSION_TREE)) {
isExareme = true;
algorithm = WP_REGRESSION_TREE;
} else if (algorithms.contains(WP_MODEL_TREE)) {
isExareme = true;
algorithm = WP_MODEL_TREE;
}
public String getSource() {
return this.source;
}
return new Tuple2<Boolean, String>(isExareme, algorithm);
public void setSource(String source) {
this.source = source;
}
}
......@@ -9,6 +9,7 @@ public class ExperimentQuery {
private String name;
private String model;
private String source;
private List<ExperimentValidator> validations;
private List<Algorithm> algorithms;
......@@ -28,6 +29,14 @@ public class ExperimentQuery {
this.model = model;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public List<ExperimentValidator> getValidations() {
return validations;
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment