/// <summary>
        /// Prepare for valuation anything that is not dependent upon the scenario.
        /// </summary>
        public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults)
        {
            base.PreCloneInitialize(factors, baseTimes, requiredResults);

            CFFixedListDeal deal = (CFFixedListDeal)Deal;

            // Add to valuation time grid
            fT.AddPayDates <CFFixed>(deal.Cashflows);
        }
        /// <summary>
        /// Value the deal using the cashflow list.
        /// </summary>
        /// <param name="pv">Present value to be updated.</param>
        /// <param name="cash">Realised cash to be updated.</param>
        public void Value(Vector pv, Vector cash, double baseDate, double valueDate, Vector settlementDate, IInterestRate discount,
                          IInterestRate forecast, IInterestRate repo, IInterestRateVol interestRateVol, IInterestYieldVol interestYieldVol,
                          ISurvivalProb survivalProb, ISACCRResult saccrResult, IIntraValuationDiagnosticsWriter intraValuationDiagnosticsWriter)
        {
            CFFixedListDeal deal = (CFFixedListDeal)Deal;

            pv.Clear();
            if (cash != null)
            {
                cash.Clear();
            }

            deal.Cashflows.Value(pv, cash, baseDate, valueDate, settlementDate, discount, survivalProb, intraValuationDiagnosticsWriter, fCutoffDate);
            ApplySign(pv, cash, fBuySellSign);
        }
        /// <summary>
        /// Collect cashflows realised along the scenario path up to endDate.
        /// </summary>
        public override void CollectCashflows(CashAccumulators cashAccumulators, double baseDate, double endDate)
        {
            CFFixedListDeal deal = (CFFixedListDeal)Deal;

            deal.Cashflows.CollectCashflows(cashAccumulators, fFxRate, baseDate, endDate, fBuySellSign, fCutoffDate);
        }