class PortfolioSwapAdjustment {

  public IntrinsicIndexDataBundle adjustCurves(final double indexPUF, final CDSAnalytic indexCDS, final double indexCoupon, final ISDACompliantYieldCurve yieldCurve,
      final IntrinsicIndexDataBundle intrinsicData) {
    ArgumentChecker.isTrue(indexPUF <= 1.0, "indexPUF must be given as a fraction. Value of {} is too high.", indexPUF);
    ArgumentChecker.notNull(indexCDS, "indexCDS");
    ArgumentChecker.isTrue(indexCoupon >= 0, "indexCoupon cannot be negative");
    ArgumentChecker.isTrue(indexCoupon < 10, "indexCoupon should be a fraction. The value of {} would be a coupon of {}", indexCoupon, indexCoupon * 1e4);
    ArgumentChecker.notNull(yieldCurve, "yieldCurve");
    ArgumentChecker.notNull(intrinsicData, "intrinsicData");

    final Function1D<Double, Double> func = getHazardRateAdjFunction(indexPUF, indexCDS, indexCoupon, yieldCurve, intrinsicData);
    final double x = ROOTFINDER.getRoot(func, 1.0);
    final ISDACompliantCreditCurve[] adjCC = adjustCurves(intrinsicData.getCreditCurves(), x);
    return intrinsicData.withCreditCurves(adjCC);
  }

  public  PortfolioSwapAdjustment();

}