OpendTect-6_4  6.4
sincinterpolator.h
Go to the documentation of this file.
1 #ifndef sincinterpolator_h
2 #define sincinterpolator_h
3 
4 #include "algomod.h"
5 #include "arrayndimpl.h"
6 #include "mathfunc.h"
7 #include "objectset.h"
8 #include "thread.h"
9 
10 class KaiserWindow;
11 
20 {
21 public:
23 
24  static SincTableManager& STM();
25 
26  mExpClass(Algo) Table /*Table of sinc interpolator coefficients.*/
27  {
28  public:
29  Table(int lsinc,int nsinc,float emax,float fmax,
30  int lmax);
31  ~Table() {}
32 
33  bool isOK() const { return asinc2_.get2DData(); }
34 
35  bool hasSameDesign(float fmax,int lmax) const;
36  float getMaximumError() const { return emax_; }
37  float getMaximumFrequency() const { return fmax_; }
38  int getMaximumLength() const { return lmax_; }
39  od_int64 getTableBytes() const;
40  int getLength() const; // length of sinc approximations
41  int getNumbers() const; // number of sinc approximations
42  int getShift() const;
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 ); }
47 
48  protected:
49 
50  Array2DImpl<float> asinc2_; // array of sinc approximations
51 
52  private:
53 
54  float** asinc_; //will be removed
55  float emax_;
56  float fmax_;
57  int lmax_;
58  int nsinc_; //will be removed
59  int lsinc_; //will be removed
60 
61  friend class SincInterpolator;
62  friend class RotatorExecutor;
63 
64  };
65 
66  const Table* getTable(float fmax,int lmax);
67 
68 protected:
71  //Protects tables_
72  int getTableIdx(float fmax,int lmax) const;
73 
74  // Builds a table based on design parameters.
75  static const Table* makeTable(float fmax,int lmax);
76  static float sinc(float x);
77 
78  //will be removed after 6.0
79  static float** makeArray(int n1,int n2) { return 0; }
80  static void deleteArray(float**,int n1) {}
81 
82 };
83 
84 
85 
135 {
136 public:
137  ~SincInterpolator();
138 
141  virtual bool initTable(float fmax,int lmax);
142  inline bool isTableOK() const;
143 
144  inline od_int64 getTableBytes() const;
145  inline float getMaximumError() const;
146  inline float getMaximumFrequency() const;
147  inline int getMaximumLength() const;
148 
149  enum Extrapolation { NONE=0, ZERO=1, CONSTANT=2 };
150  Extrapolation getExtrapolation();
151  void setExtrapolation(Extrapolation);
152 
153 protected:
154  SincInterpolator();
155  bool init() { return initTable( 0.3f, 8 ); }
156 
157  inline float getTableVal(int idx,int idy) const;
158 
159  template <class RT>
160  bool initUndefTable(const RT*,od_int64 sz);
161 
162  bool* isudfarr_;
163  int lsinc_;
164  int nsincm1_;
165  int ishift_;
167  bool extrapzero_; // NOT used, will be removed after 6.0
168 
169  static const float snapdist;
172 
173  /*Table of sinc interpolation coefficients.*/
175  const float** asinc_; // only a cached shortcut
176 };
177 
178 
179 template <class RT, class PT>
181  public MathFunction<RT,PT>
182 {
183 public:
184  SincInterpolator1D(const RT* =0,int sz=-1);
185 
186  bool setSize(int);
187  void setInput(const RT*,bool datahasnoudf=false);
188  bool isOK() const { return data_ && isTableOK(); }
189  bool initTable(float fmax,int lmax);
190 
191  RT getValue(PT) const;
192 
193 private:
194 
195  const RT* data_;
196  int nx_;
197  int nxm_;
198 };
199 
200 
201 template <class RT, class PT>
203  public MathXYFunction<RT,PT>
204 {
205 public:
206  SincInterpolator2D(const RT*,int nx,int ny);
207  bool isOK() const { return isTableOK(); }
208  bool initTable(float fmax,int lmax);
209 
210  RT getValue(PT,PT) const;
211 
212 private:
213 
214  const RT* data_;
215  int nx_;
216  int ny_;
217  int nxm_;
218  int nym_;
219 
220 };
221 
222 
223 template <class RT, class PT>
225  public MathXYZFunction<RT,PT>
226 {
227 public:
228  SincInterpolator3D(const RT* data,int nx,int ny,int nz);
229  bool isOK() const { return isTableOK(); }
230  bool initTable(float fmax,int lmax);
231 
232  RT getValue(PT,PT,PT) const;
233 
234 private:
235 
236  const RT* data_;
237  int nx_;
238  int ny_;
239  int nz_;
240  int nxm_;
241  int nym_;
242  int nzm_;
243 
244 };
245 
246 
247 
248 inline bool SincInterpolator::isTableOK() const
249 { return table_; }
250 
252 { return table_->getMaximumError(); }
253 
255 { return table_->getMaximumFrequency(); }
256 
258 { return table_->getMaximumLength(); }
259 
261 { return table_->getTableBytes(); }
262 
263 inline float SincInterpolator::getTableVal( int idx, int idy ) const
264 { return table_ ? table_->getValue( idx, idy ) : mUdf(float); }
265 
266 
267 template <class RT>
269 {
271  if ( !vals )
272  return true;
273 
274  mTryAlloc( isudfarr_, bool[sz] );
275  if ( !isudfarr_ )
276  return false;
277 
278  bool hasudfs = false;
279  for ( int idx=0; idx<sz; idx++ )
280  {
281  isudfarr_[idx] = mIsUdf(vals[idx]);
282  if ( isudfarr_[idx] )
283  hasudfs = true;
284  }
285 
286  if ( !hasudfs )
288 
289  return true;
290 }
291 
292 
293 
294 template <class RT, class PT>
296  : SincInterpolator()
297  , data_( 0 )
298  , nx_(nx)
299 {
300  init();
301  setInput( data );
302 }
303 
304 
305 template <class RT, class PT>
306 void SincInterpolator1D<RT,PT>::setInput( const RT* data, bool datahasnoudf )
307 {
308  data_ = data;
309  if ( datahasnoudf )
311  else
313 }
314 
315 
316 template <class RT, class PT>
318 {
319  if ( nx < 1 )
320  return false;
321 
322  nx_ = nx;
323  return init();
324 }
325 
326 
327 template <class RT, class PT>
328 bool SincInterpolator1D<RT,PT>::initTable( float fmax, int lmax )
329 {
330  if ( !SincInterpolator::initTable(fmax,lmax) )
331  return false;
332 
333  nxm_ = nx_ - lsinc_;
334  return true;
335 }
336 
337 #define mKSinc(frac) ( mCast(int,frac*nsincm1_+0.5) )
338 #define mValidPos(is,ns) ( (is > -1 && is < ns) )
339 #define mCheckUdf(totidx) \
340 { \
341  if ( isudfarr_ && isudfarr_[totidx] ) \
342  continue; \
343 }
344 #define mAddVal(val,weight,totidx,outval) \
345 { \
346  mCheckUdf(totidx) \
347  outval += val * weight; \
348 }
349 #define mAddValW(val,totidx,weight,outval,sumweights) \
350 { \
351  mCheckUdf(totidx) \
352  outval += val * weight; \
353  sumweights += weight; \
354 }
355 
356 template <class RT,class PT>
358 {
359  int idx0 = mNINT32(x);
360  PT fracx = x - idx0;
361  if ( fracx > -snapdist && fracx < snapdist && mValidPos(idx0,nx_) &&
362  ( !isudfarr_ || (isudfarr_ && !isudfarr_[idx0]) ) )
363  return data_[idx0];
364 
365  const PT floorx = floor(x);
366  fracx = x - floorx;
367  const float* asinc = asinc_[mKSinc(fracx)];
368  idx0 = mCast(int,floorx) + ishift_;
369 
370  float out = 0.f;
371  if ( mValidPos(idx0,nxm_) )
372  {
373  for ( int isinc=0,idx=idx0; isinc<lsinc_; isinc++,idx++ )
374  mAddVal(data_[idx],asinc[isinc],idx,out)
375  }
376  else if ( extrapcst_ )
377  {
378  for ( int isinc=0,idx=idx0; isinc<lsinc_; isinc++,idx++ )
379  {
380  const int idx1 = idx < 0 ? 0 : idx >= nx_ ? nx_-1 : idx;
381  mAddVal(data_[idx1],asinc[isinc],idx,out)
382  }
383  }
384  else
385  {
386  float sumweights = 0.f;
387  for ( int isinc=0,idx=idx0; isinc<lsinc_; isinc++,idx++ )
388  {
389  if ( !mValidPos(idx,nx_) )
390  continue;
391 
392  mAddValW(data_[idx],idx,asinc[isinc],out,sumweights)
393  }
394  if ( !mIsZero(sumweights,mDefEpsF) ) out /= sumweights;
395  }
396 
397  return mCast(RT,out);
398 }
399 
400 
401 
402 template <class RT, class PT>
403 SincInterpolator2D<RT,PT>::SincInterpolator2D( const RT* data, int nx, int ny )
404  : SincInterpolator()
405  , data_(data)
406  , nx_(nx)
407  , ny_(ny)
408 {
409  init();
411 }
412 
413 
414 template <class RT, class PT>
415 bool SincInterpolator2D<RT,PT>::initTable( float fmax, int lmax )
416 {
417  if ( !SincInterpolator::initTable(fmax,lmax) )
418  return false;
419 
420  nxm_ = nx_ - lsinc_;
421  nym_ = ny_ - lsinc_;
422  return true;
423 }
424 
425 
426 template <class RT, class PT>
428 {
429  int idx0 = mNINT32(x);
430  int idy0 = mNINT32(y);
431  PT fracx = x - idx0;
432  PT fracy = y - idy0;
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];
437 
438  const PT floorx = floor(x);
439  const PT floory = floor(y);
440  fracx = x - floorx;
441  fracy = y - floory;
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_;
446 
447  double out = 0., outx;
448  if ( mValidPos(idx0,nxm_) && mValidPos(idy0,nym_) )
449  {
450  for ( int ixsinc=0,idx=idx0; ixsinc<lsinc_; ixsinc++,idx++ )
451  {
452  outx = 0.;
453  const float asincxval = asincx[ixsinc];
454  if ( mIsZero(asincxval,mDefEpsF) )
455  continue;
456 
457  for ( int iysinc=0,idy=idy0; iysinc<lsinc_; iysinc++,idy++ )
458  {
459  const od_int64 off = idx*ny_+idy;
460  mAddVal(data_[off],asincy[iysinc],off,outx)
461  }
462  out += outx * asincxval;
463  }
464  }
465  else if ( extrapcst_ )
466  {
467  for ( int ixsinc=0,idx=idx0; ixsinc<lsinc_; ixsinc++,idx++ )
468  {
469  outx = 0.;
470  const float asincxval = asincx[ixsinc];
471  if ( mIsZero(asincxval,mDefEpsF) )
472  continue;
473 
474  const int idx1 = idx < 0 ? 0 : idx >= nx_ ? nx_-1 : idx;
475  for ( int iysinc=0,idy=idy0; iysinc<lsinc_; iysinc++,idy++ )
476  {
477  const int idy1 = idy < 0 ? 0 : idy >= ny_ ? ny_-1 : idy;
478  const od_int64 off = idx1*ny_+idy1;
479  mAddVal(data_[off],asincy[iysinc],off,outx)
480  }
481  out += outx * asincxval;
482  }
483  }
484  else
485  {
486  double sumweights = 0., sumx;
487  for ( int ixsinc=0,idx=idx0; ixsinc<lsinc_; ixsinc++,idx++ )
488  {
489  outx = 0.; sumx = 0.;
490  const float asincxval = asincx[ixsinc];
491  if ( mIsZero(asincxval,mDefEpsF) || !mValidPos(idx,nx_) )
492  continue;
493 
494  for ( int iysinc=0,idy=idy0; iysinc<lsinc_; iysinc++,idy++ )
495  {
496  if ( !mValidPos(idy,ny_) )
497  continue;
498 
499  const od_int64 off = idx*ny_+idy;
500  mAddValW(data_[off],off,asincy[iysinc],outx,sumx)
501  }
502  out += outx * asincxval;
503  sumweights += sumx;
504  }
505  if ( !mIsZero(sumweights,mDefEps) ) out /= sumweights;
506  }
507 
508  return mCast(RT,out);
509 }
510 
511 
512 
513 template <class RT, class PT>
515  int nz )
516  : SincInterpolator()
517  , data_(data)
518  , nx_(nx)
519  , ny_(ny)
520  , nz_(nz)
521 {
522  init();
524 }
525 
526 
527 template <class RT, class PT>
528 bool SincInterpolator3D<RT,PT>::initTable( float fmax, int lmax )
529 {
530  if ( !SincInterpolator::initTable(fmax,lmax) )
531  return false;
532 
533  nxm_ = nx_ - lsinc_;
534  nym_ = ny_ - lsinc_;
535  nzm_ = nz_ - lsinc_;
536  return true;
537 }
538 
539 
540 #undef mGetOffset
541 #define mGetOffset(idx,idy,idz) ( idz + nz_*( idy + ny_*idx ) )
542 template <class RT, class PT>
543 RT SincInterpolator3D<RT,PT>::getValue( PT x, PT y, PT z ) const
544 {
545  int idx0 = mNINT32(x);
546  int idy0 = mNINT32(y);
547  int idz0 = mNINT32(z);
548  PT fracx = x - idx0;
549  PT fracy = y - idy0;
550  PT fracz = z - idz0;
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)])))
555  return data_[mGetOffset(idx0,idy0,idz0)];
556 
557  const PT floorx = floor(x);
558  const PT floory = floor(y);
559  const PT floorz = floor(z);
560  fracx = x - floorx;
561  fracy = y - floory;
562  fracz = z - floorz;
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_;
569 
570  double out = 0.;
571  double outx, outy;
572  if ( mValidPos(idx0,nxm_) && mValidPos(idy0,nym_) && mValidPos(idz0,nzm_) )
573  {
574  for ( int ixsinc=0,idx=idx0; ixsinc<lsinc_; ixsinc++,idx++ )
575  {
576  outx = 0.;
577  const float asincxval = asincx[ixsinc];
578  if ( mIsZero(asincxval,mDefEpsF) )
579  continue;
580 
581  for ( int iysinc=0,idy=idy0; iysinc<lsinc_; iysinc++,idy++ )
582  {
583  outy = 0.;
584  const float asincyval = asincy[iysinc];
585  if ( mIsZero(asincyval,mDefEpsF) )
586  continue;
587 
588  for ( int izsinc=0,idz=idz0; izsinc<lsinc_; izsinc++,idz++ )
589  {
590  const od_int64 off = mGetOffset(idx,idy,idz);
591  mAddVal(data_[off],asincz[izsinc],off,outy)
592  }
593  outx += outy * asincyval;
594  }
595  out += asincxval * outx;
596  }
597  }
598  else if ( extrapcst_ )
599  {
600  for ( int ixsinc=0,idx=idx0; ixsinc<lsinc_; ixsinc++,idx++ )
601  {
602  outx = 0.;
603  const float asincxval = asincx[ixsinc];
604  if ( mIsZero(asincxval,mDefEpsF) )
605  continue;
606 
607  const int idx1 = idx < 0 ? 0 : idx >= nx_ ? nx_-1 : idx;
608  for ( int iysinc=0,idy=idy0; iysinc<lsinc_; iysinc++,idy++ )
609  {
610  outy = 0.;
611  const float asincyval = asincy[iysinc];
612  if ( mIsZero(asincyval,mDefEpsF) )
613  continue;
614 
615  const int idy1 = idy < 0 ? 0 : idy >= ny_ ? ny_-1 : idy;
616  for ( int izsinc=0,idz=idz0; izsinc<lsinc_; izsinc++,idz++ )
617  {
618  const int idz1 = idz < 0 ? 0 : idz >= nz_ ? nz_-1 : idz;
619  const od_int64 off = mGetOffset(idx1,idy1,idz1);
620  mAddVal(data_[off],asincz[izsinc],off,outy)
621  }
622  outx += outy * asincyval;
623  }
624  out += asincxval * outx;
625  }
626  }
627  else
628  {
629  double sumweights = 0., sumx, sumy;
630  for ( int ixsinc=0,idx=idx0; ixsinc<lsinc_; ixsinc++,idx++ )
631  {
632  outx = 0.; sumx = 0.;
633  const float asincxval = asincx[ixsinc];
634  if ( mIsZero(asincxval,mDefEpsF) || !mValidPos(idx,nx_) )
635  continue;
636 
637  for ( int iysinc=0,idy=idy0; iysinc<lsinc_; iysinc++,idy++ )
638  {
639  outy = 0.; sumy = 0.;
640  const float asincyval = asincy[iysinc];
641  if ( mIsZero(asincyval,mDefEpsF) || !mValidPos(idy,ny_) )
642  continue;
643 
644  for ( int izsinc=0,idz=idz0; izsinc<lsinc_; izsinc++,idz++ )
645  {
646  if ( !mValidPos(idz,nz_) ) continue;
647  const od_int64 off = mGetOffset(idx,idy,idz);
648  mAddValW(data_[off],off,asincz[izsinc],outy,sumy)
649  }
650  outx += outy * asincyval;
651  sumx += sumy;
652  }
653  out += asincxval * outx;
654  sumweights += sumx;
655  }
656  if ( !mIsZero(sumweights,mDefEps) ) out /= sumweights;
657  }
658 
659  return mCast(RT,out);
660 }
661 
662 #endif
#define mExpClass(module)
Definition: commondefs.h:160
#define mIsUdf(val)
Use mIsUdf to check for undefinedness of simple types.
Definition: undefval.h:287
bool isOK() const
Definition: sincinterpolator.h:33
Kaiser Window Function.
Definition: windowfunction.h:107
Extrapolation
Definition: sincinterpolator.h:149
int nx_
Definition: sincinterpolator.h:196
Definition: file.h:99
int nx_
Definition: sincinterpolator.h:237
od_int64 getTableBytes() const
Definition: sincinterpolator.h:260
float getTableVal(int idx, int idy) const
Definition: sincinterpolator.h:263
static const float snapdist
Definition: sincinterpolator.h:169
int getLength() const
Definition: windowfunction.h:124
int nsincm1_
Definition: sincinterpolator.h:164
bool initTable(float fmax, int lmax)
Definition: sincinterpolator.h:328
float getValue(int idx, int idy) const
Definition: sincinterpolator.h:45
#define mIsZero(x, eps)
Definition: commondefs.h:53
bool isTableOK() const
Definition: sincinterpolator.h:248
bool initTable(float fmax, int lmax)
Definition: sincinterpolator.h:415
#define mCast(tp, v)
Definition: commondefs.h:124
int nx_
Definition: sincinterpolator.h:215
RT getValue(PT, PT) const
Definition: sincinterpolator.h:427
#define od_int64
Definition: plftypes.h:36
int ny_
Definition: sincinterpolator.h:238
ObjectSet< const Table > tables_
Definition: sincinterpolator.h:69
int lsinc_
Definition: sincinterpolator.h:59
int nym_
Definition: sincinterpolator.h:218
~Table()
Definition: sincinterpolator.h:31
SincInterpolator3D(const RT *data, int nx, int ny, int nz)
Definition: sincinterpolator.h:514
Mathematical function.
Definition: mathfunc.h:61
int getMaximumLength() const
Definition: sincinterpolator.h:257
bool initUndefTable(const RT *, od_int64 sz)
Definition: sincinterpolator.h:268
Definition: sincinterpolator.h:180
SincTableManager()
Definition: sincinterpolator.h:22
int ishift_
Definition: sincinterpolator.h:165
static void deleteArray(float **, int n1)
Definition: sincinterpolator.h:80
void deleteAndZeroArrPtr(T *&ptr, bool isowner=true)
Definition: ptrman.h:37
int nxm_
Definition: sincinterpolator.h:240
int lmax_
Definition: sincinterpolator.h:57
void setValue(int idx, int idy, float val)
Definition: sincinterpolator.h:43
int getMaximumLength() const
Definition: sincinterpolator.h:38
Definition: sincinterpolator.h:224
Set of pointers to objects.
Definition: commontypes.h:32
static float ** makeArray(int n1, int n2)
Definition: sincinterpolator.h:79
float getMaximumFrequency() const
Definition: sincinterpolator.h:254
int nzm_
Definition: sincinterpolator.h:242
#define mNINT32(x)
Definition: commondefs.h:45
float getMaximumError() const
Definition: sincinterpolator.h:251
SincInterpolator2D(const RT *, int nx, int ny)
Definition: sincinterpolator.h:403
A manager used for constructing the table necessary for Sinc interpolations. The manager creates one ...
Definition: sincinterpolator.h:19
Definition: geom2dascio.h:21
#define mAddVal(val, weight, totidx, outval)
Definition: sincinterpolator.h:344
float getMaximumError() const
Definition: sincinterpolator.h:36
#define mKSinc(frac)
Definition: sincinterpolator.h:337
virtual bool initTable(float fmax, int lmax)
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:272
bool isOK() const
Definition: sincinterpolator.h:207
bool * isudfarr_
Definition: sincinterpolator.h:162
A Math Function as in F(x,y,z).
Definition: mathfunc.h:122
int nz_
Definition: sincinterpolator.h:239
#define mTryAlloc(var, stmt)
Catches bad_alloc and sets ptr to null as normal.
Definition: commondefs.h:241
void setInput(const RT *, bool datahasnoudf=false)
Definition: sincinterpolator.h:306
#define mValidPos(is, ns)
Definition: sincinterpolator.h:338
const float ** asinc_
Definition: sincinterpolator.h:175
bool setSize(int)
Definition: sincinterpolator.h:317
int nxm_
Definition: sincinterpolator.h:217
#define mDefEps
Definition: commondefs.h:58
bool isOK() const
Definition: sincinterpolator.h:229
Threads::Mutex lock_
Definition: sincinterpolator.h:70
#define mDefEpsF
Definition: commondefs.h:56
A sinc interpolator for bandlimited uniformly-sampled functions y(x). Interpolators can be designed f...
Definition: sincinterpolator.h:134
A Math Function as in F(x,y).
Definition: mathfunc.h:105
int nym_
Definition: sincinterpolator.h:241
od_int64 getTableBytes() const
#define mGetOffset(idx, idy, idz)
Definition: sincinterpolator.h:541
bool extrapcst_
Definition: sincinterpolator.h:166
bool initTable(float fmax, int lmax)
Definition: sincinterpolator.h:528
bool isOK() const
Definition: sincinterpolator.h:188
int lsinc_
Definition: sincinterpolator.h:163
int nxm_
Definition: sincinterpolator.h:197
bool init()
Definition: sincinterpolator.h:155
Is a lock that allows a thread to have exlusive rights to something.
Definition: thread.h:43
SincInterpolator1D(const RT *=0, int sz=-1)
Definition: sincinterpolator.h:295
const RefTree & RT()
const RT * data_
Definition: sincinterpolator.h:195
RT getValue(PT, PT, PT) const
Definition: sincinterpolator.h:543
RT getValue(PT) const
Definition: sincinterpolator.h:357
Definition: sincinterpolator.h:26
int ny_
Definition: sincinterpolator.h:216
int nsinc_
Definition: sincinterpolator.h:58
Definition: sincinterpolator.h:202
#define mClass(module)
Definition: commondefs.h:164
SceneTransformManager & STM()
float ** asinc_
Definition: sincinterpolator.h:54
bool extrapzero_
Definition: sincinterpolator.h:167
const RT * data_
Definition: sincinterpolator.h:236
float fmax_
Definition: sincinterpolator.h:56
float emax_
Definition: sincinterpolator.h:55
const SincTableManager::Table * table_
Definition: sincinterpolator.h:174
float getMaximumFrequency() const
Definition: sincinterpolator.h:37
Array2DImpl< float > asinc2_
Definition: sincinterpolator.h:50
const RT * data_
Definition: sincinterpolator.h:214
#define mAddValW(val, totidx, weight, outval, sumweights)
Definition: sincinterpolator.h:349

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