 |
OpendTect
6.6
|
Go to the documentation of this file.
29 Table(
int lsinc,
int nsinc,
float emax,
float fmax,
33 bool isOK()
const {
return asinc2_.get2DData(); }
43 inline void setValue(
int idx,
int idy,
float val )
44 { asinc2_.set( idx, idy, val ); }
45 inline float getValue(
int idx,
int idy )
const
46 {
return asinc2_.get( idx, idy ); }
62 friend class RotatorExecutor;
76 static float sinc(
float x);
79 static float**
makeArray(
int n1,
int n2) {
return 0; }
142 inline bool isTableOK()
const;
144 inline od_int64 getTableBytes()
const;
145 inline float getMaximumError()
const;
146 inline float getMaximumFrequency()
const;
147 inline int getMaximumLength()
const;
155 bool init() {
return initTable( 0.3f, 8 ); }
157 inline float getTableVal(
int idx,
int idy)
const;
179 template <
class RT,
class PT>
187 void setInput(
const RT*,
bool datahasnoudf=
false);
188 bool isOK()
const {
return data_ && isTableOK(); }
189 bool initTable(
float fmax,
int lmax);
191 RT getValue(PT)
const;
201 template <
class RT,
class PT>
207 bool isOK()
const {
return isTableOK(); }
208 bool initTable(
float fmax,
int lmax);
210 RT getValue(PT,PT)
const;
223 template <
class RT,
class PT>
229 bool isOK()
const {
return isTableOK(); }
230 bool initTable(
float fmax,
int lmax);
232 RT getValue(PT,PT,PT)
const;
278 bool hasudfs =
false;
279 for (
int idx=0; idx<sz; idx++ )
294 template <
class RT,
class PT>
305 template <
class RT,
class PT>
312 initUndefTable( data_, nx_ );
316 template <
class RT,
class PT>
327 template <
class RT,
class PT>
337 #define mKSinc(frac) ( mCast(int,frac*nsincm1_+0.5) )
338 #define mValidPos(is,ns) ( (is > -1 && is < ns) )
339 #define mCheckUdf(totidx) \
341 if ( isudfarr_ && isudfarr_[totidx] ) \
344 #define mAddVal(val,weight,totidx,outval) \
347 outval += val * weight; \
349 #define mAddValW(val,totidx,weight,outval,sumweights) \
352 outval += val * weight; \
353 sumweights += weight; \
356 template <
class RT,
class PT>
361 if ( fracx > -snapdist && fracx < snapdist &&
mValidPos(idx0,nx_) &&
362 ( !isudfarr_ || (isudfarr_ && !isudfarr_[idx0]) ) )
365 const PT floorx = floor(x);
367 const float* asinc = asinc_[
mKSinc(fracx)];
368 idx0 =
mCast(
int,floorx) + ishift_;
373 for (
int isinc=0,idx=idx0; isinc<lsinc_; isinc++,idx++ )
374 mAddVal(data_[idx],asinc[isinc],idx,out)
376 else if ( extrapcst_ )
378 for (
int isinc=0,idx=idx0; isinc<lsinc_; isinc++,idx++ )
380 const int idx1 = idx < 0 ? 0 : idx >= nx_ ? nx_-1 : idx;
381 mAddVal(data_[idx1],asinc[isinc],idx,out)
386 float sumweights = 0.f;
387 for (
int isinc=0,idx=idx0; isinc<lsinc_; isinc++,idx++ )
392 mAddValW(data_[idx],idx,asinc[isinc],out,sumweights)
402 template <
class RT,
class PT>
414 template <
class RT,
class PT>
426 template <
class RT,
class PT>
433 if ( fracx > -snapdist && fracx < snapdist &&
mValidPos(idx0,nx_) &&
434 fracy > -snapdist && fracy < snapdist &&
mValidPos(idy0,ny_) &&
435 ( !isudfarr_ || (isudfarr_ && !isudfarr_[idx0*ny_+idy0]) ) )
436 return data_[idx0*ny_+idy0];
438 const PT floorx = floor(x);
439 const PT floory = floor(y);
442 const float* asincx = asinc_[
mKSinc(fracx)];
443 const float* asincy = asinc_[
mKSinc(fracy)];
444 idx0 =
mCast(
int,floorx) + ishift_;
445 idy0 =
mCast(
int,floory) + ishift_;
447 double out = 0., outx;
450 for (
int ixsinc=0,idx=idx0; ixsinc<lsinc_; ixsinc++,idx++ )
453 const float asincxval = asincx[ixsinc];
457 for (
int iysinc=0,idy=idy0; iysinc<lsinc_; iysinc++,idy++ )
460 mAddVal(data_[off],asincy[iysinc],off,outx)
462 out += outx * asincxval;
465 else if ( extrapcst_ )
467 for (
int ixsinc=0,idx=idx0; ixsinc<lsinc_; ixsinc++,idx++ )
470 const float asincxval = asincx[ixsinc];
474 const int idx1 = idx < 0 ? 0 : idx >= nx_ ? nx_-1 : idx;
475 for (
int iysinc=0,idy=idy0; iysinc<lsinc_; iysinc++,idy++ )
477 const int idy1 = idy < 0 ? 0 : idy >= ny_ ? ny_-1 : idy;
479 mAddVal(data_[off],asincy[iysinc],off,outx)
481 out += outx * asincxval;
486 double sumweights = 0., sumx;
487 for (
int ixsinc=0,idx=idx0; ixsinc<lsinc_; ixsinc++,idx++ )
489 outx = 0.; sumx = 0.;
490 const float asincxval = asincx[ixsinc];
494 for (
int iysinc=0,idy=idy0; iysinc<lsinc_; iysinc++,idy++ )
500 mAddValW(data_[off],off,asincy[iysinc],outx,sumx)
502 out += outx * asincxval;
513 template <
class RT,
class PT>
527 template <
class RT,
class PT>
541 #define mGetOffset(idx,idy,idz) ( idz + nz_*( idy + ny_*idx ) )
542 template <
class RT,
class PT>
551 if ( fracx > -snapdist && fracx < snapdist &&
mValidPos(idx0,nx_) &&
552 fracy > -snapdist && fracy < snapdist &&
mValidPos(idy0,ny_) &&
553 fracz > -snapdist && fracz < snapdist &&
mValidPos(idz0,nz_) &&
554 ( !isudfarr_ || (isudfarr_ && !isudfarr_[
mGetOffset(idx0,idy0,idz0)])))
557 const PT floorx = floor(x);
558 const PT floory = floor(y);
559 const PT floorz = floor(z);
563 const float* asincx = asinc_[
mKSinc(fracx)];
564 const float* asincy = asinc_[
mKSinc(fracy)];
565 const float* asincz = asinc_[
mKSinc(fracz)];
566 idx0 =
mCast(
int,floorx) + ishift_;
567 idy0 =
mCast(
int,floory) + ishift_;
568 idz0 =
mCast(
int,floorz) + ishift_;
574 for (
int ixsinc=0,idx=idx0; ixsinc<lsinc_; ixsinc++,idx++ )
577 const float asincxval = asincx[ixsinc];
581 for (
int iysinc=0,idy=idy0; iysinc<lsinc_; iysinc++,idy++ )
584 const float asincyval = asincy[iysinc];
588 for (
int izsinc=0,idz=idz0; izsinc<lsinc_; izsinc++,idz++ )
591 mAddVal(data_[off],asincz[izsinc],off,outy)
593 outx += outy * asincyval;
595 out += asincxval * outx;
598 else if ( extrapcst_ )
600 for (
int ixsinc=0,idx=idx0; ixsinc<lsinc_; ixsinc++,idx++ )
603 const float asincxval = asincx[ixsinc];
607 const int idx1 = idx < 0 ? 0 : idx >= nx_ ? nx_-1 : idx;
608 for (
int iysinc=0,idy=idy0; iysinc<lsinc_; iysinc++,idy++ )
611 const float asincyval = asincy[iysinc];
615 const int idy1 = idy < 0 ? 0 : idy >= ny_ ? ny_-1 : idy;
616 for (
int izsinc=0,idz=idz0; izsinc<lsinc_; izsinc++,idz++ )
618 const int idz1 = idz < 0 ? 0 : idz >= nz_ ? nz_-1 : idz;
620 mAddVal(data_[off],asincz[izsinc],off,outy)
622 outx += outy * asincyval;
624 out += asincxval * outx;
629 double sumweights = 0., sumx, sumy;
630 for (
int ixsinc=0,idx=idx0; ixsinc<lsinc_; ixsinc++,idx++ )
632 outx = 0.; sumx = 0.;
633 const float asincxval = asincx[ixsinc];
637 for (
int iysinc=0,idy=idy0; iysinc<lsinc_; iysinc++,idy++ )
639 outy = 0.; sumy = 0.;
640 const float asincyval = asincy[iysinc];
644 for (
int izsinc=0,idz=idz0; izsinc<lsinc_; izsinc++,idz++ )
648 mAddValW(data_[off],off,asincz[izsinc],outy,sumy)
650 outx += outy * asincyval;
653 out += asincxval * outx;
SincInterpolator3D(const RT *data, int nx, int ny, int nz)
Definition: sincinterpolator.h:514
const float ** asinc_
Definition: sincinterpolator.h:175
Threads::Mutex lock_
Definition: sincinterpolator.h:70
static SincTableManager & STM()
float getTableVal(int idx, int idy) const
Definition: sincinterpolator.h:263
void setInput(const RT *, bool datahasnoudf=false)
Definition: sincinterpolator.h:306
const Table * getTable(float fmax, int lmax)
#define mValidPos(is, ns)
Definition: sincinterpolator.h:338
ObjectSet< const Table > tables_
Definition: sincinterpolator.h:69
static const Table * makeTable(float fmax, int lmax)
int nz_
Definition: sincinterpolator.h:239
void setValue(int idx, int idy, float val)
Definition: sincinterpolator.h:43
static void deleteArray(float **, int n1)
Definition: sincinterpolator.h:80
A sinc interpolator for bandlimited uniformly-sampled functions y(x). Interpolators can be designed f...
Definition: sincinterpolator.h:135
const RT * data_
Definition: sincinterpolator.h:236
Is a lock that allows a thread to have exlusive rights to something.
Definition: thread.h:45
A Math Function as in F(x,y).
Definition: mathfunc.h:105
Definition: sincinterpolator.h:182
Set of pointers to objects.
Definition: commontypes.h:31
const SincTableManager::Table * table_
Definition: sincinterpolator.h:174
int getMaximumLength() const
Definition: sincinterpolator.h:257
Table(int lsinc, int nsinc, float emax, float fmax, int lmax)
#define mIsUdf(val)
Use mIsUdf to check for undefinedness of simple types.
Definition: undefval.h:289
#define od_int64
Definition: plftypes.h:35
bool isTableOK() const
Definition: sincinterpolator.h:248
float ** asinc_
Definition: sincinterpolator.h:54
#define mExpClass(module)
Definition: commondefs.h:177
Kaiser Window Function.
Definition: windowfunction.h:107
Definition: sincinterpolator.h:226
float getMaximumFrequency() const
Definition: sincinterpolator.h:37
int ny_
Definition: sincinterpolator.h:216
#define mDefEps
Definition: commondefs.h:71
RT getValue(PT, PT) const
Definition: sincinterpolator.h:427
virtual bool initTable(float fmax, int lmax)
#define mDefEpsF
Definition: commondefs.h:69
#define mAddVal(val, weight, totidx, outval)
Definition: sincinterpolator.h:344
Definition: geom2dascio.h:20
float getMaximumError() const
Definition: sincinterpolator.h:36
const RT * data_
Definition: sincinterpolator.h:195
int nx_
Definition: sincinterpolator.h:237
bool extrapzero_
Definition: sincinterpolator.h:167
bool initTable(float fmax, int lmax)
Definition: sincinterpolator.h:415
bool hasSameDesign(float fmax, int lmax) const
int ny_
Definition: sincinterpolator.h:238
Mathematical function.
Definition: mathfunc.h:61
int nsincm1_
Definition: sincinterpolator.h:164
int ishift_
Definition: sincinterpolator.h:165
RT getValue(PT, PT, PT) const
Definition: sincinterpolator.h:543
static float ** makeArray(int n1, int n2)
Definition: sincinterpolator.h:79
bool setSize(int)
Definition: sincinterpolator.h:317
int nxm_
Definition: sincinterpolator.h:217
od_int64 getTableBytes() const
float fmax_
Definition: sincinterpolator.h:56
bool initUndefTable(const RT *, od_int64 sz)
Definition: sincinterpolator.h:268
float getMaximumError() const
Definition: sincinterpolator.h:251
float emax_
Definition: sincinterpolator.h:55
Array2DImpl< float > asinc2_
Definition: sincinterpolator.h:50
#define mGetOffset(idx, idy, idz)
Definition: sincinterpolator.h:541
od_int64 getTableBytes() const
Definition: sincinterpolator.h:260
int lmax_
Definition: sincinterpolator.h:57
bool extrapcst_
Definition: sincinterpolator.h:166
bool isOK() const
Definition: sincinterpolator.h:207
#define mIsZero(x, eps)
Definition: commondefs.h:66
#define mClass(module)
Definition: commondefs.h:181
void deleteAndZeroArrPtr(T *&ptr, bool isowner=true)
Definition: ptrman.h:32
int nx_
Definition: sincinterpolator.h:196
Extrapolation getExtrapolation()
Extrapolation
Definition: sincinterpolator.h:149
bool initTable(float fmax, int lmax)
Definition: sincinterpolator.h:528
#define mTryAlloc(var, stmt)
Catches bad_alloc and sets ptr to null as normal.
Definition: commondefs.h:246
int getTableIdx(float fmax, int lmax) const
const RT * data_
Definition: sincinterpolator.h:214
~Table()
Definition: sincinterpolator.h:31
static const float snapdist
Definition: sincinterpolator.h:169
bool isOK() const
Definition: sincinterpolator.h:33
#define mKSinc(frac)
Definition: sincinterpolator.h:337
float getValue(int idx, int idy) const
Definition: sincinterpolator.h:45
SincInterpolator2D(const RT *, int nx, int ny)
Definition: sincinterpolator.h:403
#define mAddValW(val, totidx, weight, outval, sumweights)
Definition: sincinterpolator.h:349
static float sinc(float x)
bool init()
Definition: sincinterpolator.h:155
A Math Function as in F(x,y,z).
Definition: mathfunc.h:122
void setExtrapolation(Extrapolation)
#define mCast(tp, v)
Definition: commondefs.h:137
Definition: sincinterpolator.h:204
Definition: sincinterpolator.h:27
SincTableManager()
Definition: sincinterpolator.h:21
int nsinc_
Definition: sincinterpolator.h:58
int nx_
Definition: sincinterpolator.h:215
bool isOK() const
Definition: sincinterpolator.h:188
A manager used for constructing the table necessary for Sinc interpolations. The manager creates one ...
Definition: sincinterpolator.h:19
int nym_
Definition: sincinterpolator.h:218
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:274
int nym_
Definition: sincinterpolator.h:241
float getMaximumFrequency() const
Definition: sincinterpolator.h:254
bool * isudfarr_
Definition: sincinterpolator.h:162
RT getValue(PT) const
Definition: sincinterpolator.h:357
int lsinc_
Definition: sincinterpolator.h:59
SincInterpolator1D(const RT *=0, int sz=-1)
Definition: sincinterpolator.h:295
int nxm_
Definition: sincinterpolator.h:197
#define mNINT32(x)
Definition: commondefs.h:58
int nzm_
Definition: sincinterpolator.h:242
int nxm_
Definition: sincinterpolator.h:240
int getMaximumLength() const
Definition: sincinterpolator.h:38
int lsinc_
Definition: sincinterpolator.h:163
bool initTable(float fmax, int lmax)
Definition: sincinterpolator.h:328
bool isOK() const
Definition: sincinterpolator.h:229
Generated at
for the OpendTect
seismic interpretation project.
Copyright (C): dGB Beheer B.V. 1995-2021