@@ -141,7 +141,7 @@ void runCoreEngine(const boost::shared_ptr<ore::data::Portfolio>& portfolio,
141141 const boost::shared_ptr<ore::data::Market>& market,
142142 const boost::shared_ptr<ore::analytics::ScenarioGeneratorData>& sgd,
143143 const std::vector<string>& aggDataIndices, const std::vector<string>& aggDataCurrencies,
144- boost::shared_ptr<ore::analytics::AggregationScenarioData> asd,
144+ const Size aggDataNumberCreditStates, boost::shared_ptr<ore::analytics::AggregationScenarioData> asd,
145145 boost::shared_ptr<NPVCube> outputCube, boost::shared_ptr<ProgressIndicator> progressIndicator) {
146146
147147 progressIndicator->updateProgress (0 , portfolio->size () + 1 );
@@ -358,6 +358,11 @@ void runCoreEngine(const boost::shared_ptr<ore::data::Portfolio>& portfolio,
358358 asd->set (dateIndex, i, index->fixing (index->fixingCalendar ().adjust (d)),
359359 AggregationScenarioDataType::IndexFixing, asdIndexName[j]);
360360 }
361+ // set credit states
362+ for (Size j = 0 ; j < aggDataNumberCreditStates; ++j) {
363+ asd->set (dateIndex, i, path[model->pIdx (CrossAssetModel::AssetType::CrState, j)][k],
364+ AggregationScenarioDataType::CreditState, std::to_string (j));
365+ }
361366 ++dateIndex;
362367 }
363368 timer.stop ();
@@ -508,7 +513,8 @@ AMCValuationEngine::AMCValuationEngine(
508513 const QuantLib::Size nThreads, const QuantLib::Date& today, const QuantLib::Size nSamples,
509514 const boost::shared_ptr<ore::data::Loader>& loader,
510515 const boost::shared_ptr<ScenarioGeneratorData>& scenarioGeneratorData, const std::vector<string>& aggDataIndices,
511- const std::vector<string>& aggDataCurrencies, const boost::shared_ptr<CrossAssetModelData>& crossAssetModelData,
516+ const std::vector<string>& aggDataCurrencies, const Size aggDataNumberCreditStates,
517+ const boost::shared_ptr<CrossAssetModelData>& crossAssetModelData,
512518 const boost::shared_ptr<ore::data::EngineData>& engineData,
513519 const boost::shared_ptr<ore::data::CurveConfigurations>& curveConfigs,
514520 const boost::shared_ptr<ore::data::TodaysMarketParameters>& todaysMarketParams,
@@ -521,8 +527,9 @@ AMCValuationEngine::AMCValuationEngine(
521527 const std::vector<QuantLib::Date>&,
522528 const QuantLib::Size)>& cubeFactory)
523529 : useMultithreading_(true ), aggDataIndices_(aggDataIndices), aggDataCurrencies_(aggDataCurrencies),
524- scenarioGeneratorData_ (scenarioGeneratorData), nThreads_(nThreads), today_(today), nSamples_(nSamples),
525- loader_(loader), crossAssetModelData_(crossAssetModelData), engineData_(engineData), curveConfigs_(curveConfigs),
530+ aggDataNumberCreditStates_ (aggDataNumberCreditStates), scenarioGeneratorData_(scenarioGeneratorData),
531+ nThreads_(nThreads), today_(today), nSamples_(nSamples), loader_(loader),
532+ crossAssetModelData_(crossAssetModelData), engineData_(engineData), curveConfigs_(curveConfigs),
526533 todaysMarketParams_(todaysMarketParams), configurationLgmCalibration_(configurationLgmCalibration),
527534 configurationFxCalibration_(configurationFxCalibration), configurationEqCalibration_(configurationEqCalibration),
528535 configurationInfCalibration_(configurationInfCalibration),
@@ -547,9 +554,11 @@ AMCValuationEngine::AMCValuationEngine(const boost::shared_ptr<QuantExt::CrossAs
547554 const boost::shared_ptr<ScenarioGeneratorData>& scenarioGeneratorData,
548555 const boost::shared_ptr<Market>& market,
549556 const std::vector<string>& aggDataIndices,
550- const std::vector<string>& aggDataCurrencies)
557+ const std::vector<string>& aggDataCurrencies,
558+ const Size aggDataNumberCreditStates)
551559 : useMultithreading_(false ), aggDataIndices_(aggDataIndices), aggDataCurrencies_(aggDataCurrencies),
552- scenarioGeneratorData_(scenarioGeneratorData), model_(model), market_(market) {
560+ aggDataNumberCreditStates_(aggDataNumberCreditStates), scenarioGeneratorData_(scenarioGeneratorData),
561+ model_(model), market_(market) {
553562
554563 QL_REQUIRE ((aggDataIndices.empty () && aggDataCurrencies.empty ()) || market != nullptr ,
555564 " AMCValuationEngine: market is required for asd generation" );
@@ -587,8 +596,8 @@ void AMCValuationEngine::buildCube(const boost::shared_ptr<Portfolio>& portfolio
587596
588597 try {
589598 // we can use the mt progress indicator here although we are running on a single thread
590- runCoreEngine (portfolio, model_, market_, scenarioGeneratorData_, aggDataIndices_, aggDataCurrencies_, asd_,
591- outputCube,
599+ runCoreEngine (portfolio, model_, market_, scenarioGeneratorData_, aggDataIndices_, aggDataCurrencies_,
600+ aggDataNumberCreditStates_, asd_, outputCube,
592601 boost::make_shared<ore::analytics::MultiThreadedProgressIndicator>(this ->progressIndicators ()));
593602 } catch (const std::exception& e) {
594603 QL_FAIL (" Error during amc val engine run: " << e.what ());
@@ -737,7 +746,7 @@ void AMCValuationEngine::buildCube(const boost::shared_ptr<ore::data::Portfolio>
737746 // run core engine code (asd is written for thread id 0 only)
738747
739748 runCoreEngine (portfolio, cam, initMarket, scenarioGeneratorData_, aggDataIndices_, aggDataCurrencies_,
740- id == 0 ? asd_ : nullptr , miniCubes_[id], progressIndicator);
749+ aggDataNumberCreditStates_, id == 0 ? asd_ : nullptr , miniCubes_[id], progressIndicator);
741750
742751 // return code 0 = ok
743752
0 commit comments