OpendTect  6.3
emsurfaceio.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: 4-11-2002
9 ________________________________________________________________________
10 
11 
12 -*/
13 
14 #include "earthmodelmod.h"
15 #include "bufstringset.h"
16 #include "emposid.h"
17 #include "executor.h"
18 #include "posinfo2dsurv.h"
19 #include "ranges.h"
20 #include "rowcol.h"
21 #include "stratlevel.h"
22 #include "od_iosfwd.h"
23 
24 class StreamConn;
25 class IOObj;
26 template <class T> class DataInterpreter;
27 template <class T> class Array3D;
28 template <class T> class Array2D;
29 
30 namespace EM
31 {
32 class Surface;
33 class dgbSurfDataReader;
34 class RowColSurfaceGeometry;
35 
36 
47 public:
48 
50  dgbSurfaceReader(const IOObj& ioobj,
51  const char* filetype);
52  dgbSurfaceReader(const char* fullexp, const char* name,
53  const char* filetype);
55 
56  void setOutput(EM::Surface&);
57  void setOutput(Array3D<float>&);
64  int version() const { return version_; }
65 
66  bool isOK() const;
67  void setGeometry();
68 
69  int nrSections() const;
70  EM::SectionID sectionID(int) const;
71  BufferString sectionName(int) const;
72  void selSections(const TypeSet<EM::SectionID>&);
77  const char* dbInfo() const;
78  int nrAuxVals() const;
79  const char* auxDataName(int) const;
80  float auxDataShift(int) const;
81  void selAuxData(const TypeSet<int>&);
86  const StepInterval<int>& rowInterval() const;
87  const StepInterval<int>& colInterval() const;
88  const Interval<float>& zInterval() const;
89 
90  void setRowInterval(const StepInterval<int>&);
91  void setColInterval(const StepInterval<int>&);
92  void setReadOnlyZ(bool yn=true);
93  void setLineNames(const BufferStringSet&);
94  void setLinesTrcRngs(const TypeSet<StepInterval<int> >&);
95 
96  int nrLines() const;
97  BufferString lineName(int) const;
98  BufferString lineSet(int) const;
99  Pos::GeomID lineGeomID(int) const;
100  StepInterval<int> lineTrcRanges( int idx ) const;
101  LevelID stratLevelID() const;
102  const IOPar* pars() const;
103  int getParsOffset() const;
104 
105  virtual od_int64 nrDone() const;
106  virtual uiString nrDoneText() const;
107  virtual od_int64 totalNr() const;
108 
109  virtual int nextStep();
110 
111  virtual uiString message() const;
112 
113  static const char* sKeyNrSections();
114  static const char* sKeyNrSectionsV1();
115  static BufferString sSectionIDKey(int idx);
116  static BufferString sSectionNameKey(int idx);
117  static BufferString sColStepKey(int rowidx);
118  static const char* sKeyDepthOnly();
119  static const char* sKeyRowRange();
120  static const char* sKeyColRange();
121  static const char* sKeyZRange();
122  static const char* sKeyInt16DataChar();
123  static const char* sKeyInt32DataChar();
124  static const char* sKeyInt64DataChar();
125  static const char* sKeyFloatDataChar();
126  static const char* sKeyDBInfo();
127  static const char* sKeyVersion();
128  static const char* sKeyLineSets();
129  static const char* sKeyLineIDs();
130  static const char* sKeyTraceRange();
131 
132  static const char* sMsgParseError();
133  static uiString sMsgReadError();
134  static const char* sKeyUndefLineSet();
135  static const char* sKeyUndefLine();
136 
137 protected:
138 
139  bool isBinary() const;
140 
141  double readDouble(od_istream&) const;
142  int readInt16(od_istream&) const;
143  int readInt32(od_istream&) const;
144  od_int64 readInt64(od_istream&) const;
145  int int64Size() const;
146  void createAuxDataReader();
147  bool readParData(od_istream&,const IOPar&,const char*);
148  void mergeExternalPar(const char*);
149  int scanFor2DGeom(TypeSet< StepInterval<int> >&);
150  bool readHeaders(const char*);
151  bool readRowOffsets(od_istream&);
152  RowCol getFileStep() const;
153  int prepareNewSection(od_istream&);
154  bool shouldSkipCurrentRow() const;
155  int skipRow(od_istream&);
156  bool prepareRowRead(od_istream&);
157  int currentRow() const;
158  void goToNextRow();
159  void createSection( const SectionID& );
160 
162 
170 
175 
176  const IOPar* par_;
177 
179  bool error_;
180  int nrdone_;
181 
182  bool isinited_;
184 
189  int nrrows_;
191 
197 
198 
202 
205 
208  int version_;
209 
210  bool getIndices(const RowCol&,int&,int&) const;
211  bool readVersion2Row(od_istream&,int,int);
212 
213 //Version 3 stuff
214  bool readVersion3Row(od_istream&,int,int,int,
215  int noofcoltoskip=0);
221 
222 //Version 1 stuff
223  bool readVersion1Row(od_istream&,int,int);
224  RowCol convertRowCol(int,int) const;
225  bool parseVersion1(const IOPar&);
226  static const char* sKeyTransformX();
227  static const char* sKeyTransformY();
228 
229  double conv11, conv12, conv13, conv21, conv22, conv23;
230 
231 // for loading horizon based on Lines trace range
234  static const char* linenamesstr_;
235  void init(const char* fulluserexp,const char* name);
236 };
237 
238 
249 public:
250  dgbSurfaceWriter( const IOObj* ioobj,
251  const char* filetype,
252  const EM::Surface& surface,
253  bool binary );
254  dgbSurfaceWriter( const char* fulluserexpr,
255  const char* filetype,
256  const EM::Surface& surface,
257  bool binary );
267  ~dgbSurfaceWriter();
270  int nrSections() const;
271  EM::SectionID sectionID( int ) const;
272  const char* sectionName( int ) const;
273  void selSections(const TypeSet<EM::SectionID>&,
274  bool add=false);
279  void setShift(float);
281 
282  int nrAuxVals() const;
283  const char* auxDataName(int) const;
284  const char* auxDataInfo(int) const;
285  void selAuxData(const TypeSet<int>&);
291  const StepInterval<int>& rowInterval() const;
292  const StepInterval<int>& colInterval() const;
293  void setRowInterval( const StepInterval<int>& );
294  void setColInterval( const StepInterval<int>& );
295 
296  bool writeOnlyZ() const;
297  void setWriteOnlyZ(bool yn);
298  IOPar* pars();
299 
300  virtual od_int64 nrDone() const;
301  virtual uiString nrDoneText() const;
302  virtual od_int64 totalNr() const;
303 
304  virtual int nextStep();
305 
306  virtual uiString message() const;
307 
308 protected:
309 
310  bool writeNewSection(od_ostream&);
311  bool writeRow(od_ostream&);
312 
313  bool writeDouble(od_ostream&,double,
314  const char*) const;
315  bool writeInt16(od_ostream&,unsigned short,
316  const char*) const;
317  bool writeInt32(od_ostream&,od_int32,
318  const char*) const;
319  bool writeInt64(od_ostream&,od_int64,
320  const char*) const;
321 
322  void finishWriting();
324 
326 
332 
334 
338  int nrdone_;
339 
345  int nrrows_;
347 
350 
354 
360  bool binary_;
361  float shift_;
363 
364  static const char* sTab() { return "\t"; }
365  static const char* sEOL() { return "\n"; }
366  static const char* sEOLTab() { return "\n\t\t"; }
367 
368  void init(const char* fulluserexp);
369 };
370 
371 } // namespace EM
StepInterval< int > * writerowrange_
Definition: emsurfaceio.h:355
static const char * sEOLTab()
Definition: emsurfaceio.h:366
od_int16 SectionID
Definition: emposid.h:23
#define mExpClass(module)
Definition: commondefs.h:157
float shift_
Definition: emsurfaceio.h:361
TypeSet< EM::SectionID > sectionsel_
Definition: emsurfaceio.h:168
OD class for stream write common access to the user log file, or std::cout in batch progs...
Definition: od_ostream.h:25
Definition: ioobj.h:57
bool binary_
Definition: emsurfaceio.h:360
StepInterval< int > rowrange_
Definition: emsurfaceio.h:199
StreamConn * conn_
Definition: emsurfaceio.h:161
TypeSet< float > auxdatashifts_
Definition: emsurfaceio.h:172
uiString msg_
Definition: emsurfaceio.h:335
const IOPar * par_
Definition: emsurfaceio.h:176
Executor consisting of other executors.
Definition: executor.h:81
StreamConn * conn_
Definition: emsurfaceio.h:325
int rowindex_
Definition: emsurfaceio.h:190
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
Array2D< float > * arr_
Definition: emsurfaceio.h:196
TypeSet< od_int64 > sectionoffsets_
Definition: emsurfaceio.h:219
bool writingfinished_
Definition: emsurfaceio.h:323
#define od_int64
Definition: plftypes.h:34
TypeSet< od_int64 > rowoffsets_
Definition: emsurfaceio.h:218
int firstrow_
Definition: emsurfaceio.h:344
bool init()
int oldsectionindex_
Definition: emsurfaceio.h:187
static const char * linenamesstr_
Definition: emsurfaceio.h:234
StepInterval< int > * readcolrange_
Definition: emsurfaceio.h:204
Interval< float > zrange_
Definition: emsurfaceio.h:201
uiString msg_
Definition: emsurfaceio.h:178
int rowindex_
Definition: emsurfaceio.h:346
bool writeonlyz_
Definition: emsurfaceio.h:359
Definition: uistring.h:88
TypeSet< EM::SectionID > sectionids_
Definition: emsurfaceio.h:167
Set of BufferString objects.
Definition: bufstringset.h:25
BufferString fulluserexpr_
Definition: emsurfaceio.h:336
od_int64 nrsectionsoffsetoffset_
Definition: emsurfaceio.h:329
Surface Writer.
Definition: emsurfaceio.h:247
BufferString filetype_
Definition: emsurfaceio.h:362
OD class for stream read.
Definition: od_istream.h:23
Strat::Level::ID LevelID
Definition: emsurfaceio.h:49
int firstrow_
Definition: emsurfaceio.h:188
DataInterpreter< int > * int16interpreter_
Definition: emsurfaceio.h:216
Byte-level data interpreter.
Definition: cbvswriter.h:20
Set of pointers to objects.
Definition: commontypes.h:28
void message(const char *)
default: to stderr
int version_
Definition: emsurfaceio.h:208
int sectionindex_
Definition: emsurfaceio.h:340
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:53
BufferString dbinfo_
Definition: emsurfaceio.h:207
BufferStringSet auxdatanames_
Definition: emsurfaceio.h:171
Array2D ( Subclass of ArrayND ) is a two dimensional array.
Definition: arraynd.h:127
StepInterval< int > colrange_
Definition: emsurfaceio.h:200
bool isinited_
Definition: emsurfaceio.h:182
int parsoffset_
Definition: emsurfaceio.h:220
const TypeSet< StepInterval< int > > * linestrcrgs_
Definition: emsurfaceio.h:233
int nrrows_
Definition: emsurfaceio.h:345
int oldsectionindex_
Definition: emsurfaceio.h:341
DataInterpreter< double > * floatinterpreter_
Definition: emsurfaceio.h:193
StepInterval< int > rowrange_
Definition: emsurfaceio.h:351
StepInterval< int > * readrowrange_
Definition: emsurfaceio.h:203
static const char * sEOL()
Definition: emsurfaceio.h:365
const BufferStringSet * readlinenames_
Definition: emsurfaceio.h:232
TypeSet< EM::SectionID > sectionsel_
Definition: emsurfaceio.h:327
Index_Type GeomID
Definition: commontypes.h:48
Surface Reader.
Definition: emsurfaceio.h:45
IdxPair used for its row() and col().
Definition: rowcol.h:23
RowCol SurfaceGeometry.
Definition: emsurfacegeometry.h:122
BufferStringSet linesets_
Definition: emsurfaceio.h:165
Array3D< float > * cube_
Definition: emsurfaceio.h:195
#define od_int32
Definition: plftypes.h:29
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
int nrdone_
Definition: emsurfaceio.h:180
FixedString Surface()
Definition: keystrs.h:124
od_int64 rowoffsettableoffset_
Definition: emsurfaceio.h:342
EM::Surface * surface_
Definition: emsurfaceio.h:194
bool setsurfacepar_
Definition: emsurfaceio.h:183
TypeSet< od_int64 > sectionoffsets_
Definition: emsurfaceio.h:328
TypeSet< Pos::GeomID > geomids_
Definition: emsurfaceio.h:166
Base class for surfaces like horizons and faults. A surface is made up of one or more segments or pat...
Definition: emsurface.h:31
BufferStringSet linenames_
Definition: emsurfaceio.h:164
Earth Model objects like horizons, faults, fault-sticks and bodies.
Definition: embody.h:23
int nrdone_
Definition: emsurfaceio.h:338
StepInterval< int > colrange_
Definition: emsurfaceio.h:352
Interval< int > writtenrowrange_
Definition: emsurfaceio.h:357
TypeSet< int > auxdatasel_
Definition: emsurfaceio.h:174
TypeSet< od_int64 > rowoffsettable_
Definition: emsurfaceio.h:343
DBKey objectmid_
Definition: emsurfaceio.h:337
DataInterpreter< od_int64 > * int64interpreter_
Definition: emsurfaceio.h:217
Full key to any object in the OpendTect data store.
Definition: dbkey.h:36
int sectionsread_
Definition: emsurfaceio.h:185
BufferStringSet sectionnames_
Definition: emsurfaceio.h:163
Connection with an underlying iostream.
Definition: streamconn.h:25
ObjectSet< EM::dgbSurfDataReader > auxdataexecs_
Definition: emsurfaceio.h:173
TypeSet< int > auxdatasel_
Definition: emsurfaceio.h:330
Interval< int > writtencolrange_
Definition: emsurfaceio.h:358
FixedString ID()
Definition: keystrs.h:71
bool error_
Definition: emsurfaceio.h:179
bool fullyread_
Definition: emsurfaceio.h:169
Array3D ( Subclass of ArrayND ) is a three dimensional array.
Definition: arraynd.h:149
const EM::RowColSurfaceGeometry * geometry_
Definition: emsurfaceio.h:349
BufferString dbinfo_
Definition: emsurfaceio.h:331
DataInterpreter< int > * int32interpreter_
Definition: emsurfaceio.h:192
static const char * sTab()
Definition: emsurfaceio.h:364
int nrrows_
Definition: emsurfaceio.h:189
int version() const
Definition: emsurfaceio.h:64
Interval< float > zrange_
Definition: emsurfaceio.h:353
int sectionindex_
Definition: emsurfaceio.h:186
StepInterval< int > * writecolrange_
Definition: emsurfaceio.h:356
bool readonlyz_
Definition: emsurfaceio.h:206
const EM::Surface & surface_
Definition: emsurfaceio.h:348
IOPar * par_
Definition: emsurfaceio.h:333
double conv23
Definition: emsurfaceio.h:229

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