/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.model.volatility.local; import static com.opengamma.financial.analytics.model.volatility.local.LocalVolatilitySurfacePropertyNamesAndValues.DUPIRE_LOCAL_SURFACE_METHOD; import static com.opengamma.financial.analytics.model.volatility.local.LocalVolatilitySurfacePropertyNamesAndValues.PROPERTY_DERIVATIVE_EPS; import static com.opengamma.financial.analytics.model.volatility.local.LocalVolatilitySurfacePropertyNamesAndValues.PROPERTY_LOCAL_VOLATILITY_SURFACE_CALCULATION_METHOD; import static com.opengamma.financial.analytics.model.volatility.local.LocalVolatilitySurfacePropertyNamesAndValues.PROPERTY_Y_AXIS_PARAMETERIZATION; import java.util.Collections; import java.util.Set; import com.opengamma.engine.value.ValueProperties; import com.opengamma.engine.value.ValueRequirement; import com.opengamma.financial.analytics.model.volatility.surface.black.BlackVolatilitySurfacePropertyUtils; /** * */ public class LocalVolatilitySurfaceUtils { public static Set<ValueRequirement> ensureDupireLocalVolatilitySurfaceProperties(final ValueProperties constraints) { final Set<String> epsNames = constraints.getValues(PROPERTY_DERIVATIVE_EPS); if (epsNames == null || epsNames.size() != 1) { return null; } final Set<ValueRequirement> blackSurfaceProperties = BlackVolatilitySurfacePropertyUtils.ensureAllBlackSurfaceProperties(constraints); if (blackSurfaceProperties == null) { return null; } return Collections.emptySet(); } public static ValueProperties.Builder addAllDupireLocalVolatilitySurfaceProperties(final ValueProperties properties, final String instrumentType, final String blackSmileInterpolator, final String parameterizationType) { final ValueProperties blackSurfaceProperties = BlackVolatilitySurfacePropertyUtils.addAllBlackSurfaceProperties(properties, instrumentType, blackSmileInterpolator).get(); return addDupireLocalVolatilitySurfaceProperties(blackSurfaceProperties, parameterizationType); } public static ValueProperties.Builder addAllDupireLocalVolatilitySurfaceProperties(final ValueProperties properties, final String instrumentType, final String blackSmileInterpolator, final String parameterizationType, final ValueRequirement desiredValue) { final String eps = desiredValue.getConstraint(PROPERTY_DERIVATIVE_EPS); final ValueProperties.Builder blackSurfaceProperties = BlackVolatilitySurfacePropertyUtils.addAllBlackSurfaceProperties(properties, instrumentType, desiredValue); return blackSurfaceProperties .with(PROPERTY_DERIVATIVE_EPS, eps) .with(PROPERTY_Y_AXIS_PARAMETERIZATION, parameterizationType) .with(PROPERTY_LOCAL_VOLATILITY_SURFACE_CALCULATION_METHOD, DUPIRE_LOCAL_SURFACE_METHOD); } public static ValueProperties.Builder addDupireLocalVolatilitySurfaceProperties(final ValueProperties properties, final String parameterizationType) { return properties.copy() .withAny(PROPERTY_DERIVATIVE_EPS) .with(PROPERTY_Y_AXIS_PARAMETERIZATION, parameterizationType) .with(PROPERTY_LOCAL_VOLATILITY_SURFACE_CALCULATION_METHOD, DUPIRE_LOCAL_SURFACE_METHOD); } public static ValueProperties.Builder addDupireLocalVolatilitySurfaceProperties(final ValueProperties properties, final String parameterizationType, final ValueRequirement desiredValue) { final String eps = desiredValue.getConstraint(PROPERTY_DERIVATIVE_EPS); return properties.copy() .with(PROPERTY_DERIVATIVE_EPS, eps) .with(PROPERTY_Y_AXIS_PARAMETERIZATION, parameterizationType) .with(PROPERTY_LOCAL_VOLATILITY_SURFACE_CALCULATION_METHOD, DUPIRE_LOCAL_SURFACE_METHOD); } }