OpendTect  6.3
volprocstep.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: K. Tingdahl
8  Date: October 2006
9 ________________________________________________________________________
10 
11 
12 -*/
13 
14 #include "volumeprocessingmod.h"
15 #include "factory.h"
16 #include "trckeysampling.h"
17 #include "uistrings.h"
18 class Task;
19 class VelocityDesc;
20 class ProgressMeter;
21 class TrcKeyZSampling;
23 namespace PosInfo { class CubeData; }
24 
25 
26 namespace VolProc
27 {
28 
29 class Chain;
30 
31 
39 mExpClass(VolumeProcessing) Step
40 {
41 public:
42 
45  typedef int ID;
46  typedef int InputSlotID;
47  typedef int OutputSlotID;
48  static ID cUndefID() { return mUdf(int); }
49  static int cUndefSlotID() { return mUdf(int); }
50 
51  mDefineFactoryInClass( Step, factory );
52  virtual ~Step();
53  virtual void releaseData();
54 
55  ID getID() const { return id_; }
56  Chain& getChain();
57  const Chain& getChain() const;
58  virtual const char* userName() const;
59  virtual void setUserName(const char* nm);
60 
61  void resetInput();
62  virtual int getNrInputs() const;
63  bool validInputSlotID(InputSlotID) const;
64  virtual InputSlotID getInputSlotID(int idx) const;
65  virtual void getInputSlotName(InputSlotID,
66  BufferString&) const;
67 
68  virtual int getNrOutputs() const { return 1; }
69  bool validOutputSlotID(OutputSlotID) const;
70  virtual OutputSlotID getOutputSlotID(int idx) const;
71 
72  virtual TrcKeySampling getInputHRg(const TrcKeySampling&) const;
75  virtual StepInterval<int> getInputZRg(const StepInterval<int>&) const;
78  const PosInfo::CubeData* getPosSamplingOfNonNullTraces(InputSlotID,
79  int comp=0);
80 
81  virtual void setInput(InputSlotID,
82  const RegularSeisDataPack*);
83  CVolRef getInput(InputSlotID) const;
84  virtual void setOutput(OutputSlotID,RegularSeisDataPack*,
85  const TrcKeySampling&,
86  const StepInterval<int>&);
87  CVolRef getOutput(OutputSlotID) const;
88  VolRef getOutput(OutputSlotID);
89 
90  int getOutputIdx(OutputSlotID) const;
91  void enableOutput(OutputSlotID);
92 
93  CVolRef getOutput() const { return output_; }
94  VolRef getOutput() { return output_; }
95 
96  static od_int64 getBaseMemoryUsage(const TrcKeySampling&,
97  const StepInterval<int>&);
98  od_int64 getExtraMemoryUsage(const TrcKeySampling&,
99  const StepInterval<int>&,
100  const TypeSet<OutputSlotID>&
101  =TypeSet<OutputSlotID>()) const;
105  virtual const VelocityDesc* getVelDesc() const { return 0; }
106 
107  virtual Task* createTask();
108  virtual Task* createTaskWithProgMeter(ProgressMeter*);
110  virtual uiString errMsg() const
111  { return uiString::emptyString(); }
112 
113  virtual void fillPar(IOPar&) const;
114  virtual bool usePar(const IOPar&);
115 
116  // Processing properties
117  virtual bool needsFullVolume() const = 0;
118  virtual bool canInputAndOutputBeSame() const = 0;
119  virtual bool areSamplesIndependent() const = 0;
120  virtual bool canHandle2D() const { return false;}
121  virtual bool needsInput() const { return true; }
122  virtual bool prefersBinIDWise() const { return false;}
123  virtual bool needReportProgress() { return false;}
124  virtual bool isInputPrevStep() const
125  { return needsInput(); }
126 protected:
127 
128  Step();
129 
130  // Only called if prefersBinIDWise() returns true
131  virtual bool prepareComp(int nrthreads) { return true;}
132  virtual bool computeBinID(const BinID&,int threadid)
133  { return false;}
134 
135  // The memory needed on top of the 'base' memory usage. Can be 0.
136  virtual od_int64 extraMemoryUsage(OutputSlotID,
137  const TrcKeySampling&,
138  const StepInterval<int>&) const
139  = 0;
140 
141  ID id_;
150 
151 private:
152 
154 
155  void setChain(Chain&);
156 
157  friend class Chain;
158  friend class ChainExecutor;
159  friend class BinIDWiseTask;
160 
161 };
162 
163 
164 } // namespace VolProc
uiString errmsg_
Definition: volprocstep.h:146
#define mExpClass(module)
Definition: commondefs.h:157
RefMan< RegularSeisDataPack > VolRef
Definition: volprocstep.h:44
is an interface where processes can report their progress.
Definition: progressmeter.h:19
virtual uiString errMsg() const
Definition: volprocstep.h:110
Definition: veldesc.h:36
VolRef getOutput()
Definition: volprocstep.h:94
void usePar(const IOPar &iop, ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:200
#define od_int64
Definition: plftypes.h:34
TypeSet< InputSlotID > inputslotids_
Definition: volprocstep.h:145
virtual bool prepareComp(int nrthreads)
Definition: volprocstep.h:131
static const uiString & emptyString()
Definition: uistring.h:107
VolumeDataPack for 2D and 3D seismic data.
Definition: seisdatapack.h:42
Definition: uistring.h:88
int InputSlotID
Definition: volprocstep.h:46
ConstRefMan< RegularSeisDataPack > CVolRef
Definition: volprocstep.h:43
static int cUndefSlotID()
Definition: volprocstep.h:49
StepInterval< int > zrg_
Definition: volprocstep.h:148
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:53
A chain of Steps that can be applied to a volume of scalars.
Definition: volprocchain.h:27
Horizontal sampling (inline and crossline range and steps).
Definition: trckeysampling.h:25
ObjectSet< const RegularSeisDataPack > inputs_
Definition: volprocstep.h:144
virtual bool computeBinID(const BinID &, int threadid)
Definition: volprocstep.h:132
Adapter for a VolProc chain to external attribute calculation.
Definition: velocitygridder.h:29
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:270
Hor+Vert sampling in 3D surveys.
Definition: trckeyzsampling.h:32
int OutputSlotID
Definition: volprocstep.h:47
int ID
Definition: volprocstep.h:45
static ID cUndefID()
Definition: volprocstep.h:48
virtual bool needsInput() const
Definition: volprocstep.h:121
CVolRef getOutput() const
Definition: volprocstep.h:93
#define mDefineFactoryInClass(T, funcname)
Definition: factory.h:424
void fillPar(IOPar &iop, const ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:187
virtual int getNrOutputs() const
Definition: volprocstep.h:68
virtual bool isInputPrevStep() const
Definition: volprocstep.h:124
executes the work for a single VolProc::Chain.
Definition: volprocchainexec.h:24
TypeSet< OutputSlotID > outputslotids_
Definition: volprocstep.h:149
An algorithm/calculation/transformation that takes one scalar volume as input, processes it...
Definition: volprocstep.h:39
Position info, often segmented.
Definition: posinfo.h:38
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
Positioning in a seismic survey: inline/crossline or lineNr/trcNr.
Definition: binid.h:28
virtual bool needReportProgress()
Definition: volprocstep.h:123
virtual bool prefersBinIDWise() const
Definition: volprocstep.h:122
virtual bool canHandle2D() const
Definition: volprocstep.h:120
virtual const VelocityDesc * getVelDesc() const
Definition: volprocstep.h:105
RefMan< RegularSeisDataPack > output_
Definition: volprocstep.h:153
FixedString Chain()
Definition: keystrs.h:43
TrcKeySampling tks_
Definition: volprocstep.h:147
BufferString username_
Definition: volprocstep.h:143
Position info for an entire 3D cube. The LineData&#39;s are not sorted.
Definition: posinfo.h:96
Generalization of something (e.g. a computation) that needs to be done in multiple steps...
Definition: task.h:26
ID getID() const
Definition: volprocstep.h:55
Chain * chain_
Definition: volprocstep.h:142
ID id_
Definition: volprocstep.h:141

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