====== Add Functional Joint Landmark ======
This is a legacy command in Visual3D. Visual3D version 4.0 has a new interface for functional joints, and new way of specifying a functional joint landmark as part of the model template. This command should continue to work as originally implemented but it is recommended that you adopt the current approach. Functional joints are a method for modelling the joint between two segments according to their apparent relative movement. Functional joints are implemented in Visual3D as an alternative for defining joint landmarks and can be chosen to use in segment definitions if desired. The accuracy of functional joints is affected by movements performed, range and speed of motion, the participant studied and the soft tissue artifact. As a result, functional joints should used carefully with their results being validated using another anatomical landmarks when possible, making these others methods often more trustworthy. The command can be found in the **Pipeline Workshop** under **Model Building**.
This command is based on:\\
**Schwartz MH, Rozumalski A** (2005) A new method for estimating joint parameters from motion data. Journal of Biomechanics, 38, 107-116
==== Pipeline Command ====
The command below is as seen on the Visual3D application.
Add_Functional_Joint_Landmark
/LANDMARK_NAME=
! /ALGORITHM=GILETTE
! /CALIBRATION_FILE=
! /USE_TRACKING_SEGMENT=FALSE
! /TRACKING_SEGMENT_NAME=
! /TRACKING_TYPES=TARGET
! /TRACKING_FOLDER=ORIGINAL
! /TRACKING_NAMES=
! /USE_OTHER_SEGMENT=FALSE
! /OTHER_SEGMENT_NAME=
/OTHER_TYPES=TARGET
! /OTHER_FOLDERS=ORIGINAL
! /OTHER_NAMES=
! /MOTION_FILE=
! /COMPUTE_SECOND_LANDMARK_ON_AXIS=FALSE
! /SECOND_LANDMARK_DISTANCE=0.1
! /EVENT_SEQUENCE=
! /EXCLUDE_EVENTS=
! /EVENT_SEQUENCE_INSTANCE=0
! /DOWNSAMPLE_RATIO=1
! /MINIMUM_HELICAL_ROTATION_DELTA_ACCEPTED=2
! /APPROXIMATE_NUMBER_OF_COMBINATIONS_USED=2000000
;
==== Command Parameters ====
|**/LANDMARK_NAME=** |The name of the landmark to be created. |
|**/ALGORITHM=** |The name of the functional joint algorithm to be used. |
|**/CALIBRATION_FILE=** |The name of the hybrid model. Use the full pathname. |
|**/USE_TRACKING_SEGMENT=** |TRUE or FALSE to use a tracking segment. |
|**/TRACKING_SEGMENT_NAME=** |The joint landmark is created relative to an existing segment. For example, for the hip joint center, the pelvis is used. |
|**/TRACKING_TYPES=** |The types of reference markers used for defining the landmark. |
|**/TRACKING_NAMES=** |The names of reference markers used for defining the landmark |
|**/TRACKING_FOLDER=** |The folder containing the tracking markers |
|**/USE_OTHER_SEGMENT=** |TRUE or FALSE to use the other segment. |
|**/OTHER_SEGMENT_NAME=** |The name of the other segment (e.g. the landmark does not refer to this segment |
|**/OTHER_TYPES=** |The types of signals used for the tracking markers. |
|**/OTHER_NAMES=** |The names of signals used for the tracking markers. Any number of tracking markers may be used. |
|**/OTHER_FOLDER=** |The folders for signals used for the tracking markers. |
|**/MOTION_FILE=** |The full pathname of the motion file used. This command allows only one movement file to be used. The user should make sure that a full range of motion about all axes is contained in one file. |
|**/COMPUTE_SECOND_LANDMARK_ON_AXIS=** |TRUE or FALSE compute a second landmark that lies on an axis (used for computing a joint axis) |
|**/SECOND_LANDMARK_DISTANCE=0.1** |The location of the second landmark relative to the joint center |
|**/EVENT_SEQUENCE=** |Sequence of two events (e.g., `LTO`, `LHS`) to restrict the search range. |
|**/EXCLUDE_EVENTS=** |If any listed event occurs in the sequence, it is skipped. |
|**/EVENT_SEQUENCE_INSTANCE=** |Index of the sequence instance to evaluate (0 = all, 1 = first, etc.). |
|**/DOWNSAMPLE_RATIO=** |Factor by which the sampling rate is divided |
|**/MINIMUM_HELICAL_ROTATION_DELTA_ACCEPTED=**|Minimum helical rotation required for a movement to be included in the functional joint calculation. |
|**/APPROXIMATE_NUMBER_OF_COMBINATIONS_USED=**|If there are a large number of frames of data, the possible combinations of 3 frames becomes very big. The can specify an estimate of the number of combination used (these are selected randomly from the total number of combinations)|
==== Dialog ====
The command can be edited in a text editor or in a dialog form. To edit in the dialog pop up form either click on the Edit button in the pipeline workshop or double-click on the pipeline command. The dialog is shown below.
{{:Add_Functional_Joint_Landmark.png}}
This command was changed for Visual3D Version 3.83 to allow the specification of **REFERENCE MARKERS** instead of **REFERENCE SEGMENT.**
* If a Reference Segment is specified, the landmark will be created relative to that segment.
* If no Reference Segment is specified, the landmark will be created relative to the first three REFERENCE MARKERS (e.g. a Technical Coordinate System will be created from these markers). If more than 3 REFERENCE MARKERS are specified, Visual3D will use all REFERENCE MARKERS to track the Technical Coordinate System.
=== NOTES ===
The motion trials being used to identify the functional joint landmark must be [[Visual3D:Documentation:Pipeline:Model_Commands:Assign_Model_File|assigned]] to the static calibration trial.
If TRACKING_SEGMENT_NAME is specified, TRACKING_TYPES, TRACKING_NAMES, TRACKING_FOLDER are ignored and can be left blank. The landmark will be created relative to the Tracking Segment.
If TRACKING_SEGMENT_NAME is blank, TRACKING_TYPES, TRACKING_NAMES, TRACKING_FOLDER must be specified. The landmark will be created relative to 3 of the Tracking markers. The first two marker will be selected from the list of tracking markers so that these markers are the maximum distance apart. The third marker will be the maximum distance from a line between the other two.
If OTHER_SEGMENT_NAME is specified, SIGNAL_TYPES, SIGNAL_NAMES, SIGNAL_FOLDER are ignored and can be left blank.
If OTHER_SEGMENT_NAME is blank, SIGNAL_TYPES, SIGNAL_NAMES, SIGNAL_FOLDER must be specified.
==== Example ====
The following pipeline will compute a functional joint (e.g. the location of the tip of the ROD relative to the LAB) and another landmark defined as the location of the tip relative to 3 of the tracking markers on the ROD.
The following pipeline will compute a functional joint (e.g. the location of the tip of the ROD relative to the LAB) and another landmark defined as the location of the tip relative to 3 of the tracking markers on the ROD.
File_New
;
Set_Pipeline_Parameter
/PARAMETER_NAME=FOLDER
/PARAMETER_VALUE=c:demo filesCalTesterDimensions
;
For_Each
/ITERATION_PARAMETER_NAME=INDEX
! /ITERATION_PARAMETER_COUNT_NAME=
! /ITERATION_PARAMETER_COUNT_BUFFER=
/ITEMS=1+2
;
Set_Pipeline_Parameter
/PARAMETER_NAME=MOVE
/PARAMETER_VALUE=::FOLDER&move&::INDEX&.c3d
;
Set_Pipeline_Parameter
/PARAMETER_NAME=STATIC
/PARAMETER_VALUE=::FOLDER&static&::INDEX&.c3d
;
Create_Hybrid_Model
/CALIBRATION_FILE=::STATIC
;
Set_Subject_Weight
/CALIBRATION_FILE=::STATIC
/WEIGHT=1.0
;
Set_Subject_Height
/CALIBRATION_FILE=::STATIC
/HEIGHT=1
;
Open_File
/FILE_NAME=::MOVE
;
Assign_Model_File
/CALIBRATION_FILE=::STATIC
/MOTION_FILE_NAMES=::MOVE
;
Add_Functional_Joint_Landmark
/LANDMARK_NAME=TIP&::INDEX
! /ALGORITHM=GILETTE
/CALIBRATION_FILE=::STATIC
/USE_TRACKING_SEGMENT=TRUE
/TRACKING_SEGMENT_NAME=LAB
/TRACKING_TYPES=TARGET
/TRACKING_FOLDER=ORIGINAL
/TRACKING_NAMES=UP1+UP2+UP3+UP4+UP5
! /USE_OTHER_SEGMENT=FALSE
! /OTHER_SEGMENT_NAME=
! /OTHER_TYPES=TARGET
! /OTHER_FOLDERS=ORIGINAL
! /OTHER_NAMES=
/MOTION_FILE=::MOVE
! /COMPUTE_SECOND_LANDMARK_ON_AXIS=FALSE
! /SECOND_LANDMARK_DISTANCE=0.1
! /EVENT_SEQUENCE=
! /EXCLUDE_EVENTS=
! /EVENT_SEQUENCE_INSTANCE=0
! /DOWNSAMPLE_RATIO=1
/MINIMUM_HELICAL_ROTATION_DELTA_ACCEPTED=5
/APPROXIMATE_NUMBER_OF_COMBINATIONS_USED=1000000
;
Add_Landmark
/LANDMARK_NAME=CALTIP&::STATIC
/CALIBRATION_FILE=::STATIC
! /USER_GENERATED=TRUE
! /USE_PERCENTAGE=FALSE
! /CALIBRATION_ONLY=FALSE
/USE_TARGETS=TRUE
! /SEGMENT_NAME=
/TARGET_TYPES=TARGET+TARGET+TARGET
/TARGET_NAMES=UP1+UP2+UP3
!/MCSX=
!/MCSY=
!/MCSZ=
! /LANDMARK_LOCATION=
/REFERENCE_LOCATION_NAME=TIP&::INDEX
/REFERENCE_LOCATION_TYPE=LANDMARK
/USE_REFERENCE_LOCATION=TRUE ;