-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathdistributionwithtrendstorage.h
298 lines (210 loc) · 17.6 KB
/
distributionwithtrendstorage.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
#ifndef RPLIB_DISTRIBUTION_WITH_TREND_STORAGE_H
#define RPLIB_DISTRIBUTION_WITH_TREND_STORAGE_H
#include <string>
#include <vector>
#include "rplib/distributionwithtrend.h"
class DistributionWithTrend;
namespace NRLib {
class TrendStorage;
class Trend;
}
class DistributionWithTrendStorage
{
public:
DistributionWithTrendStorage();
virtual ~DistributionWithTrendStorage();
virtual DistributionWithTrendStorage * Clone() const = 0;
DistributionWithTrend * GenerateDistributionWithTrend(const std::string & path,
const std::vector<std::string> & trend_cube_parameters,
const std::vector<std::vector<double> > & trend_cube_sampling,
std::string & errTxt);
virtual DistributionWithTrend * GenerateDistributionWithTrend(const std::string & /*path*/,
const std::vector<std::string> & /*trend_cube_parameters*/,
const std::vector<std::vector<double> > & /*trend_cube_sampling*/,
const std::vector<std::vector<double> > & /*blocked_logs*/,
const std::vector<std::vector<double> > & /*s1 */,
const std::vector<std::vector<double> > & /*s2 */,
const int /*output_other*/,
std::string /*filename_prefix*/,
std::string & /*errTxt*/) = 0;
virtual NRLib::TrendStorage * CloneMean() const = 0;
virtual bool GetIsShared() const = 0;
virtual void SetVintageYear(int year) = 0;
virtual void SetOneYearCorrelation(double correlation) = 0;
virtual int GetVintageYear() = 0;
virtual double GetOneYearCorrelation() = 0;
virtual bool GetEstimate() const = 0;
void WriteTrendToFile(const std::string & filename,
const std::vector<std::vector<double> > & trend_cube_sampling,
const NRLib::Trend * trend) const;
};
//--------------------------------------------------------------//
class DeltaDistributionWithTrendStorage : public DistributionWithTrendStorage
{
public:
DeltaDistributionWithTrendStorage();
DeltaDistributionWithTrendStorage(double mean,
bool is_shared,
bool estimate);
DeltaDistributionWithTrendStorage(const NRLib::TrendStorage * mean,
bool is_shared);
DeltaDistributionWithTrendStorage(const DeltaDistributionWithTrendStorage & dist);
virtual ~DeltaDistributionWithTrendStorage();
virtual DistributionWithTrendStorage * Clone() const { return new DeltaDistributionWithTrendStorage(*this) ;}
virtual DistributionWithTrend * GenerateDistributionWithTrend(const std::string & path,
const std::vector<std::string> & trend_cube_parameters,
const std::vector<std::vector<double> > & trend_cube_sampling,
const std::vector<std::vector<double> > & blocked_logs,
const std::vector<std::vector<double> > & s1,
const std::vector<std::vector<double> > & s2,
const int output_other,
std::string filename_prefix,
std::string & errTxt);
virtual NRLib::TrendStorage * CloneMean() const;
virtual const NRLib::TrendStorage * GetMean() const { return mean_ ;}
virtual void SetVintageYear(int year) { vintage_year_ = year ;}
virtual void SetOneYearCorrelation(double correlation) { one_year_correlation_ = correlation ;}
virtual bool GetIsShared() const { return is_shared_ ;}
virtual int GetVintageYear() { return vintage_year_ ;}
virtual double GetOneYearCorrelation() { return one_year_correlation_ ;}
virtual bool GetEstimate() const { return estimate_ ;}
private:
const NRLib::TrendStorage * mean_;
DistributionWithTrend * distribution_with_trend_;
const bool is_shared_; // True if object is a reservoir variable that can be used for more fluids/solids/rocks/dry-rocks
int vintage_year_;
double one_year_correlation_;
bool estimate_;
};
//--------------------------------------------------------------//
class NormalDistributionWithTrendStorage : public DistributionWithTrendStorage
{
public:
NormalDistributionWithTrendStorage();
NormalDistributionWithTrendStorage(const NRLib::TrendStorage * mean,
const NRLib::TrendStorage * variance,
bool is_shared);
NormalDistributionWithTrendStorage(const NormalDistributionWithTrendStorage & dist);
virtual ~NormalDistributionWithTrendStorage();
virtual DistributionWithTrendStorage * Clone() const { return new NormalDistributionWithTrendStorage(*this) ;}
virtual DistributionWithTrend * GenerateDistributionWithTrend(const std::string & path,
const std::vector<std::string> & trend_cube_parameters,
const std::vector<std::vector<double> > & trend_cube_sampling,
const std::vector<std::vector<double> > & blocked_logs,
const std::vector<std::vector<double> > & s1,
const std::vector<std::vector<double> > & s2,
const int output_other,
std::string filename_prefix,
std::string & errTxt);
virtual NRLib::TrendStorage * CloneMean() const;
virtual void SetVintageYear(int year) { vintage_year_ = year ;}
virtual void SetOneYearCorrelation(double correlation) { one_year_correlation_ = correlation ;}
virtual bool GetIsShared() const { return is_shared_ ;}
virtual int GetVintageYear() { return vintage_year_ ;}
virtual double GetOneYearCorrelation() { return one_year_correlation_ ;}
virtual bool GetEstimate() const { return estimate_ ;}
private:
const NRLib::TrendStorage * mean_;
const NRLib::TrendStorage * variance_;
DistributionWithTrend * distribution_with_trend_;
const bool is_shared_; // True if object is a reservoir variable that can be used for more fluids/solids/rocks/dry-rocks
int vintage_year_;
double one_year_correlation_;
bool estimate_;
};
//--------------------------------------------------------------//
class BetaDistributionWithTrendStorage : public DistributionWithTrendStorage
{
public:
BetaDistributionWithTrendStorage();
BetaDistributionWithTrendStorage(const NRLib::TrendStorage * mean,
const NRLib::TrendStorage * variance,
const double & lower_limit,
const double & upper_limit,
bool is_shared);
BetaDistributionWithTrendStorage(const BetaDistributionWithTrendStorage & dist);
virtual ~BetaDistributionWithTrendStorage();
virtual DistributionWithTrendStorage * Clone() const { return new BetaDistributionWithTrendStorage(*this) ;}
virtual DistributionWithTrend * GenerateDistributionWithTrend(const std::string & path,
const std::vector<std::string> & trend_cube_parameters,
const std::vector<std::vector<double> > & trend_cube_sampling,
const std::vector<std::vector<double> > & blocked_logs,
const std::vector<std::vector<double> > & s1,
const std::vector<std::vector<double> > & s2,
const int output_other,
std::string filename_prefix,
std::string & errTxt);
virtual NRLib::TrendStorage * CloneMean() const;
virtual void SetVintageYear(int year) { vintage_year_ = year ;}
virtual void SetOneYearCorrelation(double correlation) { one_year_correlation_ = correlation ;}
virtual bool GetIsShared() const { return is_shared_ ;}
virtual int GetVintageYear() { return vintage_year_ ;}
virtual double GetOneYearCorrelation() { return one_year_correlation_ ;}
virtual const double GetLowerLimit() const { return lower_limit_ ;}
virtual const double GetUpperLimit() const { return upper_limit_ ;}
virtual bool GetEstimate() const { return estimate_ ;}
static void CheckBetaConsistency(NRLib::Trend * mean,
NRLib::Trend * variance,
double & lower_limit,
double & upper_limit,
std::string & errTxt);
private:
const NRLib::TrendStorage * mean_;
const NRLib::TrendStorage * variance_;
double lower_limit_;
double upper_limit_;
DistributionWithTrend * distribution_with_trend_;
const bool is_shared_; // True if object is a reservoir variable that can be used for more fluids/solids/rocks/dry-rocks
int vintage_year_;
double one_year_correlation_;
bool estimate_;
};
//--------------------------------------------------------------//
class BetaEndMassDistributionWithTrendStorage : public DistributionWithTrendStorage
{
public:
BetaEndMassDistributionWithTrendStorage();
BetaEndMassDistributionWithTrendStorage(const NRLib::TrendStorage * mean,
const NRLib::TrendStorage * variance,
const double & lower_limit,
const double & upper_limit,
const double & lower_probability,
const double & upper_probability,
bool is_shared);
BetaEndMassDistributionWithTrendStorage(const BetaEndMassDistributionWithTrendStorage & dist);
virtual ~BetaEndMassDistributionWithTrendStorage();
virtual DistributionWithTrendStorage * Clone() const { return new BetaEndMassDistributionWithTrendStorage(*this) ;}
virtual DistributionWithTrend * GenerateDistributionWithTrend(const std::string & path,
const std::vector<std::string> & trend_cube_parameters,
const std::vector<std::vector<double> > & trend_cube_sampling,
const std::vector<std::vector<double> > & blocked_logs,
const std::vector<std::vector<double> > & s1,
const std::vector<std::vector<double> > & s2,
const int output_other,
std::string filename_prefix,
std::string & errTxt);
virtual NRLib::TrendStorage * CloneMean() const;
virtual void SetVintageYear(int year) { vintage_year_ = year ;}
virtual void SetOneYearCorrelation(double correlation) { one_year_correlation_ = correlation ;}
virtual bool GetIsShared() const { return is_shared_ ;}
virtual int GetVintageYear() { return vintage_year_ ;}
virtual double GetOneYearCorrelation() { return one_year_correlation_ ;}
virtual const double GetLowerLimit() const { return lower_limit_ ;}
virtual const double GetUpperLimit() const { return upper_limit_ ;}
virtual const double GetLowerProbability() const { return lower_probability_ ;}
virtual const double GetUpperProbability() const { return upper_probability_ ;}
virtual bool GetEstimate() const { return estimate_ ;}
private:
const NRLib::TrendStorage * mean_;
const NRLib::TrendStorage * variance_;
double lower_limit_;
double upper_limit_;
double lower_probability_;
double upper_probability_;
DistributionWithTrend * distribution_with_trend_;
const bool is_shared_; // True if object is a reservoir variable that can be used for more fluids/solids/rocks/dry-rocks
int vintage_year_;
double one_year_correlation_;
bool estimate_;
};
#endif