From d3121c642c61c2afbd91af778e7b2160f0b8af91 Mon Sep 17 00:00:00 2001 From: Mark Halonen Date: Mon, 20 Aug 2018 20:33:24 -0400 Subject: [PATCH] #9 add frequency option --- .../net/relinc/libraries/data/DataSubset.java | 10 +++ .../relinc/viewer/GUI/DataReducerDialog.java | 86 +++++++++++++++++++ .../net/relinc/viewer/GUI/HomeController.java | 12 ++- 3 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 Viewer/src/net/relinc/viewer/GUI/DataReducerDialog.java diff --git a/Libraries/src/net/relinc/libraries/data/DataSubset.java b/Libraries/src/net/relinc/libraries/data/DataSubset.java index 31fac28e..5564558d 100644 --- a/Libraries/src/net/relinc/libraries/data/DataSubset.java +++ b/Libraries/src/net/relinc/libraries/data/DataSubset.java @@ -48,6 +48,12 @@ public void reduceDataNonReversible(int pointsToKeep) { } + public void reduceDataNonReversibleByFrequency(double frequency) { + double reductionFactor = this.getFrequency() / frequency; + int pointsToKeep = this.Data.data.length / (int)reductionFactor; + reduceDataNonReversible(pointsToKeep); + } + public enum baseDataType{ LOAD, DISPLACEMENT, TIME; } @@ -203,5 +209,9 @@ public double[] getTrimmedData(){ public String toString() { return name; } + + public double getFrequency() { + return 1.0 / (this.Data.timeData[1] - this.Data.timeData[0]); + } } diff --git a/Viewer/src/net/relinc/viewer/GUI/DataReducerDialog.java b/Viewer/src/net/relinc/viewer/GUI/DataReducerDialog.java new file mode 100644 index 00000000..f1ba191b --- /dev/null +++ b/Viewer/src/net/relinc/viewer/GUI/DataReducerDialog.java @@ -0,0 +1,86 @@ +package net.relinc.viewer.GUI; + +import java.util.HashMap; +import java.util.Map; + +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TextField; +import javafx.scene.control.ToggleGroup; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; +import javafx.stage.Stage; + +public class DataReducerDialog { + static Map showDataReducerDialog() { + Stage stage = new Stage(); + Label label = new Label("Reduce Data"); + TextField tf = new TextField(); + tf.setPromptText("Points To Keep"); + Button button = new Button("Done"); + button.setDefaultButton(true); + button.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + stage.close(); + } + }); + VBox box = new VBox(); + + box.getChildren().add(label); + RadioButton pointsToKeepMode = new RadioButton("Points To Keep"); + pointsToKeepMode.selectedProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + if(newValue) { + tf.setPromptText("Points To Keep"); + } else { + tf.setPromptText("Data Collection Frequency"); + } + } + }); + pointsToKeepMode.setSelected(true); + RadioButton frequencyMode = new RadioButton("Frequency"); + ToggleGroup group = new ToggleGroup(); + pointsToKeepMode.setToggleGroup(group); + frequencyMode.setToggleGroup(group); + + HBox hBox = new HBox(); + hBox.getChildren().add(pointsToKeepMode); + hBox.getChildren().add(frequencyMode); + hBox.setAlignment(Pos.CENTER); + hBox.setSpacing(5); + box.getChildren().add(hBox); + box.getChildren().add(tf); + box.getChildren().add(button); + box.setSpacing(15); + box.setAlignment(Pos.CENTER); + box.setPadding(new Insets(10.0)); + AnchorPane anchor = new AnchorPane(); + AnchorPane.setBottomAnchor(box, 0.0); + AnchorPane.setTopAnchor(box, 0.0); + AnchorPane.setLeftAnchor(box, 0.0); + AnchorPane.setRightAnchor(box, 0.0); + anchor.getChildren().add(box); + Scene scene = new Scene(anchor, 400, 220); + + stage.setScene(scene); + stage.showAndWait(); + Map ret = new HashMap(); + if(pointsToKeepMode.isSelected()) { + ret.put("pointsToKeep", Integer.parseInt(tf.getText().replaceAll(",", ""))); + } else { + ret.put("frequency", Double.parseDouble(tf.getText().replaceAll(",", ""))); + } + return ret; + } +} diff --git a/Viewer/src/net/relinc/viewer/GUI/HomeController.java b/Viewer/src/net/relinc/viewer/GUI/HomeController.java index 50f3f245..88ddddf0 100644 --- a/Viewer/src/net/relinc/viewer/GUI/HomeController.java +++ b/Viewer/src/net/relinc/viewer/GUI/HomeController.java @@ -5,6 +5,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; + import javax.imageio.ImageIO; import org.controlsfx.control.CheckListView; import org.controlsfx.control.PopOver; @@ -724,11 +726,17 @@ public void selectCustomRangeButtonFired(){ @FXML public void reduceDataSizeButtonFired() { - int pointsToKeep = Dialogs.getIntValueFromUser("Points To Keep", "# of points"); + Map reduceParams = DataReducerDialog.showDataReducerDialog(); getCheckedSamples().stream().forEach(sample -> { sample.DataFiles.stream().forEach(df -> { df.dataSubsets.stream().forEach(subset -> { - subset.reduceDataNonReversible(pointsToKeep); + if(reduceParams.containsKey("pointsToKeep")) + { + subset.reduceDataNonReversible(reduceParams.get("pointsToKeep").intValue()); + } else { + subset.reduceDataNonReversibleByFrequency(reduceParams.get("frequency").doubleValue()); + } + }); }); });