OpendTect  6.3
gridder2d.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: Y.C.Liu & K. Tingdahl
8  Date: January 2008
9 ________________________________________________________________________
10 
11 -*/
12 
13 
14 #include "algomod.h"
15 #include "arrayndalgo.h"
16 #include "mathfunc.h"
17 #include "factory.h"
18 #include "coord.h"
19 #include "positionlist.h"
20 
21 class DAGTriangleTree;
22 template <class T> class LinSolver;
24 
25 
31 {
32 public:
33  mDefineFactoryInClass(Gridder2D,factory);
34 
35 
36  virtual ~Gridder2D();
37  virtual Gridder2D* clone() const = 0;
38  virtual bool operator==(const Gridder2D&) const;
43  virtual bool wantsAllPoints() const { return true; }
45  virtual bool isPointUsable(const Coord& cpt,
46  const Coord& dpt) const;
50  virtual void setGridArea(const Interval<float>&,
51  const Interval<float>&) {}
56  bool setPoints(const TypeSet<Coord>&,TaskRunner* =0);
57  /*<!Points are assumed to remain in mem through
58  getValue(). Points should correspond to the
59  values in setValues. Don't re-set it unless they
60  have changed, as it may lead to substantial
61  computations. */
62  const TypeSet<Coord>* getPoints() const { return points_; }
63  bool setValues(const TypeSet<float>&);
64  /*<!Values are assumed to remain in mem at
65  getValue(). Values should correspond to the
66  coords in setPoints*/
67 
68  void setTrend(PolyTrend::Order);
69  /*<!Not a processing parameter, requires the input data
70  (points & values) to be set. Needs to be called again
71  each time either the values are changed
72  */
73 
74  virtual float getValue(const Coord&,const TypeSet<double>* weights=0,
75  const TypeSet<int>* relevantpoints=0) const;
78  virtual void fillPar(IOPar&) const;
79  virtual bool usePar(const IOPar&);
80 
81  virtual bool allPointsAreRelevant() const =0;
82 
83  virtual bool getWeights(const Coord&,
84  TypeSet<double>& weights,
85  TypeSet<int>& relevantpoints) const =0;
90  virtual bool areWeightsValuesDependent() const { return false;}
91 
92  static const char* sKeyGridder() { return "Gridder"; }
93 
94 protected:
95  Gridder2D();
96  Gridder2D(const Gridder2D&);
97 
101 
103 
104  virtual bool pointsChangedCB(CallBacker*) { return true; }
105  virtual void valuesChangedCB(CallBacker*) {}
106  float getDetrendedValue(int idx) const;
107  /*<!Input values corrected from the trend*/
108  bool isAtInputPos(const Coord&,int&idx) const;
109 };
110 
111 
118 public:
119  mDefaultFactoryInstantiation( Gridder2D,
121  "InverseDistance", tr("Inverse distance") );
122 
125 
126  Gridder2D* clone() const;
127 
128  static const char* sKeySearchRadius() { return "SearchRadius"; }
129 
130  bool operator==(const Gridder2D&) const;
131 
132  bool wantsAllPoints() const { return false; }
133  bool allPointsAreRelevant() const;
134  bool isPointUsable(const Coord&,const Coord&) const;
135  bool getWeights(const Coord&,TypeSet<double>& weights,
136  TypeSet<int>& relevantpoints) const;
137 
138  bool usePar(const IOPar&);
139  void fillPar(IOPar&) const;
140 
141 private:
142 
143  float radius_;
144 };
145 
146 
154 public:
155  mDefaultFactoryInstantiation( Gridder2D,
157  "Triangulated", tr("Triangulation") );
158 
161  const TriangulatedGridder2D&);
163  Gridder2D* clone() const;
164 
165 
166  void setGridArea(const Interval<float>&,
167  const Interval<float>&);
168 
169  bool allPointsAreRelevant() const;
170  bool getWeights(const Coord&,TypeSet<double>& weights,
171  TypeSet<int>& relevantpoints) const;
172 
173 protected:
174 
179 
181 
182  bool pointsChangedCB(CallBacker*);
183 };
184 
185 
186 
193 public:
194  mDefaultFactoryInstantiation( Gridder2D,
196  "RadialBasicFunction",
197  tr("Radial Basis Function") );
198 
203  Gridder2D* clone() const;
204 
205  static const char* sKeyIsMetric() { return "IsMetric"; }
206 
207  bool operator==(const Gridder2D&) const;
208 
209  void setMetricTensor(double m11,double m12,double m22);
210 
211  bool allPointsAreRelevant() const;
212  bool getWeights(const Coord&,TypeSet<double>& weights,
213  TypeSet<int>& relevantpoints) const;
214  bool areWeightsValuesDependent() const { return true; }
215  float getValue(const Coord&,const TypeSet<double>* weights=0,
216  const TypeSet<int>* relevantpoints=0) const;
217 
218 protected:
219 
220  bool ismetric_;
221  double m11_;
222  double m12_;
223  double m22_;
224 
227 
228  bool updateSolver(TaskRunner*);
229  bool updateSolution();
230  double getRadius(const Coord& pos1,const Coord& pos2) const;
231  static double evaluateRBF(double radius,double scale=1.);
232 
233  bool pointsChangedCB(CallBacker*);
234  void valuesChangedCB(CallBacker*);
235  bool setWeights(const Coord&,TypeSet<double>& weights,
236  TypeSet<int>* usedpoints=0) const;
237 };
double m22_
Definition: gridder2d.h:223
#define mExpClass(module)
Definition: commondefs.h:157
PolyTrend * trend_
Definition: gridder2d.h:100
Uses Radial Basic Function to predict the values.
Definition: gridder2d.h:191
bool wantsAllPoints() const
If false, points should be tested with isPointUsable.
Definition: gridder2d.h:132
virtual void valuesChangedCB(CallBacker *)
Definition: gridder2d.h:105
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:182
const TypeSet< float > * values_
Definition: gridder2d.h:98
Reference: "Parallel Incremental Delaunay Triangulation", by Kohout J.2005.
Definition: delaunay.h:34
bool operator==(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:51
const TypeSet< Coord > * getPoints() const
Definition: gridder2d.h:62
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
DAGTriangleTree * triangles_
Definition: gridder2d.h:175
double m11_
Definition: gridder2d.h:221
Generic interface for 2D gridding.
Definition: gridder2d.h:30
void usePar(const IOPar &iop, ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:200
bool areWeightsValuesDependent() const
Definition: gridder2d.h:214
TypeSet< int > usedpoints_
Definition: gridder2d.h:102
double m12_
Definition: gridder2d.h:222
#define mDefaultFactoryInstantiation(baseclss, clss, keywrd, usernm)
Definition: factory.h:287
Triangle2DInterpolator * interpolator_
Definition: gridder2d.h:176
LinSolver< double > * solv_
Definition: gridder2d.h:226
bool ismetric_
Definition: gridder2d.h:220
virtual bool areWeightsValuesDependent() const
Definition: gridder2d.h:90
Set of (small) copyable elements.
Definition: commontypes.h:26
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:53
Class that can execute a task.
Definition: task.h:193
Uses Delaunay triangulation to find a points neighbors and does inverse distance between the neighbor...
Definition: gridder2d.h:152
const TypeSet< Coord > * points_
Definition: gridder2d.h:99
LinSolver - Solves linear systems of equations on the form A*x=B. A is a matrix of the size N*N...
Definition: gridder2d.h:22
Interval< float > yrg_
Definition: gridder2d.h:178
static const char * sKeyIsMetric()
Definition: gridder2d.h:205
static const char * sKeyGridder()
Definition: gridder2d.h:92
virtual void setGridArea(const Interval< float > &, const Interval< float > &)
Definition: gridder2d.h:50
Uses inverse distance method for 2D gridding.
Definition: gridder2d.h:116
static const char * sKeySearchRadius()
Definition: gridder2d.h:128
#define mDefineFactoryInClass(T, funcname)
Definition: factory.h:424
void fillPar(IOPar &iop, const ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:187
TypeSet< double > * globalweights_
Definition: gridder2d.h:225
float radius_
Definition: gridder2d.h:143
Interval< float > xrg_
Definition: gridder2d.h:177
virtual bool wantsAllPoints() const
If false, points should be tested with isPointUsable.
Definition: gridder2d.h:43
virtual bool pointsChangedCB(CallBacker *)
Definition: gridder2d.h:104
Coord center_
Definition: gridder2d.h:180
2D point or vector class.
Definition: commontypes.h:58
Order
Definition: arrayndalgo.h:1620
Polynomial trend with order 0 (mean), 1 (linear) or 2 (parabolic) The trend is derived from a set of ...
Definition: arrayndalgo.h:1613
For a given triangulated geometry(set of points), interpolating any point located in or nearby the go...
Definition: delaunay.h:185

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