OpendTect  6.3
seiskeytracker.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: Mar 2016
9 ________________________________________________________________________
10 
11 
12 -*/
13 
14 #include "seiscommon.h"
15 #include "binid.h"
16 #include "manobjectset.h"
17 #include "od_iosfwd.h"
18 #include "typeset.h"
19 class ascbinistream;
20 class ascbinostream;
21 
22 
23 namespace Seis
24 {
25 
29 {
30 public:
31 
34 
35  struct Entry
36  {
37  static Entry* getFrom(ascbinistream&,bool is2d);
38  virtual ~Entry() {}
39 
40  virtual const char* fileKey() const = 0;
41  virtual bool is2D() const = 0;
42 
43  virtual bool isOffs() const { return false; }
44  virtual bool isStart() const { return true; }
45  inline SeqNrType seqNr() const { return seqnr_; }
46  inline IdxType trcNr() const { return trcnr_; }
47  virtual IdxType lineNr() const { return mUdf(IdxType); }
48  inline IdxType inl() const { return lineNr(); }
49  inline IdxType crl() const { return trcNr(); }
50  virtual bool isTrcNrDir() const { return true; }
51  inline BinID binID() const
52  { return BinID(lineNr(),trcNr()); }
53 
54  inline void setSeqNr( SeqNrType s ) { seqnr_ = s; }
55  inline void setTrcNr( IdxType t ) { trcnr_ = t; }
56  virtual void setLineNr(IdxType) {}
57  inline void setInl( IdxType i ) { setLineNr( i ); }
58  inline void setCrl( IdxType i ) { setTrcNr( i ); }
59  virtual void setIsTrcNrDir( bool ) {}
60 
61  bool dump(ascbinostream&) const;
62 
63  protected:
64  Entry( SeqNrType seqnr, IdxType trcnr )
65  : seqnr_(seqnr)
66  , trcnr_(trcnr) {}
67 
68  SeqNrType seqnr_;
69  IdxType trcnr_;
70 
71  };
72 
75 
76  TrackRecord(Seis::GeomType);
77  ~TrackRecord() { setEmpty(); }
78 
79  inline bool is2D() const { return is2d_; }
80  inline bool isPS() const { return isps_; }
81 
82  inline void setEmpty() { deepErase(entries_); }
83  inline EntrySet& entries() { return entries_; }
84  inline const EntrySet& entries() const { return entries_; }
85 
86  TrackRecord& addStartEntry(SeqNrType,const BinID&,IdxType step,
87  bool diriscrl);
88  inline TrackRecord& addStartEntry( SeqNrType s, int trcnr, IdxType st,
89  bool d )
90  { return addStartEntry(s,BinID(mUdf(IdxType),trcnr),st,d);}
91  TrackRecord& addEndEntry(SeqNrType,const BinID&);
92  inline TrackRecord& addEndEntry( SeqNrType s, int trcnr )
93  { return addEndEntry(s,BinID(mUdf(IdxType),trcnr));}
94  TrackRecord& addOffsetEntry(const BinID&,const TypeSet<float>&);
95  inline TrackRecord& addOffsetEntry( int t, const TypeSet<float>& o )
96  { return addOffsetEntry( BinID(mUdf(IdxType),t), o ); }
97 
98  bool getFrom(od_istream&,bool binary);
99  bool dump(od_ostream&,bool binary) const;
100 
101 protected:
102 
103  struct StartEntry : public Entry
104  {
105  IdxType step_;
106  protected:
107  StartEntry( SeqNrType seqnr, IdxType trcnr,
108  IdxType step )
109  : Entry(seqnr,trcnr)
110  , step_(step) {}
111  };
112  struct StartEntry2D : public StartEntry
113  {
114  StartEntry2D( SeqNrType seqnr, IdxType tnr,
115  IdxType step )
116  : StartEntry(seqnr,tnr,step) {}
117  virtual const char* fileKey() const { return "T"; }
118  virtual bool is2D() const { return true; }
119  };
120  struct StartEntry3D : public StartEntry
121  {
122  StartEntry3D( SeqNrType seqnr, IdxType iln, IdxType xln,
123  IdxType step, bool crldir )
124  : StartEntry(seqnr,xln,step)
125  , inl_(iln)
126  , iscrldir_(crldir) {}
127  virtual const char* fileKey() const
128  { return iscrldir_ ? "T" : "L"; }
129 
130  virtual bool is2D() const { return false; }
131  virtual IdxType lineNr() const { return inl_; }
132  virtual bool isTrcNrDir() const { return iscrldir_; }
133  virtual void setLineNr( IdxType i ) { inl_ = i; }
134  virtual void setIsTrcNrDir( bool yn ) { iscrldir_ = yn; }
135  IdxType inl_;
136  bool iscrldir_;
137  };
138  struct StopEntry : public Entry
139  {
140  protected:
141  StopEntry( SeqNrType seqnr, IdxType trcnr )
142  : Entry(seqnr,trcnr) {}
143  virtual const char* fileKey() const { return "E"; }
144  virtual bool isStart() const { return false;}
145  };
146  struct StopEntry2D : public StopEntry
147  {
148  StopEntry2D( SeqNrType seqnr, IdxType trcnr )
149  : StopEntry(seqnr,trcnr) {}
150  virtual bool is2D() const { return true; }
151  };
152  struct StopEntry3D : public StopEntry
153  {
154  StopEntry3D( SeqNrType seqnr, IdxType iln, IdxType xln )
155  : StopEntry(seqnr,xln)
156  , inl_(iln) {}
157  virtual bool is2D() const { return false; }
158  virtual IdxType lineNr() const { return inl_; }
159  virtual void setLineNr( IdxType i ) { inl_ = i; }
160  IdxType inl_;
161  };
162  struct OffsEntry : public Entry
163  {
165  virtual const char* fileKey() const { return "O"; }
166  virtual bool isOffs() const { return true; }
167  protected:
168  OffsEntry( IdxType trcnr )
169  : Entry(0,trcnr) {}
170  };
171  struct OffsEntry2D : public OffsEntry
172  {
173  OffsEntry2D( IdxType trcnr )
174  : OffsEntry(trcnr) {}
175  virtual bool is2D() const { return true; }
176  };
177  struct OffsEntry3D : public OffsEntry
178  {
179  OffsEntry3D( IdxType iln, IdxType xln )
180  : OffsEntry(xln)
181  , inl_(iln) {}
182  virtual bool is2D() const { return false; }
183  virtual IdxType lineNr() const { return inl_; }
184  virtual void setLineNr( IdxType i ) { inl_ = i; }
185  IdxType inl_;
186  };
187 
188  const bool is2d_;
189  const bool isps_;
190  EntrySet entries_;
191 
192 };
193 
194 
196 {
197 public:
198 
201 
202  KeyTracker(TrackRecord&);
203  virtual ~KeyTracker() { finish(); }
204  const TrackRecord& trackRecord() const { return trackrec_; }
205  void reset();
206 
207  inline bool is2D() const { return trackrec_.is2D(); }
208  inline bool isPS() const { return trackrec_.isPS(); }
209 
210  void add(int trcnr,float offs=0.f);
211  void add(const BinID&,float offs=0.f);
212  SeqNrType lastSeqNr() const { return seqnr_; }
213 
214  od_int64 nrDone() const { return seqnr_; };
215  void finish();
218 
219 protected:
220 
222 
225  bool diriscrl_;
226  IdxType step_;
227  bool finished_;
228  int offsidx_;
231 
232  void addFirst(const BinID&,float);
233  void addFirstFollowUp(const BinID&,float);
234  void addNext(const BinID&,float);
235  void addNextPS(const BinID&,float);
236  void checkCurOffset(float);
237  void getNewIncs(const BinID&);
238  void getNextPredBinID(BinID&) const;
239  bool isSamePos(const BinID&,const BinID&) const;
240  void addStartEntry(SeqNrType,const BinID&);
241  void addEndEntry(SeqNrType,const BinID&);
242  void addOffsetEntry();
243 
244 };
245 
246 
247 } // namespace Seis
virtual const char * fileKey() const
Definition: seiskeytracker.h:143
#define mExpClass(module)
Definition: commondefs.h:157
StartEntry2D(SeqNrType seqnr, IdxType tnr, IdxType step)
Definition: seiskeytracker.h:114
Seismics.
Definition: segydirectdef.h:20
IdxType step_
Definition: seiskeytracker.h:105
OffsEntry(IdxType trcnr)
Definition: seiskeytracker.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
virtual IdxType lineNr() const
Definition: seiskeytracker.h:158
StartEntry(SeqNrType seqnr, IdxType trcnr, IdxType step)
Definition: seiskeytracker.h:107
virtual ~Entry()
Definition: seiskeytracker.h:38
bool finished_
Definition: seiskeytracker.h:227
Definition: seiskeytracker.h:171
const EntrySet & entries() const
Definition: seiskeytracker.h:84
virtual bool isStart() const
Definition: seiskeytracker.h:44
bool is2D() const
Definition: seiskeytracker.h:207
virtual const char * fileKey() const
Definition: seiskeytracker.h:127
bool is2D(GeomType gt)
Definition: seistype.h:32
const TrackRecord & trackRecord() const
Definition: seiskeytracker.h:204
#define od_int64
Definition: plftypes.h:34
virtual void setLineNr(IdxType)
Definition: seiskeytracker.h:56
bool isPS() const
Definition: seiskeytracker.h:80
virtual bool is2D() const
Definition: seiskeytracker.h:150
IdxType trcNr() const
Definition: seiskeytracker.h:46
TrackRecord & addStartEntry(SeqNrType s, int trcnr, IdxType st, bool d)
Definition: seiskeytracker.h:88
virtual bool is2D() const
Definition: seiskeytracker.h:175
virtual IdxType lineNr() const
Definition: seiskeytracker.h:131
TrackRecord & trackrec_
Definition: seiskeytracker.h:221
int size_type
Definition: objectset.h:37
Definition: seiskeytracker.h:152
bool diriscrl_
Definition: seiskeytracker.h:225
EntrySet & entries()
Definition: seiskeytracker.h:83
TypeSet< float > offsets_
Definition: seiskeytracker.h:164
StopEntry3D(SeqNrType seqnr, IdxType iln, IdxType xln)
Definition: seiskeytracker.h:154
bool offsetschanged_
Definition: seiskeytracker.h:230
virtual ~KeyTracker()
Definition: seiskeytracker.h:203
bool is2D() const
Definition: seiskeytracker.h:79
od_int32 Index_Type
Definition: commontypes.h:29
SeqNrType seqNr() const
Definition: seiskeytracker.h:45
const bool isps_
Definition: seiskeytracker.h:189
Definition: seiskeytracker.h:112
OD class for stream read.
Definition: od_istream.h:23
bool isPS() const
Definition: seiskeytracker.h:208
virtual bool is2D() const
Definition: seiskeytracker.h:130
OffsEntry2D(IdxType trcnr)
Definition: seiskeytracker.h:173
void setTrcNr(IdxType t)
Definition: seiskeytracker.h:55
virtual bool is2D() const
Definition: seiskeytracker.h:182
virtual void setIsTrcNrDir(bool)
Definition: seiskeytracker.h:59
virtual bool isTrcNrDir() const
Definition: seiskeytracker.h:50
virtual IdxType lineNr() const
Definition: seiskeytracker.h:183
virtual bool isOffs() const
Definition: seiskeytracker.h:166
GeomType
Definition: seistype.h:31
ObjectSet< Entry > EntrySet
Definition: seiskeytracker.h:73
void setEmpty()
Definition: seiskeytracker.h:82
virtual const char * fileKey() const
Definition: seiskeytracker.h:117
od_int64 SeqNrType
Definition: seiskeytracker.h:200
virtual void setLineNr(IdxType i)
Definition: seiskeytracker.h:184
~TrackRecord()
Definition: seiskeytracker.h:77
const bool is2d_
Definition: seiskeytracker.h:188
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:270
reads from a stream that was created in ascbinostream style.
Definition: ascbinstream.h:79
virtual bool is2D() const
Definition: seiskeytracker.h:157
StopEntry(SeqNrType seqnr, IdxType trcnr)
Definition: seiskeytracker.h:141
IdxType inl_
Definition: seiskeytracker.h:185
SeqNrType lastSeqNr() const
Definition: seiskeytracker.h:212
TypeSet< float > offsets_
Definition: seiskeytracker.h:229
Definition: seiskeytracker.h:35
od_int64 seqnr_
Definition: seiskeytracker.h:223
virtual bool is2D() const
Definition: seiskeytracker.h:118
OffsEntry3D(IdxType iln, IdxType xln)
Definition: seiskeytracker.h:179
StartEntry3D(SeqNrType seqnr, IdxType iln, IdxType xln, IdxType step, bool crldir)
Definition: seiskeytracker.h:122
virtual void setIsTrcNrDir(bool yn)
Definition: seiskeytracker.h:134
virtual void setLineNr(IdxType i)
Definition: seiskeytracker.h:159
IdxType step_
Definition: seiskeytracker.h:226
virtual const char * fileKey() const
Definition: seiskeytracker.h:165
Definition: seiskeytracker.h:177
virtual bool isOffs() const
Definition: seiskeytracker.h:43
Definition: seiskeytracker.h:195
EntrySet entries_
Definition: seiskeytracker.h:190
IdxType crl() const
Definition: seiskeytracker.h:49
IdxType trcnr_
Definition: seiskeytracker.h:69
Positioning in a seismic survey: inline/crossline or lineNr/trcNr.
Definition: binid.h:28
EntrySet::size_type ArrIdxType
Definition: seiskeytracker.h:74
a record of visited positions.
Definition: seiskeytracker.h:28
void setSeqNr(SeqNrType s)
Definition: seiskeytracker.h:54
TrackRecord & addOffsetEntry(int t, const TypeSet< float > &o)
Definition: seiskeytracker.h:95
Index_Type IdxType
Definition: seiskeytracker.h:199
Entry(SeqNrType seqnr, IdxType trcnr)
Definition: seiskeytracker.h:64
BinID binID() const
Definition: seiskeytracker.h:51
void setCrl(IdxType i)
Definition: seiskeytracker.h:58
Definition: seiskeytracker.h:138
IdxType inl() const
Definition: seiskeytracker.h:48
SeqNrType seqnr_
Definition: seiskeytracker.h:68
Definition: seiskeytracker.h:146
TrackRecord & addEndEntry(SeqNrType s, int trcnr)
Definition: seiskeytracker.h:92
virtual bool isStart() const
Definition: seiskeytracker.h:144
Definition: seiskeytracker.h:103
void setInl(IdxType i)
Definition: seiskeytracker.h:57
virtual IdxType lineNr() const
Definition: seiskeytracker.h:47
Definition: seiskeytracker.h:120
od_int64 SeqNrType
Definition: seiskeytracker.h:33
od_int64 nrDone() const
Definition: seiskeytracker.h:214
Definition: seiskeytracker.h:162
int offsidx_
Definition: seiskeytracker.h:228
IdxType inl_
Definition: seiskeytracker.h:160
bool iscrldir_
Definition: seiskeytracker.h:136
writes to a stream that can be Ascii or Binary.
Definition: ascbinstream.h:28
IdxType inl_
Definition: seiskeytracker.h:135
BinID prevbid_
Definition: seiskeytracker.h:224
virtual bool isTrcNrDir() const
Definition: seiskeytracker.h:132
void deepErase(ObjectSet< T > &os)
empty the ObjectSet deleting all objects pointed to.
Definition: objectset.h:122
virtual void setLineNr(IdxType i)
Definition: seiskeytracker.h:133
Index_Type IdxType
Definition: seiskeytracker.h:32
StopEntry2D(SeqNrType seqnr, IdxType trcnr)
Definition: seiskeytracker.h:148

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