OpendTect  6.6
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  RCS: $Id$
10 ________________________________________________________________________
11 
12 -*/
13 
14 
15 #include "algomod.h"
16 #include "arrayndalgo.h"
17 #include "mathfunc.h"
18 #include "factory.h"
19 #include "coord.h"
20 #include "positionlist.h"
21 
22 class DAGTriangleTree;
23 template <class T> class LinSolver;
25 
26 
32 {
33 public:
35 
36 
37  virtual ~Gridder2D();
38  virtual Gridder2D* clone() const = 0;
39  virtual bool operator==(const Gridder2D&) const;
44  virtual bool wantsAllPoints() const { return true; }
46  virtual bool isPointUsable(const Coord& cpt,
47  const Coord& dpt) const;
51  virtual void setGridArea(const Interval<float>&,
52  const Interval<float>&) {}
57  bool setPoints(const TypeSet<Coord>&);
58  /*<!Points are assumed to remain in mem through
59  getValue(). Points should correspond to the
60  values in setValues. Don't re-set it unless they
61  have changed, as it may lead to substantial
62  computations. */
64  const TypeSet<Coord>* getPoints() const { return points_; }
65  virtual void setTrend(PolyTrend::Order);
66  /*<!Not a processing parameter, requires the input data
67  (points & values) to be set. Needs to be called again
68  each time either the values are changed */
69  bool setValues(const TypeSet<float>&);
70  /*<!Values are assumed to remain in mem at
71  getValue(). Values should correspond to the
72  coords in setPoints */
73  virtual float getValue(const Coord&,const TypeSet<double>* weights=0,
74  const TypeSet<int>* relevantpoints=0) const;
76 
77  virtual void fillPar(IOPar&) const;
78  virtual bool usePar(const IOPar&);
79 
80  virtual bool allPointsAreRelevant() const =0;
81 
82  virtual bool getWeights(const Coord&,
83  TypeSet<double>& weights,
84  TypeSet<int>& relevantpoints) const =0;
89  virtual bool areWeightsValuesDependent() const { return false;}
90 
91 protected:
94 
98 
100 
101  virtual bool pointsChangedCB(CallBacker*) { return true; }
102  virtual void valuesChangedCB(CallBacker*) {}
103  float getDetrendedValue(int idx) const;
104  /*<!Input values corrected from the trend*/
105  bool isAtInputPos(const Coord&,int&idx) const;
106 };
107 
108 
115 public:
118  "InverseDistance", tr("Inverse distance") );
119 
122 
123  Gridder2D* clone() const;
124 
126  static const char* sKeySearchRadius() { return "SearchRadius"; }
127 
128  bool operator==(const Gridder2D&) const;
129 
130  void setSearchRadius(float);
131  float getSearchRadius() const { return radius_; }
132 
133  bool wantsAllPoints() const { return false; }
134  bool allPointsAreRelevant() const;
135  bool isPointUsable(const Coord&,const Coord&) const;
136  bool getWeights(const Coord&,TypeSet<double>& weights,
137  TypeSet<int>& relevantpoints) const;
138 
139  bool usePar(const IOPar&);
140  void fillPar(IOPar&) const;
141 
142 protected:
143 
144  float radius_;
145 };
146 
147 
155 public:
158  "Triangulated", tr("Triangulation") );
159 
162  const TriangulatedGridder2D&);
164  Gridder2D* clone() const;
165 
166 
168  const Interval<float>&);
169 
170  bool allPointsAreRelevant() const;
171  bool getWeights(const Coord&,TypeSet<double>& weights,
172  TypeSet<int>& relevantpoints) const;
173 
174 protected:
175 
180 
182 
184 };
185 
186 
187 
194 public:
197  "RadialBasicFunction",
198  tr("Radial Basis Function") );
199 
204  Gridder2D* clone() const;
205 
206  static const char* sKeyIsMetric() { return "IsMetric"; }
207 
208  bool operator==(const Gridder2D&) const;
209 
210  void setMetricTensor(double m11,double m12,double m22);
211 
212  bool allPointsAreRelevant() const;
213  bool getWeights(const Coord&,TypeSet<double>& weights,
214  TypeSet<int>& relevantpoints) const;
215  bool areWeightsValuesDependent() const { return true; }
216  float getValue(const Coord&,const TypeSet<double>* weights=0,
217  const TypeSet<int>* relevantpoints=0) const;
218 
219 protected:
220 
221  bool ismetric_;
222  double m11_;
223  double m12_;
224  double m22_;
225 
228 
229  bool updateSolver();
230  //will be removed after 6.2
231 
234  double getRadius(const Coord& pos1,const Coord& pos2) const;
235  static double evaluateRBF(double radius,double scale=1.);
236 
239  bool setWeights(const Coord&,TypeSet<double>& weights,
240  TypeSet<int>* usedpoints=0) const;
241 };
242 
arrayndalgo.h
InverseDistanceGridder2D::mDefaultFactoryInstantiation
mDefaultFactoryInstantiation(Gridder2D, InverseDistanceGridder2D, "InverseDistance", tr("Inverse distance"))
Gridder2D::usedpoints_
TypeSet< int > usedpoints_
Definition: gridder2d.h:99
Gridder2D::getDetrendedValue
float getDetrendedValue(int idx) const
Gridder2D::clone
virtual Gridder2D * clone() const =0
Gridder2D::mDefineFactoryInClass
mDefineFactoryInClass(Gridder2D, factory)
InverseDistanceGridder2D::clone
Gridder2D * clone() const
RadialBasisFunctionGridder2D::clone
Gridder2D * clone() const
factory.h
TriangulatedGridder2D::mDefaultFactoryInstantiation
mDefaultFactoryInstantiation(Gridder2D, TriangulatedGridder2D, "Triangulated", tr("Triangulation"))
InverseDistanceGridder2D::getSearchRadius
float getSearchRadius() const
Definition: gridder2d.h:131
Gridder2D::setGridArea
virtual void setGridArea(const Interval< float > &, const Interval< float > &)
Definition: gridder2d.h:51
Gridder2D::getPoints
const TypeSet< Coord > * getPoints() const
Definition: gridder2d.h:64
Triangle2DInterpolator
For a given triangulated geometry(set of points), interpolating any point located in or nearby the go...
Definition: delaunay.h:187
Gridder2D::setValues
bool setValues(const TypeSet< float > &)
Gridder2D::usePar
virtual bool usePar(const IOPar &)
Gridder2D::pointsChangedCB
virtual bool pointsChangedCB(CallBacker *)
Definition: gridder2d.h:101
Gridder2D::Gridder2D
Gridder2D(const Gridder2D &)
TriangulatedGridder2D::mODTextTranslationClass
mODTextTranslationClass(TriangulatedGridder2D)
RadialBasisFunctionGridder2D
Uses Radial Basic Function to predict the values.
Definition: gridder2d.h:193
TriangulatedGridder2D::clone
Gridder2D * clone() const
InverseDistanceGridder2D::InverseDistanceGridder2D
InverseDistanceGridder2D()
mDefaultFactoryInstantiation
#define mDefaultFactoryInstantiation(baseclss, clss, keywrd, usernm)
Definition: factory.h:288
InverseDistanceGridder2D::sKeySearchRadius
static const char * sKeySearchRadius()
Definition: gridder2d.h:126
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
RadialBasisFunctionGridder2D::setMetricTensor
void setMetricTensor(double m11, double m12, double m22)
InverseDistanceGridder2D::allPointsAreRelevant
bool allPointsAreRelevant() const
RadialBasisFunctionGridder2D::~RadialBasisFunctionGridder2D
~RadialBasisFunctionGridder2D()
TriangulatedGridder2D::center_
Coord center_
Definition: gridder2d.h:181
RadialBasisFunctionGridder2D::globalweights_
TypeSet< double > * globalweights_
Definition: gridder2d.h:226
DAGTriangleTree
Reference: "Parallel Incremental Delaunay Triangulation", by Kohout J.2005.
Definition: delaunay.h:36
RadialBasisFunctionGridder2D::valuesChangedCB
void valuesChangedCB(CallBacker *)
Gridder2D::setPoints
bool setPoints(const TypeSet< Coord > &)
Gridder2D::areWeightsValuesDependent
virtual bool areWeightsValuesDependent() const
Definition: gridder2d.h:89
Gridder2D::setTrend
virtual void setTrend(PolyTrend::Order)
InverseDistanceGridder2D::wantsAllPoints
bool wantsAllPoints() const
If false, points should be tested with isPointUsable.
Definition: gridder2d.h:133
InverseDistanceGridder2D::fillPar
void fillPar(IOPar &) const
TriangulatedGridder2D::setGridArea
void setGridArea(const Interval< float > &, const Interval< float > &)
CallBacker
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:185
InverseDistanceGridder2D::radius_
float radius_
Definition: gridder2d.h:144
Gridder2D
Generic interface for 2D gridding.
Definition: gridder2d.h:32
mODTextTranslationClass
#define mODTextTranslationClass(clss)
Definition: uistring.h:40
RadialBasisFunctionGridder2D::allPointsAreRelevant
bool allPointsAreRelevant() const
Gridder2D::getValue
virtual float getValue(const Coord &, const TypeSet< double > *weights=0, const TypeSet< int > *relevantpoints=0) const
Does the gridding.
Gridder2D::Gridder2D
Gridder2D()
Gridder2D::operator==
virtual bool operator==(const Gridder2D &) const
InverseDistanceGridder2D::searchRadiusErrMsg
static uiString searchRadiusErrMsg()
Coord
A cartesian coordinate in 2D space.
Definition: coord.h:25
Gridder2D::allPointsAreRelevant
virtual bool allPointsAreRelevant() const =0
RadialBasisFunctionGridder2D::operator==
bool operator==(const Gridder2D &) const
TriangulatedGridder2D::getWeights
bool getWeights(const Coord &, TypeSet< double > &weights, TypeSet< int > &relevantpoints) const
InverseDistanceGridder2D::InverseDistanceGridder2D
InverseDistanceGridder2D(const InverseDistanceGridder2D &)
TriangulatedGridder2D::pointsChangedCB
bool pointsChangedCB(CallBacker *)
TriangulatedGridder2D::triangles_
DAGTriangleTree * triangles_
Definition: gridder2d.h:176
Gridder2D::isAtInputPos
bool isAtInputPos(const Coord &, int &idx) const
InverseDistanceGridder2D::usePar
bool usePar(const IOPar &)
RadialBasisFunctionGridder2D::m22_
double m22_
Definition: gridder2d.h:224
TaskRunner
Class that can execute a task.
Definition: task.h:170
Gridder2D::getWeights
virtual bool getWeights(const Coord &, TypeSet< double > &weights, TypeSet< int > &relevantpoints) const =0
TriangulatedGridder2D::yrg_
Interval< float > yrg_
Definition: gridder2d.h:179
RadialBasisFunctionGridder2D::pointsChangedCB
bool pointsChangedCB(CallBacker *)
RadialBasisFunctionGridder2D::updateSolver
bool updateSolver(TaskRunner *)
TriangulatedGridder2D
Uses Delaunay triangulation to find a points neighbors and does inverse distance between the neighbor...
Definition: gridder2d.h:154
RadialBasisFunctionGridder2D::m11_
double m11_
Definition: gridder2d.h:222
InverseDistanceGridder2D::setSearchRadius
void setSearchRadius(float)
RadialBasisFunctionGridder2D::RadialBasisFunctionGridder2D
RadialBasisFunctionGridder2D(const RadialBasisFunctionGridder2D &)
mathfunc.h
TriangulatedGridder2D::interpolator_
Triangle2DInterpolator * interpolator_
Definition: gridder2d.h:177
RadialBasisFunctionGridder2D::updateSolution
bool updateSolution()
Gridder2D::valuesChangedCB
virtual void valuesChangedCB(CallBacker *)
Definition: gridder2d.h:102
RadialBasisFunctionGridder2D::updateSolver
bool updateSolver()
RadialBasisFunctionGridder2D::getWeights
bool getWeights(const Coord &, TypeSet< double > &weights, TypeSet< int > &relevantpoints) const
InverseDistanceGridder2D::isPointUsable
bool isPointUsable(const Coord &, const Coord &) const
Gridder2D::points_
const TypeSet< Coord > * points_
Definition: gridder2d.h:96
Gridder2D::setPoints
bool setPoints(const TypeSet< Coord > &, TaskRunner *)
RadialBasisFunctionGridder2D::m12_
double m12_
Definition: gridder2d.h:223
positionlist.h
TriangulatedGridder2D::~TriangulatedGridder2D
~TriangulatedGridder2D()
Gridder2D::fillPar
virtual void fillPar(IOPar &) const
LinSolver
LinSolver - Solves linear systems of equations on the form A*x=B. A is a matrix of the size N*N,...
Definition: gridder2d.h:23
uiString
String that is able to hold international (UTF-8) strings for the user interface.
Definition: uistring.h:121
TriangulatedGridder2D::TriangulatedGridder2D
TriangulatedGridder2D(const TriangulatedGridder2D &)
PolyTrend::Order
Order
Definition: arrayndalgo.h:1100
RadialBasisFunctionGridder2D::getRadius
double getRadius(const Coord &pos1, const Coord &pos2) const
RadialBasisFunctionGridder2D::ismetric_
bool ismetric_
Definition: gridder2d.h:221
Gridder2D::~Gridder2D
virtual ~Gridder2D()
Gridder2D::trend_
PolyTrend * trend_
Definition: gridder2d.h:97
TriangulatedGridder2D::xrg_
Interval< float > xrg_
Definition: gridder2d.h:178
RadialBasisFunctionGridder2D::solv_
LinSolver< double > * solv_
Definition: gridder2d.h:227
Gridder2D::values_
const TypeSet< float > * values_
Definition: gridder2d.h:95
RadialBasisFunctionGridder2D::setWeights
bool setWeights(const Coord &, TypeSet< double > &weights, TypeSet< int > *usedpoints=0) const
InverseDistanceGridder2D
Uses inverse distance method for 2D gridding.
Definition: gridder2d.h:114
TriangulatedGridder2D::TriangulatedGridder2D
TriangulatedGridder2D()
InverseDistanceGridder2D::mODTextTranslationClass
mODTextTranslationClass(InverseDistanceGridder2D)
RadialBasisFunctionGridder2D::areWeightsValuesDependent
bool areWeightsValuesDependent() const
Definition: gridder2d.h:215
RadialBasisFunctionGridder2D::evaluateRBF
static double evaluateRBF(double radius, double scale=1.)
RadialBasisFunctionGridder2D::getValue
float getValue(const Coord &, const TypeSet< double > *weights=0, const TypeSet< int > *relevantpoints=0) const
Does the gridding.
Interval< float >
InverseDistanceGridder2D::operator==
bool operator==(const Gridder2D &) const
TriangulatedGridder2D::allPointsAreRelevant
bool allPointsAreRelevant() const
RadialBasisFunctionGridder2D::sKeyIsMetric
static const char * sKeyIsMetric()
Definition: gridder2d.h:206
IOPar
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:55
PolyTrend
Polynomial trend with order 0 (mean), 1 (linear) or 2 (parabolic) The trend is derived from a set of ...
Definition: arrayndalgo.h:1094
RadialBasisFunctionGridder2D::RadialBasisFunctionGridder2D
mODTextTranslationClass(RadialBasisFunctionGridder2D) public RadialBasisFunctionGridder2D()
Gridder2D::wantsAllPoints
virtual bool wantsAllPoints() const
If false, points should be tested with isPointUsable.
Definition: gridder2d.h:44
TypeSet< Coord >
Gridder2D::isPointUsable
virtual bool isPointUsable(const Coord &cpt, const Coord &dpt) const
InverseDistanceGridder2D::getWeights
bool getWeights(const Coord &, TypeSet< double > &weights, TypeSet< int > &relevantpoints) const
coord.h

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