class AnalyticCDSPricer {

  public double parSpreadCreditSensitivity(final CDSAnalytic cds, final ISDACompliantYieldCurve yieldCurve, final ISDACompliantCreditCurve creditCurve, final int creditCurveNode) {
    if (cds.getProtectionEnd() <= 0.0) { //short cut already expired CDSs
      throw new IllegalArgumentException("CDSs has expired - cannot compute a par spread sensitivity for it");
    }

    final double a = protectionLeg(cds, yieldCurve, creditCurve);
    final double b = annuity(cds, yieldCurve, creditCurve, PriceType.CLEAN);
    final double spread = a / b;
    final double dadh = protectionLegCreditSensitivity(cds, yieldCurve, creditCurve, creditCurveNode);
    final double dbdh = pvPremiumLegCreditSensitivity(cds, yieldCurve, creditCurve, creditCurveNode);
    return spread * (dadh / a - dbdh / b);
  }

  public  AnalyticCDSPricer();
  public  AnalyticCDSPricer(final AccrualOnDefaultFormulae formula);

}