private BAWCalculator ConfigureCalculator(IOption option, IMarketCondition market,
                                                  double expiryDayRemainingLife = double.NaN, double timeIncrement = 0.0)
        {
            var trade = (VanillaOption)option;

            var exerciseDate    = trade.ExerciseDates.Last();
            var maturityDate    = trade.UnderlyingMaturityDate;
            var exerciseInYears = trade.DayCount.CalcDayCountFraction(market.ValuationDate, exerciseDate);
            var maturityInYears = trade.DayCount.CalcDayCountFraction(market.ValuationDate, maturityDate);

            var riskfreeRate         = market.DiscountCurve.Value.ZeroRate(market.ValuationDate, exerciseDate);
            var riskfreeDfAtExercise = market.DiscountCurve.Value.GetDf(market.ValuationDate, exerciseDate);
            var riskfreeDfAtMaturity = market.DiscountCurve.Value.GetDf(market.ValuationDate, maturityDate);

            var dividendCurveInput = market.DividendCurves.Value.Values.First().ZeroRate(market.ValuationDate, exerciseDate);
            var dividendInput      = AnalyticalOptionPricerUtil.dividendYieldOutput(dividendCurveInput, riskfreeRate,
                                                                                    option.Dividends, market.SpotPrices.Value.Values.First(), market.ValuationDate, trade.ExerciseDates.Last(), option.DayCount);
            var dividendRate = AnalyticalOptionPricerUtil.dividendDf(trade.UnderlyingProductType, dividendInput, riskfreeRate);

            var    spot  = market.SpotPrices.Value.Values.First();
            double sigma = AnalyticalOptionPricerUtil.pricingVol(volSurf: market.VolSurfaces.Value.Values.First(),
                                                                 exerciseDate: exerciseDate, option: option, spot: spot);

            var calculator = new BAWCalculator(trade.OptionType,
                                               option.IsMoneynessOption ? trade.Strike * trade.InitialSpotPrice : trade.Strike,
                                               spot,
                                               exerciseInYears,
                                               sigma,
                                               riskfreeRate,
                                               dividendRate,
                                               trade.Notional,
                                               trade.UnderlyingProductType,
                                               riskfreeDfAtExercise: riskfreeDfAtExercise,
                                               riskfreeDfAtMaturity: riskfreeDfAtMaturity,
                                               expiryDayRemainingLife: expiryDayRemainingLife,
                                               timeIncrement: timeIncrement);

            this._calculator = calculator;
            return(calculator);
        }