Package com.opengamma.analytics.math.interpolation.data

Source Code of com.opengamma.analytics.math.interpolation.data.Interpolator1DDataBundleBuilderFunction

/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.math.interpolation.data;

import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;

import com.opengamma.analytics.math.function.Function1D;
import com.opengamma.analytics.math.interpolation.Interpolator1D;
import com.opengamma.analytics.math.matrix.DoubleMatrix1D;
import com.opengamma.util.ArgumentChecker;

/**
*
*/
public class Interpolator1DDataBundleBuilderFunction extends Function1D<DoubleMatrix1D, LinkedHashMap<String, Interpolator1DDataBundle>> {

  private final LinkedHashMap<String, double[]> _knotPoints;
  private final LinkedHashMap<String, Interpolator1D> _interpolators;
  private final int _nNodes;

  public Interpolator1DDataBundleBuilderFunction(final LinkedHashMap<String, double[]> knotPoints, final LinkedHashMap<String, Interpolator1D> interpolators) {
    ArgumentChecker.notNull(knotPoints, "null knot points");
    ArgumentChecker.notNull(interpolators, "null interpolators");
    int count = 0;
    for (final Map.Entry<String, double[]> entry : knotPoints.entrySet()) {
      final int size = entry.getValue().length;
      ArgumentChecker.isTrue(size > 0, "no knot points for " + entry.getKey());
      count += size;
    }
    _knotPoints = knotPoints;
    _interpolators = interpolators;
    _nNodes = count;
  }

  @Override
  public LinkedHashMap<String, Interpolator1DDataBundle> evaluate(final DoubleMatrix1D x) {
    ArgumentChecker.notNull(x, "null data x");
    ArgumentChecker.isTrue(_nNodes == x.getNumberOfElements(), "x wrong length");

    final LinkedHashMap<String, Interpolator1DDataBundle> res = new LinkedHashMap<>();
    int index = 0;

    for (final String name : _interpolators.keySet()) {
      final Interpolator1D interpolator = _interpolators.get(name);
      final double[] nodes = _knotPoints.get(name);
      final double[] values = Arrays.copyOfRange(x.getData(), index, index + nodes.length);
      index += nodes.length;
      final Interpolator1DDataBundle db = interpolator.getDataBundleFromSortedArrays(nodes, values);
      res.put(name, db);
    }

    return res;
  }
}
TOP

Related Classes of com.opengamma.analytics.math.interpolation.data.Interpolator1DDataBundleBuilderFunction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.