Skip to content

Commit 89863c5

Browse files
pcaspersjenkins
authored andcommitted
Merge remote-tracking branch 'origin/master' into roland_oreswig
1 parent 0404d59 commit 89863c5

18 files changed

Lines changed: 1264 additions & 225 deletions

OREAnalytics/orea/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ app/analyticsmanager.cpp
1717
app/inputparameters.cpp
1818
app/marketcalibrationreport.cpp
1919
app/marketdatacsvloader.cpp
20+
app/marketdatainmemoryloader.cpp
2021
app/marketdataloader.cpp
2122
app/oreapp.cpp
2223
app/parameters.cpp
@@ -94,6 +95,7 @@ app/analyticsmanager.hpp
9495
app/inputparameters.hpp
9596
app/marketcalibrationreport.hpp
9697
app/marketdatacsvloader.hpp
98+
app/marketdatainmemoryloader.hpp
9799
app/marketdataloader.hpp
98100
app/oreapp.hpp
99101
app/parameters.hpp

OREAnalytics/orea/app/analytic.cpp

Lines changed: 54 additions & 47 deletions
Large diffs are not rendered by default.

OREAnalytics/orea/app/analytic.hpp

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class Analytic {
6464
};
6565

6666
//! Constructors
67-
Analytic(std::ostream& out = std::cout) : out_(out) {}
67+
Analytic() {}
6868
Analytic(//! Label for logging purposes
6969
const std::string& label,
7070
//! The types of all (sub) analytics covered by this Analytic object
@@ -79,13 +79,10 @@ class Analytic {
7979
//! Flag to indicate whether a scenario generator config file is required for this analytic
8080
bool scenarioGeneratorConfig = false,
8181
//! Flag to indicate whether a cross asset model config file is required for this analytic
82-
bool crossAssetModelConfig = false,
83-
//! Stream for optional output
84-
std::ostream& out = std::cout)
82+
bool crossAssetModelConfig = false)
8583
: label_(label), types_(analyticTypes), inputs_(inputs),
8684
simulationConfig_(simulationConfig), sensitivityConfig_(sensitivityConfig),
87-
scenarioGeneratorConfig_(scenarioGeneratorConfig), crossAssetModelConfig_(crossAssetModelConfig), out_(out),
88-
tab_(50), progressBarWidth_(72 - std::min<Size>(tab_, 67)) {
85+
scenarioGeneratorConfig_(scenarioGeneratorConfig), crossAssetModelConfig_(crossAssetModelConfig) {
8986
// This call does not work with pure virtual functions, compiler error.
9087
// setUpConfigurations();
9188
// With a non-pure virtual function it calls the base class version here, not the overridden ones ?
@@ -96,11 +93,11 @@ class Analytic {
9693

9794
//! Run only those analytic types that are inclcuded in the runTypes vector, run all if the runType vector is empty
9895
virtual void runAnalytic(const boost::shared_ptr<ore::data::InMemoryLoader>& loader,
99-
const std::set<std::string>& runTypes = {}) = 0;
96+
const std::set<std::string>& runTypes = {}) {}
10097

10198
// we can build configurations here (today's market params, scenario sim market params, sensitivity scenasrio data)
102-
virtual void buildConfigurations() {};
103-
virtual void setUpConfigurations() = 0;
99+
virtual void buildConfigurations() {}
100+
virtual void setUpConfigurations() {}
104101
virtual void buildMarket(const boost::shared_ptr<ore::data::InMemoryLoader>& loader,
105102
const boost::shared_ptr<CurveConfigurations>& curveConfig,
106103
const bool marketRequired = true);
@@ -111,6 +108,10 @@ class Analytic {
111108
const std::string& label() const { return label_; }
112109
const std::set<std::string>& analyticTypes() const { return types_; }
113110
const boost::shared_ptr<ore::data::Market>& market() const { return market_; };
111+
// To allow SWIG wrapping
112+
boost::shared_ptr<MarketImpl> getMarket() const {
113+
return boost::dynamic_pointer_cast<MarketImpl>(market_);
114+
}
114115
const boost::shared_ptr<ore::data::Portfolio>& portfolio() const { return portfolio_; };
115116
virtual std::vector<boost::shared_ptr<ore::data::TodaysMarketParameters>> todaysMarketParams();
116117
const boost::shared_ptr<ore::data::Loader>& loader() const { return loader_; };
@@ -138,8 +139,6 @@ class Analytic {
138139
bool sensitivityConfig_ = false;
139140
bool scenarioGeneratorConfig_ = false;
140141
bool crossAssetModelConfig_ = false;
141-
//! Stream for progress output
142-
std::ostream& out_;
143142

144143
Configurations configurations_;
145144
boost::shared_ptr<ore::data::Market> market_;
@@ -160,10 +159,6 @@ class Analytic {
160159

161160
//! build an engine factory
162161
virtual boost::shared_ptr<ore::data::EngineFactory> engineFactory();
163-
164-
//! optional output formatting
165-
Size tab_ = 50;
166-
Size progressBarWidth_ = 32;
167162
};
168163

169164
/*! Pricing-type analytics
@@ -173,10 +168,9 @@ class Analytic {
173168
*/
174169
class PricingAnalytic : public virtual Analytic {
175170
public:
176-
PricingAnalytic(const boost::shared_ptr<InputParameters>& inputs,
177-
std::ostream& out = std::cout)
171+
PricingAnalytic(const boost::shared_ptr<InputParameters>& inputs)
178172
: Analytic("PRICING", {"NPV", "NPV_LAGGED", "CASHFLOW", "CASHFLOWNPV", "SENSITIVITY", "STRESS"},
179-
inputs, false, false, false, false, out) {
173+
inputs, false, false, false, false) {
180174
if (find(begin(types_), end(types_), "SENSITIVITY") != end(types_)) {
181175
simulationConfig_ = true;
182176
sensitivityConfig_ = true;
@@ -196,8 +190,8 @@ class PricingAnalytic : public virtual Analytic {
196190
class VarAnalytic : public virtual Analytic {
197191
public:
198192
// FIXME: Add DELTA-GAMMA-VAR (Saddlepoint method)
199-
VarAnalytic(const boost::shared_ptr<InputParameters>& inputs, std::ostream& out = std::cout)
200-
: Analytic("VAR", {"VAR"}, inputs, false, false, false, false, out) {
193+
VarAnalytic(const boost::shared_ptr<InputParameters>& inputs)
194+
: Analytic("VAR", {"VAR"}, inputs, false, false, false, false) {
201195
setUpConfigurations();
202196
}
203197
virtual void runAnalytic(const boost::shared_ptr<ore::data::InMemoryLoader>& loader,
@@ -210,8 +204,8 @@ class VarAnalytic : public virtual Analytic {
210204

211205
class XvaAnalytic : public virtual Analytic {
212206
public:
213-
XvaAnalytic(const boost::shared_ptr<InputParameters>& inputs, std::ostream& out = std::cout)
214-
: Analytic("XVA", {"XVA", "EXPOSURE"}, inputs, true, false, false, false, out) {
207+
XvaAnalytic(const boost::shared_ptr<InputParameters>& inputs)
208+
: Analytic("XVA", {"XVA", "EXPOSURE"}, inputs, true, false, false, false) {
215209
setUpConfigurations();
216210
}
217211
virtual void runAnalytic(const boost::shared_ptr<ore::data::InMemoryLoader>& loader,

OREAnalytics/orea/app/analyticsmanager.cpp

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,12 @@ Size matches(const std::set<std::string>& requested, const std::set<std::string>
4242
}
4343

4444
AnalyticsManager::AnalyticsManager(const boost::shared_ptr<InputParameters>& inputs,
45-
const boost::shared_ptr<MarketDataLoader>& marketDataLoader,
46-
std::ostream& out)
47-
: inputs_(inputs), marketDataLoader_(marketDataLoader), out_(out) {
45+
const boost::shared_ptr<MarketDataLoader>& marketDataLoader)
46+
: inputs_(inputs), marketDataLoader_(marketDataLoader) {
4847

49-
addAnalytic("PRICING", boost::make_shared<PricingAnalytic>(inputs_, out_));
50-
addAnalytic("VAR", boost::make_shared<VarAnalytic>(inputs_, out_));
51-
addAnalytic("XVA", boost::make_shared<XvaAnalytic>(inputs_, out_));
48+
addAnalytic("PRICING", boost::make_shared<PricingAnalytic>(inputs));
49+
addAnalytic("VAR", boost::make_shared<VarAnalytic>(inputs_));
50+
addAnalytic("XVA", boost::make_shared<XvaAnalytic>(inputs_));
5251
}
5352

5453
void AnalyticsManager::clear() {
@@ -70,7 +69,7 @@ void AnalyticsManager::addAnalytic(const std::string& label, const boost::shared
7069
// This forces an update of valid analytics vector with the next call to validAnalytics()
7170
validAnalytics_.clear();
7271
}
73-
72+
7473
const std::set<std::string>& AnalyticsManager::validAnalytics() {
7574
if (validAnalytics_.size() == 0) {
7675
for (auto a : analytics_) {
@@ -81,20 +80,29 @@ const std::set<std::string>& AnalyticsManager::validAnalytics() {
8180
return validAnalytics_;
8281
}
8382

83+
const std::set<std::string>& AnalyticsManager::requestedAnalytics() {
84+
return requestedAnalytics_;
85+
}
86+
8487
bool AnalyticsManager::hasAnalytic(const std::string& type) {
8588
const std::set<std::string>& va = validAnalytics();
8689
return va.find(type) != va.end();
8790
}
8891

8992
const boost::shared_ptr<Analytic>& AnalyticsManager::getAnalytic(const std::string& type) const {
90-
auto it = analytics_.find(type);
91-
QL_REQUIRE(it != analytics_.end(), "Analytic type " << type << " not found");
92-
return it->second;
93+
for (const auto& a : analytics_) {
94+
const std::set<std::string>& types = a.second->analyticTypes();
95+
if (types.find(type) != types.end())
96+
return a.second;
97+
}
98+
QL_FAIL("analytic type " << type << " not found, check validAnalytics()");
9399
}
94100

95101
void AnalyticsManager::runAnalytics(const std::set<std::string>& analyticTypes,
96102
const boost::shared_ptr<MarketCalibrationReport>& marketCalibrationReport) {
97103

104+
requestedAnalytics_ = analyticTypes;
105+
98106
if (analytics_.size() == 0)
99107
return;
100108

OREAnalytics/orea/app/analyticsmanager.hpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,13 @@ class AnalyticsManager {
3737
AnalyticsManager(//! Container for the inputs required by the standard analytics
3838
const boost::shared_ptr<InputParameters>& inputs,
3939
//! A market data loader object that can retrieve required data from a large repository
40-
const boost::shared_ptr<MarketDataLoader>& marketDataLoader,
41-
//! Stream for optional output
42-
std::ostream& out = std::cout);
40+
const boost::shared_ptr<MarketDataLoader>& marketDataLoader);
4341
virtual ~AnalyticsManager() {};
4442

4543
//! Valid analytics in the analytics manager are the union of analytics types provided by analytics_ map
4644
bool hasAnalytic(const std::string& type);
4745
const std::set<std::string>& validAnalytics();
46+
const std::set<std::string>& requestedAnalytics();
4847
const boost::shared_ptr<Analytic>& getAnalytic(const std::string& type) const;
4948
Size numberOfAnalytics() { return analytics_.size(); }
5049
const boost::shared_ptr<InputParameters>& inputs() { return inputs_; }
@@ -57,8 +56,6 @@ class AnalyticsManager {
5756
Analytic::analytic_npvcubes const npvCubes();
5857
Analytic::analytic_mktcubes const mktCubes();
5958

60-
std::ostream& stream() { return out_; }
61-
6259
void setLaggedMarket() { laggedMarket_ = true; }
6360
void unsetLaggedMarket() { laggedMarket_ = false; }
6461

@@ -78,7 +75,7 @@ class AnalyticsManager {
7875
boost::shared_ptr<MarketDataLoader> marketDataLoader_;
7976
Analytic::analytic_reports marketDataReports_;
8077
std::set<std::string> validAnalytics_;
81-
std::ostream& out_;
78+
std::set<std::string> requestedAnalytics_;
8279
bool laggedMarket_ = false;
8380
};
8481

0 commit comments

Comments
 (0)