/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.timeseries.filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.opengamma.analytics.financial.timeseries.returns.TimeSeriesReturnCalculator;
import com.opengamma.timeseries.date.localdate.ImmutableLocalDateDoubleTimeSeries;
import com.opengamma.timeseries.date.localdate.LocalDateDoubleTimeSeries;
import com.opengamma.util.ArgumentChecker;
/**
* Filter that partitions the time-series points.
*/
public class ExtremeReturnDoubleTimeSeriesFilter extends TimeSeriesFilter {
/** Logger. */
private static final Logger s_logger = LoggerFactory.getLogger(ExtremeReturnDoubleTimeSeriesFilter.class);
private static final LocalDateDoubleTimeSeries EMPTY_SERIES = ImmutableLocalDateDoubleTimeSeries.EMPTY_SERIES;
private TimeSeriesReturnCalculator _returnCalculator;
private final ExtremeValueDoubleTimeSeriesFilter _filter;
/**
* Creates an instance.
*
* @param minValue the minimum value
* @param maxValue the maximum value
* @param returnCalculator the return calculator, not null
*/
public ExtremeReturnDoubleTimeSeriesFilter(final double minValue, final double maxValue, final TimeSeriesReturnCalculator returnCalculator) {
ArgumentChecker.notNull(returnCalculator, "return calculator");
_returnCalculator = returnCalculator;
_filter = new ExtremeValueDoubleTimeSeriesFilter(minValue, maxValue);
}
//-------------------------------------------------------------------------
public void setMinimumValue(final double minValue) {
_filter.setMinimumValue(minValue);
}
public void setMaximumValue(final double maxValue) {
_filter.setMaximumValue(maxValue);
}
public void setRange(final double minValue, final double maxValue) {
_filter.setRange(minValue, maxValue);
}
public void setReturnCalculator(final TimeSeriesReturnCalculator returnCalculator) {
ArgumentChecker.notNull(returnCalculator, "return calculator");
_returnCalculator = returnCalculator;
}
//-------------------------------------------------------------------------
@Override
public FilteredTimeSeries evaluate(final LocalDateDoubleTimeSeries ts) {
ArgumentChecker.notNull(ts, "ts");
if (ts.isEmpty()) {
s_logger.info("Time series was empty");
return new FilteredTimeSeries(EMPTY_SERIES, null);
}
final LocalDateDoubleTimeSeries returnTS = _returnCalculator.evaluate(ts);
return _filter.evaluate(returnTS);
}
}