User Tools

Site Tools


visual3d:documentation:pipeline:expressions:mathematical_operators

Mathematical Operators

The Evaluate_Expression command can be used to evaluate arbitrary mathematical expressions. Use the following characters for your mathematical operators.

Note: Visual3D parses the mathematical operators before it parses the signal names. If you have a signal name that contains a mathematical operator (e.g. R-Foot1), Visual3D will probably not be able to parse the equation expression properly.

Arithmetic Operators

Arithmetic operations can generally be performed using syntax that is similar to that found in a variety of programming and scripting languages.

Plus

Addition is accomplished using the + character. An alternative syntax is add(a,b) where a and b are expressions that evaluate to numbers.

NOTE: Pipeline command parameters use the + character as a delimiter. If the user wants to use an expression containing a + in a command parameter that allows multiple signals, then Visual3D will likely interpret this plus sign incorrectly. In this case the add(a,b) syntax should be used.

2 + 3 = 5
add(2,3) = 5

Minus

Subtraction is accomplished using the - character.

3 - 2 = 1

Multiply

Multiplication is accomplished using the * character.

3 * 2 = 6

Divide

Division is accomplished using the / character.

6 / 3 = 2

Power

Exponentiation is accomplished using the ^ character.

2^3 = 8

Boolean Operators

Boolean operators deal with boolean values, such as TRUE and FALSE. These are represented numerically as 1 (TRUE) and 0 (FALSE).

Logical OR

The Logical OR operator is signified by the | character. It takes two boolean values as input and returns TRUE if either of the input values is TRUE.

FALSE | FALSE = FALSE
FALSE | TRUE = TRUE
TRUE | FALSE = TRUE
TRUE | TRUE = FALSE

Logical AND

The Logical AND operator is signified by the & character. It takes two boolean values as input and returns TRUE when both input values are TRUE.

FALSE | FALSE = FALSE
FALSE | TRUE = FALSE
TRUE | FALSE = FALSE
TRUE | TRUE = FALSE

The Adjective NOT

The logical adjective NOT can be used with both the logical AND and logical OR operators. It takes one boolean value as input and negates that boolean value.

NOT(FALSE) = TRUE
NOT(TRUE) = FALSE
Example

Given a workspace containing 3 trials (*trial1.c3d, *trial2.c3d, and *trial3.c3d).

  • All trials are assigned a TAG labeled WALK
  • trial1.c3d is also assigned a TAG labeled BAD
Select_Active_File
/FILE_NAME=WALK
/QUERY=BAD
;

This command results in *trial1.c3d being active

Select_Active_File
/FILE_NAME=WALK
/QUERY=NOT(BAD)
;

This command results in *trial2.c3d and *trial3.c3d being active.

Comparison Operators

Comparison operators take two inputs of the same type and return a boolean value.

Equals

Equality is tested using either = or ==. It returns TRUE if the two inputs have the same value and FALSE if they do not.

Example

Consider a model metric that is defined as a string and compare it to an explicitly defined string.

Set_Model_Metric
! /CALIBRATION_FILE=
/METRIC_NAME=TEST
/METRIC_VALUE="TTT"
;

Evaluate_Expression**
/EXPRESSION=MODEL::METRIC::TEST="TTT"
/RESULT_NAME=SCOTT
/RESULT_TYPE=METRIC
! /RESULT_FOLDER=PROCESSED
;

The text strings are equal, so the resulting signal contains a 1 (indicating TRUE).

Not Equals

Non-equality is tested using either <> or ><. Its behaviour is opposite that of equality.

If (a==b) is TRUE then (a<>b) is FALSE. Similarly, if (a==b) is FALSE, then (a<>b) is TRUE.

Less Than

We can test is one value is less than another using the < character.

Example

Given two signals TARGET::ORIGINAL::RFT1 and TARGET::ORIGINAL::LFT1, use the Boolean operator < to identify when the Z component of RFT1 is less than the Z component of LFT1.

Evaluate_Expression
/EXPRESSION= TARGET::ORIGINAL::RFT1::Z < TARGET::ORIGINAL::LFT1::Z
/RESULT_NAME=RFT1_GREATER
/RESULT_TYPE=DERIVED
/RESULT_FOLDER=PROCESSED
;

The output signal will be 1 when RFT1::Z is less than LFT1::Z and 0 otherwise

Example - Foot Clearance

Heel and toe clearance are defined by two paths. It is possible to model “foot clearance” as the lower value of the heel and toe clearance values at each frame. heel_toe_clearance.jpg

Here is a simplified test of this. First, make the Global Workspace Active. Then, create 2 toy signals and calculate a third signal containing the lower value of the two toy signals.

Evaluate_Expression
/EXPRESSION=LIST(1,2,3,4,5)
! /SIGNAL_TYPES=
! /SIGNAL_FOLDER=ORIGINAL
! /SIGNAL_NAMES=
! /SIGNAL_COMPONENTS=
/RESULT_TYPES=DERIVED
/RESULT_FOLDERS=PROCESSED
/RESULT_NAME=SIGNAL1
! /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=FALSE
;

Evaluate_Expression
/EXPRESSION=LIST(5,4,3,2,1)
! /SIGNAL_TYPES=
! /SIGNAL_FOLDER=ORIGINAL
! /SIGNAL_NAMES=
! /SIGNAL_COMPONENTS=
/RESULT_TYPES=DERIVED
/RESULT_FOLDERS=PROCESSED
/RESULT_NAME=SIGNAL2
! /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=FALSE
;

!create a new signal that is the lower value of the two signals
Evaluate_Expression
/EXPRESSION=(DERIVED::PROCESSED::SIGNAL1<=DERIVED::PROCESSED::SIGNAL2)*DERIVED::PROCESSED::SIGNAL1
+(DERIVED::PROCESSED::SIGNAL2<DERIVED::PROCESSED::SIGNAL1)*DERIVED::PROCESSED::SIGNAL2
! /SIGNAL_TYPES=
! /SIGNAL_FOLDER=ORIGINAL
! /SIGNAL_NAMES=
! /SIGNAL_COMPONENTS=
/RESULT_TYPES=DERIVED
/RESULT_FOLDERS=PROCESSED
/RESULT_NAME=SIGNAL_LOWER
! /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=FALSE
;

heel_toe_clearance2.jpg

Less Than Or Equals

This boolean operator uses one of the following syntaxes: ⇐ or =<.

The expression (a ⇐ b) is equivalent logically to 1).

Example

Given two signals TARGET::ORIGINAL::RFT1 and TARGET::ORIGINAL::LFT1, use the Boolean operator ⇐ or the boolean operative =< to identify when the Z component of RFT1 is less than or equal to the Z component of LFT1.

Evaluate_Expression
/EXPRESSION= TARGET::ORIGINAL::RFT1::Z <= TARGET::ORIGINAL::LFT1::Z
/RESULT_NAME=RFT1_GREATER
/RESULT_TYPE=DERIVED
/RESULT_FOLDER=PROCESSED
;

The output signal will be 1 (indicating TRUE) when RFT1::Z is less than or equal to LFT1::Z and 0 (indicating FALSE) otherwise.

Greater Than

We can test is one value is less than another using the > character.

Example

Given two signals TARGET::ORIGINAL::RFT1 and TARGET::ORIGINAL::LFT1, use the Boolean operator > to identify when the Y component of RFT1 is greater than the Y component of LFT1.

Evaluate_Expression
/EXPRESSION= TARGET::ORIGINAL::RFT1::Y > TARGET::ORIGINAL::LFT1::Y
/RESULT_NAME=RFT1_GREATER
/RESULT_TYPE=DERIVED
/RESULT_FOLDER=PROCESSED
;

The output signal will be 1 (indicating TRUE) when RFT1::Y is greater than LFT1::Y and 0 (indicating FALSE) otherwise.

Greater Than Or Equals

This boolean operator uses one of the following syntaxes: >= or ⇒.

The expression (a >= b) is equivalent logically to 2).

1)
a < b) | (a == b
2)
a > b) | (a == b
visual3d/documentation/pipeline/expressions/mathematical_operators.txt · Last modified: 2024/09/13 20:08 by wikisysop