OpendTect  6.6
prestackanglecomputer.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. Liu
8  Date: January 2011
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 
13 -*/
14 
15 #include "ailayer.h"
16 #include "enums.h"
17 #include "flatposdata.h"
18 #include "iopar.h"
19 #include "position.h"
20 #include "prestackprocessingmod.h"
21 #include "refcount.h"
22 #include "windowfunction.h"
23 
24 template <class T> class Array2D;
25 class FFTFilter;
26 class RayTracer1D;
27 class VelocityDesc;
28 
29 namespace Vel { class FunctionSource; }
30 
31 namespace PreStack
32 {
33 
34 class Gather;
35 
40 mExpClass(PreStackProcessing) AngleComputer
41 {
42  mRefCountImpl(AngleComputer)
43 public:
44  AngleComputer();
45 
46  enum smoothingType { None, MovingAverage, FFTFilter };
48 
49  virtual Gather* computeAngles() = 0;
50  virtual bool isOK() const = 0;
51  void setTrcKey(const TrcKey & tk)
52  {
53  trckey_ = tk;
54  }
55 
57  void setRayTracer(const IOPar & raypar);
58  void setGatherIsNMOCorrected( bool yn )
59  { gatheriscorrected_ = yn; }
60  void setNoSmoother();
62  void setMovingAverageSmoother(float length,
64  float param=0.95);
65  void setFFTSmoother(float freqf3,float freqf4);
66  void setSmoothingPars(const IOPar&);
67 
68  static const char* sKeySmoothType();
69  static const char* sKeyWinFunc();
70  static const char* sKeyWinParam();
71  static const char* sKeyWinLen();
72  static const char* sKeyFreqF3();
73  static const char* sKeyFreqF4();
74 
75 protected:
76 
79  void averageSmooth(Array2D<float>& angledata);
80  void fftSmooth(Array2D<float>& angledata);
81  void fftTimeSmooth(::FFTFilter& fftfilter,
82  Array2D<float>& angledata);
83  void fftDepthSmooth(::FFTFilter& fftfilter,
84  Array2D<float>& angledata);
85 
86  virtual const ElasticModel& curElasticModel() const = 0;
87  virtual const RayTracer1D* curRayTracer() const = 0;
89 
98  bool gatheriscorrected_ = true;
99 };
100 
101 
102 
108 {
109 public:
112 
113  bool setMultiID(const MultiID&);
114  bool isOK() const { return velsource_; }
115 
117 
118 protected:
119 
120  const ElasticModel& curElasticModel() const { return elasticmodel_;}
121  const RayTracer1D* curRayTracer() const { return raytracer_; }
122 
124 };
125 
126 
127 
132 mExpClass(PreStackProcessing) ModelBasedAngleComputer : public AngleComputer
133 {
134 public:
135  class ModelTool
136  {
137  public:
138  ModelTool(const ElasticModel&,const TrcKey&);
139  ModelTool(const RayTracer1D*,const TrcKey&);
141 
142  const RayTracer1D* rayTracer() const { return rt_; }
143  const ElasticModel& elasticModel() const;
144  const TrcKey& trcKey() const { return trckey_; }
145  bool operator ==( const ModelTool& oth ) const
146  { return oth.trcKey() == trckey_; }
147 
148  protected:
149  ElasticModel* em_ = nullptr;
150  RayTracer1D* rt_ = nullptr;
151  bool ownrt_;
153 
154  private:
155  ModelTool(const ModelTool&) = delete;
156  ModelTool& operator=(const ModelTool&) = delete;
157  };
158 
161 
162  void setElasticModel(const TrcKey&,bool doblock,
163  bool pvelonly,ElasticModel&);
165  const TrcKey&);
166 
167  bool isOK() const
168  { return curElasticModel().size(); }
169 
172 
173 protected:
174 
175  const ModelTool* curModelTool() const;
177  const RayTracer1D* curRayTracer() const;
179 
181 };
182 
183 } // namespace PreStack
184 
PreStack::ModelBasedAngleComputer::curModelTool
const ModelTool * curModelTool() const
PreStack::AngleComputer::raytracer_
RayTracer1D * raytracer_
Definition: prestackanglecomputer.h:92
PreStack::ModelBasedAngleComputer
Computes angles for PreStack::Gather from ElasticModel.
Definition: prestackanglecomputer.h:133
PreStack::AngleComputer::fftSmooth
void fftSmooth(Array2D< float > &angledata)
PreStack::AngleComputer::thresholdparam_
float thresholdparam_
Definition: prestackanglecomputer.h:94
PreStack::AngleComputer::sKeyWinParam
static const char * sKeyWinParam()
PreStack::ModelBasedAngleComputer::isOK
bool isOK() const
Definition: prestackanglecomputer.h:167
Vel
Velocity.
Definition: velocityfunction.h:32
PreStack::AngleComputer::sKeyFreqF3
static const char * sKeyFreqF3()
PreStack::AngleComputer::sKeyFreqF4
static const char * sKeyFreqF4()
PreStack::AngleComputer::isOK
virtual bool isOK() const =0
PreStack::VelocityBasedAngleComputer::curElasticModel
const ElasticModel & curElasticModel() const
Definition: prestackanglecomputer.h:120
PreStack::Gather
PreStack gather.
Definition: prestackgather.h:36
RayTracer1D
Ray tracer in 1D.
Definition: raytrace1d.h:32
PreStack::ModelBasedAngleComputer::ModelBasedAngleComputer
ModelBasedAngleComputer()
ObjectSet
Set of pointers to objects.
Definition: commontypes.h:31
PreStack::AngleComputer::fillandInterpArray
bool fillandInterpArray(Array2D< float > &angledata)
PreStack::AngleComputer::setNoSmoother
void setNoSmoother()
PreStack::ModelBasedAngleComputer::ModelTool::ModelTool
ModelTool(const ModelTool &)=delete
PreStack::ModelBasedAngleComputer::ModelTool::elasticModel
const ElasticModel & elasticModel() const
PreStack::AngleComputer::curRayTracer
RayTracer1D * curRayTracer()
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
PreStack::ModelBasedAngleComputer::ModelTool::operator=
ModelTool & operator=(const ModelTool &)=delete
ElasticModel
A table of elastic prop layers with processing utilities.
Definition: ailayer.h:100
PreStack::VelocityBasedAngleComputer
Computes angles for PreStack::Gather from velocity model.
Definition: prestackanglecomputer.h:108
PreStack::AngleComputer
Computes angles for PreStack::Gather.
Definition: prestackanglecomputer.h:41
PreStack::AngleComputer::averageSmooth
void averageSmooth(Array2D< float > &angledata)
PreStack::ModelBasedAngleComputer::ModelTool::ownrt_
bool ownrt_
Definition: prestackanglecomputer.h:151
PreStack::ModelBasedAngleComputer::ModelTool
Definition: prestackanglecomputer.h:136
PreStack::ModelBasedAngleComputer::splitModelIfNeeded
void splitModelIfNeeded()
PreStack::AngleComputer::setFFTSmoother
void setFFTSmoother(float freqf3, float freqf4)
PreStack::AngleComputer::needsraytracing_
bool needsraytracing_
Definition: prestackanglecomputer.h:96
PreStack::ModelBasedAngleComputer::computeAngles
Gather * computeAngles()
PreStack::AngleComputer::curRayTracer
virtual const RayTracer1D * curRayTracer() const =0
HanningWindow::sName
static const char * sName()
Definition: windowfunction.h:65
operator==
bool operator==(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:81
PreStack::AngleComputer::iopar_
IOPar iopar_
Definition: prestackanglecomputer.h:90
PreStack::AngleComputer::computeAngleData
Gather * computeAngleData()
windowfunction.h
PreStack::ModelBasedAngleComputer::ModelTool::trcKey
const TrcKey & trcKey() const
Definition: prestackanglecomputer.h:144
PreStack::VelocityBasedAngleComputer::~VelocityBasedAngleComputer
~VelocityBasedAngleComputer()
ailayer.h
PreStack::AngleComputer::fftDepthSmooth
void fftDepthSmooth(::FFTFilter &fftfilter, Array2D< float > &angledata)
FlatPosData
Positioning of flat 'bulk' data. Only the 'x1' axis can be irregular.
Definition: flatposdata.h:26
VelocityDesc
Definition: veldesc.h:38
PreStack::AngleComputer::sKeyWinFunc
static const char * sKeyWinFunc()
PreStack::VelocityBasedAngleComputer::setMultiID
bool setMultiID(const MultiID &)
PreStack::AngleComputer::maxthickness_
float maxthickness_
Definition: prestackanglecomputer.h:95
PreStack::AngleComputer::smoothingType
smoothingType
Definition: prestackanglecomputer.h:46
PreStack::AngleComputer::mDeclareEnumUtils
mDeclareEnumUtils(smoothingType) virtual Gather *computeAngles()=0
PreStack::AngleComputer::setGatherIsNMOCorrected
void setGatherIsNMOCorrected(bool yn)
Definition: prestackanglecomputer.h:58
PreStack::AngleComputer::curElasticModel
virtual const ElasticModel & curElasticModel() const =0
PreStack::AngleComputer::setMovingAverageSmoother
void setMovingAverageSmoother(float length, BufferString win=HanningWindow::sName(), float param=0.95)
PreStack::VelocityBasedAngleComputer::VelocityBasedAngleComputer
VelocityBasedAngleComputer()
PreStack::AngleComputer::setTrcKey
void setTrcKey(const TrcKey &tk)
Definition: prestackanglecomputer.h:51
FFTFilter
Classical FFT filter, use set to set up data step, min and max frequency and type of the filter (minf...
Definition: fftfilter.h:32
PreStack::AngleComputer::setSmoothingPars
void setSmoothingPars(const IOPar &)
PreStack::AngleComputer::sKeyWinLen
static const char * sKeyWinLen()
PreStack::ModelBasedAngleComputer::~ModelBasedAngleComputer
~ModelBasedAngleComputer()
position.h
PreStack
Definition: synthseis.h:35
PreStack::ModelBasedAngleComputer::setElasticModel
void setElasticModel(const TrcKey &, bool doblock, bool pvelonly, ElasticModel &)
MultiID
Compound key consisting of ints.
Definition: multiid.h:24
BufferString
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size.
Definition: bufstring.h:40
TrcKey
Represents a unique trace position in one of the surveys that OpendTect is managing.
Definition: trckey.h:28
PreStack::VelocityBasedAngleComputer::velsource_
Vel::FunctionSource * velsource_
Definition: prestackanglecomputer.h:123
Network::None
@ None
Definition: networkcommon.h:33
PreStack::ModelBasedAngleComputer::ModelTool::ModelTool
ModelTool(const ElasticModel &, const TrcKey &)
PreStack::AngleComputer::setOutputSampling
void setOutputSampling(const FlatPosData &)
PreStack::ModelBasedAngleComputer::ModelTool::trckey_
TrcKey trckey_
Definition: prestackanglecomputer.h:152
flatposdata.h
enums.h
PreStack::ModelBasedAngleComputer::setRayTracer
void setRayTracer(const RayTracer1D *, const TrcKey &)
PreStack::ModelBasedAngleComputer::curRayTracer
RayTracer1D * curRayTracer()
PreStack::VelocityBasedAngleComputer::isOK
bool isOK() const
Definition: prestackanglecomputer.h:114
refcount.h
PreStack::AngleComputer::elasticmodel_
ElasticModel elasticmodel_
Definition: prestackanglecomputer.h:93
iopar.h
PreStack::ModelBasedAngleComputer::ModelTool::~ModelTool
~ModelTool()
PreStack::VelocityBasedAngleComputer::curRayTracer
const RayTracer1D * curRayTracer() const
Definition: prestackanglecomputer.h:121
PreStack::ModelBasedAngleComputer::ModelTool::rayTracer
const RayTracer1D * rayTracer() const
Definition: prestackanglecomputer.h:142
PreStack::AngleComputer::outputsampling_
FlatPosData outputsampling_
Definition: prestackanglecomputer.h:91
PreStack::AngleComputer::trckey_
TrcKey trckey_
Definition: prestackanglecomputer.h:97
IOPar
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:55
PreStack::AngleComputer::setRayTracer
void setRayTracer(const IOPar &raypar)
PreStack::VelocityBasedAngleComputer::computeAngles
Gather * computeAngles()
Array2D
Array2D ( Subclass of ArrayND ) is a two dimensional array.
Definition: arraynd.h:140
PreStack::AngleComputer::fftTimeSmooth
void fftTimeSmooth(::FFTFilter &fftfilter, Array2D< float > &angledata)
PreStack::ModelBasedAngleComputer::ModelTool::ModelTool
ModelTool(const RayTracer1D *, const TrcKey &)
PreStack::AngleComputer::sKeySmoothType
static const char * sKeySmoothType()
Vel::FunctionSource
Definition: velocityfunction.h:85
PreStack::ModelBasedAngleComputer::curElasticModel
const ElasticModel & curElasticModel() const
PreStack::ModelBasedAngleComputer::tools_
ObjectSet< ModelTool > tools_
Definition: prestackanglecomputer.h:180
PreStack::ModelBasedAngleComputer::curRayTracer
const RayTracer1D * curRayTracer() const

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