docs: public SwaptionDataLattice convertLattice(QuotingConvention targetConvention, double displacement, AnalyticModel model) {
  
  		if(displacement != 0 && targetConvention != QuotingConvention.PAYERVOLATILITYLOGNORMAL) {
  			throw new IllegalArgumentException("SwaptionDataLattice only supports displacement, when using QuotingCOnvention.PAYERVOLATILITYLOGNORMAL.");
  		}
  
  		//Reverse sign of moneyness, if switching between payer and receiver convention.
  		int reverse = ((targetConvention == QuotingConvention.RECEIVERPRICE) ^ (quotingConvention == QuotingConvention.RECEIVERPRICE)) ? -1 : 1;
  
  		List<Integer> maturities	= new ArrayList<>();
  		List<Integer> tenors		= new ArrayList<>();
  		List<Integer> moneynesss	= new ArrayList<>();
  		List<Double> values		= new ArrayList<>();
  
  		for(DataKey key : entryMap.keySet()) {
  			maturities.add(key.maturity);
  			tenors.add(key.tenor);
  			moneynesss.add(key.moneyness * reverse);
  			values.add(getValue(key.maturity, key.tenor, key.moneyness, targetConvention, displacement, model));
  		}
  
  		return new SwaptionDataLattice(referenceDate, targetConvention, displacement,
  				forwardCurveName, discountCurveName, floatMetaSchedule, fixMetaSchedule,
  				maturities.stream().mapToInt(Integer::intValue).toArray(),
  				tenors.stream().mapToInt(Integer::intValue).toArray(),
  				moneynesss.stream().mapToInt(Integer::intValue).toArray(),
  				values.stream().mapToDouble(Double::doubleValue).toArray());
  	}