@Override public float integratePositive(TimeInterval interval) { List<TimeInterval> positiveDomains = getPositiveDomain(interval); float result = 0.f; for (TimeInterval subDomain : positiveDomains) { result += integrate(subDomain); } return result; }
@Override public float integrateAbsolute(TimeInterval interval) { return (interval.exists()) ? integrate(interval.getStart(), interval.getEnd()) : 0.f; }
@Override public float integrate(TimeInterval interval) { return (interval.exists()) ? integrate(interval.getStart(), interval.getEnd()) : 0.f; }
@Override public synchronized float integrate(long t0, long t1) { // react to zero range or t1<t0. if (t1 == t0) { return 0.f; } if (t1 < t0) { return -integrate(t1, t0); } final InterpolationFunction function = getInterpolationFunction(); double result = 0; SampledValue left = getValueSecure(t0); for (SampledValue right : getSubset(t0, t1)) { result += function.integrate(left, right, getValueType()).getDoubleValue(); left = right; } SampledValue right = getValueSecure(t1); result += function.integrate(left, right, getValueType()).getDoubleValue(); return (float) result; }
@Override public float getAverage(long t0, long t1) { if (t1 == t0) { SampledValue sv = getValue(t0); if (sv == null || sv.getQuality() == Quality.BAD) return Float.NaN; else return sv.getValue().getFloatValue(); } if (getInterpolationMode() == InterpolationMode.NONE) { int count = 0; float val = 0; List<SampledValue> values; if (t0 < t1) values = getValues(t0, t1); else values = getValues(t1, t0); for (SampledValue sv: values) { if (sv.getQuality() != Quality.BAD) { count++; val += sv.getValue().getFloatValue(); } } if (count == 0) return Float.NaN; else return val / count; } return integrate(t0,t1) / (t1 - t0); }