OpendTect  6.3
attribprovider.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: Kristofer Tingdahl
8  Date: 07-10-1999
9 ________________________________________________________________________
10 
11 -*/
12 
13 #include "attributeenginemod.h"
14 #include "ranges.h"
15 #include "posinfo2dsurv.h"
16 #include "uistring.h"
17 
18 class BinDataDesc;
20 class SeisTrcInfo;
21 namespace Seis { class SelData; class MSCProvider; }
22 template <class T> class Array2DImpl;
23 
24 #define mMAXDIP 300 * 1e-6
25 #define mMAXDIPSECURE 2000 * 1e-6
26 #define mMAXDIPSECUREDEPTH 6
27 
28 namespace Attrib
29 {
30 
31 class DataHolder;
32 class DataHolderLineBuffer;
33 class Desc;
34 class ProviderTask;
35 
40 mExpClass(AttributeEngine) Provider : public RefCount::Referenced
42  friend class ProviderTask;
43 public:
44 
45  static Provider* create(Desc&,uiString& errmsg);
48  virtual bool isOK() const;
49  virtual uiRetVal isActive() const { return uiRetVal::OK(); }
50  bool is2D() const;
51 
52  const Desc& getDesc() const;
53  Desc& getDesc();
54  const DataHolder* getData(const BinID& relpos=BinID(0,0),
55  int idx=0);
56  const DataHolder* getDataDontCompute(const BinID& relpos) const;
57 
58  int nrOutputs() const
59  { return outputinterest_.size(); }
60  void enableOutput(int output,bool yn=true);
61  bool isOutputEnabled(int output) const;
62  void setOutputInterestSize(bool preserve=false);
63  void enableAllOutputs(bool yn=true);
64  virtual void getCompNames(BufferStringSet&) const;
65 
66  virtual bool isSingleTrace() const;
67  virtual bool usesTracePosition() const;
68  virtual void setReqBufStepout(const BinID&,bool wait=false);
69  virtual void setDesBufStepout(const BinID&,bool wait=false);
70  const BinID& getReqBufStepout() const
71  { return reqbufferstepout_; }
72  const BinID& getDesBufStepout() const
73  { return desbufferstepout_; }
74  void setDesiredVolume(const TrcKeyZSampling&);
78  { return desiredvolume_; }
79  void resetDesiredVolume();
80  void setPossibleVolume(const TrcKeyZSampling&);
84  virtual bool getPossibleVolume(int outp,TrcKeyZSampling&);
86  { return possiblevolume_; }
87  int getTotalNrPos(bool);
88  void setCurLineName(const char*);
89  virtual void adjust2DLineStoredVolume();
90  virtual Pos::GeomID getGeomID() const;
91  virtual void setGeomID(Pos::GeomID);
92 
93  virtual int moveToNextTrace(BinID startpos = BinID(-1,-1),
94  bool firstcheck = false);
99  void computeNewStartPos(BinID&);
100  int alignInputs(ObjectSet<Provider>&);
101  int comparePosAndAlign(Provider*,bool,Provider*,
102  bool,bool);
103  void resetMoved();
104  void resetZIntervals();
105 
106  virtual const SeisTrcInfo* getCurrentTrcInfo() const {return curtrcinfo_;}
107  BinID getCurrentPosition() const;
108  virtual bool setCurrentPosition(const BinID&);
109  void updateCurrentInfo();
110  virtual bool needStoredInput() const;
111 
112  void addLocalCompZIntervals(
113  const TypeSet<Interval<int> >&);
114  const TypeSet< Interval<int> >& localCompZIntervals() const;
115 
116  void updateInputReqs(int input=-1);
117  virtual void updateStorageReqs(bool all=false);
118  void setUseSC() { useshortcuts_ = true;}
119  void setSelData(const Seis::SelData*);
120  void setExtraZ(const Interval<float>&);
121  void setNeedInterpol(bool);
122  void setExactZ(const TypeSet<float>&);
123 
124  void computeRefStep();
128  void setRefStep(float step);
129  float getRefStep() const;
130 
131  void computeRefZ0();
135  void setRefZ0(float z0);
136  float getRefZ0() const { return refz0_; }
137 
138  virtual BinID getStepoutStep() const;
139  ObjectSet<Provider>& getInputs() { return inputs_; }
140  BinID getTrcInfoBid() const { return trcinfobid_; }
141  uiString errMsg() const;
142 
143  virtual void initSteering() {}
144  virtual void prepSteeringForStepout(const BinID&) {}
145 
146  virtual bool prepPriorToOutputSetup();
149  virtual void prepPriorToBoundsCalc();
153  virtual void prepareForComputeData();
155  static uiString prepare(Desc&);
159  {}
160 
161  virtual void setRdmPaths(TypeSet<BinID>* truepath,
162  TypeSet<BinID>* snappedpath);
164 
169  virtual void updateCSIfNeeded(TrcKeyZSampling&) const {}
170  virtual bool compDistBetwTrcsStats(bool force=false);
171  float getApplicableCrlDist(bool) const;
172  virtual float getDistBetwTrcs(bool,
173  const char* linenm =0) const;
174 
175  void setDataUnavailableFlag(bool yn);
176  bool getDataUnavailableFlag() const;
177 
178 protected:
179 
180  Provider(Desc&);
181  ~Provider();
182 
183  virtual bool checkInpAndParsAtStart();
188  virtual Seis::MSCProvider* getMSCProvider(bool&) const;
189  static Provider* internalCreate(Desc&,ObjectSet<Provider>&,
190  bool& issame,uiString&);
194  virtual bool getInputOutput(int input,TypeSet<int>&) const;
198  virtual bool getInputData(const BinID& relpos,int idx);
201  virtual bool preProcCommonToAllThreads(const DataHolder& out,
202  const BinID& relpos)
203  { return true; }
209  virtual bool computeData(const DataHolder& output,
210  const BinID& relpos,
211  int t0,int nrsamples,
212  int threadidx) const = 0;
219  int getDataIndex(int input) const;
222  void fillInputRangesArray(
224  int,const BasicInterval<int>&);
225 
226  // MultiThreading stuff
227  virtual bool allowParallelComputation() const
228  { return false; }
229  virtual bool setNrThreads( int idx ) { return true; }
230  virtual int minTaskSize() const { return 25; }
231  virtual bool finalizeCalculation(bool scs) { return scs; }
236  // DataHolder stuff
237  DataHolder* getDataHolder(const BinID& relpos);
238  void removeDataHolder(const BinID& relpos);
239  void setInput(int input,Provider*);
240  void addParent( Provider* prov ) { parents_+=prov; }
241  virtual BinDataDesc getOutputFormat(int output) const;
242  virtual bool doNotReUseDH() const { return false;}
243 
244  void computeDesInputCube(int inp,int out,
246  bool usestepout=true) const;
251  void setUsedMultTimes();
255  bool isUsedMultTimes() { return isusedmulttimes_; }
256  bool isNew2DLine() const
257  { return prevtrcnr_ > currentbid_.crl(); }
258 
259  virtual const BinID* desStepout(int input,int output) const;
268  virtual const BinID* reqStepout(int input,int output) const;
276  virtual const Interval<float>* desZMargin(int input,int output) const;
289  virtual const Interval<float>* reqZMargin(int input,int output) const;
290  /*<The gate is specified in
291  the depth-unit of the survey (e.g. seconds,
292  feet or meters), and is in addition to
293  the gate specified in reqZSampMargin. The
294  system will supply the attribute with the
295  required gate, and use it to compute the
296  volume that can be computed.
297  \returns the extra gate required on
298  \a input if \a output is going to be
299  computed, or NULL if no extra gate
300  is required. */
301  virtual const Interval<int>* desZSampMargin(int input,int output) const;
313  virtual const Interval<int>* reqZSampMargin(int input,int output) const;
324  virtual bool getZStepStoredData( float& step ) const
325  { return false; }
326  virtual bool getZ0StoredData( float& z0 ) const
327  { return false; }
328 
329  float getInterpolInputValue(const DataHolder&,
330  int inputidx,
331  float zval) const;
332  float getInterpolInputValue(const DataHolder&,
333  int inputidx,float sample,
334  int z0) const;
335  float getInputValue(const DataHolder&,int inputidx,
336  int sampleidx,int z0) const;
337  void setOutputValue(const DataHolder& output,
338  int outputidx,int sampleidx,
339  int z0,float val) const;
340  float getExtraZFromSampPos(float) const;
341  float getExtraZFromSampInterval(int,int) const;
342  virtual bool useInterTrcDist() const;
343  float getZAtSample(int idx) const
344  { return refz0_ + idx*refstep_; }
345 
346  bool zIsTime() const;
347  float zFactor() const;
348  float dipFactor() const;
349  float inlDist() const;
350  float crlDist() const;
351  float lineDist() const;
352  float trcDist() const;
353  float maxSecureDip() const
354  { return (float) (zIsTime() ? mMAXDIPSECURE
355  : mMAXDIPSECUREDEPTH); }
356  void stdPrepSteering(const BinID&);
357 
368  TypeSet<float> exactz_;//only used for outputs which require
369  //data at exact z values not placed
370  //at sample locations
371 
372  ProviderTask* providertask_;
382 
383  float refz0_;
384  float refstep_;
386 
391 };
392 
393 
394 mGlobal(AttributeEngine) int getSteeringIndex( const BinID& );
396 
397 
398 
399 }; // namespace Attrib
400 
401 #define mAttrDefCreateInstance(clss) \
402 Attrib::Provider* clss::createInstance( Attrib::Desc& desc ) \
403 { \
404  clss* res = new clss( desc ); \
405  res->ref(); \
406  if ( !res->isOK() ) \
407  { \
408  res->unRef(); \
409  return 0; \
410  } \
411  \
412  res->unRefNoDelete(); \
413  return res; \
414 }
415 
416 #define mAttrStartInitClass \
417  Attrib::Desc* desc = new Attrib::Desc( attribName()); \
418  desc->ref();
419 
420 #define mAttrStartInitClassWithUpdate \
421  Attrib::Desc* desc = new Attrib::Desc( attribName(), updateDesc ); \
422  desc->ref();
423 
424 #define mAttrStartInitClassWithDescAndDefaultsUpdate \
425  Attrib::Desc* desc = new Attrib::Desc( attribName(), updateDesc,\
426  updateDefaults ); \
427  desc->ref();
428 
429 #define mAttrStartInitClassWithDefaultsUpdate \
430  Attrib::Desc* desc = new Attrib::Desc( attribName(), 0,updateDefaults ); \
431  desc->ref();
432 
433 #define mAttrEndInitClass \
434  Attrib::PF().addDesc( desc, createInstance ); \
435  desc->unRef();
bool isUsedMultTimes()
Definition: attribprovider.h:255
#define mExpClass(module)
Definition: commondefs.h:157
int getSteeringIndex(const BinID &)
For every position there is a single steering index ...?
Seismics.
Definition: segydirectdef.h:20
#define mMAXDIPSECUREDEPTH
Definition: attribprovider.h:26
ObjectSet< Provider > parents_
Definition: attribprovider.h:359
const BinID & getReqBufStepout() const
Definition: attribprovider.h:70
virtual void initSteering()
Definition: attribprovider.h:143
const Seis::SelData * seldata_
Definition: attribprovider.h:377
Interval< float > extraz_
Definition: attribprovider.h:378
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
virtual void updateCSIfNeeded(TrcKeyZSampling &) const
Definition: attribprovider.h:169
int nrOutputs() const
Definition: attribprovider.h:58
#define mGlobal(module)
Definition: commondefs.h:160
Reads seismic data into buffers providing a Moving Virtual Subcube of seismic data.
Definition: seismscprov.h:55
bool is2D(GeomType gt)
Definition: seistype.h:32
int prevtrcnr_
Definition: attribprovider.h:375
virtual bool allowParallelComputation() const
Definition: attribprovider.h:227
static uiRetVal OK()
Definition: uistring.h:307
Definition: i_layout.h:33
BinID reqbufferstepout_
Definition: attribprovider.h:363
const TrcKeyZSampling * getPossibleVolume() const
Definition: attribprovider.h:85
Implementation of Array2D.
Definition: arrayndimpl.h:101
virtual bool getZStepStoredData(float &step) const
Definition: attribprovider.h:324
BinID trcinfobid_
Definition: attribprovider.h:380
VolumeDataPack for 2D and 3D seismic data.
Definition: seisdatapack.h:42
ObjectSet< Provider > inputs_
Definition: attribprovider.h:358
float getRefZ0() const
Definition: attribprovider.h:136
Definition: uistring.h:88
ProviderTask * providertask_
Definition: attribprovider.h:372
Set of BufferString objects.
Definition: bufstringset.h:25
TypeSet< float > exactz_
Definition: attribprovider.h:368
#define mMAXDIPSECURE
Definition: attribprovider.h:25
const BinID & getDesBufStepout() const
Definition: attribprovider.h:72
float maxSecureDip() const
Definition: attribprovider.h:353
Attribute DataHolder Line Buffer.
Definition: attriblinebuffer.h:27
void setUseSC()
Definition: attribprovider.h:118
virtual void fillDataPackWithTrc(RegularSeisDataPack *) const
Definition: attribprovider.h:158
TypeSet< Interval< int > > localcomputezintervals_
Definition: attribprovider.h:366
TypeSet< int > outputinterest_
Definition: attribprovider.h:361
bool needinterp_
Definition: attribprovider.h:388
Set of pointers to objects.
Definition: commontypes.h:28
virtual uiRetVal isActive() const
Definition: attribprovider.h:49
FixedString Desc()
Definition: keystrs.h:60
FixedString Provider()
Definition: keystrs.h:103
void addParent(Provider *prov)
Definition: attribprovider.h:240
Set of (small) copyable elements.
Definition: commontypes.h:26
float getZAtSample(int idx) const
Definition: attribprovider.h:343
const TrcKeyZSampling * getDesiredVolume() const
Definition: attribprovider.h:77
Description of an attribute in an Attrib::DescSet. Each attribute has a name (e.g. "Similarity"), a user reference (e.g. "My similarity"), and at least one output. In addition, it may have parameters and inputs. If it has multiple outputs, only one of the outputs are selected.
Definition: attribdesc.h:87
ObjectSet< Provider > allexistingprov_
Definition: attribprovider.h:367
Desc & desc_
Definition: attribprovider.h:360
Hor+Vert sampling in 3D surveys.
Definition: trckeyzsampling.h:32
bool useshortcuts_
Definition: attribprovider.h:381
virtual bool getZ0StoredData(float &z0) const
Definition: attribprovider.h:326
float refz0_
Definition: attribprovider.h:383
Information for a seismic trace, AKA trace header info.
Definition: seisinfo.h:24
virtual int minTaskSize() const
Definition: attribprovider.h:230
virtual bool preProcCommonToAllThreads(const DataHolder &out, const BinID &relpos)
Definition: attribprovider.h:201
const SeisTrcInfo * curtrcinfo_
Definition: attribprovider.h:379
contains input (sub-)selection data from a cube or lineset
Definition: seisselection.h:78
bool isNew2DLine() const
Definition: attribprovider.h:256
Index_Type GeomID
Definition: commontypes.h:48
virtual bool doNotReUseDH() const
Definition: attribprovider.h:242
TrcKeyZSampling * desiredvolume_
Definition: attribprovider.h:364
Holds the attribute data.
Definition: attribdataholder.h:39
virtual const SeisTrcInfo * getCurrentTrcInfo() const
Definition: attribprovider.h:106
static uiHor3DInterpol * create(uiParent *)
bool dataunavailableflag_
Definition: attribprovider.h:390
bool alreadymoved_
Definition: attribprovider.h:385
Positioning in a seismic survey: inline/crossline or lineNr/trcNr.
Definition: binid.h:28
virtual void prepSteeringForStepout(const BinID &)
Definition: attribprovider.h:144
Definition: uistring.h:299
DataHolderLineBuffer * linebuffer_
Definition: attribprovider.h:373
uiString errmsg_
Definition: attribprovider.h:389
Pos::GeomID geomid_
Definition: attribprovider.h:376
virtual bool finalizeCalculation(bool scs)
Definition: attribprovider.h:231
Provides the actual output to ...
Definition: attribprovider.h:40
BinID currentbid_
Definition: attribprovider.h:374
ObjectSet< Provider > & getInputs()
Definition: attribprovider.h:139
const char * errMsg() const
Definition: horizontracker.h:59
float refstep_
Definition: attribprovider.h:384
Description of binary data.
Definition: bindatadesc.h:41
BinID desbufferstepout_
Definition: attribprovider.h:362
bool isusedmulttimes_
Definition: attribprovider.h:387
TrcKeyZSampling * possiblevolume_
Definition: attribprovider.h:365
BinID getTrcInfoBid() const
Definition: attribprovider.h:140
virtual bool setNrThreads(int idx)
Definition: attribprovider.h:229
Semblance Attribute.
Definition: attribdataholder.h:21

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