docs: public static HullWhiteModel of(
  			AbstractRandomVariableFactory		randomVariableFactory,
  			TimeDiscretization			liborPeriodDiscretization,
  			AnalyticModel				analyticModel,
  			ForwardCurve				forwardRateCurve,
  			DiscountCurve				discountCurve,
  			ShortRateVolatilityModel	volatilityModel,
  			CalibrationProduct[]					calibrationProducts,
  			Map<String, Object>					properties
  			) throws CalculationException {
  
  		HullWhiteModel model = new HullWhiteModel(randomVariableFactory, liborPeriodDiscretization, analyticModel, forwardRateCurve, discountCurve, volatilityModel, properties);
  
  		// Perform calibration, if data is given
  		if(calibrationProducts != null && calibrationProducts.length > 0) {
  			ShortRateVolatilityModelCalibrateable volatilityModelParametric = null;
  			try {
  				volatilityModelParametric = (ShortRateVolatilityModelCalibrateable)volatilityModel;
  			}
  			catch(Exception e) {
  				throw new ClassCastException("Calibration restricted to covariance models implementing HullWhiteModelCalibrateable.");
  			}
  
  			Map<String,Object> calibrationParameters = null;
  			if(properties != null && properties.containsKey("calibrationParameters")) {
  				calibrationParameters	= (Map<String,Object>)properties.get("calibrationParameters");
  			}
  
  			ShortRateVolatilityModelCalibrateable volatilityModelCalibrated = volatilityModelParametric.getCloneCalibrated(model, calibrationProducts, calibrationParameters);
  
  			HullWhiteModel modelCalibrated = model.getCloneWithModifiedVolatilityModel(volatilityModelCalibrated);
  
  			return modelCalibrated;
  		}
  		else {
  			return model;
  		}
  	}