OpendTect  6.3
seismultiprovider.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: Mahant Mothey
8  Date: February 2017
9 ________________________________________________________________________
10 
11 */
12 
13 #include "seismod.h"
14 #include "seistype.h"
15 #include "survgeom2d.h"
16 #include "trckeyzsampling.h"
17 #include "uistring.h"
18 #include "enums.h"
19 
20 class SeisTrc;
21 class SeisTrcBuf;
22 
23 namespace PosInfo { class CubeData; }
24 
25 namespace Seis
26 {
27 
28 class Provider;
29 class SelData;
30 
31 /*
32 \brief Base class for accessing multiple providers and obtaining results
33 according to a specified synchronisation policy.
34 
35 You need to instantiate one of MultiProvider2D or MultiProvider3D. If all
36 you have is a list of IOPar, find out from IOPar by getting the DBKey from
37 the first IOPar and asking SeisIOObjInfo whether it's tied to 2D or 3D
38 seismics.
39 */
40 
43 public:
44 
45  enum Policy { GetEveryWhere, RequireOnlyOne,
46  RequireAtLeastOne, RequireAll };
48  enum ZPolicy { Minimum, Maximum };
51 
52  virtual ~MultiProvider();
53 
54  virtual bool is2D() const = 0;
55 
56  int size() const { return provs_.size(); }
57  bool isEmpty() const { return size() == 0; }
58  void setEmpty();
59 
60  uiRetVal addInput(const DBKey&);
61  void setSelData(SelData*);
62  void selectComponent(int iprov,int icomp);
63  void selectComponents(const TypeSet<int>&);
66  void forceFPData(bool yn=true);
67  void setReadMode(ReadMode);
68 
69  ZSampling getZRange() const;
70  uiRetVal getComponentInfo(int iprov,BufferStringSet&,
71  TypeSet<Seis::DataType>* dts=0) const;
72  virtual od_int64 totalNr() const;
73 
74  uiRetVal fillPar(IOPar&) const;
75  uiRetVal usePar(const IOPar&);
76 
77  uiRetVal getNext(SeisTrc&,bool dostack=false);
78  /*< \param dostack, if false, first
79  available trace in the list of providers is
80  returned.*/
81  uiRetVal getNext(ObjectSet<SeisTrc>&);
82  uiRetVal getGather(SeisTrcBuf&,bool dostack=false)
83  { /* TODO */ return uiRetVal(); }
84  /*< \param dostack, if false, first
85  available trace in the list of providers is
86  returned.*/
87  uiRetVal get(const TrcKey&,ObjectSet<SeisTrc>&)const;
88  /*< Fills the traces with data from each
89  provider at the specified TrcKey.*/
90  uiRetVal getGathers(const TrcKey&,
91  ObjectSet<SeisTrcBuf>&) const
92  { /* TODO */ return uiRetVal(); }
93  /*< Fills the SeisTrcBuf with gather from
94  each provider at the specified TrcKey.*/
95  uiRetVal reset() const;
97  const SelData* selData() const { return seldata_; }
98 
99 protected:
100 
101  MultiProvider(Policy,ZPolicy,
102  float specialvalue=0.0f);
105 
106  void addInput(Seis::GeomType);
107  bool handleSetupChanges(uiRetVal&) const;
108  void handleTraces(ObjectSet<SeisTrc>&) const;
109  void ensureRightZSampling(
110  ObjectSet<SeisTrc>&) const;
111 
112  virtual void doReset(uiRetVal&) const = 0;
113  virtual void doFillPar(IOPar&,uiRetVal&) const;
114  virtual void doUsePar(const IOPar&,uiRetVal&);
115  virtual void doGetNext(SeisTrc&,bool dostack,
116  uiRetVal&) const = 0;
117  virtual void doGetNextTrcs(ObjectSet<SeisTrc>&,
118  uiRetVal&) const;
119  virtual void doGet(const TrcKey&,ObjectSet<SeisTrc>&,
120  uiRetVal&) const = 0;
121  virtual bool doMoveToNext() const = 0;
122 
123  void doGetStacked(SeisTrcBuf&,SeisTrc&) const;
124 
127  mutable bool setupchgd_;
134 
136 
137 public:
138 
139  const Provider& provider( int idx ) const
140  { return *provs_[idx]; }
141  Provider& provider( int idx )
142  { return *provs_[idx]; }
143 };
144 
145 
146 /*
147 \brief MultiProvider for 3D seismic data.
148 */
149 
152 public:
155 
156  bool is2D() const { return false; }
157 
158  bool getRanges(TrcKeyZSampling&) const;
159  void getGeometryInfo(PosInfo::CubeData&) const;
160 
161 protected:
162 
163  void doReset(uiRetVal&) const;
164  void doGetNext(SeisTrc&,bool dostack,
165  uiRetVal&) const;
166  void doGet(const TrcKey&,ObjectSet<SeisTrc>&,
167  uiRetVal&) const;
168  bool doMoveToNext() const;
169 };
170 
171 
172 /*
173 \brief MultiProvider for 2D seismic data.
174 */
175 
178 public:
181 
182  bool is2D() const { return true; }
183 
184  int nrLines() const
185  { return geomids_.size(); }
186  Pos::GeomID geomID( int iln ) const
187  { return geomids_[iln]; }
188  BufferString lineName( int iln ) const
189  { return Survey::GM().getName(geomID(iln));}
190  int curLineIdx() const { return curlidx_; }
191 
192  bool getRanges(int iln,StepInterval<int>& trcrg,
193  ZSampling&) const;
194  void getGeometryInfo(int iln,
195  PosInfo::Line2DData&) const;
196 
197 protected:
198 
199  void doReset(uiRetVal&) const;
200  void doGetNext(SeisTrc&,bool dostack,
201  uiRetVal&) const;
202  void doGet(const TrcKey&,ObjectSet<SeisTrc>&,
203  uiRetVal&) const;
204  bool doMoveToNext() const;
205  bool doMoveToNextLine() const;
206 
207  void doFillPar(IOPar&,uiRetVal&) const;
208  void doUsePar(const IOPar&,uiRetVal&);
209 
210  mutable int curlidx_;
212 };
213 
214 }
Policy
Definition: seismultiprovider.h:45
Policy policy_
Definition: seismultiprovider.h:130
#define mExpClass(module)
Definition: commondefs.h:157
bool is2D() const
Definition: seismultiprovider.h:156
Seismics.
Definition: segydirectdef.h:20
float specialvalue_
Definition: seismultiprovider.h:129
const GeometryManager & GM()
Pos::GeomID geomID(int iln) const
Definition: seismultiprovider.h:186
A lock of a type that (hopefully) suits your needs. To use it, you need the Locker class...
Definition: threadlock.h:51
is the access point for seismic traces. Instantiate a subclass and ask for what you need...
Definition: seisprovider.h:54
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
TrcKeySamplingIterator iter_
Definition: seismultiprovider.h:135
bool is2D(GeomType gt)
Definition: seistype.h:32
bool is2D() const
Definition: seismultiprovider.h:182
void usePar(const IOPar &iop, ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:200
#define od_int64
Definition: plftypes.h:34
int curlidx_
Definition: seismultiprovider.h:210
Definition: seismultiprovider.h:150
bool setupchgd_
Definition: seismultiprovider.h:127
uiRetVal getGathers(const TrcKey &, ObjectSet< SeisTrcBuf > &) const
Definition: seismultiprovider.h:90
Provider & provider(int idx)
Definition: seismultiprovider.h:141
Finds next BinID in TrcKeySampling; initializes to first position.
Definition: trckeysampling.h:181
const char * getName(Geometry::ID) const
Position info for a 2D line.
Definition: posinfo2d.h:63
Definition: seismultiprovider.h:46
Set of BufferString objects.
Definition: bufstringset.h:25
ZPolicy
Definition: seismultiprovider.h:48
#define mDeclareEnumUtils(enm)
Some utilities surrounding the often needed enum <-> string table.
Definition: enums.h:188
const SelData * selData() const
Definition: seismultiprovider.h:97
Definition: seismultiprovider.h:45
ZSampling zsampling_
Definition: seismultiprovider.h:128
~MultiProvider2D()
Definition: seismultiprovider.h:180
GeomType
Definition: seistype.h:31
ZPolicy zpolicy_
Definition: seismultiprovider.h:131
Definition: seismultiprovider.h:41
FixedString Minimum()
Definition: keystrs.h:165
FixedString Provider()
Definition: keystrs.h:103
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:53
int nrLines() const
Definition: seismultiprovider.h:184
od_int64 totalnr_
Definition: seismultiprovider.h:126
Hor+Vert sampling in 3D surveys.
Definition: trckeyzsampling.h:32
bool isEmpty() const
Definition: seismultiprovider.h:57
int size() const
Definition: seismultiprovider.h:56
void fillPar(IOPar &iop, const ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:187
~MultiProvider3D()
Definition: seismultiprovider.h:154
ObjectSet< Seis::Provider > provs_
Definition: seismultiprovider.h:133
contains input (sub-)selection data from a cube or lineset
Definition: seisselection.h:78
Index_Type GeomID
Definition: commontypes.h:48
Position info, often segmented.
Definition: posinfo.h:38
Threads::Lock lock_
Definition: seismultiprovider.h:125
ReadMode
Definition: seistype.h:29
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
SelData * seldata_
Definition: seismultiprovider.h:132
Seismic trace.
Definition: seistrc.h:31
Definition: uistring.h:299
Definition: seismultiprovider.h:176
BufferString lineName(int iln) const
Definition: seismultiprovider.h:188
int curLineIdx() const
Definition: seismultiprovider.h:190
set of seismic traces.
Definition: seisbuf.h:28
const Provider & provider(int idx) const
Definition: seismultiprovider.h:139
uiRetVal getGather(SeisTrcBuf &, bool dostack=false)
Definition: seismultiprovider.h:82
Full key to any object in the OpendTect data store.
Definition: dbkey.h:36
Represents a unique trace position in one of the surveys that OpendTect is managing.
Definition: trckey.h:26
TypeSet< Pos::GeomID > geomids_
Definition: seismultiprovider.h:211
FixedString Maximum()
Definition: keystrs.h:163
Position info for an entire 3D cube. The LineData&#39;s are not sorted.
Definition: posinfo.h:96

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