OpendTect  6.3
datapointset.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: Jan 2008
9 ________________________________________________________________________
10 
11 -*/
12 
13 #include "generalmod.h"
14 #include "binidvalset.h"
15 #include "color.h"
16 #include "datapackbase.h"
17 #include "valseries.h"
18 class DataColDef;
19 class BinIDValueSet;
20 class PosVecDataSet;
21 class UnitOfMeasure;
22 class BufferStringSet;
23 class TaskRunner;
24 class TrcKeyZSampling;
25 
26 namespace Pos { class Filter; class Provider; }
27 
28 
48 {
49 public:
50 
51  typedef int RowID;
52  typedef int ColID;
54 
55  class DataRow;
56 
59  mExpClass(General) Pos
60  {
61  public:
62  Pos() : offsx_(0), offsy_(0), z_(0), nr_(0) {}
63  Pos( const BinID& bid, float _z )
64  : binid_(bid), nr_(0), z_(_z)
65  , offsx_(0), offsy_(0) {}
66  Pos(const Coord&,float z);
67  Pos(const Coord3&);
68 
69  bool operator ==(const Pos& pos) const
70  { return binid_==pos.binid_ && offsx_ ==pos.offsx_
71  && offsy_==pos.offsy_ && z_==pos.z_; }
72  const BinID& binID() const { return binid_; }
73  Coord coord(::Pos::SurvID) const;
74  float z() const { return z_; }
75 
76  void set( const BinID& bid )
77  { binid_ = bid; offsx_ = offsy_ = 0; }
78  void set(const Coord&);
79  void set(const Coord3&);
80 
82  float z_;
83  int nr_;
84 
85  float binIDOffSet( bool inx ) const
86  { return inx ? offsx_ : offsy_; }
87  void setBinIDOffset( bool inx, float o )
88  { (inx ? offsx_ : offsy_) = o; }
89  void setBinIDOffsets( float ox, float oy )
90  { offsx_ = ox; offsy_ = oy; }
91 
92  protected:
93 
94  float offsx_, offsy_;
95  void setOffs(const Coord&);
96  friend class DataRow;
97 
98  };
99 
104  {
105  public:
107  : grp_(1) { setSel(false); }
108  DataRow( const Pos& p, unsigned short grp=1,
109  bool issel=false )
110  : pos_(p), grp_((short)grp)
111  { setSel( issel ); }
112 
113  bool operator ==(const DataRow& dr) const
114  { return pos_==dr.pos_ && grp_==dr.grp_
115  && data_==dr.data_; }
116  const BinID& binID() const { return pos_.binID(); }
117  Coord coord(::Pos::SurvID survid) const
118  { return pos_.coord(survid); }
119  const TypeSet<float>& data() const { return data_; }
120  unsigned short group() const;
121  bool isSel() const { return grp_ > 0; }
122  bool isInactive() const { return grp_ == 0; }
123  void setSel( bool yn )
124  { if ( (grp_ >= 0) != yn ) grp_ = -grp_; }
125  void setGroup(unsigned short grp);
126  void getBVSValues(TypeSet<float>&,bool is2d,
127  bool ismini) const;
128 
131  short grp_;
132  };
133 
135  const ObjectSet<DataColDef>&,
136  bool is2d,bool minimal=false);
138  const BufferStringSet& valnms,
139  bool is2d,bool minimal=false);
140  DataPointSet(const PosVecDataSet&,bool is2d,
141  bool minimal=false);
144  bool is2D() const { return is2d_; }
145  bool isMinimal() const { return minimal_; }
146  bool isEmpty() const { return bvsidxs_.isEmpty(); }
147  void setEmpty();
148  void clearData();
149 
150  int nrCols() const;
151  int nrFixedCols() const { return nrfixedcols_; }
152  const char* colName(ColID) const;
153  const UnitOfMeasure* unit(ColID) const;
154  const DataColDef& colDef( ColID i ) const { return gtColDef(i); }
155  ColID indexOf(const char*) const;
156  bool validColID(ColID) const;
157 
158  // size, binID, coord, z and trcNr impl PointDataPack
159  int size() const { return bvsidxs_.size(); }
160  BinID binID(RowID) const;
161  Coord coord(RowID) const;
162  float z(RowID) const;
163  int trcNr(RowID) const;
164 
165  Pos pos(RowID) const;
166  DataRow dataRow(RowID) const;
167  float value(ColID,RowID) const;
168  bool setValue(ColID,RowID,float);
169  float* getValues(RowID);
170  const float* getValues(RowID) const;
171  unsigned short group(RowID) const;
172  bool isSelected(RowID) const;
173  int selGroup(RowID) const;
174  bool isInactive( RowID rid ) const { return group(rid) == 0;}
175 
176  void setGroup(RowID,unsigned short);
177  void setSelected(RowID,int selgrp);
178  void setInactive(RowID,bool);
179 
180  int nrActive() const;
181  void purgeInactive();
182  void purgeSelected(bool selected_rows=true);
183 
184  RowID find(const Pos&) const;
185  RowID find(const Pos&,float horradius,float deltaz) const;
186  RowID findFirst(const Coord&) const;
187  RowID findFirst(const BinID&) const;
188 
189  const PosVecDataSet& dataSet() const { return data_; }
190  const BinIDValueSet& bivSet() const { return const_cast<DataPointSet*>
191  (this)->bivSet(); }
192  BinIDValueSet& bivSet();
196  PosVecDataSet& dataSet() { return data_; }
199 
200  DataPointSet* getSubselected(int maxsz,
201  const TypeSet<int>* selected_cols=0,
202  bool allow_udf_values=true,
203  const ObjectSet<Interval<float> >* value_ranges=0)
204  const;
205  void randomSubselect(int maxsz);
206 
207  int bivSetIdx( ColID idx ) const
208  { return idx+nrfixedcols_; }
209 
210  void dataChanged() { calcIdxs(); }
214  void addRow(const DataRow&);
216  bool setRow(const DataRow&);
219  RowID getRowID(BinIDValueSet::SPos) const;
220  DataColDef& colDef( ColID i ) { return gtColDef(i); }
221  BinIDValueSet::SPos bvsPos( RowID rid ) const { return bvsidxs_[rid];}
222 
223  // Building from scratch
224  DataPointSet(bool is2d,bool minimal=false);
225  bool extractPositions(::Pos::Provider&,
226  const ObjectSet<DataColDef>&,
227  const ::Pos::Filter* f=0,
228  TaskRunner* tskr=0);
229  void addCol(const char* nm,const char* ref=0,
230  const UnitOfMeasure* un=0);
232 
233  bool simpleCoords() const { return minimal_; }
234 
235 protected:
236 
237  virtual ~DataPointSet();
238 
241  bool is2d_;
242  bool minimal_;
243 
244  void initPVDS();
245  void init(const TypeSet<DataRow>&,
246  const ObjectSet<DataColDef>&);
247  void calcIdxs();
248 
249  static const int groupcol_;
250  const int nrfixedcols_;
251 
252  DataColDef& gtColDef(ColID) const;
253 
254  virtual float gtNrKBytes() const;
255  virtual void doDumpInfo(IOPar&) const;
256 
257 };
258 
259 
262 mExpClass(General) DPSValueSeries : public ValueSeries<float>
263 {
264 public:
265 
268 
270  ColID colid )
271  : dps_(dps), colid_(colid)
272  { dps_.ref(); }
274  : dps_(oth.dps_), colid_(oth.colid_)
275  { dps_.ref(); }
277  { dps_.unRef();}
278 
279  virtual ValueSeries<float>* clone() const
280  { return new DPSValueSeries(*this); }
281  virtual float value( od_int64 idx ) const
282  { return dps_.value( colid_, (RowID)idx ); }
283 
284 protected:
285 
287  ColID colid_;
288 
289 };
290 
291 
296 public:
297  DPSFromVolumeFiller(DataPointSet&,int firstcol,
298  const VolumeDataPack&,
299  int component);
301 
302  virtual uiString message() const;
303  virtual uiString nrDoneText() const;
304 
305  void setSampling(const TrcKeyZSampling*);
306 
307 protected:
308  virtual od_int64 nrIterations() const;
309  virtual bool doWork(od_int64 start,od_int64 stop,int thridx);
310 
315 
319 };
#define mExpClass(module)
Definition: commondefs.h:157
virtual ValueSeries< float > * clone() const
Definition: datapointset.h:279
float binIDOffSet(bool inx) const
Definition: datapointset.h:85
DataPointSet & dps_
Definition: datapointset.h:311
const BinID & binID() const
Definition: datapointset.h:116
FixedString Filter()
Definition: keystrs.h:66
Provides a series of positions; can also be used for subselection.
Definition: posprovider.h:31
bool operator==(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:51
Set of data points with group selection.
Definition: datapointset.h:47
void setBinIDOffsets(float ox, float oy)
Definition: datapointset.h:89
bool isMinimal() const
Definition: datapointset.h:145
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
const TrcKeyZSampling * sampling_
Definition: datapointset.h:318
bool isEmpty() const
Definition: datapointset.h:146
float z() const
Definition: datapointset.h:74
void setBinIDOffset(bool inx, float o)
Definition: datapointset.h:87
#define od_int64
Definition: plftypes.h:34
DPSValueSeries(const DPSValueSeries &oth)
Definition: datapointset.h:273
bool init()
int RowID
Definition: datapointset.h:51
bool isInactive(RowID rid) const
Definition: datapointset.h:174
TypeSet< SPos > bvsidxs_
Definition: datapointset.h:240
int ColID
Definition: datapointset.h:52
DataPack for volume data.
Definition: datapackbase.h:164
const int nrfixedcols_
Definition: datapointset.h:250
const DataPointSet & dps_
Definition: datapointset.h:286
Fills DataPointSet with data from a VolumeDataPack.
Definition: datapointset.h:294
Definition: uistring.h:88
Set of BufferString objects.
Definition: bufstringset.h:25
ObjectSet< T >::size_type indexOf(const ObjectSet< T > &os, const S &val)
Locate object in set.
Definition: objectset.h:173
int component_
Definition: datapointset.h:313
const BinIDValueSet & bivSet() const
Definition: datapointset.h:190
#define mDeclMonitorableAssignment(clss)
like mDeclAbstractMonitorableAssignment but for non-abstract subclasses. Implements the clone() metho...
Definition: monitor.h:111
DataColDef & colDef(ColID i)
Definition: datapointset.h:220
DataPack for point data.
Definition: datapackbase.h:31
Generalization of a task that can be run in parallel.
Definition: paralleltask.h:64
bool hasstorage_
Definition: datapointset.h:317
BinIDValueSet::SPos SPos
Definition: datapointset.h:53
void message(const char *)
default: to stderr
PosVecDataSet & data_
Definition: datapointset.h:239
bool minimal_
Definition: datapointset.h:242
3D point or vector
Definition: commontypes.h:57
FixedString Provider()
Definition: keystrs.h:103
float z_
Definition: datapointset.h:82
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:53
int firstcol_
Definition: datapointset.h:314
Index_Type SurvID
Definition: commontypes.h:45
Class that can execute a task.
Definition: task.h:193
PosVecDataSet & dataSet()
Definition: datapointset.h:196
bool simpleCoords() const
If true, coords are always SI().tranform(b)
Definition: datapointset.h:233
bool hastrcdata_
Definition: datapointset.h:316
int nrFixedCols() const
Definition: datapointset.h:151
Hor+Vert sampling in 3D surveys.
Definition: trckeyzsampling.h:32
~DPSValueSeries()
Definition: datapointset.h:276
Interface to a series of values.
Definition: odmemory.h:15
static const int groupcol_
Definition: datapointset.h:249
DataPointSet::RowID RowID
Definition: datapointset.h:267
const BinID & binID() const
Definition: datapointset.h:72
DPSValueSeries(const DataPointSet &dps, ColID colid)
Definition: datapointset.h:269
Position.
Definition: commontypes.h:38
Coord coord(::Pos::SurvID survid) const
Definition: datapointset.h:117
const T * find(const ObjectSet< T > &os, const S &val)
Get const object in set.
Definition: objectset.h:187
const VolumeDataPack & vdp_
Definition: datapointset.h:312
const DataColDef & colDef(ColID i) const
Definition: datapointset.h:154
void dataChanged()
Definition: datapointset.h:210
short grp_
Definition: datapointset.h:131
Data point with group. Group 0 means &#39;inactive&#39;, it can never be selected.
Definition: datapointset.h:103
Pos()
Definition: datapointset.h:62
DataPointSet::ColID ColID
Definition: datapointset.h:266
int bivSetIdx(ColID idx) const
Definition: datapointset.h:207
DataRow()
Definition: datapointset.h:106
Positioning in a seismic survey: inline/crossline or lineNr/trcNr.
Definition: binid.h:28
Pos pos_
Definition: datapointset.h:129
void setSel(bool yn)
Definition: datapointset.h:123
const TypeSet< float > & data() const
Definition: datapointset.h:119
BinID binid_
Definition: datapointset.h:81
A Pos::IdxPairValueSet with BinIDs.
Definition: binidvalset.h:21
int nr_
unused if not 2D
Definition: datapointset.h:83
bool is2d_
Definition: datapointset.h:241
Column definition in tabular data sets.
Definition: datacoldef.h:27
float offsy_
Definition: datapointset.h:94
bool isInactive() const
Definition: datapointset.h:122
ValueSeries based on DataPointSet.
Definition: datapointset.h:262
2D point or vector class.
Definition: commontypes.h:58
DataRow(const Pos &p, unsigned short grp=1, bool issel=false)
Definition: datapointset.h:108
Set Position: position in IdxPairDataSet.
Definition: posidxpairdataset.h:75
virtual float value(od_int64 idx) const
Definition: datapointset.h:281
BinIDValueSet::SPos bvsPos(RowID rid) const
Definition: datapointset.h:221
TypeSet< float > data_
Definition: datapointset.h:130
int size() const
Definition: datapointset.h:159
Data set consisting of data vectors.
Definition: posvecdataset.h:29
Unit of Measure.
Definition: unitofmeasure.h:33
bool is2D() const
Definition: datapointset.h:144
const PosVecDataSet & dataSet() const
Definition: datapointset.h:189
ColID colid_
Definition: datapointset.h:287
bool isSel() const
Definition: datapointset.h:121
Pos(const BinID &bid, float _z)
Definition: datapointset.h:63

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