visual3d:tutorials:knowledge_discovery:looking_at_large_public_data_sets
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
visual3d:tutorials:knowledge_discovery:looking_at_large_public_data_sets [2024/07/12 14:08] – created sgranger | visual3d:tutorials:knowledge_discovery:looking_at_large_public_data_sets [2025/09/10 15:13] (current) – [Processing C3Ds into CMZs (Able-Bodied Participants)] wikisysop | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== | + | ====== |
Biomechanics is coming into a new age, where large datasets are the norm and individually processing the files can be tiresome and time consuming. Captured over long periods of time, datasets can be inconsistent, | Biomechanics is coming into a new age, where large datasets are the norm and individually processing the files can be tiresome and time consuming. Captured over long periods of time, datasets can be inconsistent, | ||
In this tutorial, we will be going through common issues seen while working with large public biomechanics datasets, through the use of a large dataset released which tracks the full body gait of both stroke survivors and able-bodied participants. | In this tutorial, we will be going through common issues seen while working with large public biomechanics datasets, through the use of a large dataset released which tracks the full body gait of both stroke survivors and able-bodied participants. | ||
- | |||
- | Sections highlighted like this show when actions should be performed, if you are following along with the tutorial. | ||
- | |||
==== Large Datasets ==== | ==== Large Datasets ==== | ||
Line 27: | Line 24: | ||
A common inconsistency in large datasets can be the usage of filenames. Filenames should convey information about a file in a manner that can be easily referenced, eg: calibration files should be named differently from motion files so that they can be separated, and motion files should have a trial number in their file name (if applicable), | A common inconsistency in large datasets can be the usage of filenames. Filenames should convey information about a file in a manner that can be easily referenced, eg: calibration files should be named differently from motion files so that they can be separated, and motion files should have a trial number in their file name (if applicable), | ||
- | In this dataset, we found inconsistencies within filenames, as well as an error relating to the file name. Particularly within the stroke survivors, there was no consistent naming convention across all of the motion files, other than all including the letters “BWA”. How the trialnumber | + | In this dataset, we found inconsistencies within filenames, as well as an error relating to the file name. Particularly within the stroke survivors, there was no consistent naming convention across all of the motion files, other than all including the letters “BWA”. How the trial number |
There are several files which need to be altered or deleted: | There are several files which need to be altered or deleted: | ||
- | |||
- | \\ | ||
- | |||
- | |||
- | Stroke Survivor 47 (TVC47) has a mislabeled calibration file. This must be renamed from “BWA (0).c3d” to something following their calibration conventions, | ||
- | |||
- | |||
- | \\ | ||
- | |||
- | |||
- | Stroke Survivor 38 (TVC38) does not have a valid calibration file. The corresponding folder should be deleted (TVC38). | ||
- | |||
- | |||
- | \\ | ||
- | Able-Bodied Participants 37 (SUBJ37), 42 (SUBJ42), and 118-138 (SUBJ118-SUBJ138) follow a different model to mark the pelvis, or are missing necessary data. The corresponding folders should be deleted (SUBJ38, SUBJ42, SUBJ118-SUBJ138) | + | * Stroke Survivor 47 (TVC47) has a mislabeled calibration file. This must be renamed from “BWA (0).c3d” to something following their calibration conventions, |
+ | * Stroke Survivor 38 (TVC38) does not have a valid calibration file. The corresponding folder should be deleted (TVC38). | ||
+ | * Able-Bodied Participants 37 (SUBJ37), 42 (SUBJ42), and 118-138 (SUBJ118-SUBJ138) follow a different model to mark the pelvis, or are missing necessary data. The corresponding folders should be deleted (SUBJ37, SUBJ42, SUBJ118-SUBJ138) | ||
==== Building Models ==== | ==== Building Models ==== | ||
- | The data set used the Plug in Gait marker set, unfortunately not all that standard Plug in Gait markers were used for example the right and left upper arm markers were missing, so only a model of the lower body can be made, see the tutorial [[https:// | + | This data set primarily |
The subset of able-bodied participants used in this tutorial has three markers for the pelvis as opposed to the four used for the stroke survivors; two separate models need to be made. The default values provided in the tutorial can be used to build the models, as the subject data will be entered in via the processing pipeline. | The subset of able-bodied participants used in this tutorial has three markers for the pelvis as opposed to the four used for the stroke survivors; two separate models need to be made. The default values provided in the tutorial can be used to build the models, as the subject data will be entered in via the processing pipeline. | ||
Line 64: | Line 49: | ||
Most of the markers within the static files provided are prefixed with the subject ID, however the dynamic file markers are not, this will prevent the built model from linking with the dynamic markers. To begin, we will ensure that all static files include a subject-prefix, | Most of the markers within the static files provided are prefixed with the subject ID, however the dynamic file markers are not, this will prevent the built model from linking with the dynamic markers. To begin, we will ensure that all static files include a subject-prefix, | ||
**Static file marker:**\\ | **Static file marker:**\\ | ||
- | {{stroke_model_prefix.png}}\\ | + | {{:stroke_model_prefix.png?400}}\\ |
**Dynamic file marker:**\\ | **Dynamic file marker:**\\ | ||
- | {{stroke_dynamic_no_prefix.png}} | + | {{:stroke_dynamic_no_prefix.png}} |
Stroke Survivors 47 and 58 (TVC47 and TVC58) are both missing subject prefixes. To rectify, run the pipeline file **add_calibration_prefixes.v3s** once for each of these stroke survivors, changing the "/ | Stroke Survivors 47 and 58 (TVC47 and TVC58) are both missing subject prefixes. To rectify, run the pipeline file **add_calibration_prefixes.v3s** once for each of these stroke survivors, changing the "/ | ||
Line 78: | Line 63: | ||
Below is an explanation of the important sections of the file " | Below is an explanation of the important sections of the file " | ||
- | **Set a pipeline parameter to a list of all dynamic files contained in the " | + | **Set a pipeline parameter to a list of all dynamic files contained in the " |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | \\ | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
+ | < | ||
+ | Set_Pipeline_Parameter_To_Folder_Path | ||
+ | / | ||
+ | ! / | ||
+ | ! / | ||
+ | ! / | ||
+ | ! / | ||
+ | ! / | ||
+ | ! / | ||
+ | ! / | ||
+ | ; | ||
- | \\ | ||
- | **Loop through all dynamic files:**\\ | ||
- | '' | ||
- | '' | ||
- | '' | ||
- | '' | ||
- | '' | ||
+ | Set_Pipeline_Parameter_To_List_Of_Files | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | ! / | ||
+ | ; | ||
+ | </ | ||
- | \\ | ||
- | **Open the current file:**\\ | ||
- | '' | ||
- | '' | ||
- | '' | ||
- | '' | ||
- | '' | ||
- | '' | ||
- | '' | ||
- | '' | ||
+ | **Loop through all dynamic files:** | ||
+ | < | ||
+ | For_Each | ||
+ | / | ||
+ | ! / | ||
+ | / | ||
+ | ; | ||
- | \\ | + | </code> |
- | **Get the Participant ID from PARAMETERS: | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
+ | **Open the current file:** | ||
+ | < | ||
+ | File_Open | ||
+ | FILE_NAME=:: | ||
+ | ! /FILE_PATH= | ||
+ | ! /SUFFIX= | ||
+ | ! / | ||
+ | ! / | ||
+ | ! / | ||
+ | ; | ||
+ | </ | ||
- | \\ | ||
- | **Get the preceding half of the Participant ID using the STRING_LEFT expression, since all IDs begin with BWA we can hard code the index value:**\\ | ||
- | '' | ||
- | '' | ||
- | '' | ||
- | '' | ||
- | '' | ||
+ | **Get the Participant ID from PARAMETERS: | ||
+ | < | ||
+ | Set_Pipeline_Parameter_To_Data_Value | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | ! / | ||
+ | / | ||
+ | ; | ||
+ | </ | ||
- | \\ | + | **Get the preceding half of the Participant ID using the STRING_LEFT |
- | **Get the length | + | < |
- | '' | + | Set_Pipeline_Parameter_From_Expression |
- | '' | + | PARAMETER_NAME=LEFT_SUBJECT_ID |
- | '' | + | EXPRESSION=STRING_LEFT("&:: |
- | '' | + | / |
- | '' | + | ; |
+ | </ | ||
- | \\ | + | **Get the length |
- | **Get the index of the dash using the STRING_FIND | + | < |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | \\ | + | Set_Pipeline_Parameter_From_Expression |
- | **Subtract the DASH_INDEX from SUBJECT_ID_LENGTH to get the negative index of the dash, subtract that value by one to get the value needed for STRING_RIGHT (the negative index of the character immediately following the dash): | + | / |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | ; |
- | '' | + | </ |
- | '' | + | |
+ | **Get the index of the dash using the STRING_FIND expression** | ||
+ | < | ||
- | \\ | + | Set_Pipeline_Parameter_From_Expression |
- | **Get the characters in the subject id following the dash using STRING_RIGHT: | + | / |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | ; |
- | '' | + | |
- | '' | + | |
+ | </ | ||
- | \\ | + | **Subtract the DASH_INDEX from SUBJECT_ID_LENGTH to get the negative index of the dash, subtract that value by one to get the value needed for STRING_RIGHT (the negative index of the character immediately following the dash):** |
- | **Concatenate LEFT_SUBJECT_ID and RIGHT_SUBJECT_ID with an underscore between them:**\\ | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
+ | < | ||
- | \\ | + | Set_Pipeline_Parameter_From_Expression |
- | **Get a list of all target names**\\ | + | PARAMETER_NAME=RIGHT_SUBJECT_ID |
- | '' | + | /EXPRESSION=STRING_RIGHT("&:: |
- | '' | + | !/ |
- | '' | + | ; |
- | '' | + | |
- | '' | + | |
+ | </ | ||
- | \\ | + | **Get the characters in the subject |
- | **Using the updated subject ID and the list of target names, use the modify participants parameters pipeling function the add the neeeded | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
+ | < | ||
+ | Set_Pipeline_Parameter_From_Expression | ||
+ | / | ||
+ | / | ||
+ | !/ | ||
+ | ; | ||
- | \\ | + | </ |
- | **Clear the workspace to preserve memory, and then close the loop:**\\ | + | |
- | '' | + | |
- | '' | + | **Concatenate LEFT_SUBJECT_ID and RIGHT_SUBJECT_ID with an underscore between them:** |
- | \\ | + | < |
- | '' | + | Set_Pipeline_Parameter |
- | '' | + | / |
- | '' | + | / |
- | '' | + | ! / |
+ | ! / | ||
+ | / | ||
+ | / | ||
+ | ! / | ||
+ | ; | ||
+ | |||
+ | </ | ||
+ | |||
+ | **Get a list of all target names** | ||
+ | < | ||
+ | Set_Pipeline_Parameter_To_List_Of_Signal_Names | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | ; | ||
+ | </ | ||
+ | |||
+ | **Using the updated subject ID and the list of target names, use the modify participants parameters pipeline function the add the needed subject prefixes, ensuring OVERWRITE_C3D_FILE is set to true so the changes are preserved: | ||
+ | < | ||
+ | Modify_C3D_Subjects_Parameters | ||
+ | ! / | ||
+ | / | ||
+ | / | ||
+ | ! / | ||
+ | ! / | ||
+ | / | ||
+ | / | ||
+ | ! / | ||
+ | ! / | ||
+ | ! / | ||
+ | ! / | ||
+ | / | ||
+ | ! / | ||
+ | ! / | ||
+ | ! / | ||
+ | / | ||
+ | ; | ||
+ | |||
+ | </ | ||
+ | |||
+ | **Clear the workspace to preserve memory, and then close the loop:** | ||
+ | |||
+ | < | ||
+ | File_New | ||
+ | ; | ||
+ | </code> | ||
+ | **End the loop** | ||
+ | < | ||
+ | End_For_Each | ||
+ | / | ||
+ | ; | ||
+ | </ | ||
==== Inconsistent Subject Prefixes (Able Bodied) ==== | ==== Inconsistent Subject Prefixes (Able Bodied) ==== | ||
Line 240: | Line 247: | ||
\\ | \\ | ||
**Using the modify C3D subjects parameters pipeline function clear the participant prefixes from the files, set OVERWRITE_C3D_FILE to true to ensure the changes are preserved, keep all other parameters at their default value:**\\ | **Using the modify C3D subjects parameters pipeline function clear the participant prefixes from the files, set OVERWRITE_C3D_FILE to true to ensure the changes are preserved, keep all other parameters at their default value:**\\ | ||
- | '' | + | |
- | '' | + | < |
- | '' | + | Modify_C3D_Subjects_Parameters |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
+ | / | ||
+ | ; | ||
+ | |||
+ | </ | ||
Line 276: | Line 287: | ||
\\ | \\ | ||
**Set a pipeline parameter to the current folder path**\\ | **Set a pipeline parameter to the current folder path**\\ | ||
- | '' | ||
- | '' | ||
- | '' | ||
- | '' | ||
- | '' | ||
- | '' | ||
- | '' | ||
+ | < | ||
+ | Set_Pipeline_Parameter_To_Folder_Path | ||
+ | / | ||
+ | / | ||
+ | ! / | ||
+ | ! / | ||
+ | ! / | ||
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Get a list of all folders within the 50_StrokePiG folder:**\\ | **Get a list of all folders within the 50_StrokePiG folder:**\\ | ||
- | '' | + | < |
- | '' | + | Set_Pipeline_Parameter_To_List_Of_Files |
- | '' | + | / |
- | '' | + | / |
- | '' | + | / |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Loop through the folders: | **Loop through the folders: | ||
- | '' | + | < |
- | '' | + | For_Each |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Calibration files are prefixed with TVC, set a pipeline parameter to all C3D files that start with TVC (there should only be one in each folder): | **Calibration files are prefixed with TVC, set a pipeline parameter to all C3D files that start with TVC (there should only be one in each folder): | ||
- | '' | + | < |
- | '' | + | Set_Pipeline_Parameter_To_List_Of_Files |
- | '' | + | / |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Start a new workspace: | **Start a new workspace: | ||
- | '' | + | < |
- | '' | + | File_New |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Open all dynamic files within the current folder:**\\ | **Open all dynamic files within the current folder:**\\ | ||
- | '' | + | < |
- | '' | + | File_Open |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | ! /SUFFIX= |
- | '' | + | ! / |
- | '' | + | / |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Set all dynamic files to active:**\\ | **Set all dynamic files to active:**\\ | ||
- | '' | + | < |
- | '' | + | Select_Active_File |
- | '' | + | / |
- | '' | + | ! /QUERY= |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Save all the necessary metrics from PARAMETERS: | **Save all the necessary metrics from PARAMETERS: | ||
- | '' | + | < |
- | '' | + | Set_Pipeline_Parameter_To_Data_Value |
- | '' | + | / |
- | '' | + | / |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | / |
- | //'' | + | ; |
+ | |||
+ | ... see attached pipeline for full list of commands ... | ||
+ | </code> | ||
- | \\ | ||
**Visual 3Ds expected unit of measurement is meters so the knee widths, ankle widths and height need to be converted from mm to m:**\\ | **Visual 3Ds expected unit of measurement is meters so the knee widths, ankle widths and height need to be converted from mm to m:**\\ | ||
- | '' | + | < |
- | '' | + | Set_Pipeline_Parameter_From_Expression |
- | '' | + | / |
- | '' | + | / |
- | '' | + | / |
- | //'' | + | ; |
+ | |||
+ | ... see attached pipeline for full list of commands ... | ||
+ | </code> | ||
- | \\ | ||
**Get the subject ID from PARAMETERS: | **Get the subject ID from PARAMETERS: | ||
- | '' | + | < |
- | '' | + | Set_Pipeline_Parameter_To_Data_Value |
- | '' | + | / |
- | '' | + | / |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Create a hybrid model using the calibration file:**\\ | **Create a hybrid model using the calibration file:**\\ | ||
- | '' | + | < |
- | '' | + | Create_Hybrid_Model |
- | '' | + | / |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Apply the model template: | **Apply the model template: | ||
- | '' | + | < |
- | '' | + | Apply_Model_Template |
- | '' | + | / |
- | '' | + | / |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Set all the necessary model metrics and recalculate the model:**\\ | **Set all the necessary model metrics and recalculate the model:**\\ | ||
- | '' | + | < |
- | '' | + | Set_Model_Metric |
- | '' | + | ! / |
- | '' | + | / |
- | '' | + | / |
- | '' | + | ! /SUBJECT= |
- | //'' | + | ; |
+ | |||
+ | ... See the attached pipeline for full list of commands ... | ||
+ | </code> | ||
\\ | \\ | ||
**Assign the model to the dynamic files:**\\ | **Assign the model to the dynamic files:**\\ | ||
- | '' | + | < |
- | '' | + | Assign_Model_File |
- | '' | + | / |
- | '' | + | / |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Set all files to active:**\\ | **Set all files to active:**\\ | ||
- | '' | + | < |
- | '' | + | Select_Active_File |
- | '' | + | /FILE_NAME= ALL_FILES |
- | '' | + | ! /QUERY= |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Filter and Interpolate available data**\\ | **Filter and Interpolate available data**\\ | ||
- | '' | + | < |
+ | ...See attached pipeline for examples of computation commands ... | ||
+ | </code> | ||
\\ | \\ | ||
**Calculate Gait Events through the use of Kinematic signals**\\ | **Calculate Gait Events through the use of Kinematic signals**\\ | ||
- | '' | + | < |
+ | ...See attached pipeline for examples of computation commands ... | ||
+ | </code> | ||
\\ | \\ | ||
Line 440: | Line 476: | ||
\\ | \\ | ||
**Run all desired computations and then save the workspace to a CMZ using the subject ID as the file name and end the loop**\\ | **Run all desired computations and then save the workspace to a CMZ using the subject ID as the file name and end the loop**\\ | ||
- | '' | + | < |
- | \\ | + | ..See attached pipeline for examples of computation commands ... |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | \\ | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
+ | File_Save_As | ||
+ | / | ||
+ | / | ||
+ | ! / | ||
+ | ! / | ||
+ | ! / | ||
+ | ; | ||
+ | |||
+ | |||
+ | End_For_Each | ||
+ | / | ||
+ | ; | ||
+ | </ | ||
==== Processing C3Ds into CMZs (Able-Bodied Participants) ==== | ==== Processing C3Ds into CMZs (Able-Bodied Participants) ==== | ||
Line 462: | Line 500: | ||
Run the pipeline **process_c3ds_healthy.v3s**, | Run the pipeline **process_c3ds_healthy.v3s**, | ||
- | |||
\\ | \\ | ||
**Set a pipeline parameter to 0, this will be used for the naming of the CMZ file. The value will be iterated within the loop:**\\ | **Set a pipeline parameter to 0, this will be used for the naming of the CMZ file. The value will be iterated within the loop:**\\ | ||
- | '' | + | < |
- | '' | + | Set_Pipeline_Parameter |
- | '' | + | / |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Set a pipeline parameter to a list of folders containing C3Ds within the 138_Healthy_PiG_10.05 folder:**\\ | **Set a pipeline parameter to a list of folders containing C3Ds within the 138_Healthy_PiG_10.05 folder:**\\ | ||
- | \\ | + | < |
- | '' | + | Set_Pipeline_Parameter_To_Folder_Path |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ; |
- | \\ | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
+ | Set_Pipeline_Parameter_To_List_Of_Files | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | ! / | ||
+ | / | ||
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Loop through the folders: | **Loop through the folders: | ||
- | '' | + | < |
- | '' | + | For_Each |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Calibrations files are numbered (0) so get a list of all files ending with 0) (There should only be one in each folder): | **Calibrations files are numbered (0) so get a list of all files ending with 0) (There should only be one in each folder): | ||
- | '' | + | < |
- | '' | + | Set_Pipeline_Parameter_To_List_Of_Files |
- | '' | + | / |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Open a new workspace: | **Open a new workspace: | ||
- | '' | + | < |
- | '' | + | File_New |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Open the calibration file:**\\ | **Open the calibration file:**\\ | ||
- | '' | + | < |
- | '' | + | File_Open |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | ! /SUFFIX= |
- | '' | + | ! / |
- | '' | + | / |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Set the calibration file to active:**\\ | **Set the calibration file to active:**\\ | ||
- | '' | + | < |
- | '' | + | Select_Active_File |
- | '' | + | / |
- | '' | + | ! /QUERY= |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Save all the necessary information stored in PARAMETERS: | **Save all the necessary information stored in PARAMETERS: | ||
- | '' | + | < |
- | '' | + | Set_Pipeline_Parameter_To_Data_Value |
- | '' | + | / |
- | '' | + | / |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | / |
- | //'' | + | ; |
+ | ... See attached pipeline for full list of commands ... | ||
+ | </ | ||
\\ | \\ | ||
**Visual 3Ds expected unit of measurement is meters so the knee widths, ankle widths and height need to be converted from mm to m:**\\ | **Visual 3Ds expected unit of measurement is meters so the knee widths, ankle widths and height need to be converted from mm to m:**\\ | ||
- | '' | + | < |
- | '' | + | Set_Pipeline_Parameter_From_Expression |
- | '' | + | / |
- | '' | + | / |
- | '' | + | / |
- | //'' | + | ; |
+ | ... See attached pipeline for full list of commands ... | ||
+ | </ | ||
\\ | \\ | ||
**Close the calibration file:**\\ | **Close the calibration file:**\\ | ||
- | '' | + | < |
- | '' | + | File_Close |
- | '' | + | / |
- | '' | + | ! /QUERY= |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**To open the dynamic files without re-opening the calibration file, list all C3D files within the current folder:**\\ | **To open the dynamic files without re-opening the calibration file, list all C3D files within the current folder:**\\ | ||
- | '' | + | < |
- | '' | + | Set_Pipeline_Parameter_To_List_Of_Files |
- | '' | + | / |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Loop through each file:**\\ | **Loop through each file:**\\ | ||
- | '' | + | < |
- | '' | + | For_Each |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Use a conditional statement to check that the current file name does not match the calibrations file name:**\\ | **Use a conditional statement to check that the current file name does not match the calibrations file name:**\\ | ||
- | '' | + | < |
- | '' | + | Conditional_Statement |
- | '' | + | / |
- | '' | + | / |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**if the file names do not match open the selected file:**\\ | **if the file names do not match open the selected file:**\\ | ||
- | '' | + | < |
- | '' | + | File_Open |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | ! /SUFFIX= |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Close the conditional statement and the loop**\\ | **Close the conditional statement and the loop**\\ | ||
- | '' | + | < |
- | '' | + | Conditional_Statement_End |
- | '' | + | / |
- | \\ | + | ; |
- | '' | + | |
- | '' | + | |
- | '' | + | |
+ | End_For_Each | ||
+ | / | ||
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Set all dynamic files to active:**\\ | **Set all dynamic files to active:**\\ | ||
- | '' | + | < |
- | '' | + | Select_Active_File |
- | '' | + | / |
- | '' | + | ! /QUERY= |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Create a hybrid model using the calibration file:**\\ | **Create a hybrid model using the calibration file:**\\ | ||
- | '' | + | < |
- | '' | + | Create_Hybrid_Model |
- | '' | + | / |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Apply the model template: | **Apply the model template: | ||
- | '' | + | < |
- | '' | + | / |
- | '' | + | !/ |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Set the necessary model metrics using the parameters saved from the calibration file and then recalculate the model:**\\ | **Set the necessary model metrics using the parameters saved from the calibration file and then recalculate the model:**\\ | ||
- | '' | + | < |
- | '' | + | Set_Model_Metric |
- | '' | + | ! / |
- | '' | + | / |
- | '' | + | / |
- | '' | + | ! /SUBJECT= |
- | //'' | + | ; |
+ | ... See the attached pipeline for full list of commands ... | ||
+ | </ | ||
\\ | \\ | ||
**Assign model to the dynamic files:**\\ | **Assign model to the dynamic files:**\\ | ||
- | '' | + | < |
- | '' | + | Assign_Model_File |
- | '' | + | / |
- | '' | + | / |
- | '' | + | ! / |
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Run all desired computations, | **Run all desired computations, | ||
- | '' | + | < |
- | '' | + | ... See attached pipeline for examples of computation commands ... |
- | '' | + | |
- | '' | + | |
- | '' | + | |
- | '' | + | |
+ | Set_Pipeline_Parameter_From_Expression | ||
+ | / | ||
+ | / | ||
+ | ! / | ||
+ | ; | ||
+ | </ | ||
\\ | \\ | ||
**Save the workspace as a CMZ appending the SUB_NUM variable to the name, then close the loop:**\\ | **Save the workspace as a CMZ appending the SUB_NUM variable to the name, then close the loop:**\\ | ||
- | '' | + | < |
- | '' | + | / |
- | '' | + | / |
- | '' | + | ! / |
- | '' | + | ! / |
- | '' | + | ! / |
- | \\ | + | ; |
- | '' | + | |
- | '' | + | End_For_Each |
- | '' | + | / |
+ | ; | ||
+ | </ | ||
==== Missing Parameters ==== | ==== Missing Parameters ==== | ||
Line 708: | Line 771: | ||
Upon inspection some of the dynamic files were missing or have incorrectly named parameters needed to calculate the model (height, mass, ankle widths, and knee widths) in the case of the stroke participants this data was provided in a spreadsheet so the values can be entered manually and the models recalculated. | Upon inspection some of the dynamic files were missing or have incorrectly named parameters needed to calculate the model (height, mass, ankle widths, and knee widths) in the case of the stroke participants this data was provided in a spreadsheet so the values can be entered manually and the models recalculated. | ||
- | {{missing.jpg}} | + | {{:missing.jpg}} |
Open the CMZ one of Stroke Survivors 24, 34, or 57 (TVC_24.cmz, | Open the CMZ one of Stroke Survivors 24, 34, or 57 (TVC_24.cmz, |
visual3d/tutorials/knowledge_discovery/looking_at_large_public_data_sets.1720793335.txt.gz · Last modified: 2024/07/12 14:08 by sgranger