OpendTect  6.3
sampledprobdenfunc.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: Bert
8  Date: Jan 2010
9 ________________________________________________________________________
10 
11 
12 */
13 
14 #include "algomod.h"
15 #include "probdenfunc.h"
16 #include "samplingdata.h"
17 #include "arrayndimpl.h"
18 #include "bufstringset.h"
19 
20 
28 {
29 public:
30 
32  : cumbins_(0) {}
33  ArrayNDProbDenFunc( const ArrayNDProbDenFunc& oth)
34  : cumbins_(0) { *this = oth; }
35  virtual ~ArrayNDProbDenFunc() {}
36  ArrayNDProbDenFunc& operator =(const ArrayNDProbDenFunc&);
37 
38  int size( int dim ) const
39  { return getArrND().info().getSize(dim); }
41  { return getArrND().info().getTotalSz(); }
42 
43  virtual const ArrayND<float>& getData() const
44  { return getArrND(); }
46  { return const_cast<ArrayND<float>&>(getArrND()); }
47  virtual ArrayND<float>* getArrClone() const = 0;
48 
49  virtual SamplingData<float> sampling( int dim ) const
50  { return getSampling(dim); }
51  virtual SamplingData<float>& sampling( int dim )
52  { return const_cast<SamplingData<float>&>(
53  getSampling(dim)); }
54 
55  void fillPar(IOPar&) const;
56  bool usePar(const IOPar&);
57  void writeBulkData(od_ostream&,bool) const;
58  bool readBulkData(od_istream&,bool);
59 
60  float getAveragePos(int dim) const;
61  static float findAveragePos(const float*,int,float grandtotal);
62 
63 protected:
64 
65  virtual const ArrayND<float>& getArrND() const = 0;
66  virtual const SamplingData<float>& getSampling(int) const = 0;
67  virtual float getNormFac() const;
68  virtual void doScale(float);
69  virtual bool gtIsEq(const ProbDenFunc&) const;
70 
71  mutable float* cumbins_;
72 
73  void prepRndDrw() const;
74  void fillCumBins() const;
75  od_uint64 getRandBin() const;
76  od_uint64 getBinPos(float) const;
77 
78 };
79 
80 
81 #define mDefArrayNDProbDenFuncFns(nm) \
82  virtual nm##ProbDenFunc* clone() const \
83  { return new nm##ProbDenFunc(*this); } \
84  static const char* typeStr() { return #nm; } \
85  virtual const char* getTypeStr() const { return typeStr(); } \
86  virtual float normFac() const { return getNormFac();}\
87  virtual bool canScale() const { return true; } \
88  virtual void scale( float f ) { doScale(f); } \
89  virtual void prepareRandDrawing() const { prepRndDrw(); } \
90  virtual bool isEq( const ProbDenFunc& oth ) const \
91  { return gtIsEq(oth); }
92 
93 
99  , public ArrayNDProbDenFunc
100 {
101 public:
102 
106  Sampled1DProbDenFunc(const float*,int);
108  Sampled1DProbDenFunc& operator =(const Sampled1DProbDenFunc&);
109  virtual void copyFrom(const ProbDenFunc&);
111 
112  virtual void fillPar(IOPar&) const;
113  virtual bool usePar(const IOPar&);
114  virtual void writeBulk(od_ostream&,bool binary) const;
115  virtual bool readBulk(od_istream&,bool binary);
116  virtual ArrayND<float>* getArrClone() const
117  { return new Array1DImpl<float>(bins_); }
118 
121 
122 protected:
123 
124  virtual const ArrayND<float>& getArrND() const { return bins_;}
125  virtual const SamplingData<float>& getSampling(int) const { return sd_; }
126 
127  virtual float gtAvgPos() const;
128  virtual float gtVal(float) const;
129  virtual void drwRandPos(float&) const;
130 
131 };
132 
133 
139  , public ArrayNDProbDenFunc
140 {
141 public:
142 
146  Sampled2DProbDenFunc& operator =(const Sampled2DProbDenFunc&);
147  virtual void copyFrom(const ProbDenFunc&);
149 
150  virtual void fillPar(IOPar&) const;
151  virtual bool usePar(const IOPar&);
152  virtual void writeBulk(od_ostream&,bool binary) const;
153  virtual bool readBulk(od_istream&,bool binary);
154  virtual ArrayND<float>* getArrClone() const
155  { return new Array2DImpl<float>(bins_); }
156  virtual float averagePos( int dim ) const
157  { return getAveragePos( dim ); }
158 
162 
163 protected:
164 
165  virtual const ArrayND<float>& getArrND() const { return bins_;}
166  virtual const SamplingData<float>& getSampling( int d ) const
167  { return d ? sd1_ : sd0_; }
168 
169  virtual float gtVal(float,float) const;
170  virtual void drwRandPos(float&,float&) const;
171 
172 };
173 
174 
182  , public ArrayNDProbDenFunc
183 {
184 public:
185 
186  SampledNDProbDenFunc(int nrdims);
189  SampledNDProbDenFunc& operator =(const SampledNDProbDenFunc&);
190  virtual void copyFrom(const ProbDenFunc&);
192 
193  virtual int nrDims() const { return bins_.info().getNDim(); }
194  virtual const char* dimName(int) const;
195  virtual void setDimName( int dim, const char* nm )
196  { *dimnms_[dim] = nm; }
197  virtual float averagePos( int dim ) const
198  { return getAveragePos( dim ); }
199  virtual float value(const TypeSet<float>&) const;
200  virtual void drawRandomPos(TypeSet<float>&) const;
201  virtual ArrayND<float>* getArrClone() const
202  { return new ArrayNDImpl<float>(bins_); }
203 
204  virtual void fillPar(IOPar&) const;
205  virtual bool usePar(const IOPar&);
206  virtual void writeBulk(od_ostream&,bool binary) const;
207  virtual bool readBulk(od_istream&,bool binary);
208 
212 
213 protected:
214 
215  virtual const ArrayND<float>& getArrND() const
216  { return bins_;}
217  virtual const SamplingData<float>& getSampling( int d ) const
218  { return sds_[d]; }
219 
220 public:
221 
223 
224 };
virtual const ArrayND< float > & getData() const
Definition: sampledprobdenfunc.h:43
virtual ArrayND< float > * getArrClone() const
Definition: sampledprobdenfunc.h:201
#define mExpClass(module)
Definition: commondefs.h:157
OD class for stream write common access to the user log file, or std::cout in batch progs...
Definition: od_ostream.h:25
Probability Density Function for one dimensional datasets.
Definition: probdenfunc.h:79
virtual ~ArrayNDProbDenFunc()
Definition: sampledprobdenfunc.h:35
virtual void setDimName(int dim, const char *nm)
Definition: sampledprobdenfunc.h:195
virtual const SamplingData< float > & getSampling(int d) const
Definition: sampledprobdenfunc.h:217
float * cumbins_
Definition: sampledprobdenfunc.h:71
#define mDefArrayNDProbDenFuncFns(nm)
Definition: sampledprobdenfunc.h:81
Base class for Probability Density Functions.
Definition: probdenfunc.h:29
void usePar(const IOPar &iop, ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:200
SamplingData< float > sd1_
Definition: sampledprobdenfunc.h:160
virtual SamplingData< float > & sampling(int dim)
Definition: sampledprobdenfunc.h:51
virtual const SamplingData< float > & getSampling(int) const
Definition: sampledprobdenfunc.h:125
Set of BufferString objects.
Definition: bufstringset.h:25
Array1DImpl< float > bins_
Definition: sampledprobdenfunc.h:120
virtual const ArrayND< float > & getArrND() const
Definition: sampledprobdenfunc.h:215
OD class for stream read.
Definition: od_istream.h:23
Two dimensional PDF based on binned data.
Definition: sampledprobdenfunc.h:138
SamplingData< float > sd_
Definition: sampledprobdenfunc.h:119
virtual const ArrayND< float > & getArrND() const
Definition: sampledprobdenfunc.h:165
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:53
ArrayNDImpl< float > bins_
Definition: sampledprobdenfunc.h:210
Multi-dimensional PDF based on binned data.
Definition: sampledprobdenfunc.h:181
SamplingData< float > sd0_
Definition: sampledprobdenfunc.h:159
od_uint64 totalSize() const
Definition: sampledprobdenfunc.h:40
virtual float averagePos(int dim) const
Definition: sampledprobdenfunc.h:156
One dimensional PDF based on binned data.
Definition: sampledprobdenfunc.h:98
void fillPar(IOPar &iop, const ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:187
Probability Density Function for two dimensional datasets.
Definition: probdenfunc.h:124
int size(int dim) const
Definition: sampledprobdenfunc.h:38
#define od_uint64
Definition: plftypes.h:35
virtual SamplingData< float > sampling(int dim) const
Definition: sampledprobdenfunc.h:49
BufferStringSet dimnms_
Definition: sampledprobdenfunc.h:211
ArrayNDProbDenFunc(const ArrayNDProbDenFunc &oth)
Definition: sampledprobdenfunc.h:33
TypeSet< SamplingData< float > > sds_
Definition: sampledprobdenfunc.h:209
virtual const SamplingData< float > & getSampling(int d) const
Definition: sampledprobdenfunc.h:166
virtual float averagePos(int dim) const
Definition: sampledprobdenfunc.h:197
Array2DImpl< float > bins_
Definition: sampledprobdenfunc.h:161
ArrayNDProbDenFunc()
Definition: sampledprobdenfunc.h:31
virtual const ArrayND< float > & getArrND() const
Definition: sampledprobdenfunc.h:124
virtual ArrayND< float > & getData()
Definition: sampledprobdenfunc.h:45
PDF based on ArrayND implementation.
Definition: sampledprobdenfunc.h:27

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B. V. 2017