/**
  * Compute the present value of a bond transaction from its clean price.
  *
  * @param bond The bond transaction.
  * @param curves The curve bundle.
  * @param cleanPrice The bond clean price.
  * @return The present value.
  */
 public double presentValueFromCleanPrice(
     final BondTransaction<? extends BondSecurity<? extends Payment, ? extends Coupon>> bond,
     final YieldCurveBundle curves,
     final double cleanPrice) {
   ArgumentChecker.isTrue(
       bond instanceof BondFixedTransaction,
       "Present value from clean price only for fixed coupon bond");
   final BondFixedTransaction bondFixed = (BondFixedTransaction) bond;
   final double dfSettle =
       curves
           .getCurve(bondFixed.getBondStandard().getRepoCurveName())
           .getDiscountFactor(bondFixed.getBondTransaction().getSettlementTime());
   final double pvPriceStandard =
       (cleanPrice * bondFixed.getNotionalStandard()
               + bondFixed.getBondStandard().getAccruedInterest())
           * dfSettle;
   final double pvNominalStandard = bond.getBondStandard().getNominal().accept(PVC, curves);
   final double pvCouponStandard = bond.getBondStandard().getCoupon().accept(PVC, curves);
   final double pvDiscountingStandard = (pvNominalStandard + pvCouponStandard);
   final double pvNominalTransaction = bond.getBondTransaction().getNominal().accept(PVC, curves);
   final double pvCouponTransaction = bond.getBondTransaction().getCoupon().accept(PVC, curves);
   final double pvDiscountingTransaction = (pvNominalTransaction + pvCouponTransaction);
   return (pvDiscountingTransaction - pvDiscountingStandard + pvPriceStandard)
       * bond.getQuantity();
 }
 /**
  * Compute the present value of a bond transaction from its yield-to-maturity.
  *
  * @param bond The bond transaction.
  * @param curves The curve bundle.
  * @param yield The bond yield.
  * @return The present value.
  */
 public double presentValueFromYield(
     final BondTransaction<? extends BondSecurity<? extends Payment, ? extends Coupon>> bond,
     final YieldCurveBundle curves,
     final double yield) {
   ArgumentChecker.notNull(bond, "Bond");
   ArgumentChecker.isTrue(
       bond instanceof BondFixedTransaction,
       "Present value from clean price only for fixed coupon bond");
   final BondFixedTransaction bondFixed = (BondFixedTransaction) bond;
   double cleanPrice = METHOD_SECURITY.cleanPriceFromYield(bondFixed.getBondStandard(), yield);
   return presentValueFromCleanPrice(bond, curves, cleanPrice);
 }