@Override
  public org.drip.quant.calculus.WengertJacobian calcQuoteDFMicroJack(
      final java.lang.String strQuote,
      final org.drip.param.valuation.ValuationParams valParams,
      final org.drip.param.pricer.PricerParams pricerParams,
      final org.drip.param.definition.ComponentMarketParams mktParams,
      final org.drip.param.valuation.QuotingParams quotingParams) {
    if (null == valParams
        || valParams.valueDate() >= _dblMaturity
        || null == strQuote
        || null == mktParams
        || null == mktParams.getDiscountCurve()) return null;

    if ("Rate".equalsIgnoreCase(strQuote) || "SwapRate".equalsIgnoreCase(strQuote)) {
      org.drip.analytics.support.CaseInsensitiveTreeMap<java.lang.Double> mapMeasures =
          value(valParams, pricerParams, mktParams, quotingParams);

      if (null == mapMeasures) return null;

      double dblDirtyDV01 = mapMeasures.get("DirtyDV01");

      double dblParSwapRate = mapMeasures.get("SwapRate");

      try {
        org.drip.quant.calculus.WengertJacobian wjSwapRateDFMicroJack = null;

        org.drip.analytics.rates.DiscountCurve dc = mktParams.getDiscountCurve();

        for (org.drip.analytics.period.CashflowPeriod p : _lsCouponPeriod) {
          double dblPeriodPayDate = p.getPayDate();

          if (dblPeriodPayDate < valParams.valueDate()) continue;

          org.drip.quant.calculus.WengertJacobian wjPeriodFwdRateDF =
              dc.getForwardRateJack(p.getStartDate(), p.getEndDate());

          org.drip.quant.calculus.WengertJacobian wjPeriodPayDFDF =
              dc.jackDDFDQuote(dblPeriodPayDate);

          if (null == wjPeriodFwdRateDF || null == wjPeriodPayDFDF) continue;

          double dblForwardRate = dc.libor(p.getStartDate(), p.getEndDate());

          double dblPeriodPayDF = dc.df(dblPeriodPayDate);

          if (null == wjSwapRateDFMicroJack)
            wjSwapRateDFMicroJack =
                new org.drip.quant.calculus.WengertJacobian(1, wjPeriodFwdRateDF.numParameters());

          double dblPeriodNotional = getNotional(p.getStartDate(), p.getEndDate());

          double dblPeriodDCF = p.getCouponDCF();

          for (int k = 0; k < wjPeriodFwdRateDF.numParameters(); ++k) {
            double dblPeriodMicroJack =
                (dblForwardRate - dblParSwapRate) * wjPeriodPayDFDF.getFirstDerivative(0, k)
                    + dblPeriodPayDF * wjPeriodFwdRateDF.getFirstDerivative(0, k);

            if (!wjSwapRateDFMicroJack.accumulatePartialFirstDerivative(
                0, k, dblPeriodNotional * dblPeriodDCF * dblPeriodMicroJack / dblDirtyDV01))
              return null;
          }
        }

        return wjSwapRateDFMicroJack;
      } catch (java.lang.Exception e) {
        e.printStackTrace();
      }
    }

    return null;
  }