package uk.ac.ed.inf.biopepa.ui.wizards.timeseries;
import java.util.Set;
import java.util.Map.Entry;
import org.sedml.ChangeAttribute;
import org.sedml.Model;
import org.sedml.Output;
import org.sedml.Plot2D;
import org.sedml.SEDMLDocument;
import org.sedml.SedML;
import org.sedml.Simulation;
import org.sedml.UniformTimeCourse;
import org.sedml.modelsupport.SUPPORTED_LANGUAGE;
import uk.ac.ed.inf.biopepa.core.sba.ExperimentSet;
import uk.ac.ed.inf.biopepa.core.sba.SBAModel;
import uk.ac.ed.inf.biopepa.core.sba.ExperimentLine;
public class ExperimentSedMLExport {
private ExperimentSet experimentSet;
private SBAModel sbaModel;
public ExperimentSedMLExport (ExperimentSet es, SBAModel model){
this.experimentSet = es;
this.sbaModel = model;
}
public SEDMLDocument exportToSedML (){
SEDMLDocument sedMLDoc = new SEDMLDocument();
SedML sedml = sedMLDoc.getSedMLModel();
// SBMLExport sbmlExport = new SBMLExport ();
// sbmlExport.setModel(this.model.getSBAModel());
// String modelSource = sbmlExport.toString();
// TODO: should take the simulation etc from the settings,
// which means we will have to pass them in here.
Simulation sim = new UniformTimeCourse("id", "name", 0, 0, 10, 100);
sedml.addSimulation(sim);
int line = 0;
for (ExperimentLine eline : experimentSet.getExperimentLines()){
line++;
// If the model has the same id each time around then
// subsequent models will not get added so we attach the
// experiment line number.
Model sedmlModel = new Model ("NoID_" + line,
"mymodel",
SUPPORTED_LANGUAGE.SBML_GENERIC.getURN(),
// Hmm we don't actually output the model to
// this so this is 'dodgy' at best.
"model.xml");
Set<Entry<String, Number>> entries = eline.getInitialPopulations().entrySet();
for (Entry<String, Number> override : entries){
ChangeAttribute change = new ChangeAttribute(override.getKey(),
override.getValue().toString());
System.out.println ("Adding pop: " + override.getKey() + " : " + override.getValue().toString());
if (sedmlModel.addChange(change)){
System.out.println("Change added successfully");
} else {
System.out.println ("Change not added successfully");
}
}
entries = eline.getRateValues().entrySet();
for (Entry<String, Number> override : entries){
ChangeAttribute change = new ChangeAttribute(override.getKey(),
override.getValue().toString());
System.out.println ("Adding rate value: " + override.getKey() + " : " + override.getValue().toString());
sedmlModel.addChange(change);
}
Set<Entry<String, Boolean>> reactionEntries = eline.getReactionActivations().entrySet();
for (Entry<String, Boolean> entry : reactionEntries){
ChangeAttribute change = new ChangeAttribute(entry.getKey(),
entry.getValue().toString());
System.out.println ("Adding reaction act: " + entry.getKey() + " : " + entry.getValue().toString());
sedmlModel.addChange(change);
}
sedml.addModel(sedmlModel);
}
Output thisOutput = new Plot2D ("NoID", "myoutputname");
sedml.addOutput(thisOutput);
// Should we validate before returning?
return sedMLDoc;
}
}