OpendTect  6.6
seisblocks.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: Bert
8  Date: Apr 2017
9 ________________________________________________________________________
10 
11 */
12 
13 #include "seiscommon.h"
14 #include "filepath.h"
15 #include "ranges.h"
16 #include "datachar.h"
17 #include "zdomain.h"
18 #include "threadlock.h"
19 #include "survgeom3d.h"
20 
21 class DataBuffer;
22 class LinScaler;
23 class SeisTrc;
24 namespace Pos { class IdxPairDataSet; }
25 namespace PosInfo { class CubeData; }
26 template <class T> class DataInterpreter;
27 
28 
29 namespace Seis
30 {
31 
32 mGlobal(Seis) inline const char* sSeismicSubDir() { return "Seismics"; }
33 mGlobal(Seis) inline const char* sInfoFileExtension() { return "info"; }
34 
38 namespace Blocks
39 {
40  typedef short IdxType;
41  typedef unsigned short SzType;
44  typedef unsigned short CoordSysID;
45 
46  // From 7.x, this will be a simple typedef from Survey::Geometry3D
48  {
49  public:
51  HGeom(const HGeom&);
52  inline int idx4Inl(int) const;
53  inline int idx4Crl(int) const;
54  inline int idx4Z(float) const;
55  inline int inl4Idx(int) const;
56  inline int crl4Idx(int) const;
57  inline float z4Idx(int) const;
58  void getMapInfo(const IOPar&);
59  void putMapInfo(IOPar&) const;
60  bool isCompatibleWith(const Survey::Geometry&) const;
61  };
62 
63 #define mDefSeisBlockPairClass(clss,typ) \
64 mExpClass(Seis) clss : public std::pair<typ,typ> \
65 { \
66 public: \
67 \
68  inline clss() : std::pair<typ,typ>(0,0) {} \
69  inline clss( typ iidx, typ xidx ) \
70  : std::pair<typ,typ>(iidx,xidx) {} \
71  inline bool operator ==( const clss& oth ) const \
72  { return first == oth.first && second == oth.second; } \
73 \
74  inline typ inl() const { return first; } \
75  inline typ& inl() { return first; } \
76  inline typ crl() const { return second; } \
77  inline typ& crl() { return second; } \
78 }
79 
83 
84 #define mDefSeisBlockTripletClass(clss,typ) \
85 mExpClass(Seis) clss : public H##clss \
86 { \
87 public: \
88  \
89  inline clss() : third(0) {} \
90  inline clss( typ iidx, typ xidx, typ zidx ) \
91  : H##clss(iidx,xidx), third(zidx) {} \
92  inline bool operator ==( const clss& oth ) const \
93  { return H##clss::operator==(oth) \
94  && third == oth.third; } \
95  \
96  inline typ z() const { return third; } \
97  inline typ& z() { return third; } \
98  \
99  typ third; \
100  \
101 }
102 
106 
107 
111 {
112 public:
113 
114  ~Block() {}
115 
116  const GlobIdx& globIdx() const { return globidx_; }
117  const HLocIdx& start() const { return start_; }
118  const Dimensions& dims() const { return dims_; }
119 
120  static IdxType globIdx4Inl(const HGeom&,int inl,SzType inldim);
121  static IdxType globIdx4Crl(const HGeom&,int crl,SzType crldim);
122  static IdxType globIdx4Z(const ZGeom&,float z,SzType zdim);
123  static IdxType locIdx4Inl(const HGeom&,int inl,SzType inldim);
124  static IdxType locIdx4Crl(const HGeom&,int crl,SzType crldim);
125  static IdxType locIdx4Z(const ZGeom&,float z,SzType zdim);
126  static int startInl4GlobIdx(const HGeom&,IdxType,SzType inldim);
127  static int startCrl4GlobIdx(const HGeom&,IdxType,SzType crldim);
128  static float startZ4GlobIdx(const ZGeom&,IdxType,SzType zdim);
129  static int inl4Idxs(const HGeom&,SzType inldim,IdxType globidx,
130  IdxType sampidx);
131  static int crl4Idxs(const HGeom&,SzType crldim,IdxType globidx,
132  IdxType sampidx);
133  static float z4Idxs(const ZGeom&,SzType zdim,IdxType globidx,
134  IdxType loczidx);
135 
136  static Dimensions defDims();
137 
138 protected:
139 
140  Block( const GlobIdx& gidx, const HLocIdx& s,
141  const Dimensions& d )
142  : globidx_(gidx), start_(s), dims_(d) {}
143 
147 
148 };
149 
150 
154 {
155 public:
156 
157  virtual ~Column() {}
158 
159  const HGlobIdx& globIdx() const { return globidx_; }
160  const Dimensions& dims() const { return dims_; }
161  int nrComponents() const { return nrcomps_; }
162 
163 protected:
164 
165  Column( const HGlobIdx& gidx, const Dimensions& d,
166  int nc )
167  : globidx_(gidx), dims_(d), nrcomps_(nc) {}
168 
171  const int nrcomps_;
172 
173 };
174 
175 
179 {
180 public:
181 
183 
184  virtual ~IOClass();
185 
186  virtual const HGeom& hGeom() const { return hgeom_; }
187  const ZGeom& zGeom() const { return zgeom_; }
188  const ZDomain::Def& zDomain() const;
189 
190  const Dimensions& dimensions() const { return dims_; }
191  SzType version() const { return version_; }
192  const char* cubeName() const { return cubename_; }
193  const BufferStringSet& componentNames() const { return compnms_; }
194  FPDataRepType fPRep() const { return fprep_; }
195  const LinScaler* scaler() const { return scaler_; }
196  int nrAuxInfo() const { return auxiops_.size(); }
197  const IOPar& getAuxInfo( int i ) const { return *auxiops_[i]; }
198  DataType dataType() const { return datatype_; }
199 
200  const FilePath& basePath() const { return basepath_; }
204  static BufferString infoFileNameFor(const char*);
205  static BufferString dataFileNameFor(const char*);
206 
207  static const char* sKeyDataFileExt() { return "blocks"; }
208  static const char* sKeyOvvwFileExt() { return "ovvw"; }
209  static const char* sKeyFileType() { return "Column Cube"; }
210  static const char* sKeySectionPre() { return "Section-"; }
211  static const char* sKeyGenSection() { return "Section-General"; }
212  static const char* sKeyOffSection() { return "Section-Offsets"; }
213  static const char* sKeyPosSection() { return "Section-Positions"; }
214  static const char* sKeySurveyName() { return "Name.Survey"; }
215  static const char* sKeyCubeName() { return "Name.Cube"; }
216  static const char* sKeyFmtVersion() { return "Blocks.Version"; }
217  static const char* sKeyDimensions() { return "Blocks.Max Dimensions"; }
218  static const char* sKeyGlobInlRg() { return "Blocks.Inl ID Range"; }
219  static const char* sKeyGlobCrlRg() { return "Blocks.Crl ID Range"; }
220  static const char* sKeyGlobZRg() { return "Blocks.Z ID Range"; }
221  static const char* sKeyComponents() { return "Components"; }
222  static const char* sKeyDataType() { return "Data Type"; }
223  static const char* sKeyDepthInFeet() { return "Depth in Feet"; }
224 
225 protected:
226 
228 
231 
243  mutable bool needreset_;
244 
245  Column* findColumn(const HGlobIdx&) const;
246  void addColumn(Column*) const;
247  void clearColumns();
249 
250 };
251 
252 
253 inline int HGeom::idx4Inl( int inl ) const
254 { return sampling_.hsamp_.lineIdx( inl ); }
255 inline int HGeom::idx4Crl( int crl ) const
256 { return sampling_.hsamp_.trcIdx( crl ); }
257 inline int HGeom::idx4Z( float z ) const
258 { return sampling_.zsamp_.nearestIndex( z ); }
259 inline int HGeom::inl4Idx( int idx ) const
260 { return sampling_.hsamp_.lineID( idx ); }
261 inline int HGeom::crl4Idx( int idx ) const
262 { return sampling_.hsamp_.traceID( idx ); }
263 inline float HGeom::z4Idx( int idx ) const
264 { return sampling_.zsamp_.atIndex( idx ); }
265 
266 
267 } // namespace Blocks
268 
269 
270 } // namespace Seis
Seis::Blocks::Block::inl4Idxs
static int inl4Idxs(const HGeom &, SzType inldim, IdxType globidx, IdxType sampidx)
zdomain.h
seiscommon.h
Seis::Blocks::Block::locIdx4Crl
static IdxType locIdx4Crl(const HGeom &, int crl, SzType crldim)
Seis::Blocks::IOClass::infoFileName
BufferString infoFileName() const
Seis::Blocks::IOClass::IOClass
IOClass()
Seis::Blocks::Block::locIdx4Inl
static IdxType locIdx4Inl(const HGeom &, int inl, SzType inldim)
TrcKeySampling::lineID
Pos::LineID lineID(int) const
Definition: trckeysampling.h:247
Seis::Blocks::IOClass::zgeom_
ZGeom zgeom_
Definition: seisblocks.h:234
TrcKeyZSampling::hsamp_
TrcKeySampling hsamp_
Definition: trckeyzsampling.h:60
Seis::Blocks::IOClass::dimensions
const Dimensions & dimensions() const
Definition: seisblocks.h:190
Seis::Blocks::SzType
unsigned short SzType
Definition: seisblocks.h:41
datachar.h
Seis::Blocks::Column::~Column
virtual ~Column()
Definition: seisblocks.h:157
Seis::Blocks::Block::~Block
~Block()
Definition: seisblocks.h:114
ZDomain::Def
Definition of z-domain.
Definition: zdomain.h:41
Seis::Blocks::IOClass::dataFileNameFor
static BufferString dataFileNameFor(const char *)
Seis::Blocks::IOClass::dataFileName
BufferString dataFileName() const
Pos
Position.
Definition: commontypes.h:78
Seis::Blocks::IOClass::dataType
DataType dataType() const
Definition: seisblocks.h:198
mGlobal
#define mGlobal(module)
Definition: commondefs.h:180
Seis::Blocks::HGeom::idx4Inl
int idx4Inl(int) const
Definition: seisblocks.h:253
Seis::Blocks::IOClass::columns_
Pos::IdxPairDataSet & columns_
Definition: seisblocks.h:230
ObjectSet< IOPar >
Seis::sInfoFileExtension
const char * sInfoFileExtension()
Definition: seisblocks.h:33
Seis::Blocks::IOClass::sKeyOffSection
static const char * sKeyOffSection()
Definition: seisblocks.h:212
Seis::Blocks::IOClass::compnms_
BufferStringSet compnms_
Definition: seisblocks.h:238
Seis::Blocks::Block::start
const HLocIdx & start() const
Definition: seisblocks.h:117
Seis::Blocks::IOClass::zDomain
const ZDomain::Def & zDomain() const
BufferStringSet
Set of BufferString objects.
Definition: bufstringset.h:26
Seis
Summary for a Seismic object.
Definition: segydirectdef.h:22
Seis::Blocks::IOClass::sKeyComponents
static const char * sKeyComponents()
Definition: seisblocks.h:221
Seis::Blocks::HGeom::putMapInfo
void putMapInfo(IOPar &) const
Seis::Blocks::IOClass::sKeyGlobInlRg
static const char * sKeyGlobInlRg()
Definition: seisblocks.h:218
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
Seis::Blocks::Block::globIdx
const GlobIdx & globIdx() const
Definition: seisblocks.h:116
FilePath
File pathname tools.
Definition: filepath.h:34
StepInterval::atIndex
T atIndex(int) const
Definition: ranges.h:695
Seis::Blocks::Column
Base class for column of blocks.
Definition: seisblocks.h:154
SeisTrc
Seismic trace.
Definition: seistrc.h:34
Survey::Geometry
A Geometry which holds trace positions.
Definition: survgeom.h:40
Seis::Blocks::IOClass::zGeom
const ZGeom & zGeom() const
Definition: seisblocks.h:187
mDefSeisBlockPairClass
#define mDefSeisBlockPairClass(clss, typ)
Definition: seisblocks.h:63
Seis::Blocks::HGlobIdx
Definition: seisblocks.h:80
Seis::Blocks::Block::globidx_
const GlobIdx globidx_
Definition: seisblocks.h:144
Seis::Blocks::Block
Base class for single block.
Definition: seisblocks.h:111
Survey::Geometry3D
Scaled down survey geometry for an inl/crl geometry.
Definition: survgeom3d.h:28
Seis::Blocks::Column::Column
Column(const HGlobIdx &gidx, const Dimensions &d, int nc)
Definition: seisblocks.h:165
Seis::Blocks::IOClass::sKeyFileType
static const char * sKeyFileType()
Definition: seisblocks.h:209
Seis::Blocks::HDimensions
Definition: seisblocks.h:82
Seis::Blocks::IOClass::version
SzType version() const
Definition: seisblocks.h:191
Seis::Blocks::IOClass::sKeyFmtVersion
static const char * sKeyFmtVersion()
Definition: seisblocks.h:216
Seis::Blocks::IOClass::infoFileNameFor
static BufferString infoFileNameFor(const char *)
Seis::Blocks::HGeom::inl4Idx
int inl4Idx(int) const
Definition: seisblocks.h:259
Seis::Blocks::IOClass::getAuxInfo
const IOPar & getAuxInfo(int i) const
Definition: seisblocks.h:197
Seis::Blocks::Column::dims
const Dimensions & dims() const
Definition: seisblocks.h:160
DataInterpreter
Byte-level data interpreter.
Definition: cbvswriter.h:21
Seis::Blocks::IOClass::fPRep
FPDataRepType fPRep() const
Definition: seisblocks.h:194
Pos::IdxPairDataSet
A sorted set of IdxPairs and associated data buffer.
Definition: posidxpairdataset.h:61
Seis::Blocks::DataInterp
DataInterpreter< float > DataInterp
Definition: seisblocks.h:43
Seis::Blocks::IOClass::sKeySectionPre
static const char * sKeySectionPre()
Definition: seisblocks.h:210
Seis::Blocks::IOClass::cubeName
const char * cubeName() const
Definition: seisblocks.h:192
Seis::Blocks::IOClass::sKeySurveyName
static const char * sKeySurveyName()
Definition: seisblocks.h:214
Seis::Blocks::IOClass::componentNames
const BufferStringSet & componentNames() const
Definition: seisblocks.h:193
TrcKeyZSampling::zsamp_
StepInterval< float > zsamp_
Definition: trckeyzsampling.h:61
Seis::Blocks::Column::globIdx
const HGlobIdx & globIdx() const
Definition: seisblocks.h:159
Seis::Blocks::HGeom::getMapInfo
void getMapInfo(const IOPar &)
Seis::Blocks::HGeom::idx4Crl
int idx4Crl(int) const
Definition: seisblocks.h:255
Seis::Blocks::IOClass::basepath_
FilePath basepath_
Definition: seisblocks.h:232
Seis::Blocks::IOClass::FPDataRepType
DataCharacteristics::UserType FPDataRepType
Definition: seisblocks.h:182
StepInterval< float >
Seis::Blocks::HGeom::HGeom
HGeom(const Survey::Geometry3D &)
LinScaler
Linear scaling.
Definition: scaler.h:58
Seis::Blocks::IOClass
Base class for Reader and Writer. For comments see master branch.
Definition: seisblocks.h:179
survgeom3d.h
Seis::Blocks::IOClass::sKeyGlobZRg
static const char * sKeyGlobZRg()
Definition: seisblocks.h:220
Seis::Blocks::Block::globIdx4Inl
static IdxType globIdx4Inl(const HGeom &, int inl, SzType inldim)
Seis::Blocks::IOClass::fprep_
FPDataRepType fprep_
Definition: seisblocks.h:240
Seis::Blocks::IOClass::dims_
Dimensions dims_
Definition: seisblocks.h:235
Seis::Blocks::HGeom
Definition: seisblocks.h:48
Seis::Blocks::Block::startInl4GlobIdx
static int startInl4GlobIdx(const HGeom &, IdxType, SzType inldim)
DataBuffer
Raw data array with memory management.
Definition: databuf.h:22
Seis::Blocks::IOClass::sKeyOvvwFileExt
static const char * sKeyOvvwFileExt()
Definition: seisblocks.h:208
DataCharacteristics::UserType
UserType
Definition: datachar.h:87
Seis::Blocks::Block::locIdx4Z
static IdxType locIdx4Z(const ZGeom &, float z, SzType zdim)
Seis::Blocks::Block::crl4Idxs
static int crl4Idxs(const HGeom &, SzType crldim, IdxType globidx, IdxType sampidx)
Seis::Blocks::IOClass::cubename_
BufferString cubename_
Definition: seisblocks.h:237
Seis::Blocks::IOClass::~IOClass
virtual ~IOClass()
Seis::Blocks::HGeom::isCompatibleWith
bool isCompatibleWith(const Survey::Geometry &) const
Seis::Blocks::LocIdx
Definition: seisblocks.h:104
Seis::Blocks::IOClass::scaler
const LinScaler * scaler() const
Definition: seisblocks.h:195
TrcKeySampling::lineIdx
int lineIdx(Pos::LineID) const
Definition: trckeysampling.h:231
Seis::Blocks::ZGeom
StepInterval< float > ZGeom
Definition: seisblocks.h:42
Seis::Blocks::IOClass::findColumn
Column * findColumn(const HGlobIdx &) const
Seis::Blocks::Block::startCrl4GlobIdx
static int startCrl4GlobIdx(const HGeom &, IdxType, SzType crldim)
TrcKeySampling::traceID
Pos::TraceID traceID(int) const
Definition: trckeysampling.h:253
Seis::Blocks::CoordSysID
unsigned short CoordSysID
Definition: seisblocks.h:44
mDefSeisBlockTripletClass
#define mDefSeisBlockTripletClass(clss, typ)
Definition: seisblocks.h:84
Seis::Blocks::Block::startZ4GlobIdx
static float startZ4GlobIdx(const ZGeom &, IdxType, SzType zdim)
Seis::Blocks::IOClass::sKeyDepthInFeet
static const char * sKeyDepthInFeet()
Definition: seisblocks.h:223
Seis::Blocks::Block::dims_
const Dimensions dims_
Definition: seisblocks.h:146
Seis::Blocks::IOClass::addColumn
void addColumn(Column *) const
Seis::Blocks::Block::Block
Block(const GlobIdx &gidx, const HLocIdx &s, const Dimensions &d)
Definition: seisblocks.h:140
Seis::Blocks::Block::z4Idxs
static float z4Idxs(const ZGeom &, SzType zdim, IdxType globidx, IdxType loczidx)
Seis::Blocks::IOClass::accesslock_
Threads::Lock accesslock_
Definition: seisblocks.h:229
Seis::Blocks::IOClass::needreset_
bool needreset_
Definition: seisblocks.h:243
Seis::Blocks::Block::globIdx4Crl
static IdxType globIdx4Crl(const HGeom &, int crl, SzType crldim)
Seis::Blocks::IOClass::sKeyDataType
static const char * sKeyDataType()
Definition: seisblocks.h:222
Seis::Blocks::IOClass::version_
SzType version_
Definition: seisblocks.h:236
TrcKeySampling::trcIdx
int trcIdx(Pos::TraceID) const
Definition: trckeysampling.h:239
BufferString
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size.
Definition: bufstring.h:40
Seis::Blocks::Column::nrcomps_
const int nrcomps_
Definition: seisblocks.h:171
Seis::Blocks::Block::dims
const Dimensions & dims() const
Definition: seisblocks.h:118
Seis::Blocks::IOClass::auxiops_
ObjectSet< IOPar > auxiops_
Definition: seisblocks.h:241
PosInfo
Position info, often segmented.
Definition: posinfo.h:40
Seis::Blocks::HGeom::HGeom
HGeom(const HGeom &)
Seis::Blocks::Column::globidx_
const HGlobIdx globidx_
Definition: seisblocks.h:169
Seis::Blocks::IOClass::sKeyGenSection
static const char * sKeyGenSection()
Definition: seisblocks.h:211
Seis::Blocks::IOClass::sKeyDimensions
static const char * sKeyDimensions()
Definition: seisblocks.h:217
Seis::Blocks::IOClass::sKeyDataFileExt
static const char * sKeyDataFileExt()
Definition: seisblocks.h:207
Seis::Blocks::IOClass::scaler_
LinScaler * scaler_
Definition: seisblocks.h:239
Seis::sSeismicSubDir
const char * sSeismicSubDir()
Definition: seisblocks.h:32
threadlock.h
Seis::Blocks::IOClass::sKeyGlobCrlRg
static const char * sKeyGlobCrlRg()
Definition: seisblocks.h:219
Seis::Blocks::Block::defDims
static Dimensions defDims()
Seis::Blocks::HGeom::idx4Z
int idx4Z(float) const
Definition: seisblocks.h:257
Seis::Blocks::IOClass::sKeyCubeName
static const char * sKeyCubeName()
Definition: seisblocks.h:215
Seis::Blocks::IOClass::clearColumns
void clearColumns()
Seis::Blocks::HGeom::crl4Idx
int crl4Idx(int) const
Definition: seisblocks.h:261
Seis::Blocks::IOClass::sKeyPosSection
static const char * sKeyPosSection()
Definition: seisblocks.h:213
Seis::Blocks::IOClass::nrAuxInfo
int nrAuxInfo() const
Definition: seisblocks.h:196
StepInterval::nearestIndex
int nearestIndex(const X &) const
Definition: ranges.h:729
DataType
Data type.
Definition: datainpspec.h:31
Seis::Blocks::IOClass::datatype_
DataType datatype_
Definition: seisblocks.h:242
Seis::Blocks::Dimensions
Definition: seisblocks.h:105
Seis::Blocks::IOClass::hGeom
virtual const HGeom & hGeom() const
Definition: seisblocks.h:186
Seis::Blocks::Block::start_
const HLocIdx start_
Definition: seisblocks.h:145
Seis::Blocks::IdxType
short IdxType
Definition: seisblocks.h:40
ranges.h
Seis::Blocks::IOClass::overviewFileName
BufferString overviewFileName() const
Seis::Blocks::HGeom::z4Idx
float z4Idx(int) const
Definition: seisblocks.h:263
Seis::Blocks::Column::nrComponents
int nrComponents() const
Definition: seisblocks.h:161
Seis::Blocks::IOClass::columnHeaderSize
static SzType columnHeaderSize(SzType ver)
Seis::Blocks::GlobIdx
Definition: seisblocks.h:103
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::Blocks::Block::globIdx4Z
static IdxType globIdx4Z(const ZGeom &, float z, SzType zdim)
Seis::Blocks::Column::dims_
const Dimensions dims_
Definition: seisblocks.h:170
Seis::Blocks::IOClass::hgeom_
HGeom & hgeom_
Definition: seisblocks.h:233
Survey::Geometry::sampling_
TrcKeyZSampling sampling_
Definition: survgeom.h:89
Seis::Blocks::IOClass::basePath
const FilePath & basePath() const
Definition: seisblocks.h:200
IOPar
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:55
filepath.h
Seis::Blocks::HLocIdx
Definition: seisblocks.h:81

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