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.
Files changed (47) hide show
  1. {c3d_parser-1.5.1/src/c3d_parser.egg-info → c3d_parser-1.5.2}/PKG-INFO +2 -2
  2. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/requirements.txt +1 -1
  3. c3d_parser-1.5.2/src/c3d_parser/__init__.py +2 -0
  4. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/core/c3d_parser.py +0 -14
  5. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/main_window.py +0 -15
  6. {c3d_parser-1.5.1 → c3d_parser-1.5.2/src/c3d_parser.egg-info}/PKG-INFO +2 -2
  7. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser.egg-info/requires.txt +1 -1
  8. c3d_parser-1.5.1/src/c3d_parser/__init__.py +0 -2
  9. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/LICENSE +0 -0
  10. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/README.md +0 -0
  11. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/pyproject.toml +0 -0
  12. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/setup.cfg +0 -0
  13. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/application.py +0 -0
  14. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/core/c3d_patch.py +0 -0
  15. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/core/osim.py +0 -0
  16. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/core/osim_resources/external_loads_template.xml +0 -0
  17. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/core/osim_resources/ik_task_set.xml +0 -0
  18. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/core/utils.py +0 -0
  19. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/general.py +0 -0
  20. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/logging.py +0 -0
  21. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/marker_maps/AUC.json +0 -0
  22. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/marker_maps/FMC.json +0 -0
  23. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/marker_maps/MH.json +0 -0
  24. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/marker_maps/QCMAS.json +0 -0
  25. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/marker_maps/RBWH.json +0 -0
  26. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/marker_maps/RCH.json +0 -0
  27. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/settings/marker_maps/Sydney.json +0 -0
  28. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/splash_rc.py +0 -0
  29. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/splashscreen.py +0 -0
  30. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/dialogs/about_dialog.py +0 -0
  31. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/dialogs/delete_marker_set_dialog.py +0 -0
  32. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/dialogs/marker_set_dialog.py +0 -0
  33. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/dialogs/marker_set_import_dialog.py +0 -0
  34. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/dialogs/options_dialog.py +0 -0
  35. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/ui/resources_rc.py +0 -0
  36. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/ui/ui_delete_marker_set_dialog.py +0 -0
  37. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/ui/ui_main_window.py +0 -0
  38. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/ui/ui_marker_set_dialog.py +0 -0
  39. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/ui/ui_marker_set_import_dialog.py +0 -0
  40. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/ui/ui_options_dialog.py +0 -0
  41. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/utils.py +0 -0
  42. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser/view/widgets.py +0 -0
  43. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser.egg-info/SOURCES.txt +0 -0
  44. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser.egg-info/dependency_links.txt +0 -0
  45. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser.egg-info/entry_points.txt +0 -0
  46. {c3d_parser-1.5.1 → c3d_parser-1.5.2}/src/c3d_parser.egg-info/top_level.txt +0 -0
  47. {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.1
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.0
15
+ Requires-Dist: opensim-model-creator==0.8.1
16
16
  Requires-Dist: PySide6
17
17
  Requires-Dist: matplotlib
18
18
  Requires-Dist: mplcursors
@@ -3,7 +3,7 @@ numpy==1.26.4
3
3
  pandas
4
4
  c3d==0.5.2
5
5
  trc-data-reader>=0.4.1
6
- opensim-model-creator==0.8.0
6
+ opensim-model-creator==0.8.1
7
7
  PySide6
8
8
  matplotlib
9
9
  mplcursors
@@ -0,0 +1,2 @@
1
+
2
+ __version__ = "1.5.2"
@@ -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.1
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.0
15
+ Requires-Dist: opensim-model-creator==0.8.1
16
16
  Requires-Dist: PySide6
17
17
  Requires-Dist: matplotlib
18
18
  Requires-Dist: mplcursors
@@ -3,7 +3,7 @@ numpy==1.26.4
3
3
  pandas
4
4
  c3d==0.5.2
5
5
  trc-data-reader>=0.4.1
6
- opensim-model-creator==0.8.0
6
+ opensim-model-creator==0.8.1
7
7
  PySide6
8
8
  matplotlib
9
9
  mplcursors
@@ -1,2 +0,0 @@
1
-
2
- __version__ = "1.5.1"
File without changes
File without changes
File without changes
File without changes