Summary
Returns a value based on a specified Python expression.
Usage
This tool is intended for use in ModelBuilder and not in Python scripting.
The Data Type parameter is used in ModelBuilder to help chain the output of the Calculate Value tool with other tools. For example, if you use the Calculate Value tool to calculate a distance for use as input to the Buffer Distance parameter of the Buffer tool, specify Linear Unit for the Data Type parameter.
Variables created in ModelBuilder can be used by this tool, but variables desired for use in the expression parameter cannot be connected to the Calculate Value tool. To use them in the expression, enclose the variable name in percent signs (%). For example, if you want to divide a variable named Input by 100, your expression would be %Input%/100.
Note: in the previous expression, if Input = 123, the expression will return 1. To get decimal places, add decimals to the values in the expression. For example: %Input%/100.00 will return 1.23. The illustration below shows another example of using variables in the expression.
Expressions can be created in Python only; other scripting languages are not supported.
The Calculate Value tool can evaluate simple mathematical expressions. The following are examples:
- 3+5
- 9*8
- 4+(9/3)
The Calculate Value tool allows the use of the Python math module to perform more complex mathematical operations. The math module is accessed by preceding the desired function with math. The following are examples:
- math.sqrt(25)
- math.cos(0.5)
Constants are also supported through the math module. For example:
- math.pi
The arcgis.rand() function is supported. The arcgis.rand() function has been created for ArcGIS tools and should not be confused with the Python Rand() function. Examples of using the arcgis.rand() are as follows:
- Calculate a random value derived from a uniform distribution of integers between 0 and 10: arcgis.rand("Integer 0 10")
- Calculate a random value derived from a normal distribution with a mean of 10 and standard deviation of 3: arcgis.rand("Normal 10 3")
Generally, you will type the expressions in the Expression parameter. More complicated expressions, such as multiline calculations or logical operations (if, then), require the use of the Code Block parameter. The Code Block parameter cannot be used on its own; it must be used in conjunction with the Expression parameter.
Variables defined in the Code Block parameter can be referenced from the expression.
Functions can be defined in the Code Block parameter and called from the expression. In the example below, the function returns a wind direction string based on a random input value. In Python, functions are defined using the def keyword followed by the name of the function and the function's input parameters. In this case, the function is getWind and has one parameter, wind. Values are returned from a function using the return keyword.
You can pass the variable through the Expression parameter and use if-else logic with inline variables in the code block as shown below. The code block checks whether the Input Cell Size variable is empty and returns a value based on the condition.
Python methods can be used directly in the Expression parameter of the tool. For example, if you have an input value with a decimal (field value of the input table in this case) and want to use the value in the output name of another tool through inline variable substitution, the decimal can be replaced using the Python method replace in the Calculate Value tool expression.
Python modules can be called and methods such as replace combined or stacked in the code block parameter. In the example below the time module is imported in the code block, which returns the current date and time such as Fri Mar 19 2010 09:42:39. This returned value is used as the name in the Create Folder tool to name the folder. Since the name of the folder cannot contain spaces or punctuation marks, the replace method in Python is used by stacking the method for each element that needs to be replaced. The resulting name of the folder in this example is FriMar192010094239.
If you are calculating a value in the model and want to use the calculated value with tools such as Buffer that require a buffer distance value as well as a linear unit, you need to do the following:
- Return the linear unit in the code block along with the distance value.
- Change the data type of the returned values as shown below.
- Set the data type parameter to linear unit so that the result of the expression will be converted to a linear unit value.
You can use the output of the Calculate Value tool directly in any Spatial Analyst tool that accepts a raster or a constant value such as Plus, Greater Than, and Less Than (these tools are found in the Spatial Analyst toolbox/Math toolset). To use the output of Calculate Value, change the output data type to Formulated Raster. This output data type format is a raster surface whose cell values are represented by a formula or constant.
In Python, part of the syntax is proper indentation. Indentation level (two spaces or four spaces) does not matter as long as it is consistent throughout the code block.
You cannot access model variables from the code block. Such variables must be passed to the code block from the expression. This can be achieved by creating a definition in the Code Block parameter and referencing the definition in the Expression parameter.
Model variables of type list should not be used in the Expression parameter. Due to how list variables work in ModelBuilder, Calculate Value will execute once using the first value in the list variable; other values in the list variable will not be passed to Calculate Value.
Syntax
CalculateValue(expression, {code_block}, {data_type})
Parameter | Explanation | Data Type |
expression | The Python expression to be evaluated. | SQL Expression |
code_block (Optional) | Additional Python code. Code in the code block can be referenced in the Expression parameter. | String |
data_type (Optional) | The data type of the output returned from the Python expression. This parameter should be used in ModelBuilder to help chain Calculate Value with other tools. | String |
Derived Output
Name | Explanation | Data Type |
value |
Environments
This tool does not use any geoprocessing environments.
Licensing information
- Basic: Yes
- Standard: Yes
- Advanced: Yes