/** * 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 org.apache.commons.lang.Validate; import com.opengamma.analytics.math.matrix.DoubleMatrix2D; import com.opengamma.analytics.math.surface.InterpolatedDoublesSurface; import com.opengamma.util.money.Currency; import com.opengamma.util.tuple.DoublesPair; /** * */ public class HestonFittedSurfaces { private final InterpolatedDoublesSurface _kappaSurface; private final InterpolatedDoublesSurface _thetaSurface; private final InterpolatedDoublesSurface _vol0Surface; private final InterpolatedDoublesSurface _omegaSurface; private final InterpolatedDoublesSurface _rhoSurface; private final Map<DoublesPair, DoubleMatrix2D> _inverseJacobian; private final Currency _currency; public HestonFittedSurfaces(final InterpolatedDoublesSurface kappaSurface, final InterpolatedDoublesSurface thetaSurface, final InterpolatedDoublesSurface vol0Surface, final InterpolatedDoublesSurface omegaSurface, final InterpolatedDoublesSurface rhoSurface, final Currency currency) { this(kappaSurface, thetaSurface, vol0Surface, omegaSurface, rhoSurface, null, currency); } public HestonFittedSurfaces(final InterpolatedDoublesSurface kappaSurface, final InterpolatedDoublesSurface thetaSurface, final InterpolatedDoublesSurface vol0Surface, final InterpolatedDoublesSurface omegaSurface, final InterpolatedDoublesSurface rhoSurface, final Map<DoublesPair, DoubleMatrix2D> inverseJacobian, final Currency currency) { Validate.notNull(kappaSurface, "kappa surface"); Validate.notNull(thetaSurface, "theta surface"); Validate.notNull(vol0Surface, "vol0 surface"); Validate.notNull(omegaSurface, "omega surface"); Validate.notNull(rhoSurface, "rho surface"); Validate.notNull(currency, "currency"); _kappaSurface = kappaSurface; _thetaSurface = thetaSurface; _vol0Surface = vol0Surface; _omegaSurface = omegaSurface; _rhoSurface = rhoSurface; _inverseJacobian = inverseJacobian; _currency = currency; } public InterpolatedDoublesSurface getKappaSurface() { return _kappaSurface; } public InterpolatedDoublesSurface getThetaSurface() { return _thetaSurface; } public InterpolatedDoublesSurface getVol0Surface() { return _vol0Surface; } public InterpolatedDoublesSurface getOmegaSurface() { return _omegaSurface; } public InterpolatedDoublesSurface getRhoSurface() { return _rhoSurface; } public Map<DoublesPair, DoubleMatrix2D> getInverseJacobians() { return _inverseJacobian; } public Currency getCurrency() { return _currency; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + _kappaSurface.hashCode(); result = prime * result + _thetaSurface.hashCode(); result = prime * result + _vol0Surface.hashCode(); result = prime * result + _omegaSurface.hashCode(); result = prime * result + _rhoSurface.hashCode(); result = prime * result + (_inverseJacobian == null ? 0 : _inverseJacobian.hashCode()); result = prime * result + _currency.hashCode(); return result; } @Override public boolean equals(final Object obj) { if (this == obj) { return true; } if (!(obj instanceof HestonFittedSurfaces)) { return false; } final HestonFittedSurfaces other = (HestonFittedSurfaces) obj; if (!ObjectUtils.equals(_kappaSurface, other._kappaSurface)) { return false; } if (!ObjectUtils.equals(_thetaSurface, other._thetaSurface)) { return false; } if (!ObjectUtils.equals(_vol0Surface, other._vol0Surface)) { return false; } if (!ObjectUtils.equals(_omegaSurface, other._omegaSurface)) { return false; } if (!ObjectUtils.equals(_rhoSurface, other._rhoSurface)) { return false; } if (!ObjectUtils.equals(_inverseJacobian, other._inverseJacobian)) { return false; } if (!ObjectUtils.equals(_currency, other._currency)) { return false; } return true; } }