Global refactoring of plots

This commit is contained in:
Alexander Nozik 2016-09-25 20:19:50 +03:00
parent 84338de011
commit c8651e0f26
10 changed files with 77 additions and 57 deletions

View File

@ -28,8 +28,8 @@ import hep.dataforge.meta.ConfigChangeListener;
import hep.dataforge.meta.Configuration;
import hep.dataforge.meta.Meta;
import hep.dataforge.meta.MetaBuilder;
import hep.dataforge.plots.data.DynamicPlottable;
import hep.dataforge.plots.data.DynamicPlottableGroup;
import hep.dataforge.plots.data.TimePlottable;
import hep.dataforge.plots.data.TimePlottableGroup;
import hep.dataforge.plots.fx.PlotContainer;
import hep.dataforge.plots.jfreechart.JFreeChartFrame;
import hep.dataforge.storage.api.Storage;
@ -77,7 +77,7 @@ public class MspViewController implements Initializable, MspListener {
public static final String MSP_DEVICE_TYPE = "msp";
public static final String DEFAULT_CONFIG_LOCATION = "msp-config.xml";
private final DynamicPlottableGroup plottables = new DynamicPlottableGroup();
private final TimePlottableGroup plottables = new TimePlottableGroup();
private final String mspName = "msp";
private MspDevice device;
private Configuration viewConfig;
@ -257,7 +257,7 @@ public class MspViewController implements Initializable, MspListener {
String mass = an.getString("mass");
if (!this.plottables.hasPlottable(mass)) {
DynamicPlottable newPlottable = new DynamicPlottable(mass, mass);
TimePlottable newPlottable = new TimePlottable(mass, mass);
newPlottable.configure(an);
this.plottables.addPlottable(newPlottable);
plot.add(newPlottable);

View File

@ -17,8 +17,8 @@ import hep.dataforge.exceptions.MeasurementException;
import hep.dataforge.fx.ConsoleFragment;
import hep.dataforge.meta.Meta;
import hep.dataforge.meta.MetaBuilder;
import hep.dataforge.plots.data.DynamicPlottable;
import hep.dataforge.plots.data.DynamicPlottableGroup;
import hep.dataforge.plots.data.TimePlottable;
import hep.dataforge.plots.data.TimePlottableGroup;
import hep.dataforge.plots.fx.FXPlotFrame;
import hep.dataforge.plots.fx.PlotContainer;
import hep.dataforge.plots.jfreechart.JFreeChartFrame;
@ -75,7 +75,7 @@ public class VacCollectorController implements Initializable, DeviceListener, Me
private LoaderConnection storageConnection;
private VacCollectorDevice device;
private PlotContainer plotContainer;
private DynamicPlottableGroup plottables;
private TimePlottableGroup plottables;
private BiFunction<VacCollectorDevice, Storage, PointLoader> loaderFactory;
@FXML
private AnchorPane plotHolder;
@ -161,10 +161,10 @@ public class VacCollectorController implements Initializable, DeviceListener, Me
private void setupView() {
vacBoxHolder.getChildren().clear();
plottables = new DynamicPlottableGroup();
plottables = new TimePlottableGroup();
views.stream().forEach((controller) -> {
vacBoxHolder.getChildren().add(controller.getComponent());
DynamicPlottable plot = new DynamicPlottable(controller.getTitle(),
TimePlottable plot = new TimePlottable(controller.getTitle(),
controller.getName());
plot.configure(controller.meta());
plottables.addPlottable(plot);
@ -175,7 +175,7 @@ public class VacCollectorController implements Initializable, DeviceListener, Me
plotContainer.setPlot(setupPlot(plottables));
}
private FXPlotFrame setupPlot(DynamicPlottableGroup plottables) {
private FXPlotFrame setupPlot(TimePlottableGroup plottables) {
Meta plotConfig = new MetaBuilder("plotFrame")
.setNode(new MetaBuilder("yAxis")
.setValue("type", "log")

View File

@ -273,8 +273,8 @@ public class NumassPlugin extends BasicPlugin {
}
private XYAdapter getAdapter(Meta an) {
if (an.hasNode(PointAdapter.DATA_ADAPTER_ANNOTATION_NAME)) {
return new XYAdapter(an.getNode(PointAdapter.DATA_ADAPTER_ANNOTATION_NAME));
if (an.hasNode(PointAdapter.DATA_ADAPTER_KEY)) {
return new XYAdapter(an.getNode(PointAdapter.DATA_ADAPTER_KEY));
} else {
return new XYAdapter("Uread", "CR", "CRerr");
}

View File

@ -66,9 +66,9 @@ public class MergeDataAction extends ManyToOneAction<Table, Table> {
@Override
protected MetaBuilder outputMeta(DataNode<Table> input) {
String numassPath = input.dataStream().<String>map(data -> data.meta().getString("numass.path", null))
String numassPath = input.dataStream().<String>map(data -> data.meta().getString("numass.path", ""))
.reduce("", (String path, String newPath) -> {
if (path == null) {
if (path.isEmpty()) {
return null;
} else if (path.isEmpty()) {
return newPath;

View File

@ -13,7 +13,7 @@ import hep.dataforge.meta.Meta;
import hep.dataforge.meta.MetaBuilder;
import hep.dataforge.plots.PlotsPlugin;
import hep.dataforge.plots.XYPlotFrame;
import hep.dataforge.plots.XYPlottable;
import hep.dataforge.plots.data.XYPlottable;
import hep.dataforge.plots.data.PlottableData;
import hep.dataforge.tables.*;
import hep.dataforge.values.ValueType;

View File

@ -41,19 +41,19 @@ public class SpectrumDataAdapter extends XYAdapter {
}
public SpectrumDataAdapter(String xName, String yName, String yErrName, String measurementTime) {
super(new MetaBuilder(PointAdapter.DATA_ADAPTER_ANNOTATION_NAME)
.setValue(X_NAME, xName)
.setValue(Y_NAME, yName)
.setValue(Y_ERR_NAME, yErrName)
super(new MetaBuilder(PointAdapter.DATA_ADAPTER_KEY)
.setValue(X_VALUE_KEY, xName)
.setValue(Y_VALUE_KEY, yName)
.setValue(Y_ERROR_KEY, yErrName)
.setValue(POINT_LENGTH_NAME, measurementTime)
.build()
);
}
public SpectrumDataAdapter(String xName, String yName, String measurementTime) {
super(new MetaBuilder(PointAdapter.DATA_ADAPTER_ANNOTATION_NAME)
.setValue(X_NAME, xName)
.setValue(Y_NAME, yName)
super(new MetaBuilder(PointAdapter.DATA_ADAPTER_KEY)
.setValue(X_VALUE_KEY, xName)
.setValue(Y_VALUE_KEY, yName)
.setValue(POINT_LENGTH_NAME, measurementTime)
.build()
);
@ -64,14 +64,14 @@ public class SpectrumDataAdapter extends XYAdapter {
}
public DataPoint buildSpectrumDataPoint(double x, long count, double t) {
return new MapPoint(new String[]{getValueName(X_NAME), getValueName(Y_NAME),
return new MapPoint(new String[]{getValueName(X_VALUE_KEY), getValueName(Y_VALUE_KEY),
getValueName(POINT_LENGTH_NAME)},
x, count, t);
}
public DataPoint buildSpectrumDataPoint(double x, long count, double countErr, double t) {
return new MapPoint(new String[]{getValueName(X_NAME), getValueName(Y_NAME),
getValueName(Y_ERR_NAME), getValueName(POINT_LENGTH_NAME)},
return new MapPoint(new String[]{getValueName(X_VALUE_KEY), getValueName(Y_VALUE_KEY),
getValueName(Y_ERROR_KEY), getValueName(POINT_LENGTH_NAME)},
x, count, countErr, t);
}

View File

@ -100,7 +100,7 @@ public class NumassRootHandler implements Handler {
}
private void renderLoader(Context ctx, StringBuilder b, Loader loader) {
String href = "/storage?path=" + loader.getFullPath();
String href = "/storage?path=" + loader.getPath();
b.append(String.format("<p><a href=\"%s\">%s</a> (%s)</p>", href, loader.getName(), loader.getType()));
}
}

View File

@ -23,10 +23,10 @@ package inr.numass.viewer;
import hep.dataforge.context.Context;
import hep.dataforge.context.Encapsulated;
import hep.dataforge.names.AlphanumComparator;
import hep.dataforge.names.Name;
import hep.dataforge.plots.PlotUtils;
import hep.dataforge.plots.data.DynamicPlottable;
import hep.dataforge.plots.data.DynamicPlottableGroup;
import hep.dataforge.plots.data.*;
import hep.dataforge.plots.fx.PlotContainer;
import hep.dataforge.plots.jfreechart.JFreeChartFrame;
import hep.dataforge.storage.api.PointLoader;
@ -43,8 +43,7 @@ import javafx.scene.layout.BorderPane;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
@ -86,16 +85,18 @@ public class MspViewController implements Encapsulated {
/**
* update detector pane with new data
*/
private void updateMspPane(DynamicPlottableGroup mspData) {
private void updateMspPane(Iterable<? extends XYPlottable> mspData) {
JFreeChartFrame frame = new JFreeChartFrame();
PlotUtils.setYAxis(frame, "partial pressure", "mbar", "log");
frame.getConfig().setValue("yAxis.range.lower", 1e-10);
frame.getConfig().setValue("yAxis.range.upper", 1e-3);
PlotUtils.setXAxis(frame, "time", null, "time");
StreamSupport.stream(mspData.spliterator(), false)
.sorted((DynamicPlottable o1, DynamicPlottable o2)
-> Integer.valueOf(o1.getName()).compareTo(Integer.valueOf(o2.getName()))).forEach((pl) -> frame.add(pl));
// StreamSupport.stream(mspData.spliterator(), false)
// .sorted((XYPlottable o1, XYPlottable o2)
// -> Integer.valueOf(o1.getName()).compareTo(Integer.valueOf(o2.getName()))).forEach((pl) -> frame.add(pl));
frame.addAll(mspData);
Platform.runLater(() -> {
mspPlotPane.getChildren().clear();
PlotContainer container = PlotContainer.anchorTo(mspPlotPane);
@ -114,22 +115,43 @@ public class MspViewController implements Encapsulated {
}
public void plotData(List<PointLoader> loaders) {
DynamicPlottableGroup plottables = new DynamicPlottableGroup();
loaders.stream()
.flatMap(loader -> getLoaderData(loader))
.distinct()
.forEach(point -> {
for (String name : point.names()) {
if (!name.equals("timestamp")) {
if (!plottables.hasPlottable(name)) {
plottables.addPlottable(new DynamicPlottable(name, name));
}
}
}
plottables.put(point);
}
);
updateMspPane(plottables);
// TimePlottableGroup plottables = new TimePlottableGroup();
// loaders.stream()
// .flatMap(loader -> getLoaderData(loader))
// .distinct()
// .forEach(point -> {
// for (String name : point.names()) {
// if (!name.equals("timestamp")) {
// if (!plottables.hasPlottable(name)) {
// plottables.addPlottable(new TimePlottable(name, name));
// }
// }
// }
// plottables.put(point);
// }
// );
Collection<String> names = joinNames(loaders);
Stream<DataPoint> stream = loaders.stream().flatMap(loader -> getLoaderData(loader));
updateMspPane(PlotDataUtils.buildGroup("timestamp", names, stream));
}
/**
* Combine names of different point loaders
*
* @param loaders
* @return
*/
private Collection<String> joinNames(List<PointLoader> loaders) {
Set<String> nameSet = new TreeSet<>(new AlphanumComparator());
for (PointLoader loader : loaders) {
nameSet.addAll(loader.getFormat().names().asList());
}
return nameSet;
}
private Stream<DataPoint> getLoaderData(PointLoader loader) {
@ -194,13 +216,13 @@ public class MspViewController implements Encapsulated {
//// List<DataPoint> mspData = (List<DataPoint>) loadProcess.getTask().get();
//
// if (!mspData.isEmpty()) {
// DynamicPlottableGroup plottables = new DynamicPlottableGroup();
// TimePlottableGroup plottables = new TimePlottableGroup();
//
// for (DataPoint point : mspData) {
// for (String name : point.names()) {
// if (!name.equals("timestamp")) {
// if (!plottables.hasPlottable(name)) {
// plottables.addPlottable(new DynamicPlottable(name, name));
// plottables.addPlottable(new TimePlottable(name, name));
// }
// }
// }
@ -229,4 +251,5 @@ public class MspViewController implements Encapsulated {
}
return p.build();
}
}

View File

@ -244,11 +244,11 @@ public class NumassLoaderViewComponent extends AnchorPane implements Initializab
Platform.runLater(() -> {
if (t != null) {
hvPlot.getPlot().plottables().clear();
DynamicPlottableGroup set = new DynamicPlottableGroup();
TimePlottableGroup set = new TimePlottableGroup();
for (DataPoint dp : t) {
String block = dp.getString("block", "default");
if (!set.hasPlottable(block)) {
set.addPlottable(new DynamicPlottable(block, block));
set.addPlottable(new TimePlottable(block, block));
}
set.getPlottable(block).put(dp.getValue("timestamp").timeValue(), dp.getValue("value"));
}

View File

@ -21,8 +21,6 @@ repositories {
dependencies {
// Adding dependencies here will add the dependencies to each subproject.
compile 'org.codehaus.groovy:groovy-all:2.4.+'
shadow 'org.codehaus.groovy:groovy-all:2.4.+'
testCompile group: 'junit', name: 'junit', version:'4.+'
deployerJars "org.apache.maven.wagon:wagon-ssh:2.8"
}
@ -38,7 +36,6 @@ uploadArchives {
shadowJar {
dependencies {
exclude(dependency('org.codehaus.groovy:groovy-all:2.4.+'))
mergeServiceFiles()
}
}