GroIMP comes with an included management of dataset and the ability to visualize them, in the following only a small introduction is given.
A datasets in GroIMP are simple tables, that can be referenced from RGG and the GUI.
To create a Dataset in GroIMP the DataSetRef object is used as following:
DatasetRef diagram = new DatasetRef("plot");
In a dataset each row is described as a Dataseries and to add data a new series has to be added as following:
Dataseries ds = diagram.addRow();
Now we can add numeric data to the different columns of this series by using the set function:
ds.set(0,1.54); ds.set(1,3); for(int i=2; i<10; i++){ ds.set(i,i+i); }
It is also possible to create a new row in a dataset in one line of code:
diagram.addRow().set(0,1).set(1,2);
A dataset is a Resource of GroIMP and therefore not removed when the simulation is reset or recompiled. In order to clear a dataset the following command can be used.
diagram.clear();
Similar to the set function it is possible to add column titles using the following command:
diagram.setColumnKey(0,"max(x)").setColumnKey(1,"max(y)").setColumnKey(2,"max(z)");
It is possible to export a dataset from RGG using a Java FileWriter as shown below:
import java.io.FileWriter; public void getData(){ DatasetRef diagram = new DatasetRef("plot"); FileWriter fw = new FileWriter("/home/tim/test.csv"); diagram.export(fw); fw.close(); }
It is also possible to define the Separator that is used for the file by e.g. diagram.export(fw,“,”);
And the same works as well with a StringBuffer instead of the FileWriter.
The datasets can be seen in the dataset explorer. This can be found in the main menu under Panels/Explorers/datasets. Clicking on a dataset opens a very simplistic table view where the data can be seen and also exported.
To visualize a dataset in GroIMP the chart() function is used:
chart(diagram, XY_PLOT);
in a full example like this:
module A(float len) extends Sphere(0.1) { {setShader(GREEN);} } DatasetRef diagram = new DatasetRef("plot"); protected void init () [ Axiom ==> A(1); { diagram.setTitle("My fancy plot"); diagram.clear(); diagram.setColumnKey(0,"max(x)").setColumnKey(1,"max(y)").setColumnKey(2,"max(z)"); chart(diagram, XY_PLOT); } ] public void run () [ A(x) ==> F(x) [RU(30) RH(90) A(x*0.8)] [RU(-30) RH(90) A(x*0.8)]; { diagram.addRow().set(0,max(location((*A*)).x)).set(1,max(location((*A*)).y)).set(2,max(location((*A*)).z)); } ]