OpendTect  6.3
velocitycalc.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: K. Tingdahl
8  Date: Dec 2007
9 ________________________________________________________________________
10 
11 -*/
12 
13 
14 #include "algomod.h"
15 #include "samplingdata.h"
16 #include "veldesc.h"
17 #include "keystrs.h"
18 #include "factory.h"
19 #include "uistring.h"
20 
21 template <class T> class ValueSeries;
22 
30 { mODTextTranslationClass(TimeDepthModel)
31 public:
32  TimeDepthModel();
33  TimeDepthModel(const TimeDepthModel&);
34  virtual ~TimeDepthModel();
35 
36  TimeDepthModel& operator=(const TimeDepthModel&);
37  virtual bool isOK() const;
38  const uiString errMsg() const;
39  int size() const { return sz_; }
40 
41  bool setModel(const float* dpths,const float* times,int sz);
42 
43  float getDepth(float time) const;
44  float getTime(float depth) const;
45  float getVelocity(float depth) const;
46  float getFirstTime() const;
47  float getLastTime() const;
48 
49  static float getDepth(const float* dpths,const float* times,int sz,
50  float time);
51  static float getTime(const float* dpths,const float* times,int sz,
52  float depth);
53  static float getVelocity(const float* dpths,const float* times,
54  int sz,float depth);
55 
56  // use only if you're sure about what you're doing
57  float getDepth(int idx) const;
58  float getTime(int idx) const;
59 
60 protected:
61 
62  static float convertTo(const float* dpths,const float* times,int sz,
63  float z,bool targetistime);
64 
65  int sz_;
66 
67  float* times_;
68  float* depths_;
69 
71 };
72 
73 
80 public:
82 
83  bool isOK() const;
84  static bool isVelocityDescUseable(const VelocityDesc&,
85  bool velintime,
86  uiString* errmsg = 0);
87 
88  bool setVelocityModel(const ValueSeries<float>& vels, int sz,
89  const SamplingData<double>& sd,
90  const VelocityDesc&,bool istime);
91 
92  bool calcDepths(ValueSeries<float>&, int sz,
93  const SamplingData<double>& timesamp) const;
94  bool calcTimes(ValueSeries<float>&, int sz,
95  const SamplingData<double>& depthsamp) const;
96 
97  static bool calcDepths(const ValueSeries<float>& vels, int velsz,
98  const SamplingData<double>&,float* depths);
101  static bool calcDepths(const ValueSeries<float>& vels, int velsz,
102  const ValueSeries<float>& times,
103  float* depths);
106  static bool calcTimes(const ValueSeries<float>& vels,int velsz,
107  const ValueSeries<float>& depth,float* times);
110  static bool calcTimes(const ValueSeries<float>& vels, int velsz,
111  const SamplingData<double>&, float* times);
113 protected:
114 
115  void calcZ(const float*,int inpsz,
116  ValueSeries<float>&,int outpsz,
117  const SamplingData<double>&,bool istime) const;
118 
119  float firstvel_;
120  float lastvel_;
121 
123  int sz_;
125 };
126 
127 
133 { mODTextTranslationClass(MoveoutComputer)
134 public:
135  virtual ~MoveoutComputer() {}
136 
137  virtual int nrVariables() const = 0;
138  virtual const char* variableName(int) const = 0;
139 
140  virtual bool computeMoveout(const float* variables,
141  int nroffsets,
142  const float* offsets,
143  float* res) const = 0;
144  float findBestVariable(float* variables, int variabletochange,
145  const Interval<float>& searchrg,int nroffsets,
146  const float* offsets, const float* moveout ) const;
150 };
151 
152 
159 public:
160  int nrVariables() const { return 3; }
161  const char* variableName(int idx) const
162  {
163  switch ( idx )
164  {
165  case 0: return sKey::Depth();
166  case 1: return "RMO";
167  case 2: return "Reference offset";
168  };
169 
170  return 0;
171  }
172  bool computeMoveout(const float*,int,const float*,float*) const;
173  static bool computeMoveout(float d0, float rmo, float refoffset,
174  int,const float*,float*);
175 };
176 
177 
185 public:
186  int nrVariables() const { return 3; }
187  const char* variableName( int idx ) const
188  {
189  switch ( idx )
190  {
191  case 0: return sKey::Time();
192  case 1: return "Vrms";
193  case 2: return "Effective anisotrophy";
194  };
195 
196  return 0;
197  }
198  bool computeMoveout(const float*,int,const float*,float*) const;
199  static bool computeMoveout(float t0, float Vrms, float effectiveanisotropy,
200  int,const float*,float*);
201 };
202 
207 mGlobal(Algo) bool computeDix(const float* Vrms, float t0, float v0,
208  const float* t, int nrlayers, float* Vint);
209 
215 { mODTextTranslationClass(Vrms2Vint)
216 public:
217  mDefineFactoryInClass( Vrms2Vint, factory );
218  virtual ~Vrms2Vint() {}
219 
220  virtual bool compute(const float* Vrms, float t0, float v0,
221  const float* t, int nrlayers, float* Vint) = 0;
222 };
223 
224 
231 public:
233  "Dix",
234  toUiString(sFactoryKeyword()));
235 
236  bool compute(const float* Vrms, float t0, float v0,
237  const float* t, int nrlayers, float* Vint)
238  { return computeDix( Vrms, t0, v0, t, nrlayers, Vint ); }
239 };
240 
241 
242 
246 mGlobal(Algo) bool computeDix(const float* Vrms,const SamplingData<double>& sd,
247  int nrvels,float* Vint);
248 
253 mGlobal(Algo) bool computeDix(const float* Vrms, float t0, float v0,
254  const float* t, int nrlayers, float* Vint);
255 
256 
259 mGlobal(Algo) bool computeVrms(const float* Vint,const SamplingData<double>& sd,
260  int nrvels, float* Vrms);
261 
266 mGlobal(Algo) bool computeVrms(const float* Vint,float t0, const float* t,
267  int nrlayers, float* Vrms);
268 
273 mGlobal(Algo) bool sampleVrms(const float* Vin,float t0_in,float v0_in,
274  const float* t_in, int nr_in,
275  const SamplingData<double>& sd_out,
276  float* Vout, int nr_out);
277 
278 
283 mGlobal(Algo) bool computeVavg(const float* Vint, float t0, const float* t,
284  int nrvels, float* Vavg);
285 
286 
291 mGlobal(Algo) bool computeVint(const float* Vavg, float t0, const float* t,
292  int nrvels, float* Vint);
293 
294 
299 mGlobal(Algo) bool sampleVint(const float* Vint,const float* t_in, int nr_in,
300  const SamplingData<double>& sd_out, float* Vout,
301  int nr_out);
302 
307 mGlobal(Algo) bool sampleVavg(const float* Vavg, const float* t_in, int nr_in,
308  const SamplingData<double>& sd_out, float* Vout,
309  int nr_out);
310 
314 mGlobal(Algo) void computeResidualMoveouts(float z0,float rmo,float refoffset,
315  int nroffsets,bool outputdepth,
316  const float* offsets,float* output);
317 
321 mGlobal(Algo) bool fitLinearVelocity( const float* Vint, const float* z_in,
322  int nr_in, const Interval<float>& zlayer,
323  float reference_z, bool zisdepth, float& V_0,
324  float& gradient, float& error);
325 
326 
331 mGlobal(Algo) void resampleZ(const float* zarr,const float* tord_in, int nr_in,
332  const SamplingData<double>& sd_out, int nr_out,
333  float* zsampled);
334 
338 mGlobal(Algo) void sampleEffectiveThomsenPars(const float* vinarr,
339  const float* t_in,int nr_in,const SamplingData<double>& sd_out,
340  int nr_out,float* voutarr);
341 
345 mGlobal(Algo) void sampleIntvThomsenPars(const float* inarr,const float* t_in,
346  int nr_in,const SamplingData<double>& sd_out,
347  int nr_out,float* outarr);
348 
349 /* Utility function for Depth and effective Thomsen parameters resampling*/
350 mGlobal(Algo) void resampleContinuousData(const float* inarr,const float* t_in,
351  int nr_in,const SamplingData<double>& sd_out,
352  int nr_out,float* outarr);
353 
354 
358 mGlobal(Algo) bool computeLinearT2D( double v0, double dv, double v0depth,
359  const SamplingData<float>& timesampling,
360  int sz, float* res );
361 
365 mGlobal(Algo) bool computeLinearD2T( double v0, double dv, double v0depth,
366  const SamplingData<float>& depthsampling,
367  int sz, float* res );
368 
369 
370 mGlobal(Algo) bool convertToVintIfNeeded(const float* inpvel,
371  const VelocityDesc& veldesc,
372  const StepInterval<float>& zrange,
373  float* outvel);
#define mExpClass(module)
Definition: commondefs.h:157
mODTextTranslationClass(DixConversion) public bool compute(const float *Vrms, float t0, float v0, const float *t, int nrlayers, float *Vint)
Definition: velocitycalc.h:236
Rms velocity to interval velocity conversion.
Definition: velocitycalc.h:214
int sz_
Definition: velocitycalc.h:65
float * times_
Definition: velocitycalc.h:67
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
bool computeLinearD2T(double v0, double dv, double v0depth, const SamplingData< float > &depthsampling, int sz, float *res)
#define mGlobal(module)
Definition: commondefs.h:160
mODTextTranslationClass(MoveoutComputer) public
Definition: velocitycalc.h:133
Definition: veldesc.h:36
uiString errmsg_
Definition: velocitycalc.h:70
bool computeVrms(const float *Vint, const SamplingData< double > &sd, int nrvels, float *Vrms)
SamplingData< double > sd_
Definition: velocitycalc.h:124
#define mDefaultFactoryInstantiation(baseclss, clss, keywrd, usernm)
Definition: factory.h:287
bool fitLinearVelocity(const float *Vint, const float *z_in, int nr_in, const Interval< float > &zlayer, float reference_z, bool zisdepth, float &V_0, float &gradient, float &error)
Definition: uistring.h:88
float firstvel_
Definition: velocitycalc.h:119
float lastvel_
Definition: velocitycalc.h:120
Base class for computing a moveout curve.
Definition: velocitycalc.h:132
virtual bool isOK() const
Definition: valseries.h:36
Computes moveout in depth from RMO at a certain reference offset.
Definition: velocitycalc.h:157
void computeResidualMoveouts(float z0, float rmo, float refoffset, int nroffsets, bool outputdepth, const float *offsets, float *output)
virtual mODTextTranslationClass(Vrms2Vint) public ~Vrms2Vint()
Definition: velocitycalc.h:218
bool regularinput_
Definition: velocitycalc.h:122
Interface to a series of values.
Definition: odmemory.h:15
void sampleEffectiveThomsenPars(const float *vinarr, const float *t_in, int nr_in, const SamplingData< double > &sd_out, int nr_out, float *voutarr)
void sampleIntvThomsenPars(const float *inarr, const float *t_in, int nr_in, const SamplingData< double > &sd_out, int nr_out, float *outarr)
bool computeDix(const float *Vrms, float t0, float v0, const float *t, int nrlayers, float *Vint)
uiString toUiString(const DBKey &ky)
Definition: dbkey.h:117
Converts between time and depth given a model.
Definition: velocitycalc.h:78
#define mDefineFactoryInClass(T, funcname)
Definition: factory.h:424
void resampleZ(const float *zarr, const float *tord_in, int nr_in, const SamplingData< double > &sd_out, int nr_out, float *zsampled)
Computes moveout with anisotropy, according to the equation by Alkhalifah and Tsvankin 1995...
Definition: velocitycalc.h:183
bool sampleVint(const float *Vint, const float *t_in, int nr_in, const SamplingData< double > &sd_out, float *Vout, int nr_out)
bool computeLinearT2D(double v0, double dv, double v0depth, const SamplingData< float > &timesampling, int sz, float *res)
FixedString Time()
Definition: keystrs.h:129
Rms velocity to interval velocity conversion using the Dix formula.
Definition: velocitycalc.h:229
bool convertToVintIfNeeded(const float *inpvel, const VelocityDesc &veldesc, const StepInterval< float > &zrange, float *outvel)
bool sampleVrms(const float *Vin, float t0_in, float v0_in, const float *t_in, int nr_in, const SamplingData< double > &sd_out, float *Vout, int nr_out)
bool computeVint(const float *Vavg, float t0, const float *t, int nrvels, float *Vint)
bool computeVavg(const float *Vint, float t0, const float *t, int nrvels, float *Vavg)
const char * errMsg() const
Definition: horizontracker.h:59
int size() const
Definition: velocitycalc.h:39
bool sampleVavg(const float *Vavg, const float *t_in, int nr_in, const SamplingData< double > &sd_out, float *Vout, int nr_out)
Converts between time, depth and velocity given a model. The velocity model can be either RMO-velocit...
Definition: velocitycalc.h:29
int sz_
Definition: velocitycalc.h:123
float * depths_
Definition: velocitycalc.h:68
void resampleContinuousData(const float *inarr, const float *t_in, int nr_in, const SamplingData< double > &sd_out, int nr_out, float *outarr)
FixedString Depth()
Definition: keystrs.h:58

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