/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.volatility.fittedresults;
import java.util.Map;
import org.apache.commons.lang.ObjectUtils;
import com.opengamma.analytics.math.matrix.DoubleMatrix2D;
import com.opengamma.analytics.math.surface.InterpolatedDoublesSurface;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.tuple.DoublesPair;
/**
*
*/
public class SABRFittedSurfaces {
private final InterpolatedDoublesSurface _alphaSurface;
private final InterpolatedDoublesSurface _betaSurface;
private final InterpolatedDoublesSurface _nuSurface;
private final InterpolatedDoublesSurface _rhoSurface;
private final Map<DoublesPair, DoubleMatrix2D> _inverseJacobian;
public SABRFittedSurfaces(final InterpolatedDoublesSurface alphaSurface, final InterpolatedDoublesSurface betaSurface, final InterpolatedDoublesSurface nuSurface,
final InterpolatedDoublesSurface rhoSurface, final Map<DoublesPair, DoubleMatrix2D> inverseJacobian) {
ArgumentChecker.notNull(alphaSurface, "alpha surface");
ArgumentChecker.notNull(betaSurface, "beta surface");
ArgumentChecker.notNull(nuSurface, "nu surface");
ArgumentChecker.notNull(rhoSurface, "rho surface");
_alphaSurface = alphaSurface;
_betaSurface = betaSurface;
_nuSurface = nuSurface;
_rhoSurface = rhoSurface;
_inverseJacobian = inverseJacobian;
}
public InterpolatedDoublesSurface getAlphaSurface() {
return _alphaSurface;
}
public InterpolatedDoublesSurface getBetaSurface() {
return _betaSurface;
}
public InterpolatedDoublesSurface getNuSurface() {
return _nuSurface;
}
public InterpolatedDoublesSurface getRhoSurface() {
return _rhoSurface;
}
public Map<DoublesPair, DoubleMatrix2D> getInverseJacobians() {
return _inverseJacobian;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + _alphaSurface.hashCode();
result = prime * result + _betaSurface.hashCode();
result = prime * result + _nuSurface.hashCode();
result = prime * result + _rhoSurface.hashCode();
result = prime * result + _inverseJacobian.hashCode();
return result;
}
@Override
public boolean equals(final Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof SABRFittedSurfaces)) {
return false;
}
final SABRFittedSurfaces other = (SABRFittedSurfaces) obj;
if (!ObjectUtils.equals(_alphaSurface, other._alphaSurface)) {
return false;
}
if (!ObjectUtils.equals(_betaSurface, other._betaSurface)) {
return false;
}
if (!ObjectUtils.equals(_nuSurface, other._nuSurface)) {
return false;
}
if (!ObjectUtils.equals(_rhoSurface, other._rhoSurface)) {
return false;
}
if (!ObjectUtils.equals(_inverseJacobian, other._inverseJacobian)) {
return false;
}
return true;
}
@Override
public String toString() {
return "SABR Fitted Surfaces";
}
}