autogaita 0.4.0__tar.gz → 0.4.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {autogaita-0.4.0 → autogaita-0.4.1}/PKG-INFO +1 -1
- {autogaita-0.4.0 → autogaita-0.4.1}/README.md +14 -9
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/autogaita_dlc.py +23 -18
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/autogaita_group_gui.py +4 -4
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/autogaita_simi_gui.py +1 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/batchrun_scripts/autogaita_dlc_singlerun.py +1 -1
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/dlc_gui_config.json +25 -24
- autogaita-0.4.1/autogaita/group_gui_config.json +69 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/simi_gui_config.json +18 -10
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita.egg-info/PKG-INFO +1 -1
- {autogaita-0.4.0 → autogaita-0.4.1}/setup.py +1 -1
- {autogaita-0.4.0 → autogaita-0.4.1}/tests/test_dlc_unit3_main_analysis.py +3 -2
- autogaita-0.4.0/autogaita/group_gui_config.json +0 -37
- {autogaita-0.4.0 → autogaita-0.4.1}/LICENSE +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/__init__.py +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/__main__.py +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/autogaita.py +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/autogaita_dlc_gui.py +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/autogaita_group.py +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/autogaita_icon.icns +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/autogaita_icon.ico +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/autogaita_logo.png +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/autogaita_simi.py +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/autogaita_utils.py +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/batchrun_scripts/__init__.py +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/batchrun_scripts/autogaita_dlc_multirun.py +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/batchrun_scripts/autogaita_group_dlcrun.py +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/batchrun_scripts/autogaita_group_simirun.py +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/batchrun_scripts/autogaita_simi_multirun.py +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita/batchrun_scripts/autogaita_simi_singlerun.py +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita.egg-info/SOURCES.txt +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita.egg-info/dependency_links.txt +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita.egg-info/requires.txt +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/autogaita.egg-info/top_level.txt +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/setup.cfg +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/tests/test_dlc_approval.py +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/tests/test_dlc_unit1_preparation.py +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/tests/test_dlc_unit2_sc_extraction.py +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/tests/test_group_approval.py +0 -0
- {autogaita-0.4.0 → autogaita-0.4.1}/tests/test_simi_approval.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: autogaita
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.1
|
|
4
4
|
Summary: Automatic Gait Analysis in Python. A toolbox to streamline and standardise the analysis of kinematics across species after ML-based body posture tracking. Despite being optimised for gait analyses, AutoGaitA has the potential to be used for any kind of kinematic analysis.
|
|
5
5
|
Home-page: https://github.com/mahan-hosseini/AutoGaitA/
|
|
6
6
|
Author: Mahan Hosseini
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
It is strongly recommended that a separate virtual environment for AutoGaitA is created (note that the approach below creates the virtual environment to your current directory):
|
|
22
22
|
|
|
23
|
-
- Create the virtual environment
|
|
23
|
+
- Create the virtual environment:
|
|
24
24
|
- `python -m venv env_gaita`
|
|
25
25
|
|
|
26
26
|
- After creation, activate the virtual environment via:
|
|
@@ -29,17 +29,22 @@ It is strongly recommended that a separate virtual environment for AutoGaitA is
|
|
|
29
29
|
|
|
30
30
|
- Once activated, install AutoGaitA in the virtual environment via pip: `pip install autogaita`.
|
|
31
31
|
|
|
32
|
-
- Access the main user interface via `python -m autogaita`.
|
|
32
|
+
- Access the main user interface via: `python -m autogaita`.
|
|
33
33
|
|
|
34
34
|
- To update to the latest release (see the *Releases* panel on the right for the latest release) activate the virtual environment and: `pip install autogaita -U`.
|
|
35
35
|
|
|
36
|
-
##
|
|
36
|
+
## Demo Video
|
|
37
|
+
*Check out the video below for a demonstration of AutoGaitA's main workflow!*
|
|
38
|
+
<p><a href="https://youtu.be/_HIZVuUzpzk?feature=shared">
|
|
39
|
+
<img src="https://github.com/mahan-hosseini/AutoGaitA/blob/main/res/pic_to_demo_for_repo.png" width="550">
|
|
37
40
|
|
|
38
|
-
|
|
41
|
+
## Tutorials & Examples
|
|
39
42
|
|
|
40
|
-
|
|
43
|
+
### Walkthrough Tutorial Videos
|
|
41
44
|
|
|
42
|
-
|
|
45
|
+
**[The AutoGaitA YouTube Channel](https://youtube.com/playlist?list=PLCn5T7K_H8K56NIcEsfDK664OP7cN_Bad&si=mV5p2--nYvbofkPh) provides tutorials for file preparation and instructions on how to use AutoGaitA. This includes in-depth explanations of all details, (main & advanced) configurations, possibilities, and outputs.**
|
|
46
|
+
|
|
47
|
+
*Please note that tutorial videos might not always reflect the most up-to-date version of our toolbox, especially in the beginning when things are regularly changing. We will make sure to record new videos whenever there are major changes though. Last tutorial-update was with v0.4.0. (August 2024).*
|
|
43
48
|
|
|
44
49
|
### Example Data
|
|
45
50
|
We provide an example dataset in the **example data** folder of this repository, with a set of mice walking over differently wide beams and both the beam as well as body coordinates being tracked with DLC. Note that this dataset was used in our tutorial videos introducing *AutoGaitA_DLC*, *AutoGaitA_Group* and in our video explaining file preparation for *AutoGaitA_DLC*. We further provide a **group** folder there that can be used alongside the *AutoGaitA_Group* tutorial to confirm that users generate the same set of results following our instructions.
|
|
@@ -47,7 +52,7 @@ We provide an example dataset in the **example data** folder of this repository,
|
|
|
47
52
|
### Annotation Table Examples and Templates
|
|
48
53
|
Annotation Table example and template files for *AutoGaitA_DLC* and *AutoGaitA_Simi* can be found in the [**annotation tables**](https://github.com/mahan-hosseini/AutoGaitA/tree/main/annotation%20tables) folder of this repository.
|
|
49
54
|
|
|
50
|
-
Users are advised to read the
|
|
55
|
+
Users are advised to read the **General Recommendations** section of that folder, use the template to enter their data's timestamp information and to then compare the resulting table with our example to check formatting. Users working with ImageJ/FIJI are encouraged to check out the [AnnotationTable-Plugin](https://github.com/luca-flemming/AnnotationTable-Plugin) developed by our contributor Luca Flemming.
|
|
51
56
|
|
|
52
57
|
## Documentation
|
|
53
58
|
|
|
@@ -59,8 +64,8 @@ Users are advised to read the ***important note*** of that folder, use the templ
|
|
|
59
64
|
By default, *AutoGaitA DLC* and *AutoGaitA Simi* implement standard values for mouse and human locomotion, respectively. If your analysis deviates from these standards (e.g. by focussing on another limb or a different species) **you must change these values!** You can find the window in the *advanced configuration* sections and once values are customised they remain for subsequent executions of AutoGaitA (i.e., until the program is closed).
|
|
60
65
|
|
|
61
66
|
**Find out more about *AutoGaitA's custom joints and angles:***
|
|
62
|
-
- [YouTube - AutoGaitA DLC Advanced Configuration](https://youtu.be/
|
|
63
|
-
- [YouTube - AutoGaitA Simi](https://youtu.be/
|
|
67
|
+
- [YouTube - AutoGaitA DLC Advanced Configuration](https://youtu.be/MP9g9kXRE_Q?feature=shared)
|
|
68
|
+
- [YouTube - AutoGaitA Simi](https://youtu.be/rTG-Fc9XI9g?feature=shared)
|
|
64
69
|
- [Documentation - AutoGaitA DLC](https://docs.google.com/document/d/1Y4wrrsjs0ybLDKPzE2LAatqPDq9jtwjIuk4M0jRZ3wE/edit#heading=h.20bg7b7ymt0b)
|
|
65
70
|
- [Documentation - AutoGaitA Simi](https://docs.google.com/document/d/1Y4wrrsjs0ybLDKPzE2LAatqPDq9jtwjIuk4M0jRZ3wE/edit#heading=h.uz61bpmua7qz)
|
|
66
71
|
|
|
@@ -1286,10 +1286,13 @@ def standardise_x_y_and_add_features_to_one_step(step, cfg):
|
|
|
1286
1286
|
else:
|
|
1287
1287
|
this_y_min = step_copy[y_cols].min().min()
|
|
1288
1288
|
step_copy[y_cols] -= this_y_min
|
|
1289
|
-
# add
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1289
|
+
# if no x-standardisation, just add features & return non-(x-)normalised step
|
|
1290
|
+
if cfg["standardise_x_coordinates"] is False:
|
|
1291
|
+
non_norm_step = add_features(step_copy, cfg)
|
|
1292
|
+
return non_norm_step
|
|
1293
|
+
# else standardise x (horizontal dimension) at step-cycle level too
|
|
1294
|
+
else:
|
|
1295
|
+
non_norm_step = add_features(step_copy, cfg)
|
|
1293
1296
|
x_norm_step = step_copy.copy()
|
|
1294
1297
|
x_cols = [col for col in x_norm_step.columns if col.endswith("x")]
|
|
1295
1298
|
# note the [0] here is important because it's still a list of len=1!!
|
|
@@ -1298,9 +1301,7 @@ def standardise_x_y_and_add_features_to_one_step(step, cfg):
|
|
|
1298
1301
|
].min()
|
|
1299
1302
|
x_norm_step[x_cols] -= min_x_standardisation_joint
|
|
1300
1303
|
x_norm_step = add_features(x_norm_step, cfg)
|
|
1301
|
-
return
|
|
1302
|
-
else:
|
|
1303
|
-
return step_copy
|
|
1304
|
+
return non_norm_step, x_norm_step
|
|
1304
1305
|
|
|
1305
1306
|
|
|
1306
1307
|
def add_features(step, cfg):
|
|
@@ -1308,10 +1309,11 @@ def add_features(step, cfg):
|
|
|
1308
1309
|
# unpack
|
|
1309
1310
|
hind_joints = cfg["hind_joints"]
|
|
1310
1311
|
angles = cfg["angles"]
|
|
1312
|
+
if hind_joints:
|
|
1313
|
+
step = add_x_velocities(step, cfg)
|
|
1311
1314
|
if angles["name"]: # if there is at least 1 string in the list
|
|
1312
1315
|
step = add_angles(step, cfg)
|
|
1313
|
-
|
|
1314
|
-
step = add_velocities(step, cfg)
|
|
1316
|
+
step = add_angular_velocities(step, cfg)
|
|
1315
1317
|
return step
|
|
1316
1318
|
|
|
1317
1319
|
|
|
@@ -1356,28 +1358,31 @@ def compute_angle(joint_angle, joint2, joint3):
|
|
|
1356
1358
|
return math.degrees(angle)
|
|
1357
1359
|
|
|
1358
1360
|
|
|
1359
|
-
def
|
|
1360
|
-
"""Feature #2: Joint x
|
|
1361
|
+
def add_x_velocities(step, cfg):
|
|
1362
|
+
"""Feature #2: Joint x Velocities & Accelerations"""
|
|
1361
1363
|
# unpack
|
|
1362
1364
|
hind_joints = cfg["hind_joints"]
|
|
1363
1365
|
x_acceleration = cfg["x_acceleration"]
|
|
1364
|
-
|
|
1365
|
-
# compute velocities (& acceleration if wanted) for hind joints first
|
|
1366
|
+
|
|
1366
1367
|
for joint in hind_joints:
|
|
1367
1368
|
step[joint + "Velocity"] = 0.0
|
|
1368
1369
|
if x_acceleration:
|
|
1369
1370
|
step[joint + "Acceleration"] = 0.0
|
|
1370
|
-
# step[joint + "Accel. Gradient"] = 0.0
|
|
1371
1371
|
for joint in hind_joints:
|
|
1372
1372
|
step.loc[:, joint + "Velocity"] = np.gradient(step.loc[:, joint + "x"])
|
|
1373
1373
|
if x_acceleration:
|
|
1374
1374
|
step.loc[:, joint + "Acceleration"] = np.gradient(
|
|
1375
1375
|
step.loc[:, joint + "Velocity"]
|
|
1376
1376
|
)
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1377
|
+
return step
|
|
1378
|
+
|
|
1379
|
+
|
|
1380
|
+
def add_angular_velocities(step, cfg):
|
|
1381
|
+
"""Feature #3: Angular Velocities & Accelerations"""
|
|
1382
|
+
# unpack
|
|
1383
|
+
angular_acceleration = cfg["angular_acceleration"]
|
|
1384
|
+
|
|
1385
|
+
angle_cols = [c for c in step.columns if c.endswith("Angle")]
|
|
1381
1386
|
for angle in angle_cols:
|
|
1382
1387
|
step[angle + " Velocity"] = 0.0 # space is correct here
|
|
1383
1388
|
if angular_acceleration:
|
|
@@ -82,7 +82,7 @@ COLOR_PALETTES_LIST = [
|
|
|
82
82
|
"cividis_r", # uniform palettes in reversed order
|
|
83
83
|
]
|
|
84
84
|
EXCLUDED_VARS_FROM_CFG_FILE = ["last_runs_stats_variables", "last_runs_PCA_variables"]
|
|
85
|
-
|
|
85
|
+
NORM_SHEET_NAME = "Normalised Stepcycle"
|
|
86
86
|
WINDOWS_TASKBAR_MAXHEIGHT = 72
|
|
87
87
|
|
|
88
88
|
# To get the path of the autogaita folder I use __file__
|
|
@@ -134,7 +134,7 @@ def group_gui():
|
|
|
134
134
|
root_dimensions = (root_w, root_h, root_x, root_y)
|
|
135
135
|
# set the dimensions of the screen and where it is placed
|
|
136
136
|
root.geometry("%dx%d+%d+%d" % root_dimensions)
|
|
137
|
-
root.title("
|
|
137
|
+
root.title("Group GaitA")
|
|
138
138
|
|
|
139
139
|
# nested function: main window
|
|
140
140
|
def mainwindow(root, group_number, root_dimensions):
|
|
@@ -230,7 +230,7 @@ def build_mainwindow(root, group_number, root_dimensions):
|
|
|
230
230
|
# ........................ geometry & intro section ..........................
|
|
231
231
|
# geometry
|
|
232
232
|
mainwindow = ctk.CTkToplevel(root)
|
|
233
|
-
mainwindow.title("
|
|
233
|
+
mainwindow.title("Group GaitA")
|
|
234
234
|
# set the dimensions of the screen and where it is placed
|
|
235
235
|
# => have it half-wide starting at 1/4 of screen's width (dont change w & x!)
|
|
236
236
|
mainwindow.geometry(
|
|
@@ -668,7 +668,7 @@ def definefeatures_window(
|
|
|
668
668
|
# next operator means we loop lazy - stop once we find it & return None if av
|
|
669
669
|
# sheet not in dir
|
|
670
670
|
av_sheet_path = next(
|
|
671
|
-
(file for file in IDs_files if
|
|
671
|
+
(file for file in IDs_files if NORM_SHEET_NAME in file), None
|
|
672
672
|
)
|
|
673
673
|
if av_sheet_path: # won't be true if no AVXLS found
|
|
674
674
|
full_path = os.path.join(some_IDs_dir, av_sheet_path)
|
|
@@ -378,6 +378,7 @@ def build_cfg_window(root, cfg, root_dimensions):
|
|
|
378
378
|
screen_height = root.winfo_screenheight() # height of the screen
|
|
379
379
|
# build window
|
|
380
380
|
cfg_window = ctk.CTkToplevel(root)
|
|
381
|
+
cfg_window.title("Advanced Configuration")
|
|
381
382
|
cfg_window.geometry(
|
|
382
383
|
f"{int(screen_width/2)}x{screen_height}+{int(screen_width/4)}+0"
|
|
383
384
|
)
|
|
@@ -33,7 +33,7 @@ def dlc_singlerun():
|
|
|
33
33
|
cfg["save_to_xls"] = True
|
|
34
34
|
cfg["bin_num"] = 25
|
|
35
35
|
cfg["plot_SE"] = True
|
|
36
|
-
cfg["standardise_y_at_SC_level"] =
|
|
36
|
+
cfg["standardise_y_at_SC_level"] = False
|
|
37
37
|
cfg["standardise_y_to_a_joint"] = True
|
|
38
38
|
cfg["y_standardisation_joint"] = ["Hind paw tao"]
|
|
39
39
|
cfg["plot_joint_number"] = 3
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
[
|
|
2
2
|
{
|
|
3
|
-
"mouse_num": "",
|
|
4
|
-
"run_num": "",
|
|
5
|
-
"root_dir": "",
|
|
6
|
-
"sctable_filename": "",
|
|
7
|
-
"data_string": "",
|
|
8
|
-
"beam_string": "",
|
|
9
|
-
"premouse_string": "",
|
|
10
|
-
"postmouse_string": "",
|
|
11
|
-
"prerun_string": "",
|
|
12
|
-
"postrun_string": ""
|
|
3
|
+
"mouse_num": "14",
|
|
4
|
+
"run_num": "1",
|
|
5
|
+
"root_dir": "/Users/mahan/sciebo/Research/AutoGaitA/CRC Demo Files/CRC_Demo_Mice/",
|
|
6
|
+
"sctable_filename": "25mm",
|
|
7
|
+
"data_string": "SIMINewOct",
|
|
8
|
+
"beam_string": "BeamTrain",
|
|
9
|
+
"premouse_string": "Mouse",
|
|
10
|
+
"postmouse_string": "25mm",
|
|
11
|
+
"prerun_string": "run",
|
|
12
|
+
"postrun_string": "-6DLC"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
|
-
"sampling_rate": "",
|
|
16
|
-
"subtract_beam":
|
|
15
|
+
"sampling_rate": "100",
|
|
16
|
+
"subtract_beam": true,
|
|
17
17
|
"dont_show_plots": false,
|
|
18
|
-
"convert_to_mm":
|
|
19
|
-
"pixel_to_mm_ratio": "",
|
|
18
|
+
"convert_to_mm": true,
|
|
19
|
+
"pixel_to_mm_ratio": "3.76",
|
|
20
20
|
"x_sc_broken_threshold": "200",
|
|
21
21
|
"y_sc_broken_threshold": "50",
|
|
22
22
|
"x_acceleration": true,
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"save_to_xls": true,
|
|
25
25
|
"bin_num": "25",
|
|
26
26
|
"plot_joint_number": "3",
|
|
27
|
-
"plot_SE":
|
|
28
|
-
"standardise_y_at_SC_level":
|
|
27
|
+
"plot_SE": true,
|
|
28
|
+
"standardise_y_at_SC_level": true,
|
|
29
29
|
"standardise_y_to_a_joint": true,
|
|
30
30
|
"y_standardisation_joint": [
|
|
31
31
|
"Hind paw tao"
|
|
@@ -41,11 +41,9 @@
|
|
|
41
41
|
"legend_outside": true,
|
|
42
42
|
"results_dir": "",
|
|
43
43
|
"hind_joints": [
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"Knee "
|
|
47
|
-
"Hip ",
|
|
48
|
-
"Iliac Crest "
|
|
44
|
+
"Foot",
|
|
45
|
+
"Shoulder",
|
|
46
|
+
"Knee "
|
|
49
47
|
],
|
|
50
48
|
"fore_joints": [
|
|
51
49
|
"Front paw tao ",
|
|
@@ -73,17 +71,20 @@
|
|
|
73
71
|
"name": [
|
|
74
72
|
"Ankle",
|
|
75
73
|
"Knee",
|
|
76
|
-
"Hip"
|
|
74
|
+
"Hip",
|
|
75
|
+
"Elbow"
|
|
77
76
|
],
|
|
78
77
|
"lower_joint": [
|
|
79
78
|
"Hind paw tao",
|
|
80
79
|
"Ankle",
|
|
81
|
-
"Knee"
|
|
80
|
+
"Knee",
|
|
81
|
+
"Wrist"
|
|
82
82
|
],
|
|
83
83
|
"upper_joint": [
|
|
84
84
|
"Knee",
|
|
85
85
|
"Hip",
|
|
86
|
-
"Iliac Crest"
|
|
86
|
+
"Iliac Crest",
|
|
87
|
+
"Shoulder"
|
|
87
88
|
]
|
|
88
89
|
}
|
|
89
90
|
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"group_names": [
|
|
4
|
+
"5 mm",
|
|
5
|
+
"12 mm",
|
|
6
|
+
"25 mm ",
|
|
7
|
+
"",
|
|
8
|
+
"",
|
|
9
|
+
""
|
|
10
|
+
],
|
|
11
|
+
"group_dirs": [
|
|
12
|
+
"/Users/mahan/sciebo/PythonCode/autogaita_repository/example data/5mm/Results",
|
|
13
|
+
"/Users/mahan/sciebo/PythonCode/autogaita_repository/example data/12mm/Results",
|
|
14
|
+
"/Users/mahan/sciebo/PythonCode/autogaita_repository/example data/25mm/Results",
|
|
15
|
+
"",
|
|
16
|
+
"",
|
|
17
|
+
""
|
|
18
|
+
],
|
|
19
|
+
"results_dir": "/Users/mahan/Desktop/GroupResults/"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"do_permtest": false,
|
|
23
|
+
"do_anova": true,
|
|
24
|
+
"anova_design": "RM ANOVA",
|
|
25
|
+
"permutation_number": 10000,
|
|
26
|
+
"stats_threshold": "0.05",
|
|
27
|
+
"which_leg": "right",
|
|
28
|
+
"number_of_PCs": 3,
|
|
29
|
+
"save_3D_PCA_video": false,
|
|
30
|
+
"plot_SE": false,
|
|
31
|
+
"color_palette": "viridis",
|
|
32
|
+
"dont_show_plots": false,
|
|
33
|
+
"legend_outside": true,
|
|
34
|
+
"stats_variables": [
|
|
35
|
+
"Ankle y"
|
|
36
|
+
],
|
|
37
|
+
"PCA_variables": [
|
|
38
|
+
"Wrist y",
|
|
39
|
+
"Elbow x",
|
|
40
|
+
"Elbow y",
|
|
41
|
+
"Lower Shoulder x",
|
|
42
|
+
"Lower Shoulder y",
|
|
43
|
+
"Upper Shoulder x",
|
|
44
|
+
"Upper Shoulder y",
|
|
45
|
+
"Iliac Crest x",
|
|
46
|
+
"Iliac Crest y",
|
|
47
|
+
"Hip x",
|
|
48
|
+
"Hip y",
|
|
49
|
+
"Knee x",
|
|
50
|
+
"Knee y",
|
|
51
|
+
"Ankle x",
|
|
52
|
+
"Ankle y",
|
|
53
|
+
"Hind paw tao x",
|
|
54
|
+
"Hind paw tao y",
|
|
55
|
+
"Tail base x",
|
|
56
|
+
"Tail base y",
|
|
57
|
+
"Tail center x",
|
|
58
|
+
"Tail center y",
|
|
59
|
+
"Tail tip x",
|
|
60
|
+
"Tail tip y",
|
|
61
|
+
"Ankle Angle",
|
|
62
|
+
"Knee Angle",
|
|
63
|
+
"Hip Angle",
|
|
64
|
+
"Hind paw tao Velocity",
|
|
65
|
+
"Hind paw tao Acceleration",
|
|
66
|
+
"Ankle Velocity"
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
]
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
[
|
|
2
2
|
{
|
|
3
|
-
"name": "",
|
|
4
|
-
"root_dir": "",
|
|
5
|
-
"sctable_filename": "",
|
|
3
|
+
"name": "Control_1",
|
|
4
|
+
"root_dir": "/Users/mahan/sciebo/Research/AutoGaitA/Human/Testing2",
|
|
5
|
+
"sctable_filename": "SC Latency Table",
|
|
6
6
|
"postname_flag": false,
|
|
7
7
|
"postname_string": ""
|
|
8
8
|
},
|
|
9
9
|
{
|
|
10
10
|
"analyse_singlerun": false,
|
|
11
|
-
"sampling_rate": "",
|
|
11
|
+
"sampling_rate": "100",
|
|
12
12
|
"dont_show_plots": false,
|
|
13
13
|
"y_acceleration": true,
|
|
14
14
|
"angular_acceleration": true,
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
"plot_joint_number": "3",
|
|
17
17
|
"plot_SE": false,
|
|
18
18
|
"normalise_height_at_SC_level": true,
|
|
19
|
-
"analyse_average_y":
|
|
20
|
-
"color_palette": "
|
|
19
|
+
"analyse_average_y": true,
|
|
20
|
+
"color_palette": "Set2",
|
|
21
21
|
"legend_outside": true,
|
|
22
22
|
"results_dir": "",
|
|
23
23
|
"joints": [
|
|
@@ -25,23 +25,31 @@
|
|
|
25
25
|
"Ankle ",
|
|
26
26
|
"Knee ",
|
|
27
27
|
"Hip ",
|
|
28
|
-
"Pelvis "
|
|
28
|
+
"Pelvis ",
|
|
29
|
+
"",
|
|
30
|
+
""
|
|
29
31
|
],
|
|
30
32
|
"angles": {
|
|
31
33
|
"name": [
|
|
32
34
|
"Ankle",
|
|
33
35
|
"Knee",
|
|
34
|
-
"Hip"
|
|
36
|
+
"Hip",
|
|
37
|
+
"",
|
|
38
|
+
""
|
|
35
39
|
],
|
|
36
40
|
"lower_joint": [
|
|
37
41
|
"Midfoot",
|
|
38
42
|
"Ankle",
|
|
39
|
-
"Knee"
|
|
43
|
+
"Knee",
|
|
44
|
+
"",
|
|
45
|
+
""
|
|
40
46
|
],
|
|
41
47
|
"upper_joint": [
|
|
42
48
|
"Knee",
|
|
43
49
|
"Hip",
|
|
44
|
-
"Pelvis"
|
|
50
|
+
"Pelvis",
|
|
51
|
+
"",
|
|
52
|
+
""
|
|
45
53
|
]
|
|
46
54
|
}
|
|
47
55
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: autogaita
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.1
|
|
4
4
|
Summary: Automatic Gait Analysis in Python. A toolbox to streamline and standardise the analysis of kinematics across species after ML-based body posture tracking. Despite being optimised for gait analyses, AutoGaitA has the potential to be used for any kind of kinematic analysis.
|
|
5
5
|
Home-page: https://github.com/mahan-hosseini/AutoGaitA/
|
|
6
6
|
Author: Mahan Hosseini
|
|
@@ -25,7 +25,7 @@ if platform.system() == "Darwin":
|
|
|
25
25
|
setup(
|
|
26
26
|
name="autogaita",
|
|
27
27
|
python_requires=">=3.10",
|
|
28
|
-
version="0.4.
|
|
28
|
+
version="0.4.1", # rc == release candidate (before release is finished)
|
|
29
29
|
author="Mahan Hosseini",
|
|
30
30
|
description="Automatic Gait Analysis in Python. A toolbox to streamline and standardise the analysis of kinematics across species after ML-based body posture tracking. Despite being optimised for gait analyses, AutoGaitA has the potential to be used for any kind of kinematic analysis.",
|
|
31
31
|
packages=["autogaita", "autogaita.batchrun_scripts"],
|
|
@@ -3,7 +3,7 @@ from autogaita.autogaita_dlc import (
|
|
|
3
3
|
extract_stepcycles,
|
|
4
4
|
analyse_and_export_stepcycles,
|
|
5
5
|
)
|
|
6
|
-
from autogaita.autogaita_dlc import add_angles,
|
|
6
|
+
from autogaita.autogaita_dlc import add_angles, add_x_velocities, add_angular_velocities
|
|
7
7
|
from autogaita.autogaita_dlc import standardise_x_y_and_add_features_to_one_step
|
|
8
8
|
from hypothesis import given
|
|
9
9
|
import hypothesis.strategies as st
|
|
@@ -217,7 +217,8 @@ def test_velocities():
|
|
|
217
217
|
"x_acceleration": True,
|
|
218
218
|
"angular_acceleration": True,
|
|
219
219
|
}
|
|
220
|
-
step =
|
|
220
|
+
step = add_x_velocities(step, cfg)
|
|
221
|
+
step = add_angular_velocities(step, cfg)
|
|
221
222
|
# expected values were obtained by calling np.gradient on arrays above
|
|
222
223
|
expected_values = {
|
|
223
224
|
"Sample Velocity": [2.0, 2.0, 3.0, 2.0, -2.0, -3.0, -2.0, -2.0, -5.0, -8.0],
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"group_names": [
|
|
4
|
-
"",
|
|
5
|
-
"",
|
|
6
|
-
"",
|
|
7
|
-
"",
|
|
8
|
-
"",
|
|
9
|
-
""
|
|
10
|
-
],
|
|
11
|
-
"group_dirs": [
|
|
12
|
-
"",
|
|
13
|
-
"",
|
|
14
|
-
"",
|
|
15
|
-
"",
|
|
16
|
-
"",
|
|
17
|
-
""
|
|
18
|
-
],
|
|
19
|
-
"results_dir": ""
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
"do_permtest": true,
|
|
23
|
-
"do_anova": false,
|
|
24
|
-
"anova_design": "",
|
|
25
|
-
"permutation_number": "10000",
|
|
26
|
-
"stats_threshold": "0.05",
|
|
27
|
-
"which_leg": "right",
|
|
28
|
-
"number_of_PCs": 3,
|
|
29
|
-
"save_3D_PCA_video": false,
|
|
30
|
-
"plot_SE": false,
|
|
31
|
-
"color_palette": "viridis",
|
|
32
|
-
"dont_show_plots": false,
|
|
33
|
-
"legend_outside": true,
|
|
34
|
-
"stats_variables": [],
|
|
35
|
-
"PCA_variables": []
|
|
36
|
-
}
|
|
37
|
-
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|