@Override protected Object computeValues(EquityIndexOption derivative, EquityOptionDataBundle market) { final NodalDoublesSurface vegaSurface = CALCULATOR.calcBlackVegaForEntireSurface(derivative, market); final Double[] xValues = vegaSurface.getXData(); final Double[] yValues = vegaSurface.getYData(); final Set<Double> xSet = new HashSet<Double>(Arrays.asList(xValues)); final Set<Double> ySet = new HashSet<Double>(Arrays.asList(yValues)); final Double[] uniqueX = xSet.toArray(new Double[0]); final Double[] uniqueY = ySet.toArray(new Double[0]); final double[][] values = new double[ySet.size()][xSet.size()]; int i = 0; for (final Double x : xSet) { int j = 0; for (final Double y : ySet) { double vega; try { vega = vegaSurface.getZValue(x, y); } catch (final IllegalArgumentException e) { vega = 0; } values[j++][i] = vega; } i++; } final DoubleLabelledMatrix2D matrix = new DoubleLabelledMatrix2D(uniqueX, uniqueY, values); return matrix; }