class PowerLawIntervalForecaster implements IntervalForecaster {

    @Override
    public IntervalForecast forecast(MetricData metricData, double pointForecast) {
        notNull(metricData, "metricData can't be null");

        val width = params.getAlpha() * Math.pow(pointForecast, params.getBeta());
        val weakWidth = params.getWeakMultiplier() * width;
        val strongWidth = params.getStrongMultiplier() * width;

        return new IntervalForecast(
                pointForecast + strongWidth,
                pointForecast + weakWidth,
                pointForecast - weakWidth,
                pointForecast - strongWidth);
    }

}