All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
te::rp::ArithmeticOperations Class Reference

Performs arithmetic operation over raster data. More...

#include <ArithmeticOperations.h>

Inheritance diagram for te::rp::ArithmeticOperations:
te::rp::Algorithm

Classes

class  ExecStackElement
 Execution stack element. More...
 
class  InputParameters
 ArithmeticOperations input parameters. More...
 
class  OutputParameters
 ArithmeticOperations output parameters. More...
 

Public Member Functions

 ArithmeticOperations ()
 
bool execute (AlgorithmOutputParameters &outputParams) throw ( te::rp::Exception )
 Executes the algorithm using the supplied parameters. More...
 
bool initialize (const AlgorithmInputParameters &inputParams) throw ( te::rp::Exception )
 Initialize the algorithm instance making it ready for execution. More...
 
bool isInitialized () const
 Returns true if the algorithm instance is initialized and ready for execution. More...
 
void reset () throw ( te::rp::Exception )
 Clear all internal allocated objects and reset the algorithm to its initial state. More...
 
 ~ArithmeticOperations ()
 

Protected Types

typedef void(ArithmeticOperations::* BinOpFuncPtrT )(const double &inputValue1, const double &inputValue2, double &outputValue) const
 Type definition for a operation function pointer. More...
 
typedef std::stack
< ExecStackElement
ExecStackT
 Execution stack type definition. More...
 

Protected Member Functions

void additionBinOp (const double &inputValue1, const double &inputValue2, double &outputValue) const
 Addition binary operator function. More...
 
bool allocResultRaster (const te::rst::Grid &grid, std::auto_ptr< te::rst::Raster > &rasterPtr) const
 Allocate a new RAM memory raster. More...
 
void divisionBinOp (const double &inputValue1, const double &inputValue2, double &outputValue) const
 Division binary operator function. More...
 
bool execBinaryOperator (const std::string &token, ExecStackT &execStack, bool generateOutput) const
 Execute the given binary operator using the current given execution stack. More...
 
bool execBinaryOperatorRasterXRaster (const te::rst::Raster &inRaster1, const unsigned int band1, const te::rst::Raster &inRaster2, const unsigned int band2, const BinOpFuncPtrT binOptFunctPtr, std::auto_ptr< te::rst::Raster > &outRasterPtr) const
 Execute the given binary operator using the given input rasters. More...
 
bool execBinaryOperatorRasterXReal (const te::rst::Raster &inRaster, const unsigned int bandIdx, const double value, const BinOpFuncPtrT binOptFunctPtr, std::auto_ptr< te::rst::Raster > &outRasterPtr, const bool realNumberIsRigthtTerm) const
 Execute the given binary operator using the given input raster and a real number. More...
 
bool execUnaryOperator (const std::string &token, ExecStackT &execStack, bool generateOutput) const
 Execute the given unary operator using the current given execution stack. More...
 
bool executeString (const std::string &aStr, const std::vector< te::rst::Raster * > &inRasters, std::auto_ptr< te::rst::Raster > &outRaster, bool generateOutput, te::common::TaskProgress *const progressPtr) const
 Execute the automata parsing the given input string. More...
 
void getTokensStrs (const std::string &inputStr, std::vector< std::string > &outTokens) const
 Split the input string into a vector of token strings. More...
 
void inFix2PostFix (const std::vector< std::string > &input, std::vector< std::string > &output) const
 Convert the input tokens vector from the infix notation to postfix notation. More...
 
bool isBinaryOperator (const std::string &inputToken) const
 Returns true if the given token is a binary operator. More...
 
bool isOperator (const std::string &inputToken) const
 Returns true if the given token is an operator. More...
 
bool isRasterBandToken (const std::string &token, unsigned int &rasterIdx, unsigned int &bandIdx) const
 Returns true if the given token is a raster data token. More...
 
bool isRealNumberToken (const std::string &token, double &realValue) const
 Returns true if the given token is a real number. More...
 
bool isUnaryOperator (const std::string &inputToken) const
 Returns true if the given token is a unary operator. More...
 
void multiplicationBinOp (const double &inputValue1, const double &inputValue2, double &outputValue) const
 Multiplication binary operator function. More...
 
bool op1HasGreaterOrEqualPrecedence (const std::string &operator1, const std::string &operator2) const
 Returns true if operator1 has greater of equal precedence over operator2. More...
 
void printTokens (const std::vector< std::string > &input) const
 Print tokens to stout. More...
 
void subtractionBinOp (const double &inputValue1, const double &inputValue2, double &outputValue) const
 Subtraction binary operator function. More...
 

Protected Attributes

ArithmeticOperations::InputParameters m_inputParameters
 Input execution parameters. More...
 
bool m_isInitialized
 Tells if this instance is initialized. More...
 

Detailed Description

Performs arithmetic operation over raster data.

The expression (arithmetic stringIt) must be formed by a combination of the following elements, separated by spaces:

Operators: +, -, *, /

Real Numbers (negative numbers must follow the form "-1.0")

Raster bands: R0:1, R0:1, R1:0, .... (R0:1 is a reference to the first raster - with index 0 - from feeder, second band - with index 1).

Note
Reference: TerraLib 4 - Image Processing Module

Definition at line 66 of file ArithmeticOperations.h.

Member Typedef Documentation

typedef void(ArithmeticOperations::* te::rp::ArithmeticOperations::BinOpFuncPtrT)(const double &inputValue1, const double &inputValue2, double &outputValue) const
protected

Type definition for a operation function pointer.

Definition at line 203 of file ArithmeticOperations.h.

Execution stack type definition.

Definition at line 198 of file ArithmeticOperations.h.

Constructor & Destructor Documentation

te::rp::ArithmeticOperations::ArithmeticOperations ( )

Definition at line 128 of file ArithmeticOperations.cpp.

References reset().

te::rp::ArithmeticOperations::~ArithmeticOperations ( )

Definition at line 133 of file ArithmeticOperations.cpp.

Member Function Documentation

void te::rp::ArithmeticOperations::additionBinOp ( const double &  inputValue1,
const double &  inputValue2,
double &  outputValue 
) const
inlineprotected

Addition binary operator function.

Definition at line 213 of file ArithmeticOperations.h.

Referenced by execBinaryOperator().

bool te::rp::ArithmeticOperations::allocResultRaster ( const te::rst::Grid grid,
std::auto_ptr< te::rst::Raster > &  rasterPtr 
) const
protected

Allocate a new RAM memory raster.

Parameters
gridThe output raster grid.
rasterPtrThe output raster pointer.
Returns
Returns true if OK, false on errors.

Definition at line 892 of file ArithmeticOperations.cpp.

References te::dt::DOUBLE_TYPE, te::rst::Grid::getNumberOfColumns(), and te::rst::Grid::getNumberOfRows().

Referenced by execBinaryOperatorRasterXRaster(), and execBinaryOperatorRasterXReal().

void te::rp::ArithmeticOperations::divisionBinOp ( const double &  inputValue1,
const double &  inputValue2,
double &  outputValue 
) const
inlineprotected

Division binary operator function.

Definition at line 231 of file ArithmeticOperations.h.

Referenced by execBinaryOperator().

bool te::rp::ArithmeticOperations::execBinaryOperator ( const std::string &  token,
ExecStackT execStack,
bool  generateOutput 
) const
protected
bool te::rp::ArithmeticOperations::execBinaryOperatorRasterXRaster ( const te::rst::Raster inRaster1,
const unsigned int  band1,
const te::rst::Raster inRaster2,
const unsigned int  band2,
const BinOpFuncPtrT  binOptFunctPtr,
std::auto_ptr< te::rst::Raster > &  outRasterPtr 
) const
protected

Execute the given binary operator using the given input rasters.

Parameters
inRaster1Input raster 1.
band1Input raster 1 band.
inRaster2Input raster 2.
band2Input raster 2 band.
binOptFunctPtrThe binary operation function pointer.
outRasterPtrThe generated output raster.
Returns
true if OK, false on errors..

Definition at line 655 of file ArithmeticOperations.cpp.

References allocResultRaster(), te::rst::Grid::geoToGrid(), te::rst::Raster::getBand(), te::rst::Grid::getExtent(), te::rst::Raster::getGrid(), te::rst::Raster::getNumberOfColumns(), te::rst::Raster::getNumberOfRows(), te::rst::Band::getProperty(), te::rst::Raster::getSRID(), te::rst::Grid::getSRID(), te::rst::Band::getValue(), te::rst::Grid::gridToGeo(), m_inputParameters, te::rp::ArithmeticOperations::InputParameters::m_interpMethod, te::rst::BandProperty::m_noDataValue, te::rst::Band::setValue(), and te::gm::Envelope::transform().

Referenced by execBinaryOperator().

bool te::rp::ArithmeticOperations::execBinaryOperatorRasterXReal ( const te::rst::Raster inRaster,
const unsigned int  bandIdx,
const double  value,
const BinOpFuncPtrT  binOptFunctPtr,
std::auto_ptr< te::rst::Raster > &  outRasterPtr,
const bool  realNumberIsRigthtTerm 
) const
protected

Execute the given binary operator using the given input raster and a real number.

Parameters
inRasterInput raster.
bandIdxInput raster band.
binOptFunctPtrThe binary operation function pointer.
outRasterPtrThe generated output raster.
realNumberIsRigthtTermtrue if the real number is the right term.
Returns
true if OK, false on errors..

Definition at line 792 of file ArithmeticOperations.cpp.

References allocResultRaster(), te::rst::Raster::getBand(), te::rst::Raster::getGrid(), te::rst::Raster::getNumberOfColumns(), te::rst::Raster::getNumberOfRows(), te::rst::Band::getProperty(), te::rst::Band::getValue(), te::rst::BandProperty::m_noDataValue, and te::rst::Band::setValue().

Referenced by execBinaryOperator().

bool te::rp::ArithmeticOperations::execUnaryOperator ( const std::string &  token,
ExecStackT execStack,
bool  generateOutput 
) const
protected

Execute the given unary operator using the current given execution stack.

Parameters
tokenOperator token.
execStackExecution stack.
generateOutputif true the execution will generate valid output data, if false only dummy stack elements will be generated.
Returns
true if OK, false on errors..

Definition at line 859 of file ArithmeticOperations.cpp.

Referenced by executeString().

bool te::rp::ArithmeticOperations::executeString ( const std::string &  aStr,
const std::vector< te::rst::Raster * > &  inRasters,
std::auto_ptr< te::rst::Raster > &  outRaster,
bool  generateOutput,
te::common::TaskProgress *const  progressPtr 
) const
protected

Execute the automata parsing the given input string.

Parameters
aStrThe input arithmetic expression string.
inRastersInput rasters pointers.
outRasterOutput raster pointer (pre-initiated).
generateOutputIf true, the output raster data will be generated, if false only the automata execution will be performed..
progressPtrA pointer to a progress interface to be pulsed on each operation or a null pointer.

Definition at line 335 of file ArithmeticOperations.cpp.

References execBinaryOperator(), execUnaryOperator(), getTokensStrs(), inFix2PostFix(), te::common::TaskProgress::isActive(), isBinaryOperator(), isRasterBandToken(), isRealNumberToken(), isUnaryOperator(), te::rp::ArithmeticOperations::ExecStackElement::m_isRaster, te::rp::ArithmeticOperations::ExecStackElement::m_isRealNumber, te::rp::ArithmeticOperations::ExecStackElement::m_rasterBand, te::rp::ArithmeticOperations::ExecStackElement::m_rasterNPtr, te::rp::ArithmeticOperations::ExecStackElement::m_realNumberValue, te::common::TaskProgress::pulse(), TERP_LOG_AND_RETURN_FALSE, and TERP_TRUE_OR_RETURN_FALSE.

Referenced by execute(), and initialize().

void te::rp::ArithmeticOperations::getTokensStrs ( const std::string &  inputStr,
std::vector< std::string > &  outTokens 
) const
protected

Split the input string into a vector of token strings.

Parameters
inputStrThe input string.
outTokensThe generated output tokens vector.

Definition at line 911 of file ArithmeticOperations.cpp.

References isOperator().

Referenced by executeString().

void te::rp::ArithmeticOperations::inFix2PostFix ( const std::vector< std::string > &  input,
std::vector< std::string > &  output 
) const
protected

Convert the input tokens vector from the infix notation to postfix notation.

Parameters
inputThe input tokens vector.
outputThe output tokens vector.

Definition at line 425 of file ArithmeticOperations.cpp.

References isOperator(), and op1HasGreaterOrEqualPrecedence().

Referenced by executeString().

bool te::rp::ArithmeticOperations::initialize ( const AlgorithmInputParameters inputParams)
throw (te::rp::Exception
)
virtual

Initialize the algorithm instance making it ready for execution.

Parameters
inputParamsInput parameters.
Returns
true if OK, false on errors.
Note
A return error string can be obtained via te::rp::Module::getLastLogStr()

Implements te::rp::Algorithm.

Definition at line 292 of file ArithmeticOperations.cpp.

References executeString(), te::rp::ArithmeticOperations::InputParameters::m_arithmeticString, m_inputParameters, te::rp::ArithmeticOperations::InputParameters::m_inputRasters, m_isInitialized, te::common::RAccess, reset(), TERP_TRUE_OR_RETURN_FALSE, and TERP_TRUE_OR_THROW.

Referenced by te::qt::widgets::ArithmeticOpWizard::execute().

bool te::rp::ArithmeticOperations::isBinaryOperator ( const std::string &  inputToken) const
protected

Returns true if the given token is a binary operator.

Parameters
inputTokenInput token.
Returns
Returns true if the given token is a binary operator.

Definition at line 505 of file ArithmeticOperations.cpp.

Referenced by executeString(), and isOperator().

bool te::rp::ArithmeticOperations::isInitialized ( ) const
virtual

Returns true if the algorithm instance is initialized and ready for execution.

Returns
true if the algorithm instance is initialized and ready for execution.

Implements te::rp::Algorithm.

Definition at line 330 of file ArithmeticOperations.cpp.

References m_isInitialized.

bool te::rp::ArithmeticOperations::isOperator ( const std::string &  inputToken) const
protected

Returns true if the given token is an operator.

Parameters
inputTokenInput token.
Returns
Returns true if the given token is an operator.

Definition at line 499 of file ArithmeticOperations.cpp.

References isBinaryOperator(), and isUnaryOperator().

Referenced by execute(), getTokensStrs(), and inFix2PostFix().

bool te::rp::ArithmeticOperations::isRasterBandToken ( const std::string &  token,
unsigned int &  rasterIdx,
unsigned int &  bandIdx 
) const
protected

Returns true if the given token is a raster data token.

Parameters
tokenInput token.
rasterIdxThe output converted raster index value.
bandIdxThe output converted band index value.
Returns
Returns true if the given token is a raster data token.

Definition at line 535 of file ArithmeticOperations.cpp.

Referenced by executeString().

bool te::rp::ArithmeticOperations::isRealNumberToken ( const std::string &  token,
double &  realValue 
) const
protected

Returns true if the given token is a real number.

Parameters
tokenInput token.
realValueThe output converted value.
Returns
Returns true if the given token is a real number.

Definition at line 865 of file ArithmeticOperations.cpp.

Referenced by executeString().

bool te::rp::ArithmeticOperations::isUnaryOperator ( const std::string &  inputToken) const
protected

Returns true if the given token is a unary operator.

Parameters
inputTokenInput token.
Returns
Returns true if the given token is a unary operator.

Definition at line 512 of file ArithmeticOperations.cpp.

Referenced by executeString(), and isOperator().

void te::rp::ArithmeticOperations::multiplicationBinOp ( const double &  inputValue1,
const double &  inputValue2,
double &  outputValue 
) const
inlineprotected

Multiplication binary operator function.

Definition at line 225 of file ArithmeticOperations.h.

Referenced by execBinaryOperator().

bool te::rp::ArithmeticOperations::op1HasGreaterOrEqualPrecedence ( const std::string &  operator1,
const std::string &  operator2 
) const
protected

Returns true if operator1 has greater of equal precedence over operator2.

Parameters
operator1Operator1 input token.
operator2Operator2 input token.
Returns
Returns true if operator1 has greater of equal precedence over operator2.

Definition at line 517 of file ArithmeticOperations.cpp.

Referenced by inFix2PostFix().

void te::rp::ArithmeticOperations::printTokens ( const std::vector< std::string > &  input) const
protected

Print tokens to stout.

Parameters
inputThe input tokens vector.

Definition at line 487 of file ArithmeticOperations.cpp.

void te::rp::ArithmeticOperations::subtractionBinOp ( const double &  inputValue1,
const double &  inputValue2,
double &  outputValue 
) const
inlineprotected

Subtraction binary operator function.

Definition at line 219 of file ArithmeticOperations.h.

Referenced by execBinaryOperator().

Member Data Documentation

ArithmeticOperations::InputParameters te::rp::ArithmeticOperations::m_inputParameters
protected

Input execution parameters.

Definition at line 206 of file ArithmeticOperations.h.

Referenced by execBinaryOperatorRasterXRaster(), execute(), initialize(), and reset().

bool te::rp::ArithmeticOperations::m_isInitialized
protected

Tells if this instance is initialized.

Definition at line 208 of file ArithmeticOperations.h.

Referenced by execute(), initialize(), isInitialized(), and reset().


The documentation for this class was generated from the following files: