c3d-parser 1.5.1__tar.gz → 1.5.2__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.
- {c3d_parser-1.5.1/src/c3d_parser.egg-info → c3d_parser-1.5.2}/PKG-INFO +2 -2
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/requirements.txt +1 -1
- c3d_parser-1.5.2/src/c3d_parser/__init__.py +2 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/core/c3d_parser.py +0 -14
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/main_window.py +0 -15
- {c3d_parser-1.5.1 → c3d_parser-1.5.2/src/c3d_parser.egg-info}/PKG-INFO +2 -2
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser.egg-info/requires.txt +1 -1
- c3d_parser-1.5.1/src/c3d_parser/__init__.py +0 -2
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/LICENSE +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/README.md +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/pyproject.toml +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/setup.cfg +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/application.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/core/c3d_patch.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/core/osim.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/core/osim_resources/external_loads_template.xml +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/core/osim_resources/ik_task_set.xml +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/core/utils.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/general.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/logging.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/marker_maps/AUC.json +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/marker_maps/FMC.json +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/marker_maps/MH.json +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/marker_maps/QCMAS.json +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/marker_maps/RBWH.json +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/marker_maps/RCH.json +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/marker_maps/Sydney.json +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/splash_rc.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/splashscreen.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/dialogs/about_dialog.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/dialogs/delete_marker_set_dialog.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/dialogs/marker_set_dialog.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/dialogs/marker_set_import_dialog.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/dialogs/options_dialog.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/ui/resources_rc.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/ui/ui_delete_marker_set_dialog.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/ui/ui_main_window.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/ui/ui_marker_set_dialog.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/ui/ui_marker_set_import_dialog.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/ui/ui_options_dialog.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/utils.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/widgets.py +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser.egg-info/SOURCES.txt +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser.egg-info/dependency_links.txt +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser.egg-info/entry_points.txt +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser.egg-info/top_level.txt +0 -0
- {c3d_parser-1.5.1 → c3d_parser-1.5.2}/tests/test_parser.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: c3d-parser
|
|
3
|
-
Version: 1.5.
|
|
3
|
+
Version: 1.5.2
|
|
4
4
|
Summary: C3D parser for gait data harmonisation.
|
|
5
5
|
Author-email: Timothy Salemink <tim.nicolas@outlook.com>, Sally Jack <sallyjaack@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -12,7 +12,7 @@ Requires-Dist: numpy==1.26.4
|
|
|
12
12
|
Requires-Dist: pandas
|
|
13
13
|
Requires-Dist: c3d==0.5.2
|
|
14
14
|
Requires-Dist: trc-data-reader>=0.4.1
|
|
15
|
-
Requires-Dist: opensim-model-creator==0.8.
|
|
15
|
+
Requires-Dist: opensim-model-creator==0.8.1
|
|
16
16
|
Requires-Dist: PySide6
|
|
17
17
|
Requires-Dist: matplotlib
|
|
18
18
|
Requires-Dist: mplcursors
|
|
@@ -525,10 +525,8 @@ def trim_frames(frame_data):
|
|
|
525
525
|
if not drop_frames.empty:
|
|
526
526
|
frame_data.drop(drop_frames, inplace=True)
|
|
527
527
|
|
|
528
|
-
# TODO: If we convert this to a dictionary we can keep the markers that are missing and check if they are required.
|
|
529
528
|
remaining_frames = [frame for frame in incomplete_frames.keys() if trim_start <= frame <= trim_end]
|
|
530
529
|
if remaining_frames:
|
|
531
|
-
# TODO: We should raise a ParserError (skip this trial) if the missing markers are required...?
|
|
532
530
|
logger.warn(f"Frames {remaining_frames} are incomplete.")
|
|
533
531
|
|
|
534
532
|
return trim_start, trim_end
|
|
@@ -1092,8 +1090,6 @@ def scale_grf_data(analog_data):
|
|
|
1092
1090
|
analog_data[columns] = analog_data[columns] / 1000
|
|
1093
1091
|
|
|
1094
1092
|
|
|
1095
|
-
# TODO: This incorrectly classifies Adelaide's static trials as dynamic.
|
|
1096
|
-
# Use `calculate_distance_covered` instead?
|
|
1097
1093
|
def is_dynamic(file_path):
|
|
1098
1094
|
with open(file_path, 'rb') as handle:
|
|
1099
1095
|
try:
|
|
@@ -1269,11 +1265,6 @@ def normalise_kinetics(kinetic_data, events):
|
|
|
1269
1265
|
normalised_data[foot][file_name] = {}
|
|
1270
1266
|
data_segment = data.iloc[start:frame, 1:]
|
|
1271
1267
|
|
|
1272
|
-
# TODO: If the model +tve and -tve are wrong, then we can't just flip these.
|
|
1273
|
-
# Because the non-GRF parts of the moments would also be flipped.
|
|
1274
|
-
# Just visually check the results against some clinical kinetics.
|
|
1275
|
-
# ...
|
|
1276
|
-
# Looks pretty good so far.
|
|
1277
1268
|
# Perform sign transformations.
|
|
1278
1269
|
data_segment[f"hip_flexion_{side}_moment"] = -data_segment[f"hip_flexion_{side}_moment"]
|
|
1279
1270
|
data_segment[f"hip_adduction_{side}_moment"] = -data_segment[f"hip_adduction_{side}_moment"]
|
|
@@ -1366,9 +1357,6 @@ def write_normalised_data(data, column_names, selected_trials, excluded_cycles,
|
|
|
1366
1357
|
file.write('\n')
|
|
1367
1358
|
|
|
1368
1359
|
|
|
1369
|
-
# TODO: Rework this function to be less sequential.
|
|
1370
|
-
# It should be able to calculate metrics for walking and running gait.
|
|
1371
|
-
# Put this at the start of the sequential bit.
|
|
1372
1360
|
def calculate_spatiotemporal_data(frame_data, events, static_data):
|
|
1373
1361
|
stride_lengths = {"Left": {}, "Right": {}}
|
|
1374
1362
|
step_lengths = {"Left": {}, "Right": {}}
|
|
@@ -1391,8 +1379,6 @@ def calculate_spatiotemporal_data(frame_data, events, static_data):
|
|
|
1391
1379
|
for event_time, (event_type, event_plate) in stride_events.items():
|
|
1392
1380
|
time_ordered_events[event_time][foot] = [event_type, stride_number]
|
|
1393
1381
|
|
|
1394
|
-
# TODO: We should be able to use this to calculate ALL measurements non-sequentially.
|
|
1395
|
-
# TODO: Double check that we don't have situations where the events are not ordered in increasing stride number.
|
|
1396
1382
|
# Add terminal foot-strike to events for each cycle.
|
|
1397
1383
|
full_cycle_events = copy.deepcopy(events)
|
|
1398
1384
|
for foot, foot_events in full_cycle_events.items():
|
|
@@ -57,7 +57,6 @@ class ProgressTracker(QObject):
|
|
|
57
57
|
progress = Signal(str, str)
|
|
58
58
|
|
|
59
59
|
|
|
60
|
-
# TODO: CGM2 event detector on GitHub...?
|
|
61
60
|
class MainWindow(QMainWindow):
|
|
62
61
|
|
|
63
62
|
def __init__(self):
|
|
@@ -259,12 +258,6 @@ class MainWindow(QMainWindow):
|
|
|
259
258
|
table.deleteLater()
|
|
260
259
|
self._spatiotemporal_tables = []
|
|
261
260
|
|
|
262
|
-
# TODO: The legend is not correctly displayed if the ST tab is open while processing...
|
|
263
|
-
# Repositioning and updating the legend do nothing.
|
|
264
|
-
|
|
265
|
-
# TODO: The border is still having issues.
|
|
266
|
-
# Seems to be related to the area being scrollable.
|
|
267
|
-
# Only happens on some PCs/monitors...
|
|
268
261
|
def _visualise_spatiotemporal_data(self):
|
|
269
262
|
|
|
270
263
|
# Temporarily disable spatio-temporal visualisation for running gait.
|
|
@@ -910,8 +903,6 @@ class MainWindow(QMainWindow):
|
|
|
910
903
|
if (file_name, f"{foot}_{cycle_number}") not in excluded_cycles:
|
|
911
904
|
counts[foot] += 1
|
|
912
905
|
|
|
913
|
-
# TODO: This is being displayed before processing has finished.
|
|
914
|
-
# Which should not be happening.
|
|
915
906
|
self._ui.labelCount.setText(f"Cycles: L {counts['Left']} / R {counts['Right']}")
|
|
916
907
|
|
|
917
908
|
tab = self._ui.tabWidget.currentWidget()
|
|
@@ -939,7 +930,6 @@ class MainWindow(QMainWindow):
|
|
|
939
930
|
self._update_s_t_colours()
|
|
940
931
|
self._update_legend()
|
|
941
932
|
|
|
942
|
-
# TODO: For some reason the legend doesn't get created at all if we are visualising the ST tab while processing...
|
|
943
933
|
def _update_legend(self):
|
|
944
934
|
if self._boxes:
|
|
945
935
|
for side, boxes in self._boxes.items():
|
|
@@ -1031,8 +1021,6 @@ class MainWindow(QMainWindow):
|
|
|
1031
1021
|
settings.beginGroup('MainWindow')
|
|
1032
1022
|
settings.setValue('size', self.size())
|
|
1033
1023
|
settings.setValue('pos', self.pos())
|
|
1034
|
-
# TODO: The taskbar icon fails if the application opens in full-screen...
|
|
1035
|
-
# DON'T open in full screen...?
|
|
1036
1024
|
settings.setValue('is_maximized', self.isMaximized())
|
|
1037
1025
|
settings.setValue('lab', self._ui.comboBoxLab.currentText())
|
|
1038
1026
|
settings.setValue('marker_diameter', self._ui.doubleSpinBoxMarkerDiameter.value())
|
|
@@ -1237,9 +1225,6 @@ class GaitCurves(defaultdict):
|
|
|
1237
1225
|
line.set_color(colour)
|
|
1238
1226
|
line.set_zorder(z_order)
|
|
1239
1227
|
|
|
1240
|
-
# TODO: Replace all these with `draw_idle`?
|
|
1241
|
-
# Just the ones that handle many curves...?
|
|
1242
|
-
# Probably all...?
|
|
1243
1228
|
self._canvas.draw()
|
|
1244
1229
|
|
|
1245
1230
|
def show_curve_menu(self, event):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: c3d-parser
|
|
3
|
-
Version: 1.5.
|
|
3
|
+
Version: 1.5.2
|
|
4
4
|
Summary: C3D parser for gait data harmonisation.
|
|
5
5
|
Author-email: Timothy Salemink <tim.nicolas@outlook.com>, Sally Jack <sallyjaack@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -12,7 +12,7 @@ Requires-Dist: numpy==1.26.4
|
|
|
12
12
|
Requires-Dist: pandas
|
|
13
13
|
Requires-Dist: c3d==0.5.2
|
|
14
14
|
Requires-Dist: trc-data-reader>=0.4.1
|
|
15
|
-
Requires-Dist: opensim-model-creator==0.8.
|
|
15
|
+
Requires-Dist: opensim-model-creator==0.8.1
|
|
16
16
|
Requires-Dist: PySide6
|
|
17
17
|
Requires-Dist: matplotlib
|
|
18
18
|
Requires-Dist: mplcursors
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/core/osim_resources/external_loads_template.xml
RENAMED
|
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
|
{c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/dialogs/delete_marker_set_dialog.py
RENAMED
|
File without changes
|
|
File without changes
|
{c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/dialogs/marker_set_import_dialog.py
RENAMED
|
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
|