docs: @Override
  	public double getValue(CharacteristicFunctionModel model) throws CalculationException {
  
  		CharacteristicFunction modelCF = model.apply(getMaturity());
  
  		final double lineOfIntegration = 0.5 * getIntegrationDomainImagUpperBound()+getIntegrationDomainImagLowerBound();
  		DoubleUnaryOperator integrand = new DoubleUnaryOperator() {
  			@Override
  			public double applyAsDouble(double real) {
  				Complex z = new Complex(real,lineOfIntegration);
  				return modelCF.apply(z.negate()).multiply(AbstractFourierTransformProduct.this.apply(z)).getReal();
  			}
  		};
  
  		RealIntegral integrator = new SimpsonRealIntegrator(-100.0, 100.0, 20000, true);
  
  		return integrator.integrate(integrand) / 2.0 / Math.PI;
  	}