private static List<SampledValue> removeQualityBad(List<SampledValue> toReduce) { List<SampledValue> result = new ArrayList<SampledValue>(); for (SampledValue val : toReduce) { if (val.getQuality() != Quality.BAD) { result.add(val); } } return result; }
private static List<SampledValue> removeQualityBad(List<SampledValue> toReduce) { return toReduce.stream() .filter(sv -> sv.getQuality() != Quality.BAD) .collect(Collectors.toList()); }
void write(SampledValue val, JsonGenerator jGen) throws IOException { jGen.writeStartObject(); jGen.writeNumberField("time", val.getTimestamp()); jGen.writeStringField("quality", val.getQuality().name()); writeValue(val, jGen); jGen.writeEndObject(); }
/** * Process the case where the interpolation mode of f1 is NONE. */ private void processNone(final ReadOnlyTimeSeries f1, final ReadOnlyTimeSeries f2) { m_mode = InterpolationMode.NONE; for (SampledValue value : f1.getValues(Long.MIN_VALUE)) { if (value.getQuality() == Quality.BAD) continue; final long t = value.getTimestamp(); final SampledValue v2 = f2.getValue(t); if (v2 == null) continue; final Quality q2 = v2.getQuality(); if (q2 == Quality.BAD) continue; m_timestamps.add(t); } }
void write(SampledValue val, JsonGenerator jGen) throws IOException { jGen.writeStartObject(); jGen.writeNumberField("time", val.getTimestamp()); jGen.writeStringField("quality", val.getQuality().name()); writeValue(val, jGen); jGen.writeEndObject(); }
private SampledValue interpolateBoolean(SampledValue x0, SampledValue x1, long t) { // linear interpolation on booleans is the same as nearest interpolation final long dt0 = Math.abs(t - x0.getTimestamp()); final long dt1 = Math.abs(t - x1.getTimestamp()); if (dt0 <= dt1) return new SampledValue(x0.getValue(), t, x0.getQuality()); else return new SampledValue(x1.getValue(), t, x1.getQuality()); }
protected void init2() { for (Map.Entry<Integer, SampledValue> entry : comingValues.entrySet()) { final int key = entry.getKey(); final SampledValue sv = entry.getValue(); final float val = sv.getQuality() == Quality.GOOD ? (doAverage ? sv.getValue().getFloatValue() : 0) : Float.NaN; final boolean ok = !Float.isNaN(val); nextValuesIntegrated.put(key, new SampledValue(ok ? new FloatValue(val) : FloatValue.NAN, sv.getTimestamp(), ok ? Quality.GOOD : Quality.BAD)); } }
@Override public SampledValue interpolate(SampledValue x0, SampledValue x1, long t, Class<? extends Value> valueType) { if (x0 != null) { return new SampledValue(x0.getValue(), t, x0.getQuality()); } else if (x1 != null) { return new SampledValue(x1.getValue(), t, Quality.BAD); } throw new IllegalArgumentException("Cannot perform step interpolation with both support points being null."); }
private static final Object getValue(final SampledValue sv) { if (sv == null || sv.getQuality() == Quality.BAD) return ""; final float value = sv.getValue().getFloatValue(); return Float.isFinite(value) ? value : ""; }
@Override public void shiftTimestamps(long dt) { final NavigableSet<SampledValue> shiftedValues = new TreeSet<>(); for (SampledValue value : m_values) { final long t = value.getTimestamp() + dt; // if (t<0) continue; final SampledValue newValue = new SampledValue(value.getValue(), t, value.getQuality()); shiftedValues.add(newValue); } m_values.clear(); m_values.addAll(shiftedValues); }
@Override public float getSum(boolean ignoreMissingPoints, InterpolationMode mode) { float value = 0; for (int i=0;i<size;i++) { SampledValue sv = getElement(i, mode); if (sv == null || sv.getQuality() == Quality.BAD) { if (!ignoreMissingPoints) return Float.NaN; continue; } value += sv.getValue().getFloatValue(); } return value; }
@Override public void shiftTimestamps(long dt) { final List<SampledValue> shiftedValues = new ArrayList<>(m_values.getValues().size()); for (SampledValue value : m_values.getValues()) { final long t = value.getTimestamp() + dt; // if (t<0) continue; final SampledValue newValue = new SampledValue(value.getValue(), t, value.getQuality()); shiftedValues.add(newValue); } m_values.clear(); m_values.addValuesCopies(shiftedValues); }
@Override public SampledValue apply(Collection<SampledValue> input) { float v = 0f; int cnt = 0; for (SampledValue sv: input) { if (sv != null && sv.getQuality() == Quality.GOOD) { v += sv.getValue().getFloatValue(); cnt++; } } return new SampledValue(new FloatValue(v/cnt), input.iterator().next().getTimestamp(), cnt > 0 ? Quality.GOOD : Quality.BAD); } };
@Override public SampledValue apply(Collection<SampledValue> input) { float v = 0f; boolean qualityGood = false; for (SampledValue sv: input) { if (sv != null && sv.getQuality() == Quality.GOOD) { v += sv.getValue().getFloatValue(); qualityGood = true; } } return new SampledValue(new FloatValue(v), input.iterator().next().getTimestamp(), qualityGood ? Quality.GOOD : Quality.BAD); } };
@Override public float getSum(boolean ignoreMissingPoints, InterpolationMode mode) { float value = 0; for (int i=0;i<iterator.size();i++) { SampledValue sv = getElement(i, mode); if (sv == null || sv.getQuality() == Quality.BAD) { if (!ignoreMissingPoints) return Float.NaN; continue; } value += sv.getValue().getFloatValue(); } return value; }
@Override public SampledValue getValue(long time) { SampledValue previous = getPreviousValue(time); SampledValue next = getNextValue(time); if (previous == null) return null; if (next != null && next.getTimestamp() == time) return next; Instant i = Instant.ofEpochMilli(time); if (i.minus(totalDuration).toEpochMilli() > previous.getTimestamp()) // FIXME overflow return null; return new SampledValue(previous.getValue(), time, previous.getQuality()); }
@Override public final SampledValue apply(SampledValue value) { return new SampledValue(new FloatValue(value.getValue().getFloatValue() * m_factor), value.getTimestamp(), value.getQuality()); }
@Override public final SampledValue apply(SampledValue value) { return new SampledValue(new FloatValue(value.getValue().getFloatValue() + m_addend), value.getTimestamp(), value.getQuality()); }
@Override public final SampledValue apply(final SampledValue value1, final SampledValue value2) { final long t1 = value1.getTimestamp(); final long t2 = value2.getTimestamp(); if (t1 != t2) return new SampledValue(new FloatValue(0.f), t1, Quality.BAD); final float x1 = value1.getValue().getFloatValue(); final float x2 = value2.getValue().getFloatValue(); final Quality q1 = value1.getQuality(); final Quality q2 = value2.getQuality(); final Quality quality = (q1 == Quality.GOOD && q2 == Quality.GOOD) ? Quality.GOOD : Quality.BAD; return new SampledValue(new FloatValue(x1 + x2), t2, quality); } }
@Override public synchronized SampledValue getMin(long t0, long t1) { final FloatTreeTimeSeries f = new FloatTreeTimeSeries(this); f.multiplyBy(-1.f); final SampledValue negMax = f.getMax(t0, t1); return new SampledValue(new FloatValue(negMax.getValue().getFloatValue()), negMax.getTimestamp(), negMax .getQuality()); }