class CurveGammaCalculator {

  public CurrencyParameterSensitivity calculateSemiParallelGamma(
      Curve curve,
      Currency curveCurrency,
      Function<Curve, CurrencyParameterSensitivity> sensitivitiesFn) {

    Delta deltaShift = new Delta(curve, sensitivitiesFn);
    Function<DoubleArray, DoubleMatrix> gammaFn = fd.differentiate(deltaShift);
    DoubleArray gamma = gammaFn.apply(DoubleArray.filled(1)).column(0);
    return curve.createParameterSensitivity(curveCurrency, gamma);
  }

  private  CurveGammaCalculator(FiniteDifferenceType fdType, double shift);

}