There are several steps required to determine the range of motion. This page details three examples:
Consider the right knee angle angle expressed as “Right Knee Ang”. Compute the range of motion over all frames in the file using events. The result is named “Right Knee Ang ROM”.
The script from the above steps can be found below:
! Define a START Event Event_Explicit /EVENT_NAME=START /FRAME=1 ! /TIME= ; ! Define a END Event Event_Explicit /EVENT_NAME=END /FRAME=EOF ! /TIME= ; Compute_Model_Based_Data /RESULT_NAME=Right Knee Ang /FUNCTION=JOINT_ANGLE /SEGMENT=RSK /REFERENCE_SEGMENT=RTH /RESOLUTION_COORDINATE_SYSTEM= ! /USE_CARDAN_SEQUENCE=FALSE ! /NORMALIZATION=FALSE ! /NORMALIZATION_METHOD= ! /NORMALIZATION_METRIC= ! /NEGATEX=FALSE ! /NEGATEY=FALSE ! /NEGATEZ=FALSE ! /AXIS1=X ! /AXIS2=Y ! /AXIS3=Z ; ! Calculate an event MAX at the Maximum joint angle Event_Global_Maximum /SIGNAL_TYPES=LINK_MODEL_BASED /SIGNAL_NAMES=Right Knee Ang /SIGNAL_FOLDER=ORIGINAL /EVENT_NAME=MAX /SELECT_X=TRUE ! /SELECT_Y=FALSE ! /SELECT_Z=FALSE ! /EVENT_SEQUENCE= ! /EXCLUDE_EVENTS= /START_AT_EVENT=START /END_AT_EVENT=END ; ! Find the joint angle at event MAX Metric_Signal_Value_At_Event /RESULT_METRIC_NAME=Right Knee Ang_MAX ! /RESULT_METRIC_FOLDER=PROCESSED /SIGNAL_TYPES=LINK_MODEL_BASED /SIGNAL_NAMES=Right Knee Ang /SIGNAL_FOLDER=ORIGINAL /EVENT_NAME=MAX /GENERATE_MEAN_AND_STDDEV=FALSE ! /APPEND_TO_EXISTING_VALUES=FALSE ! /GENERATE_VECTOR_LENGTH_METRIC=FALSE ! /RETAIN_NO_DATA_VALUES=FALSE ; ! Calculate an event MIN at the Minimum joint angle Event_Global_Minimum /SIGNAL_TYPES=LINK_MODEL_BASED /SIGNAL_NAMES=Right Knee Ang /SIGNAL_FOLDER=ORIGINAL /EVENT_NAME=MIN /SELECT_X=TRUE ! /SELECT_Y=FALSE ! /SELECT_Z=FALSE ! /EVENT_SEQUENCE= ! /EXCLUDE_EVENTS= /START_AT_EVENT=START /END_AT_EVENT=END ; ! Find the joint angle at event MIN Metric_Signal_Value_At_Event /RESULT_METRIC_NAME=Right Knee Ang_MIN ! /RESULT_METRIC_FOLDER=PROCESSED /SIGNAL_TYPES=LINK_MODEL_BASED /SIGNAL_NAMES=Right Knee Ang /SIGNAL_FOLDER=ORIGINAL /EVENT_NAME=MIN /GENERATE_MEAN_AND_STDDEV=FALSE ! /APPEND_TO_EXISTING_VALUES=FALSE ! /GENERATE_VECTOR_LENGTH_METRIC=FALSE ! /RETAIN_NO_DATA_VALUES=FALSE ; ! Subtract the minimum value from the maximum value. ! The metric created is the range of motion for the component of the joint angle selected. Evaluate_Expression /EXPRESSION=METRIC::PROCESSED::Right Knee Ang_MAX::X-METRIC::PROCESSED::Right Knee Ang_MIN::X /RESULT_TYPE=METRIC /RESULT_NAME=Right Knee Ang ROM ! /RESULT_FOLDER=PROCESSED ;
Consider the right knee angle angle expressed as “Right Knee Ang”. Compute the range of motion over all frames in the file. The result is named “Right Knee Ang ROM”.
! Find the maximum value of all 3 components Metric_Maximum /RESULT_METRIC_NAME=_MAX /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE ! /RESULT_METRIC_FOLDER=PROCESSED /SIGNAL_TYPES=LINK_MODEL_BASED /SIGNAL_NAMES=Right Knee Ang ! /SIGNAL_FOLDER=ORIGINAL ! /SIGNAL_COMPONENTS=ALL_COMPONENTS /EVENT_SEQUENCE= /EXCLUDE_EVENTS= /GENERATE_MEAN_AND_STDDEV=FALSE ! /APPEND_TO_EXISTING_VALUES=FALSE ! /CREATE_GLOBAL_MAXIMUM=FALSE ; ! Find the minimum value of all 3 components Metric_Minimum /RESULT_METRIC_NAME=_MIN /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE ! /RESULT_METRIC_FOLDER=PROCESSED /SIGNAL_TYPES=LINK_MODEL_BASED /SIGNAL_NAMES=Right Knee Ang ! /SIGNAL_FOLDER=ORIGINAL ! /SIGNAL_COMPONENTS=ALL_COMPONENTS /EVENT_SEQUENCE= /EXCLUDE_EVENTS= /GENERATE_MEAN_AND_STDDEV=FALSE ! /APPEND_TO_EXISTING_VALUES=FALSE ! /CREATE_GLOBAL_MINIMUM=FALSE ; ! The range of motion can be estimated as the difference between max and min ! Note: that this isn't quite true because angles are not vectors Evaluate_Expression /EXPRESSION=METRIC::PROCESSED::Right Knee Ang_MAX-METRIC::PROCESSED::Right Knee Ang_MIN /RESULT_NAME=Right Knee Ang ROM /RESULT_TYPE=METRIC ! /RESULT_FOLDER=PROCESSED ;
One may want to calculate the cummulative amount of a certain movement occurring at a joint during a task. For example, consider hip flexion range of motion for 2 subjects:
The range is the same (40°) for both subjects but the amount of movement is different. Subject 1 moves directly and his cumulative amount of movement is 40°. However, Subject 2's movement is not direct and the cumulative amount of movement is 20 + 5 + 25 = 50°
The following set of pipeline commands will compute this cumulative range.
! Compute the velocity of the signal (in this case RKNEE_ANGLE) First_Derivative /SIGNAL_TYPES=LINK_MODEL_BASED /SIGNAL_NAMES=RKNEE_ANGLE ! /SIGNAL_FOLDER=ORIGINAL /RESULT_SUFFIX=_VEL /RESULT_FOLDER=VELOCITY ; ! Rectify the velocity Evaluate_Expression /EXPRESSION=ABS(LINK_MODEL_BASED::VELOCITY::RKNEE_ANGLE_VEL) /RESULT_NAME=RKNEE_ANGLE_VEL /RESULT_TYPE=LINK_MODEL_BASED /RESULT_FOLDER=RECTIFIED_VELOCITY ; ! Integrate the rectified velocity from START to STOP Metric_Integrate /RESULT_METRIC_NAME=RANGE ! /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=FALSE ! /RESULT_METRIC_FOLDER=PROCESSED /SIGNAL_TYPES=LINK_MODEL_BASED /SIGNAL_NAMES=RKNEE_ANGLE_VEL /SIGNAL_FOLDER=RECTIFIED_VELOCITY /SIGNAL_COMPONENTS=X /EVENT_SEQUENCE=START+STOP /EXCLUDE_EVENTS= /GENERATE_MEAN_AND_STDDEV=FALSE ! /APPEND_TO_EXISTING_VALUES=FALSE ;