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)); }
public static PaymentInfo[] RetrievePaymentInfos(this IProduct product) { return(product.Accept(new PaymentProductVisitor())); }
public static DateTime[] RetrieveEventDates(this IProduct product) { return(product.Accept(new EventDateProductVisitor())); }
public static IFixing[] RetrieveFixings(this IProduct product) { return(product.Accept(new FixingProductVisitor())); }