summaryrefslogtreecommitdiff
path: root/altosuilib/AltosFlightStatsTable.java
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2017-10-02 19:33:37 -0700
committerKeith Packard <keithp@keithp.com>2017-10-02 19:33:37 -0700
commit98dc29a7a964f8d653b73989c6751695d168844c (patch)
tree415e274078746fe853aad554aae1a2e5d1a57ca5 /altosuilib/AltosFlightStatsTable.java
parentd75e8b9046295051c91696461e8d5f59c8260ccc (diff)
altoslib: Add user-selectable filter width for data smoothing
Also switch smoothing window to Kaiser and change default accel filter width to 1 second instead of 4 seconds. Now users can play with the filter and see what it does. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altosuilib/AltosFlightStatsTable.java')
-rw-r--r--altosuilib/AltosFlightStatsTable.java84
1 files changed, 65 insertions, 19 deletions
diff --git a/altosuilib/AltosFlightStatsTable.java b/altosuilib/AltosFlightStatsTable.java
index 415c0244..8f7e9bff 100644
--- a/altosuilib/AltosFlightStatsTable.java
+++ b/altosuilib/AltosFlightStatsTable.java
@@ -38,6 +38,11 @@ public class AltosFlightStatsTable extends JComponent implements AltosFontListen
value[i].setFont(AltosUILib.value_font);
}
+ public void set(String ... values) {
+ for (int j = 0; j < values.length; j++)
+ value[j].setText(values[j]);
+ }
+
public FlightStat(GridBagLayout layout, int y, String label_text, String ... values) {
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(AltosUILib.tab_elt_pad, AltosUILib.tab_elt_pad, AltosUILib.tab_elt_pad, AltosUILib.tab_elt_pad);
@@ -87,6 +92,43 @@ public class AltosFlightStatsTable extends JComponent implements AltosFontListen
return String.format("%s %4d° %9.6f'", h, deg, min);
}
+ private FlightStat max_height_stat;
+ private FlightStat max_speed_stat;
+ private FlightStat max_accel_stat;
+ private FlightStat boost_accel_stat;
+ private FlightStat drogue_descent_stat;
+ private FlightStat main_descent_stat;
+
+ public void set_values(AltosFlightStats stats) {
+ if (max_height_stat != null && stats.max_height != AltosLib.MISSING) {
+ max_height_stat.set(String.format("%6.1f m", stats.max_height),
+ String.format("%5.0f ft", AltosConvert.meters_to_feet(stats.max_height)));
+ }
+ if (max_speed_stat != null && stats.max_speed != AltosLib.MISSING) {
+ max_speed_stat.set(String.format("%6.1f m/s", stats.max_speed),
+ String.format("%5.0f fps", AltosConvert.mps_to_fps(stats.max_speed)),
+ String.format("Mach %4.1f", AltosConvert.meters_to_mach(stats.max_speed)));
+ }
+ if (max_accel_stat != null && stats.max_acceleration != AltosLib.MISSING) {
+ max_accel_stat.set(String.format("%6.1f m/s²", stats.max_acceleration),
+ String.format("%5.0f ft/s²", AltosConvert.meters_to_feet(stats.max_acceleration)),
+ String.format("%6.2f G", AltosConvert.meters_to_g(stats.max_acceleration)));
+ }
+ if (boost_accel_stat != null && stats.state_accel[AltosLib.ao_flight_boost] != AltosLib.MISSING) {
+ boost_accel_stat.set(String.format("%6.1f m/s²", stats.state_accel[AltosLib.ao_flight_boost]),
+ String.format("%5.0f ft/s²", AltosConvert.meters_to_feet(stats.state_accel[AltosLib.ao_flight_boost])),
+ String.format("%6.2f G", AltosConvert.meters_to_g(stats.state_accel[AltosLib.ao_flight_boost])));
+ }
+ if (drogue_descent_stat != null && stats.state_speed[AltosLib.ao_flight_drogue] != AltosLib.MISSING) {
+ drogue_descent_stat.set(String.format("%6.1f m/s", -stats.state_speed[AltosLib.ao_flight_drogue]),
+ String.format("%5.0f ft/s", -AltosConvert.meters_to_feet(stats.state_speed[AltosLib.ao_flight_drogue])));
+ }
+ if (main_descent_stat != null && stats.state_speed[AltosLib.ao_flight_main] != AltosLib.MISSING) {
+ main_descent_stat.set(String.format("%6.1f m/s", -stats.state_speed[AltosLib.ao_flight_main]),
+ String.format("%5.0f ft/s", -AltosConvert.meters_to_feet(stats.state_speed[AltosLib.ao_flight_main])));
+ }
+ }
+
public void set_stats(AltosFlightStats stats) {
int y = 0;
if (stats.serial != AltosLib.MISSING) {
@@ -113,9 +155,9 @@ public class AltosFlightStatsTable extends JComponent implements AltosFontListen
String.format("%02d:%02d:%02d UTC", stats.hour, stats.minute, stats.second));
}
if (stats.max_height != AltosLib.MISSING) {
- new FlightStat(layout, y++, "Maximum height",
- String.format("%6.1f m", stats.max_height),
- String.format("%5.0f ft", AltosConvert.meters_to_feet(stats.max_height)));
+ max_height_stat = new FlightStat(layout, y++, "Maximum height",
+ String.format("%6.1f m", stats.max_height),
+ String.format("%5.0f ft", AltosConvert.meters_to_feet(stats.max_height)));
}
if (stats.max_gps_height != AltosLib.MISSING) {
new FlightStat(layout, y++, "Maximum GPS height",
@@ -123,21 +165,21 @@ public class AltosFlightStatsTable extends JComponent implements AltosFontListen
String.format("%5.0f ft", AltosConvert.meters_to_feet(stats.max_gps_height)));
}
if (stats.max_speed != AltosLib.MISSING) {
- new FlightStat(layout, y++, "Maximum speed",
- String.format("%6.1f m/s", stats.max_speed),
- String.format("%5.0f fps", AltosConvert.mps_to_fps(stats.max_speed)),
- String.format("Mach %4.1f", AltosConvert.meters_to_mach(stats.max_speed)));
+ max_speed_stat = new FlightStat(layout, y++, "Maximum speed",
+ String.format("%6.1f m/s", stats.max_speed),
+ String.format("%5.0f fps", AltosConvert.mps_to_fps(stats.max_speed)),
+ String.format("Mach %4.1f", AltosConvert.meters_to_mach(stats.max_speed)));
}
if (stats.max_acceleration != AltosLib.MISSING)
- new FlightStat(layout, y++, "Maximum boost acceleration",
- String.format("%6.1f m/s²", stats.max_acceleration),
- String.format("%5.0f ft/s²", AltosConvert.meters_to_feet(stats.max_acceleration)),
- String.format("%6.2f G", AltosConvert.meters_to_g(stats.max_acceleration)));
+ max_accel_stat = new FlightStat(layout, y++, "Maximum boost acceleration",
+ String.format("%6.1f m/s²", stats.max_acceleration),
+ String.format("%5.0f ft/s²", AltosConvert.meters_to_feet(stats.max_acceleration)),
+ String.format("%6.2f G", AltosConvert.meters_to_g(stats.max_acceleration)));
if (stats.state_accel[AltosLib.ao_flight_boost] != AltosLib.MISSING)
- new FlightStat(layout, y++, "Average boost acceleration",
- String.format("%6.1f m/s²", stats.state_accel[AltosLib.ao_flight_boost]),
- String.format("%5.0f ft/s²", AltosConvert.meters_to_feet(stats.state_accel[AltosLib.ao_flight_boost])),
- String.format("%6.2f G", AltosConvert.meters_to_g(stats.state_accel[AltosLib.ao_flight_boost])));
+ boost_accel_stat = new FlightStat(layout, y++, "Average boost acceleration",
+ String.format("%6.1f m/s²", stats.state_accel[AltosLib.ao_flight_boost]),
+ String.format("%5.0f ft/s²", AltosConvert.meters_to_feet(stats.state_accel[AltosLib.ao_flight_boost])),
+ String.format("%6.2f G", AltosConvert.meters_to_g(stats.state_accel[AltosLib.ao_flight_boost])));
if (stats.state_time[AltosLib.ao_flight_boost] != 0 || stats.state_time[AltosLib.ao_flight_fast] != 0 || stats.state_time[AltosLib.ao_flight_coast] != 0) {
double boost_time = stats.state_time[AltosLib.ao_flight_boost];
@@ -167,14 +209,14 @@ public class AltosFlightStatsTable extends JComponent implements AltosFontListen
label = "Descent rate";
else
label = "Drogue descent rate";
- new FlightStat(layout, y++, label,
+ drogue_descent_stat = new FlightStat(layout, y++, label,
String.format("%6.1f m/s", -stats.state_speed[AltosLib.ao_flight_drogue]),
String.format("%5.0f ft/s", -AltosConvert.meters_to_feet(stats.state_speed[AltosLib.ao_flight_drogue])));
}
if (stats.state_speed[AltosLib.ao_flight_main] != AltosLib.MISSING)
- new FlightStat(layout, y++, "Main descent rate",
- String.format("%6.1f m/s", -stats.state_speed[AltosLib.ao_flight_main]),
- String.format("%5.0f ft/s", -AltosConvert.meters_to_feet(stats.state_speed[AltosLib.ao_flight_main])));
+ main_descent_stat = new FlightStat(layout, y++, "Main descent rate",
+ String.format("%6.1f m/s", -stats.state_speed[AltosLib.ao_flight_main]),
+ String.format("%5.0f ft/s", -AltosConvert.meters_to_feet(stats.state_speed[AltosLib.ao_flight_main])));
if (stats.state_time[AltosLib.ao_flight_drogue] != 0 || stats.state_time[AltosLib.ao_flight_main] != 0) {
double drogue_duration = stats.state_time[AltosLib.ao_flight_drogue];
double main_duration = stats.state_time[AltosLib.ao_flight_main];
@@ -210,6 +252,10 @@ public class AltosFlightStatsTable extends JComponent implements AltosFontListen
AltosUIPreferences.unregister_font_listener(this);
}
+ public void filter_changed(AltosFlightStats stats) {
+ set_values(stats);
+ }
+
public AltosFlightStatsTable() {
layout = new GridBagLayout();