package me.drton.flightplot.processors;
import me.drton.flightplot.processors.tools.HighPassFilter;
import me.drton.flightplot.processors.tools.LowPassFilter;
import java.util.HashMap;
import java.util.Map;
/**
* User: ton Date: 15.06.13 Time: 12:04
*/
public class Simple extends PlotProcessor {
protected String[] param_Fields;
protected double param_Scale;
protected double param_Offset;
protected double param_Delay;
protected LowPassFilter[] lowPassFilters;
protected HighPassFilter[] highPassFilters;
@Override
public Map<String, Object> getDefaultParameters() {
Map<String, Object> params = new HashMap<String, Object>();
params.put("Fields", "ATT.Pitch ATT.Roll");
params.put("Delay", 0.0);
params.put("LPF", 0.0);
params.put("HPF", 0.0);
params.put("Scale", 1.0);
params.put("Offset", 0.0);
return params;
}
@Override
public void init() {
param_Fields = ((String) parameters.get("Fields")).split(WHITESPACE_RE);
param_Scale = (Double) parameters.get("Scale");
param_Offset = (Double) parameters.get("Offset");
param_Delay = (Double) parameters.get("Delay");
lowPassFilters = new LowPassFilter[param_Fields.length];
highPassFilters = new HighPassFilter[param_Fields.length];
for (int i = 0; i < param_Fields.length; i++) {
LowPassFilter lowPassFilter = new LowPassFilter();
lowPassFilter.setF((Double) parameters.get("LPF"));
lowPassFilters[i] = lowPassFilter;
HighPassFilter highPassFilter = new HighPassFilter();
highPassFilter.setF((Double) parameters.get("HPF"));
highPassFilters[i] = highPassFilter;
}
for (String field : param_Fields) {
addSeries(field);
}
}
protected double preProcessValue(int idx, double time, double in) {
return in;
}
protected double postProcessValue(int idx, double time, double in) {
return in;
}
@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 out = preProcessValue(i, time, ((Number) v).doubleValue());
if (Double.isNaN(out)) {
addPoint(i, time, Double.NaN);
} else {
out = lowPassFilters[i].getOutput(time, out);
out = highPassFilters[i].getOutput(time, out);
out = postProcessValue(i, time, out);
addPoint(i, time + param_Delay, out * param_Scale + param_Offset);
}
}
}
}
}