protected DiscountCurve CallCurveCalculator(ICalculator calculator, KnownCurve knownCurve, string marketSnapCode_, string quotesourceCode_, CarbonClient carbonClient_) { DateTime startTime = DateTime.Now; SLog.log.InfoFormat("Calculation of {0} for {1} starting...", knownCurve.GetDescription(), ValueDate); // generate the table of constituents { var cp = String.Compare("mlp", quotesourceCode_, StringComparison.OrdinalIgnoreCase) == 0 ? calculator.BuildConstituentsTable() : null; if (cp != null) { var moniker = GenericTable.GenerateSwapCurveConstituentsMoniker(ValueDate, marketSnapCode_.ToLower(), quotesourceCode_.ToLower(), KnownCurveHelpers.GetKnownCurveCode(knownCurve)); SObjectManager.Instance().SaveSObject(moniker, cp); } } if (mConstituentsOnly) return null; // this is the old way, which will invoke fincad... //var curves = calculator.Calculate(); var curves = Symmetry.Interop.Carbon.OT.CurveRetriever .GetCurvesAsDictionary(knownCurve, ValueDate, carbonClient_, ThrowBehavior.DontThrow); foreach (var kvp in curves) { if (kvp.Value != null) { Type type = null; switch (kvp.Key) { case "DiscountCurve": type = typeof(DiscountCurve); break; case "RateCurve": type = typeof(RateCurve); break; case "Parameters": type = typeof(SwapCurveParameters); break; } if (type != null) { var moniker = CreateCurveMoniker(marketSnapCode_.ToLower(), quotesourceCode_.ToLower(), knownCurve, type); SObjectManager.Instance().SaveSObject(moniker, kvp.Value); } else if (kvp.Key == "Constituents") { // don't want to overwrite if mlp (will have been written above if (String.Compare("mlp", quotesourceCode_, StringComparison.OrdinalIgnoreCase) == 0) continue; var moniker = GenericTable.GenerateSwapCurveConstituentsMoniker(ValueDate, marketSnapCode_.ToLower(), quotesourceCode_.ToLower(), KnownCurveHelpers.GetKnownCurveCode(knownCurve)); SObjectManager.Instance().SaveSObject(moniker, kvp.Value); } } } SLog.log.InfoFormat("Calculation of {0} finished in {1} ms...", knownCurve.GetDescription(), (DateTime.Now - startTime).TotalMilliseconds); if (curves.ContainsKey("DiscountCurve")) { return (DiscountCurve)curves["DiscountCurve"]; } return null; }