docs: private ArrayList<String> outputCalibrationResult(double[] parameters) {
  
  		ArrayList<String> calibrationOutput = new ArrayList<String>();
  
  		//We change the parameters of the model
  		CalibratableProcess newModel = model.getCloneForModifiedParameters(parameters);
  		CharacteristicFunctionModel newModelFourier = newModel.getCharacteristicFunctionModel();
  
  		int numberOfMaturities = surface.getMaturities().length;
  		double mats[] = surface.getMaturities();
  
  		QuotingConvention targetConvention = surface.getQuotingConvention();
  
  		double value;
  		double targetValue;
  		double T;
  		double K;
  
  		calibrationOutput.add("Strike"+ "\t" + "Maturity"+ "\t" + "Market Value" + "\t" + "Model Value" + "\t" + "Squared Error");
  
  		for(int t = 0; t<numberOfMaturities; t++) {
  			T = mats[t];
  			OptionSmileData currentSmile = surface.getSmile(mats[t]);
  			double[] currentStrikes = currentSmile.getStrikes();
  
  			EuropeanOptionSmile newPricer = pricer.getCloneWithModifiedParameters(mats[t],currentStrikes);
  
  			try {
  				Map<String, Function<Double, Double>> currentModelPrices = newPricer.getValue(0.0, newModelFourier);
  
  				for(int i = 0; i<currentStrikes.length;i++) {
  					K = currentStrikes[i];
  					targetValue = currentSmile.getOption(currentStrikes[i]).getValue();
  
  					if(targetConvention.equals(QuotingConvention.VOLATILITYLOGNORMAL)) {
  						//we convert prices into lognormal volatilities
  						double forward = surface.getEquityForwardCurve().getDiscountFactor(mats[t]);
  						double optionMaturity =mats[t];
  						double optionStrike = currentStrikes[i];
  						double payoffUnit = surface.getDiscountCurve().getDiscountFactor(mats[t]);
  						double optionValue = currentModelPrices.get("valuePerStrike").apply(optionStrike);//currentModelPrices.get(currentStrikes[i]);
  						value = net.finmath.functions.AnalyticFormulas.blackScholesOptionImpliedVolatility(forward, optionMaturity, optionStrike, payoffUnit, optionValue);
  
  
  					}else if(targetConvention.equals(QuotingConvention.VOLATILITYNORMAL)) {
  						//we convert prices into normal volatilities
  						double forward = surface.getEquityForwardCurve().getDiscountFactor(mats[t]);
  						double optionMaturity =mats[t];
  						double optionStrike = currentStrikes[i];
  						double payoffUnit = surface.getDiscountCurve().getDiscountFactor(mats[t]);
  						double optionValue = currentModelPrices.get("valuePerStrike").apply(optionStrike);//currentModelPrices.get(currentStrikes[i]);
  						value = net.finmath.functions.AnalyticFormulas.bachelierOptionImpliedVolatility(forward, optionMaturity, optionStrike, payoffUnit, optionValue);
  					}else {
  						//just output the prices
  						value = currentModelPrices.get("valuePerStrike").apply(currentStrikes[i]);//currentModelPrices.get(currentStrikes[i]);
  					}
  					calibrationOutput.add(K+ "\t" + T + "\t" + targetValue + "\t" + value+ "\t" + Math.pow(targetValue-value,2));
  				}
  			} catch (CalculationException e) {
  				e.printStackTrace();
  			}
  
  
  		}
  		return calibrationOutput;
  	}