OpendTect  6.6
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  RCS: $Id$
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "seismod.h"
15 #include "ailayer.h"
16 #include "factory.h"
17 #include "reflectivitymodel.h"
18 #include "iopar.h"
19 #include "odmemory.h"
20 #include "odcomplex.h"
21 #include "paralleltask.h"
22 #include "threadlock.h"
23 #include "uistrings.h"
24 
25 class RayTracer1D;
26 class SeisTrc;
27 class SeisTrcBuf;
28 class TimeDepthModel;
29 class RayTracerRunner;
30 class Wavelet;
31 template <class T> class Array1D;
32 template <class T> class SamplingData;
33 
34 namespace Fourier { class CC; };
35 namespace PreStack { class Gather; }
36 
37 namespace Seis
38 {
39 
40 /*
41  brief generates synthetic traces.The SynthGenerator performs the basic
42  convolution with a reflectivity series and a wavelet.
43  The MultiTraceSynthGenerator is a Parallel runner of the SynthGenerator.
44 
45  If you have AI layers and want directly some synthetics out of them,
46  then you should use the RayTraceSynthGenerator.
47 */
48 
49 
52 public:
53 
54  virtual bool setWavelet(const Wavelet*,OD::PtrPolicy pol);
55  /* auto computed + will be overruled if too small */
56  virtual bool setOutSampling(const StepInterval<float>&);
57  /* depends on the wavelet size too */
60  StepInterval<float>&, bool usenmo=false);
61 
62  void setMuteLength(float n) { mutelength_ = n; }
63  float getMuteLength() const { return mutelength_; }
64 
65  void setStretchLimit(float n){ stretchlimit_ = n; }
66  float getStretchLimit() const;
67  void doSampledReflectivity(bool yn)
68  { dosampledreflectivities_ = yn; }
69 
70  virtual void enableFourierDomain(bool fourier)
71  { isfourier_ = fourier; }
72 
73  uiString errMsg() const { return errmsg_;}
74 
75  virtual void fillPar(IOPar&) const;
76  virtual bool usePar(const IOPar&);
77 
78  static float cStdMuteLength() { return 0.02f; }
79  static float cStdStretchLimit() { return 0.2f; }
80 
81  static const char* sKeyFourier() { return "Convolution Domain"; }
82  static const char* sKeyNMO() { return "Use NMO"; }
83  static const char* sKeyInternal() { return "Internal Multiples"; }
84  static const char* sKeySurfRefl() { return "Surface Reflection coef"; }
85  static const char* sKeyMuteLength(){ return "Mute length"; }
86  static const char* sKeyStretchLimit(){ return "Stretch limit"; }
87 
88 protected:
90  virtual ~SynthGenBase();
91 
92  bool isfourier_;
93  bool applynmo_;
95  float mutelength_;
97  const Wavelet* wavelet_;
102 
104 
105  bool isInputOK();
106 };
107 
108 
109 
112 public:
114 
115  static SynthGenerator* create(bool advanced);
116 
119 
120  virtual bool setWavelet(const Wavelet*,OD::PtrPolicy pol);
121  /* auto computed: not necessary -
122  will be overruled if too small */
123  virtual bool setOutSampling(const StepInterval<float>&);
125 
126  bool doWork();
127  od_int64 currentProgress() const { return progress_; }
128 
129  const SeisTrc& result() const { return outtrc_; }
130  SeisTrc& result() { return outtrc_; }
131 
132  /*<! available after execution */
134  { return freqreflectivities_; }
136 
137 
138 protected:
139 
140  int nextStep();
143 
145  bool doNMOStretch(const ValueSeries<float>&, int insz,
146  ValueSeries<float>& out,int outsz) const;
149  void getWaveletTrace(Array1D<float>&,float z,float scal,
150  SamplingData<float>&) const;
152  int sz) const;
153 
154  virtual bool computeReflectivities();
155 
159 
163 
165 
166 };
167 
168 
170  public SynthGenBase
172 public:
175 
176  void setModels(
178 
182 
183  uiString uiMessage() const {
184  return m3Dots(tr("Generating synthetics"));
185  }
186 
187  od_int64 totalNr() const { return totalnr_; }
188 
189 protected:
190 
192  bool doPrepare(int);
193  virtual bool doWork(od_int64,od_int64,int);
194 
202 };
203 
204 
205 
208 public:
209 
210  mStruct(Seis) RayModel
211  {
212  RayModel(const RayTracer1D& rt1d,int nroffsets);
213  ~RayModel();
214 
215  void getTraces(ObjectSet<SeisTrc>&,bool steal);
216  void getD2T(ObjectSet<TimeDepthModel>&,bool steal);
217  void getZeroOffsetD2T(TimeDepthModel&);
218  void getRefs(ObjectSet<const ReflectivityModel>&,bool steal,
219  bool sampled=false);
220  void forceReflTimes(const StepInterval<float>&);
221 
222  const SeisTrc* stackedTrc() const;
223 
224  protected:
225  ObjectSet<SeisTrc> outtrcs_; //this is a gather
226  ObjectSet<TimeDepthModel> t2dmodels_;
227  TimeDepthModel* zerooffset2dmodel_;
229  ObjectSet<const ReflectivityModel> sampledrefmodels_;
230 
231  friend class RaySynthGenerator;
232 
233  };
234 
236  bool ownrms=true);
239 
240  void reset();
241 
242  //input
243  void fillPar(IOPar& raypars) const;
244  bool usePar(const IOPar& raypars);
246 
247  //available after initialization
249 
251  { return errmsg_.isEmpty() ? message_ : errmsg_; }
252 
253 
254  //available after execution
255  RayModel& result(int id) { return *(*raymodels_)[id]; }
256  const RayModel& result(int id) const { return *(*raymodels_)[id]; }
257  ObjectSet<RayModel>* rayModels() { return raymodels_; }
258 
260  const TypeSet<ElasticModel>& elasticModels() const { return *aimodels_; }
263 
264 protected:
265 
266  RayTracerRunner* rtr_ = nullptr;
268  od_int64 nrDone() const;
270  od_int64 totalNr() const;
271  bool doPrepare(int);
273 
274  bool ownraymodels_ = true;
276  const TypeSet<ElasticModel>* aimodels_ = nullptr;
279  ObjectSet<RayModel>* raymodels_ = nullptr;
280 
282  bool forcerefltimes_ = false;
283  bool raytracingdone_ = false;
284 };
285 
286 } // namespace Seis
287 
ValueSeries< float >
Seis::SynthGenerator::getSampledRM
void getSampledRM(ReflectivityModel &) const
Seis::SynthGenerator::mDefineFactoryInClass
mDefineFactoryInClass(SynthGenerator, factory)
Seis::SynthGenBase::wavelet_
const Wavelet * wavelet_
Definition: synthseis.h:97
Seis::RaySynthGenerator::raysetup_
IOPar raysetup_
Definition: synthseis.h:278
Seis::RaySynthGenerator::getStackedTraces
void getStackedTraces(SeisTrcBuf &)
Seis::SynthGenBase::applynmo_
bool applynmo_
Definition: synthseis.h:93
Seis::MultiTraceSynthGenerator::trcs_
ObjectSet< SeisTrc > trcs_
Definition: synthseis.h:198
Seis::RaySynthGenerator::forcedrefltimes_
StepInterval< float > forcedrefltimes_
Definition: synthseis.h:281
float_complex
std::complex< float > float_complex
Definition: odcomplex.h:17
factory.h
Seis::SynthGenerator::~SynthGenerator
~SynthGenerator()
odmemory.h
PreStack::Gather
PreStack gather.
Definition: prestackgather.h:36
RayTracer1D
Ray tracer in 1D.
Definition: raytrace1d.h:32
Seis::MultiTraceSynthGenerator::synthgens_
ObjectSet< SynthGenerator > synthgens_
Definition: synthseis.h:197
ObjectSet
Set of pointers to objects.
Definition: commontypes.h:31
Seis::RaySynthGenerator::totalNr
od_int64 totalNr() const
Seis::SynthGenBase::getStretchLimit
float getStretchLimit() const
Seis::RaySynthGenerator::usePar
bool usePar(const IOPar &raypars)
Seis::SynthGenBase::sKeyInternal
static const char * sKeyInternal()
Definition: synthseis.h:83
Seis::SynthGenBase::getOutSamplingFromModel
bool getOutSamplingFromModel(const ObjectSet< const ReflectivityModel > &, StepInterval< float > &, bool usenmo=false)
Seis::RaySynthGenerator::doWork
bool doWork(od_int64, od_int64, int)
Seis::MultiTraceSynthGenerator::nrIterations
od_int64 nrIterations() const
Seis
Summary for a Seismic object.
Definition: segydirectdef.h:22
Seis::SynthGenerator::sampledrefmodel_
ReflectivityModel sampledrefmodel_
Definition: synthseis.h:160
Seis::SynthGenBase::surfreflcoeff_
float surfreflcoeff_
Definition: synthseis.h:101
Seis::SynthGenerator::setWavelet
virtual bool setWavelet(const Wavelet *, OD::PtrPolicy pol)
Seis::RaySynthGenerator::RaySynthGenerator
RaySynthGenerator(const TypeSet< ElasticModel > *, bool ownrms=true)
od_int64
#define od_int64
Definition: plftypes.h:35
Seis::MultiTraceSynthGenerator::totalnr_
od_int64 totalnr_
Definition: synthseis.h:200
Seis::RaySynthGenerator::nrDone
od_int64 nrDone() const
May be -1, i.e. class does not report nrdone.
Seis::SynthGenBase::cStdMuteLength
static float cStdMuteLength()
Definition: synthseis.h:78
Seis::SynthGenBase::~SynthGenBase
virtual ~SynthGenBase()
Seis::RaySynthGenerator::reset
void reset()
Seis::SynthGenerator::create
static SynthGenerator * create(bool advanced)
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
m3Dots
#define m3Dots(txt)
Adds '...' to string, usable for menu items.
Definition: uistrings.h:694
Seis::SynthGenerator
Definition: synthseis.h:111
Seis::SynthGenBase::setStretchLimit
void setStretchLimit(float n)
Definition: synthseis.h:65
Seis::SynthGenBase::setWavelet
virtual bool setWavelet(const Wavelet *, OD::PtrPolicy pol)
SeisTrc
Seismic trace.
Definition: seistrc.h:34
Seis::SynthGenBase::dointernalmultiples_
bool dointernalmultiples_
Definition: synthseis.h:99
Seis::RaySynthGenerator::message_
uiString message_
Definition: synthseis.h:275
Seis::RaySynthGenerator::elasticModels
const TypeSet< ElasticModel > & elasticModels() const
Definition: synthseis.h:260
Seis::RaySynthGenerator::fillPar
void fillPar(IOPar &raypars) const
Seis::MultiTraceSynthGenerator::totalNr
od_int64 totalNr() const
Definition: synthseis.h:187
Seis::SynthGenerator::mODTextTranslationClass
mODTextTranslationClass(SynthGenerator)
Seis::RaySynthGenerator::RaySynthGenerator
RaySynthGenerator(ObjectSet< RayModel > *)
Seis::RaySynthGenerator::doPrepare
bool doPrepare(int)
Seis::RaySynthGenerator::getAllRefls
void getAllRefls(ObjectSet< const ReflectivityModel > &)
Seis::SynthGenerator::freqReflectivities
const TypeSet< float_complex > & freqReflectivities() const
Definition: synthseis.h:133
Array1D
Array1D ( Subclass of ArrayND ) is a one dimensional array.
Definition: arraynd.h:111
Seis::RaySynthGenerator::forceReflTimes
void forceReflTimes(const StepInterval< float > &)
Seis::SynthGenBase::sKeySurfRefl
static const char * sKeySurfRefl()
Definition: synthseis.h:84
Seis::MultiTraceSynthGenerator::doWork
virtual bool doWork(od_int64, od_int64, int)
Seis::SynthGenBase::setMuteLength
void setMuteLength(float n)
Definition: synthseis.h:62
SeisTrcBuf
set of seismic traces.
Definition: seisbuf.h:31
Seis::SynthGenerator::SynthGenerator
SynthGenerator()
Seis::SynthGenerator::genFreqWavelet
int genFreqWavelet()
Seis::SynthGenBase::enableFourierDomain
virtual void enableFourierDomain(bool fourier)
Definition: synthseis.h:70
ailayer.h
Seis::RaySynthGenerator::rayModels
ObjectSet< RayModel > * rayModels()
Definition: synthseis.h:257
Fourier
Definition: convolve2d.h:26
StepInterval< float >
Seis::MultiTraceSynthGenerator::MultiTraceSynthGenerator
MultiTraceSynthGenerator()
Seis::SynthGenerator::setConvolveSize
int setConvolveSize()
Seis::SynthGenerator::computeReflectivities
virtual bool computeReflectivities()
TimeDepthModel
Converts between time, depth and velocity given a model. The velocity model can be either RMO-velocit...
Definition: velocitycalc.h:31
Seis::SynthGenBase::doSampledReflectivity
void doSampledReflectivity(bool yn)
Definition: synthseis.h:67
Seis::SynthGenBase::getMuteLength
float getMuteLength() const
Definition: synthseis.h:63
Seis::SynthGenBase::sKeyNMO
static const char * sKeyNMO()
Definition: synthseis.h:82
Seis::SynthGenerator::freqwavelet_
TypeSet< float_complex > freqwavelet_
Definition: synthseis.h:162
Seis::SynthGenerator::doFFTConvolve
bool doFFTConvolve(ValueSeries< float > &, int sz)
Seis::SynthGenBase::cStdStretchLimit
static float cStdStretchLimit()
Definition: synthseis.h:79
Seis::SynthGenBase::mODTextTranslationClass
mODTextTranslationClass(SynthGenBase)
Seis::MultiTraceSynthGenerator::getSampledRMs
void getSampledRMs(ObjectSet< const ReflectivityModel > &)
Seis::SynthGenerator::doNMOStretch
bool doNMOStretch(const ValueSeries< float > &, int insz, ValueSeries< float > &out, int outsz) const
mStruct
#define mStruct(module)
Definition: commondefs.h:182
Seis::SynthGenBase::setOutSampling
virtual bool setOutSampling(const StepInterval< float > &)
Seis::RaySynthGenerator::result
const RayModel & result(int id) const
Definition: synthseis.h:256
Seis::SynthGenBase::usePar
virtual bool usePar(const IOPar &)
uistrings.h
Seis::MultiTraceSynthGenerator::getResult
void getResult(ObjectSet< SeisTrc > &)
Seis::MultiTraceSynthGenerator::~MultiTraceSynthGenerator
~MultiTraceSynthGenerator()
Seis::SynthGenerator::setOutSampling
virtual bool setOutSampling(const StepInterval< float > &)
SamplingData
Holds the fundamental sampling info: start and interval.
Definition: samplingdata.h:22
Seis::RaySynthGenerator::result
RayModel & result(int id)
Definition: synthseis.h:255
Seis::MultiTraceSynthGenerator::sampledrefmodels_
ObjectSet< const ReflectivityModel > sampledrefmodels_
Definition: synthseis.h:196
Seis::SynthGenBase::sKeyMuteLength
static const char * sKeyMuteLength()
Definition: synthseis.h:85
OD::String::isEmpty
bool isEmpty() const
Definition: odstring.h:50
Seis::MultiTraceSynthGenerator::mODTextTranslationClass
mODTextTranslationClass(MultiTraceSynthGenerator)
Seis::RaySynthGenerator::~RaySynthGenerator
~RaySynthGenerator()
Seis::SynthGenerator::setModel
bool setModel(const ReflectivityModel &)
Seis::SynthGenerator::freqreflectivities_
TypeSet< float_complex > freqreflectivities_
Definition: synthseis.h:161
Seis::SynthGenBase::waveletismine_
bool waveletismine_
Definition: synthseis.h:96
Seis::SynthGenBase::isInputOK
bool isInputOK()
Seis::RaySynthGenerator::uiNrDoneText
uiString uiNrDoneText() const
will be nrDoneText() in 7.x
reflectivitymodel.h
PreStack
Definition: synthseis.h:35
Seis::SynthGenBase::fillPar
virtual void fillPar(IOPar &) const
Seis::SynthGenBase::errMsg
uiString errMsg() const
Definition: synthseis.h:73
Seis::SynthGenerator::doWork
bool doWork()
Seis::SynthGenBase::dosampledreflectivities_
bool dosampledreflectivities_
Definition: synthseis.h:100
Seis::SynthGenerator::outtrc_
SeisTrc & outtrc_
Definition: synthseis.h:158
Seis::RaySynthGenerator::mODTextTranslationClass
mODTextTranslationClass(RaySynthGenerator)
ParallelTask
Generalization of a task that can be run in parallel.
Definition: paralleltask.h:66
Seis::SynthGenerator::result
const SeisTrc & result() const
Definition: synthseis.h:129
Seis::SynthGenerator::result
SeisTrc & result()
Definition: synthseis.h:130
Seis::MultiTraceSynthGenerator::lock_
Threads::Lock lock_
Definition: synthseis.h:201
RayTracerRunner
Definition: raytracerrunner.h:22
Seis::SynthGenBase::sKeyFourier
static const char * sKeyFourier()
Definition: synthseis.h:81
Seis::MultiTraceSynthGenerator
Definition: synthseis.h:171
uiString
String that is able to hold international (UTF-8) strings for the user interface.
Definition: uistring.h:121
Seis::SynthGenerator::getWaveletTrace
void getWaveletTrace(Array1D< float > &, float z, float scal, SamplingData< float > &) const
Seis::SynthGenBase::errmsg_
uiString errmsg_
Definition: synthseis.h:103
MPE::errmsg_
BufferString errmsg_
Definition: horizontracker.h:118
Seis::RaySynthGenerator::rayTracers
const ObjectSet< RayTracer1D > & rayTracers() const
threadlock.h
Seis::SynthGenBase::stretchlimit_
float stretchlimit_
Definition: synthseis.h:94
odcomplex.h
Seis::SynthGenerator::nextStep
int nextStep()
Seis::SynthGenBase::outputsampling_
StepInterval< float > outputsampling_
Definition: synthseis.h:98
Seis::MultiTraceSynthGenerator::models_
const ObjectSet< const ReflectivityModel > * models_
Definition: synthseis.h:195
Seis::SynthGenerator::convolvesize_
int convolvesize_
Definition: synthseis.h:157
Seis::SynthGenerator::currentProgress
od_int64 currentProgress() const
Definition: synthseis.h:127
OD::PtrPolicy
PtrPolicy
Definition: odmemory.h:21
iopar.h
Seis::SynthGenBase
Definition: synthseis.h:51
Seis::RaySynthGenerator::offsets_
TypeSet< float > offsets_
Definition: synthseis.h:277
Seis::MultiTraceSynthGenerator::trcidxs_
TypeSet< int > trcidxs_
Definition: synthseis.h:199
Seis::SynthGenBase::sKeyStretchLimit
static const char * sKeyStretchLimit()
Definition: synthseis.h:86
Wavelet
Definition: wavelet.h:25
Seis::RaySynthGenerator::uiMessage
uiString uiMessage() const
will be message() again in 7.x
Definition: synthseis.h:250
Seis::RaySynthGenerator::getTraces
void getTraces(ObjectSet< SeisTrcBuf > &)
Seis::RaySynthGenerator::nrIterations
od_int64 nrIterations() const
Seis::SynthGenerator::sortOutput
void sortOutput(float_complex *, ValueSeries< float > &, int sz) const
Seis::SynthGenerator::computeTrace
bool computeTrace(SeisTrc &)
Seis::MultiTraceSynthGenerator::doPrepare
bool doPrepare(int)
paralleltask.h
Threads::Lock
A lock of a type that (hopefully) suits your needs. To use it, you need the Locker class.
Definition: threadlock.h:53
Seis::SynthGenBase::isfourier_
bool isfourier_
Definition: synthseis.h:92
Seis::MultiTraceSynthGenerator::setModels
void setModels(const ObjectSet< const ReflectivityModel > &)
Seis::SynthGenerator::refmodel_
const ReflectivityModel * refmodel_
Definition: synthseis.h:156
IOPar
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:55
Seis::RaySynthGenerator
Definition: synthseis.h:207
Seis::SynthGenerator::progress_
od_int64 progress_
Definition: synthseis.h:164
Seis::SynthGenBase::SynthGenBase
SynthGenBase()
TypeSet< ReflectivitySpike >
Seis::MultiTraceSynthGenerator::uiMessage
uiString uiMessage() const
will be message() again in 7.x
Definition: synthseis.h:183
Seis::SynthGenerator::doTimeConvolve
bool doTimeConvolve(ValueSeries< float > &, int sz)
Seis::SynthGenBase::mutelength_
float mutelength_
Definition: synthseis.h:95

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