OpendTect  6.6
mathformula.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 2014
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "generalmod.h"
15 #include "ranges.h"
16 #include "typeset.h"
17 #include "threadlock.h"
18 
19 class UnitOfMeasure;
20 
21 namespace Math
22 {
23 
24 class SpecVarSet;
25 class Expression;
26 
27 
28 
66 {
67 public:
68 
69  Formula(bool inputsareseries=true,const char* txt=0);
70  Formula(bool inputsareseries,const SpecVarSet&,
71  const char* txt=0);
72  Formula(const Formula&);
74  Formula& operator =(const Formula&);
75 
76  // 0. Specify the formula text. Will construct a new Expression
77 
78  void setText(const char*);
79 
80  // 1. Things known after construction or setText()
81 
82  bool isOK() const { return expr_; }
83  bool isBad() const { return !expr_
84  && !text_.isEmpty(); }
85  const char* errMsg() const { return errmsg_; }
86 
87  const char* text() const { return text_; }
88  int nrInputs() const { return inps_.size(); }
89  const char* variableName( int iinp ) const
90  { return inps_[iinp].varname_; }
91  bool isConst( int iinp ) const
92  { return inps_[iinp].isConst();}
93  bool isSpec( int iinp ) const
94  { return inps_[iinp].isSpec(); }
95  int specIdx(int) const;
96  const TypeSet<int>& getShifts( int iinp ) const
97  { return inps_[iinp].shifts_; }
98  Interval<int> shiftRange( int iinp ) const
99  { return inps_[iinp].shftRg(); }
100  bool isRecursive() const { return maxRecShift() > 0; }
101  int maxRecShift() const { return recstartvals_.size(); }
102 
103  // 2. Things to set before calculation or store
104 
105  void setInputDef(int,const char*);
106  void setInputUnit(int,const UnitOfMeasure*);
107  void setOutputUnit( const UnitOfMeasure* uom )
108  { outputunit_ = uom; }
109  TypeSet<double>& recStartVals() { return recstartvals_; }
111 
112  // 3. Things you have set yourself or that were retrieved
113 
114  const UnitOfMeasure* outputUnit() const { return outputunit_; }
115  const char* inputDef( int iinp ) const
116  { return inps_[iinp].inpdef_; }
117  const UnitOfMeasure* inputUnit( int iinp ) const
118  { return inps_[iinp].unit_; }
119  double getConstVal(int) const;
121 
122  // 4. To get an output value
123 
124  int nrValues2Provide() const;
125  void startNewSeries() const; // resets recursive values
126  float getValue(const float*,bool internal_units=true) const;
127  double getValue(const double*,bool internal_units=true) const;
128 
129  // 5. store/retrieve to/from IOPar
130 
131  void fillPar(IOPar&) const;
132  void usePar(const IOPar&);
133 
134 
135  const Expression* expression() const { return expr_; };
136  const SpecVarSet& specVars() const { return *specvars_; }
137  bool inputsAreSeries() const { return inputsareseries_; }
138  int nrConsts() const;
139  const char* userDispText() const;
140  int nrExternalInputs() const;
141 
142  static const char* sKeyExpression() { return "Expression"; }
143  static const char* sKeyRecStartVals() { return "Recursion start"; }
144  static const char* sKeyFileType() { return "Math Formula"; }
145 
146 protected:
147 
148  class InpDef
149  {
150  public:
151 
152  enum Type { Var, Const, Spec };
153 
154  InpDef( const char* nm, Type t )
155  : varname_(nm), unit_(0), type_(t) {}
156  bool operator==( const InpDef& id ) const
157  { return varname_ == id.varname_; }
158 
159  BufferString varname_; // from Expression
160  Type type_; // from Expression
161  TypeSet<int> shifts_; // from Expression
162  BufferString inpdef_; // filled by class user
163  const UnitOfMeasure* unit_; // filled by class user
164 
166  bool isConst() const { return type_ == Const; }
167  bool isSpec() const { return type_ == Spec; }
168 
169  };
170 
176  const bool inputsareseries_;
177 
179 
180  // length: expr_->nrVariables()
184 
188 
189  int varNameIdx(const char* varnm) const;
190  void addShift(int,int,int&,TypeSet< TypeSet<int> >&);
191 
192 };
193 
194 } // namespace Math
195 
Math::Formula::isConst
bool isConst(int iinp) const
Definition: mathformula.h:91
Math::Formula::addShift
void addShift(int, int, int &, TypeSet< TypeSet< int > > &)
Math::SpecVarSet
Set of special variables for Math Formulae/Expressions.
Definition: mathspecvars.h:47
Math::Formula::~Formula
~Formula()
Math::Expression
Parsed Math expression.
Definition: mathexpression.h:32
Math::Formula::setOutputUnit
void setOutputUnit(const UnitOfMeasure *uom)
Definition: mathformula.h:107
Math::Formula::Formula
Formula(bool inputsareseries, const SpecVarSet &, const char *txt=0)
Math::Formula::nrExternalInputs
int nrExternalInputs() const
Math::Formula::varNameIdx
int varNameIdx(const char *varnm) const
Math::Formula::text
const char * text() const
Definition: mathformula.h:87
Math::Formula::inpidxs_
TypeSet< int > inpidxs_
Definition: mathformula.h:181
Math::Formula::InpDef::unit_
const UnitOfMeasure * unit_
Definition: mathformula.h:163
Math::Formula::inputsAreSeries
bool inputsAreSeries() const
Definition: mathformula.h:137
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
Math::Formula::setInputDef
void setInputDef(int, const char *)
Math::Formula::errMsg
const char * errMsg() const
Definition: mathformula.h:85
Math::Formula::recshifts_
TypeSet< int > recshifts_
Definition: mathformula.h:182
Math::Formula::InpDef::isSpec
bool isSpec() const
Definition: mathformula.h:167
Math::Formula::InpDef::type_
Type type_
Definition: mathformula.h:160
Math::Formula::errmsg_
BufferString errmsg_
Definition: mathformula.h:186
typeset.h
Math::Formula::maxRecShift
int maxRecShift() const
Definition: mathformula.h:101
Math::Formula::isOK
bool isOK() const
Definition: mathformula.h:82
Math::Formula::isRecursive
bool isRecursive() const
Definition: mathformula.h:100
Math::Formula::InpDef::Var
@ Var
Definition: mathformula.h:152
Math::Formula::text_
BufferString text_
Definition: mathformula.h:171
Math::Formula::formlock_
Threads::Lock formlock_
Definition: mathformula.h:187
Math::Formula::variableName
const char * variableName(int iinp) const
Definition: mathformula.h:89
Math::Formula::recstartvals_
TypeSet< double > recstartvals_
Definition: mathformula.h:174
Math::Formula::validxs_
TypeSet< int > validxs_
Definition: mathformula.h:183
Math::Formula::setInputUnit
void setInputUnit(int, const UnitOfMeasure *)
Math::Formula::recStartVals
TypeSet< double > & recStartVals()
Definition: mathformula.h:109
Math::Formula::shiftRange
Interval< int > shiftRange(int iinp) const
Definition: mathformula.h:98
Math::Formula::inps_
TypeSet< InpDef > inps_
Definition: mathformula.h:172
Math::Formula::setText
void setText(const char *)
Math::Formula::sKeyFileType
static const char * sKeyFileType()
Definition: mathformula.h:144
Math::Formula::sKeyExpression
static const char * sKeyExpression()
Definition: mathformula.h:142
Math::Formula::getValue
double getValue(const double *, bool internal_units=true) const
Math::Formula::nrInputs
int nrInputs() const
Definition: mathformula.h:88
Math::Formula::clearInputDefs
void clearInputDefs()
Math::Formula::usePar
void usePar(const IOPar &)
Math::Formula::startNewSeries
void startNewSeries() const
Math::Formula::getValue
float getValue(const float *, bool internal_units=true) const
Math::Formula::userDispText
const char * userDispText() const
Math::Formula::fillPar
void fillPar(IOPar &) const
Math::Formula::inputDef
const char * inputDef(int iinp) const
Definition: mathformula.h:115
Math::Formula::isBad
bool isBad() const
Definition: mathformula.h:83
Math::Formula::getConstVal
double getConstVal(int) const
if isConst returns toDouble(inputDef(i)), else Udf
Math::Formula::InpDef::isConst
bool isConst() const
Definition: mathformula.h:166
Math::Formula::InpDef::varname_
BufferString varname_
Definition: mathformula.h:159
Math::Formula::InpDef::operator==
bool operator==(const InpDef &id) const
Definition: mathformula.h:156
Math::Formula::InpDef::InpDef
InpDef(const char *nm, Type t)
Definition: mathformula.h:154
Math::Formula::nrValues2Provide
int nrValues2Provide() const
BufferString
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size.
Definition: bufstring.h:40
Math::Formula
Math formula: (expression, inputs, units, calculation, storage).
Definition: mathformula.h:66
UnitOfMeasure
Unit of Measure.
Definition: unitofmeasure.h:35
Math::Formula::expr_
Expression * expr_
Definition: mathformula.h:178
Math::Formula::InpDef::shftRg
Interval< int > shftRg() const
Math::Formula::nrConsts
int nrConsts() const
Math::Formula::outputunit_
const UnitOfMeasure * outputunit_
Definition: mathformula.h:173
Math::Formula::specvars_
const SpecVarSet * specvars_
Definition: mathformula.h:175
Math::Formula::InpDef::inpdef_
BufferString inpdef_
Definition: mathformula.h:162
Math::Formula::specIdx
int specIdx(int) const
Math::Formula::inputsareseries_
const bool inputsareseries_
Definition: mathformula.h:176
Math::Formula::sKeyRecStartVals
static const char * sKeyRecStartVals()
Definition: mathformula.h:143
MPE::errmsg_
BufferString errmsg_
Definition: horizontracker.h:118
threadlock.h
Math::Formula::expression
const Expression * expression() const
Definition: mathformula.h:135
Math::Formula::specVars
const SpecVarSet & specVars() const
Definition: mathformula.h:136
Math::Formula::Formula
Formula(const Formula &)
Math::Formula::outputUnit
const UnitOfMeasure * outputUnit() const
Definition: mathformula.h:114
Math::Formula::inputUnit
const UnitOfMeasure * inputUnit(int iinp) const
Definition: mathformula.h:117
Math::Formula::Formula
Formula(bool inputsareseries=true, const char *txt=0)
ranges.h
Math::Formula::InpDef::shifts_
TypeSet< int > shifts_
Definition: mathformula.h:161
Interval< int >
Math::Formula::InpDef
Definition: mathformula.h:149
Math::Formula::prevvals_
TypeSet< double > prevvals_
Definition: mathformula.h:185
Threads::Lock
A lock of a type that (hopefully) suits your needs. To use it, you need the Locker class.
Definition: threadlock.h:53
Math::Formula::InpDef::Type
Type
Definition: mathformula.h:152
IOPar
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:55
Math::Formula::isSpec
bool isSpec(int iinp) const
Definition: mathformula.h:93
Math
Definition: math2.h:29
Math::Formula::getShifts
const TypeSet< int > & getShifts(int iinp) const
Definition: mathformula.h:96
TypeSet< int >

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