package me.drton.flightplot.processors;
import me.drton.flightplot.processors.tools.DispersionTracker;
import java.util.HashMap;
import java.util.Map;
/**
* User: ton Date: 24.06.13 Time: 22:46
*/
public class Dispersion extends PlotProcessor {
private DispersionTracker[] dispersionTrackers;
private String[] param_Fields;
private double param_Scale;
@Override
public Map<String, Object> getDefaultParameters() {
Map<String, Object> params = new HashMap<String, Object>();
params.put("Fields", "IMU.AccZ");
params.put("LPF", 20.0);
params.put("HPF", 1.0);
params.put("Scale", 1.0);
return params;
}
@Override
public void init() {
param_Fields = ((String) parameters.get("Fields")).split(WHITESPACE_RE);
dispersionTrackers = new DispersionTracker[param_Fields.length];
for (int i = 0; i < param_Fields.length; ++i) {
DispersionTracker tracker = new DispersionTracker();
tracker.setCutoffFreq((Double) parameters.get("HPF"), (Double) parameters.get("LPF"));
dispersionTrackers[i] = tracker;
}
for (String field : param_Fields) {
addSeries(field);
}
param_Scale = (Double) parameters.get("Scale");
}
@Override
public void process(double time, Map<String, Object> update) {
for (int i = 0; i < param_Fields.length; i++) {
String field = param_Fields[i];
Object v = update.get(field);
if (v != null && v instanceof Number) {
double in = ((Number) v).doubleValue();
double out = dispersionTrackers[i].getOutput(time, in);
addPoint(i, time, Math.sqrt(out) * param_Scale);
}
}
}
}