OpendTect  6.3
synthseis.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: A.H. Bril
8  Date: 24-3-1996
9 ________________________________________________________________________
10 
11 -*/
12 
13 #include "ailayer.h"
14 #include "factory.h"
15 #include "iopar.h"
16 #include "odcomplex.h"
17 #include "odmemory.h"
18 #include "paralleltask.h"
19 #include "reflectivitymodel.h"
20 #include "threadlock.h"
21 #include "wavelet.h"
22 #include "uistrings.h"
23 
24 class RayTracer1D;
25 class SeisTrc;
26 template <class T> class Array1D;
27 namespace Fourier { class CC; };
28 
29 namespace Seis
30 {
31 
36 { mODTextTranslationClass(SynthGenBase);
37 public:
38 
39  virtual void setWavelet(const Wavelet*);
40  /* auto computed + will be overruled if too small */
41  virtual bool setOutSampling(const StepInterval<float>&);
42  /* depends on the wavelet size too */
43  bool getOutSamplingFromModel(
45  StepInterval<float>&,bool usenmo=false);
46 
47  void setMuteLength(float n) { mutelength_ = n; }
48  float getMuteLength() const { return mutelength_; }
49 
50  void setStretchLimit(float n){ stretchlimit_ = n; }
51  float getStretchLimit() const;
52  void doSampledReflectivity(bool yn)
53  { dosampledreflectivities_ = yn; }
54 
55  virtual void enableFourierDomain(bool fourier)
56  { isfourier_ = fourier; }
57 
58  uiString errMsg() const { return errmsg_;}
59 
60  virtual void fillPar(IOPar&) const;
61  virtual bool usePar(const IOPar&);
62 
63  static float cStdMuteLength() { return 0.02f; }
64  static float cStdStretchLimit() { return 0.2f; }
65 
66  static const char* sKeyFourier() { return "Convolution Domain"; }
67  static const char* sKeyNMO() { return "Use NMO"; }
68  static const char* sKeyInternal() { return "Internal Multiples"; }
69  static const char* sKeySurfRefl() { return "Surface Reflection coef"; }
70  static const char* sKeyMuteLength(){ return "Mute length"; }
71  static const char* sKeyStretchLimit(){ return "Stretch limit"; }
72 
73 protected:
74  SynthGenBase();
75  virtual ~SynthGenBase();
76 
77  bool isfourier_;
78  bool applynmo_;
80  float mutelength_;
86 
88 
89  bool isInputOK();
90 };
91 
92 
104 public:
106 
107  static SynthGenerator* create(bool advanced);
108 
109  SynthGenerator();
110  ~SynthGenerator();
111 
112  virtual void setWavelet(const Wavelet*);
113  virtual bool setOutSampling(const StepInterval<float>&);
114  bool setModel(const ReflectivityModel&);
115 
116  bool doWork();
117  od_int64 currentProgress() const { return progress_; }
118 
119  const SeisTrc& result() const { return outtrc_; }
120  SeisTrc& result() { return outtrc_; }
121 
122  /*<! available after execution */
124  { return freqreflectivities_; }
125  void getSampledRM(ReflectivityModel&) const;
126 
127 
128 protected:
129 
130  int nextStep();
131  int setConvolveSize();
132  int genFreqWavelet();
133 
134  bool computeTrace(SeisTrc&);
135  bool doNMOStretch(const ValueSeries<float>&, int insz,
136  ValueSeries<float>& out,int outsz) const;
137  bool doFFTConvolve(ValueSeries<float>&,int sz);
138  bool doTimeConvolve(ValueSeries<float>&,int sz);
139  void getWaveletTrace(Array1D<float>&,float z,float scal,
140  SamplingData<float>&) const;
141  void sortOutput(float_complex*,ValueSeries<float>&,
142  int sz) const;
143 
144  virtual bool computeReflectivities();
145 
149 
153 
155 
156 };
157 
158 
160  public SynthGenBase
162 public:
165 
166  void setModels(RefMan<ReflectivityModelSet>&);
167 
168  void getResult(ObjectSet<SeisTrc>&);
169  void getSampledRMs(RefMan<ReflectivityModelSet>&);
170 
171  uiString message() const {
172  return m3Dots(tr("Generating synthetics"));
173  }
174 
175  od_int64 totalNr() const { return totalnr_; }
176 
177 protected:
178 
179  od_int64 nrIterations() const;
180  bool doPrepare(int);
181  virtual bool doWork(od_int64,od_int64,int);
182 
190 };
191 
192 } // namespace Seis
Array1D ( Subclass of ArrayND ) is a one dimensional array.
Definition: arraynd.h:97
float stretchlimit_
Definition: synthseis.h:79
#define mExpClass(module)
Definition: commondefs.h:157
bool dointernalmultiples_
Definition: synthseis.h:83
Seismics.
Definition: segydirectdef.h:20
static const char * sKeyInternal()
Definition: synthseis.h:68
A lock of a type that (hopefully) suits your needs. To use it, you need the Locker class...
Definition: threadlock.h:51
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
static const char * sKeyStretchLimit()
Definition: synthseis.h:71
static float cStdStretchLimit()
Definition: synthseis.h:64
virtual void enableFourierDomain(bool fourier)
Definition: synthseis.h:55
float getMuteLength() const
Definition: synthseis.h:48
void usePar(const IOPar &iop, ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:200
#define od_int64
Definition: plftypes.h:34
Definition: wavelet.h:22
od_int64 progress_
Definition: synthseis.h:154
SeisTrc & result()
Definition: synthseis.h:120
Definition: uistring.h:88
float surfreflcoeff_
Definition: synthseis.h:85
int convolvesize_
Definition: synthseis.h:147
ObjectSet< SeisTrc > trcs_
Definition: synthseis.h:186
base class for synthetic trace generators.
Definition: synthseis.h:35
void setStretchLimit(float n)
Definition: synthseis.h:50
TypeSet< float_complex > freqwavelet_
Definition: synthseis.h:152
od_int64 totalnr_
Definition: synthseis.h:188
Generalization of a task that can be run in parallel.
Definition: paralleltask.h:64
Definition: synthseis.h:159
const ReflectivityModel * refmodel_
Definition: synthseis.h:146
generates synthetic traces. It performs the basic convolution with a reflectivity series and a wavele...
Definition: synthseis.h:102
static const char * sKeySurfRefl()
Definition: synthseis.h:69
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:53
void setMuteLength(float n)
Definition: synthseis.h:47
static const char * sKeyNMO()
Definition: synthseis.h:67
uiString errmsg_
Definition: synthseis.h:87
ConstRefMan< Wavelet > wavelet_
Definition: synthseis.h:81
od_int64 totalNr() const
Definition: synthseis.h:175
const SeisTrc & result() const
Definition: synthseis.h:119
std::complex< float > float_complex
Definition: odcomplex.h:16
bool isfourier_
Definition: synthseis.h:77
od_int64 currentProgress() const
Definition: synthseis.h:117
#define mDefineFactoryInClass(T, funcname)
Definition: factory.h:424
Ray tracer in 1D.
Definition: raytrace1d.h:30
Definition: convolve2d.h:25
void fillPar(IOPar &iop, const ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:187
void doSampledReflectivity(bool yn)
Definition: synthseis.h:52
RefMan< ReflectivityModelSet > models_
Definition: synthseis.h:183
bool dosampledreflectivities_
Definition: synthseis.h:84
static uiHor3DInterpol * create(uiParent *)
uiString errMsg() const
Definition: synthseis.h:58
ReflectivityModel sampledrefmodel_
Definition: synthseis.h:150
Seismic trace.
Definition: seistrc.h:31
BufferString errmsg_
Definition: horizontracker.h:117
const TypeSet< float_complex > & freqReflectivities() const
Definition: synthseis.h:123
TypeSet< float_complex > freqreflectivities_
Definition: synthseis.h:151
Threads::Lock lock_
Definition: synthseis.h:189
static const char * sKeyMuteLength()
Definition: synthseis.h:70
SeisTrc & outtrc_
Definition: synthseis.h:148
TypeSet< int > trcidxs_
Definition: synthseis.h:187
#define m3Dots(txt)
Definition: uistrings.h:566
static const char * sKeyFourier()
Definition: synthseis.h:66
StepInterval< float > outputsampling_
Definition: synthseis.h:82
static float cStdMuteLength()
Definition: synthseis.h:63
RefMan< ReflectivityModelSet > sampledrefmodels_
Definition: synthseis.h:184
uiString message() const
Definition: synthseis.h:171
ObjectSet< SynthGenerator > synthgens_
Definition: synthseis.h:185
float mutelength_
Definition: synthseis.h:80
bool applynmo_
Definition: synthseis.h:78

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