public ProductPathFlowCalculator(IPathFlowCalculator <double[], IFixing[]> fixingPathCalculator, IPathFlowCalculator <double[], PaymentInfo[]> numerairePathCalc, IProductPathFlow productPathFlow) { this.fixingPathCalculator = fixingPathCalculator; this.numerairePathCalc = numerairePathCalc; this.productPathFlow = productPathFlow; //Buffers initialization fixingsPath = fixingPathCalculator.NewPathFlow(); numerairePath = numerairePathCalc.NewPathFlow(); }
public static ProductPathFlowCalculator Build(IProduct product, McModel model) { IFixing[][] fixings = FixingsByDate(product); Func <double[], double>[][] fixingFromFactors = fixings.Map(fs => fs.Map(f => model.FactorRepresentation[f])); ArrayPathCalculator <IFixing> fixingPathCalc = FixingPathCalc(model.SimulatedDates, fixings, fixingFromFactors); PaymentInfo[][] paymentsByDate = PaymentsByDate(product); ArrayPathCalculator <PaymentInfo> numerairePathCalc = NumerairePathCalc(paymentsByDate, model); var pathFlowVisitor = new ProductPathFlowVisitor(fixings, paymentsByDate); IProductPathFlow productPathFlow = product.Accept(pathFlowVisitor); return(new ProductPathFlowCalculator(fixingPathCalc, numerairePathCalc, productPathFlow)); }