OpendTect  6.3
faulttrace.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: Nanne Hemstra
8  Date: October 2008
9 ________________________________________________________________________
10 
11 -*/
12 
13 #include "earthmodelmod.h"
14 #include "executor.h"
15 #include "paralleltask.h"
16 #include "trckeysampling.h"
17 #include "dbkey.h"
18 #include "positionlist.h"
19 #include "sets.h"
20 #include "posinfo2dsurv.h"
21 #include "trigonometry.h"
22 #include "threadlock.h"
23 
24 namespace EM { class Fault; class Horizon; }
25 namespace Geometry { class ExplFaultStickSurface; }
26 namespace PosInfo { class Line2DData; }
27 class BinIDValueSet;
28 
33 mExpClass(EarthModel) FaultTrace : public Coord3List
35 public:
36 
37  int nextID(int) const;
38  int add(const Coord3&);
39  int add(const Coord3&,float trcnr);
40  Coord3 get(int) const;
41  const TypeSet<int>& getIndices() const;
42  float getTrcNr(int) const;
43  void set(int,const Coord3&);
44  void set(int,const Coord3&,float);
45  void setIndices(const TypeSet<int>&);
46  void remove(int);
47  void remove(const TypeSet<int>&) {}
48  bool isDefined(int) const;
49  int size() const { return coords_.size(); }
50  FaultTrace* clone() const;
51 
52  bool isInl() const { return isinl_; }
53  bool isEditedOnCrl() const { return editedoncrl_; }
54  int lineNr() const { return nr_; }
55  const Interval<int>& trcRange() const { return trcrange_; }
56  const Interval<float>& zRange() const { return zrange_; }
57  void setIsInl(bool yn) { isinl_ = yn; }
58  void setEditedOnCrl(bool yn) { editedoncrl_ = yn; }
59  void setLineNr(int nr) { nr_ = nr; }
60 
61  bool isCrossing(const BinID&,float,const BinID&,float) const;
62  bool getIntersection(const BinID&,float,const BinID&,float,
63  BinID&,float&,
64  const StepInterval<int>* trcrg=0,
65  bool snappositive=true) const;
66  bool getHorCrossings(const BinIDValueSet&,
67  Interval<float>& topzvals,
68  Interval<float>& botzvals) const;
69  bool getHorIntersection(const EM::Horizon&,BinID&) const;
70 
71  bool getCoordsBetween(int trc0,float z0,int trc1,float z1,
72  TypeSet<Coord>& coords) const;
73  bool getIntersectionZs(int trcnr,TypeSet<float>& zs) const;
74  bool getIntersectionTraces(float zval,
75  TypeSet<int>& trcs) const;
76  bool getFaultTraceIntersection(const FaultTrace&,
77  int& trace,float& zval) const;
78 
79  bool getHorizonIntersectionInfo(const EM::Horizon& hor,
80  Pos::GeomID geomid,
81  TypeSet<BinID>& pos1bids,TypeSet<float>& pos1zs,
82  TypeSet<BinID>& pos2bids,TypeSet<float>& pos2zs,
83  TypeSet<Coord>& intersections,
84  bool findfirstonly=true,
85  bool allowextention=false) const;
86  bool getImage(const BinID& srcbid,float srcz,
87  const Interval<float>& tophorzvals,
88  const Interval<float>& bothorzvals,
89  const StepInterval<int>& trcrg,BinID& imgbid,
90  float& imgz,bool forward) const;
91 
92  float getZValFor(const BinID&) const;
93  bool isOnPosSide(const BinID&,float) const;
94  void addValue(int id,const Coord3&) {}
95  void computeRange();
96  bool includes(const BinID&) const;
97  bool isOK() const;
98  bool isOnFault(const BinID&,float z,float threshold) const;
99  // threshold dist in measured in BinID units
100 
101  enum Act { AllowCrossing, ForbidCrossing,
102  AllowMinTraceToFault, AllowMaxTraceToFault,
103  AllowMinInlToFault, AllowMaxInlToFault,
104  AllowMinCrlToFault, AllowMaxCrlToFault };
105  static void getActNames(BufferStringSet&,bool onlyfor2d);
106  static const char* sKeyFaultAct() { return "Fault Act"; }
107 
108 protected:
109 
111 
112  void computeTraceSegments();
113  Coord getIntersection(const BinID&,float,
114  const BinID&,float) const;
115  bool handleUntrimmed(const BinIDValueSet&,Interval<float>&,
116  const BinID&,const BinID&,bool) const;
117 
118  bool isinl_;
120  int nr_;
123  TypeSet<float> trcnrs_; // For 2D only;
127 
129 };
130 
131 
137 { mODTextTranslationClass(FaultTrcHolder);
138 public:
139  FaultTrcHolder();
140  ~FaultTrcHolder();
141 
142  const FaultTrace* getTrc(int linenr,bool isinl) const;
143  int indexOf(int linenr,bool isinl) const;
144 
145  bool isEditedOnCrl() const;
146 
148  /*For 3D: one for each inline followed by
149  one for each crossline.
150  For 2D: One for each stick.*/
151 
153 };
154 
155 
162 public:
165 
166  uiString message() const;
167 
168 protected:
169 
170  virtual bool extractFaultTrace(int) = 0;
171  virtual od_int64 nrIterations() const;
172  virtual bool doPrepare(int);
173  virtual bool doWork(od_int64,od_int64,int);
174  virtual bool doFinish(bool) { return true; }
175 
180 };
181 
182 
185 public:
188 
189 protected:
190 
191  bool extractFaultTrace(int);
192 
193  virtual bool doPrepare(int);
194 
196 
197 };
198 
199 
202 public:
204  Pos::GeomID);
206 
207 protected:
208 
209  bool extractFaultTrace(int);
210  virtual bool doPrepare(int);
211  virtual bool doFinish(bool);
212 
214 };
215 
216 
222 { mODTextTranslationClass(FaultTrcDataProvider);
223 public:
224  FaultTrcDataProvider();
225  FaultTrcDataProvider(Pos::GeomID);
226  ~FaultTrcDataProvider();
227 
228  bool init(const DBKeySet&,const TrcKeySampling&,
229  TaskRunner* =0);
230 
231  bool is2D() const { return is2d_; }
232  int nrFaults() const;
233  TrcKeySampling range(int) const;
234  int nrSticks(int fltidx) const;
235  bool isEditedOnCrl(int fltidx) const;
236 
237  bool hasFaults(const BinID&) const;
238  const FaultTrace* getFaultTrace(int fltidx,int trcnr,bool isinl) const;
239  const FaultTrace* getFaultTrace2D(int fltidx,int stickidx) const;
240  bool isCrossingFault(const BinID& b1,float z1,
241  const BinID& b2,float z2) const;
242  bool getFaultZVals(const BinID&,TypeSet<float>&) const;
243  bool isOnFault(const BinID&,float z,float threshold) const;
244 
245  void clear();
246  bool isEmpty() const;
247  uiString errMsg() const;
248 
249 protected:
250 
251  bool calcFaultBBox(const EM::Fault&,TrcKeySampling&) const;
252  bool get2DTraces(const DBKeySet&,TaskRunner*);
253 
255 
258  bool is2d_;
259 };
#define mExpClass(module)
Definition: commondefs.h:157
od_int64 totalnr_
Definition: faulttrace.h:179
bool isinl_
Definition: faulttrace.h:118
Interface for a list of Coord3 with automatically maintained IDs.
Definition: positionlist.h:70
A lock of a type that (hopefully) suits your needs. To use it, you need the Locker class...
Definition: threadlock.h:51
Fault Surface base class.
Definition: emfault.h:82
Threads::Lock lock_
Definition: faulttrace.h:128
TrcKeySampling hs_
Definition: faulttrace.h:152
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
const Interval< int > & trcRange() const
Definition: faulttrace.h:55
Geometry::ExplFaultStickSurface * fltsurf_
Definition: faulttrace.h:195
bool is2d_
Definition: faulttrace.h:258
#define od_int64
Definition: plftypes.h:34
Definition: faulttrace.h:103
bool isEditedOnCrl() const
Definition: faulttrace.h:53
bool init()
TypeSet< Line2 > tracesegs_
Definition: faulttrace.h:126
Interval< float > zrange_
Definition: faulttrace.h:125
void clear(std::ios &)
Definition: dbkey.h:98
bool includes(const IdxPair &ip) const
Definition: posidxpairvalset.h:99
Pos::GeomID geomid_
Definition: faulttrace.h:213
void setEditedOnCrl(bool yn)
Definition: faulttrace.h:58
int nr_
Definition: faulttrace.h:120
int lineNr() const
Definition: faulttrace.h:54
uiString errmsg_
Definition: faulttrace.h:257
Definition: faulttrace.h:200
static const char * sKeyFaultAct()
Definition: faulttrace.h:106
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
Definition: faulttrace.h:104
FaultTrace holder.
Definition: faulttrace.h:136
Generalization of a task that can be run in parallel.
Definition: paralleltask.h:64
SPos add(const IdxPair &, const float *vs=0)
Either pass sufficient data or pass null.
Definition: faulttrace.h:102
TypeSet< Coord3 > coords_
Definition: faulttrace.h:121
void message(const char *)
default: to stderr
3D point or vector
Definition: commontypes.h:57
Definition: faulttrace.h:101
void addValue(int id, const Coord3 &)
Adds value to existing value at id.
Definition: faulttrace.h:94
Class that can execute a task.
Definition: task.h:193
const Interval< float > & zRange() const
Definition: faulttrace.h:56
Horizontal sampling (inline and crossline range and steps).
Definition: trckeysampling.h:25
FaultTrace extractor.
Definition: faulttrace.h:160
bool isInl() const
Definition: faulttrace.h:52
ObjectSet< FaultTrace > traces_
Definition: faulttrace.h:147
FixedString Horizon()
Definition: keystrs.h:70
void setLineNr(int nr)
Definition: faulttrace.h:59
int size() const
Definition: faulttrace.h:49
void setIsInl(bool yn)
Definition: faulttrace.h:57
TypeSet< float > trcnrs_
Definition: faulttrace.h:123
Index_Type GeomID
Definition: commontypes.h:48
FixedString Fault()
Definition: keystrs.h:64
Position info, often segmented.
Definition: posinfo.h:38
FaultTrcHolder & holder_
Definition: faulttrace.h:177
bool isEmpty(const char *)
Interval< int > trcrange_
Definition: faulttrace.h:124
Definition: faulttrace.h:183
Positioning in a seismic survey: inline/crossline or lineNr/trcNr.
Definition: binid.h:28
bool editedoncrl_
Definition: faulttrace.h:178
Definition: explfaultsticksurface.h:35
FaultTrace data provider.
Definition: faulttrace.h:221
Earth Model objects like horizons, faults, fault-sticks and bodies.
Definition: embody.h:23
A Pos::IdxPairValueSet with BinIDs.
Definition: binidvalset.h:21
bool editedoncrl_
Definition: faulttrace.h:119
const char * errMsg() const
Definition: horizontracker.h:59
TypeSet< int > coordindices_
Definition: faulttrace.h:122
Act
Definition: faulttrace.h:101
2D point or vector class.
Definition: commontypes.h:58
~FaultTrace()
Definition: faulttrace.h:110
const EM::Fault & fault_
Definition: faulttrace.h:176
ObjectSet< FaultTrcHolder > holders_
Definition: faulttrace.h:254
Definition: arraytesselator.h:19
bool is2D() const
Definition: faulttrace.h:231
Horizon Surface.
Definition: emhorizon.h:46
Subclass of Coord3List that represents a fault trace.
Definition: faulttrace.h:33
Pos::GeomID geomid_
Definition: faulttrace.h:256
virtual bool doFinish(bool)
Definition: faulttrace.h:174

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