- Toolbox
- paradigma: the main toolbox for data processing outputing scores indicating the progression of Parkinson's
- Project documentation
- docs: for general documentation.
- Research domains
- Gait
- Tremor
- train_test_evaluate: X
- rest_tremor_ppp: X
- weekly_aggregates: X
- ppp_local_test: X
- ppp: X
- ppp_tremor_ppg: X
- pdathome: X
- clinical_ppp: X
- Heart rate
- PPG-analysis: X
- Data handling (input, output, conversion, decryption, ...):
- tsdf: official Python package for managing tsdf format.
- TimeStreamDB: Max's code for data formatting.
- pep-download: Peter's data acquisition scripts.
- parkio: input/check/output of time series.
Although the inputs may differ in format, we expect them to contain time series information. On a per-patient basis, this can be read as an array where the first column contains the times, and the rest of the columns contain the corresponding measured states (such as accelerations, gyroscopic data, light intensity, ...):
Times | Accel x | Accel y | ... |
---|---|---|---|
0 | <float> |
<float> |
... |
0.1 | <float> |
<float> |
... |
0.2 | <float> |
<float> |
... |
0.3 | <float> |
<float> |
... |
To get those time series in a neat, usable way, a parsing and preprocessing workflow is needed for each data format:
graph TD;
Input[("Raw data")] --> Parser --> Output[/Time series/]
Our desired output is a table containing different scores indicating the progression of Parkinson's. Notice that we aggregate them at a much longer scale than the devices' resolutions. The intuitive reason for doing this is that to witness significant progress in Parkinson's disease we need to wait weeks instead of milliseconds.
Week | Gait score | Tremor score | ... |
---|---|---|---|
1 | <float> |
<float> |
... |
2 | <float> |
<float> |
... |
3 | <float> |
<float> |
... |
4 | <float> |
<float> |
... |
Our proposed workflow to get there is the following:
See an alternative illustration:
graph TD;
subgraph specific context of use
Input["Raw acc, gyr & ppg time series "]
end
subgraph gravity
Gravity["Gravity filtering"]
end
subgraph gait
Gait["Gait detection"]
Cleangait["Detection of other activities"]
Armswing["Arm swing quantification"]
b["Weekly aggregation"]
end
subgraph tremor
ArmActivity["Arm activity"]
Tremor["Tremor detection"]
c["Weekly aggregation"]
TremorQuant["Tremor quantification"]
end
subgraph heart-rate variability
Filter["Artefact detection"]
HRstat["Global HR statistics"]
HRvarex["HR exercise variability"]
HRvarnight["Nighttime HR variability"]
d["Weekly aggregation"]
end
Input --> Gravity --> Gait --> Cleangait --> Armswing --> b --> Scores[/Digital biomarkers/]
Gait .-> Tremor
Gravity --> ArmActivity--> Tremor --> c --> Scores
Tremor --> TremorQuant --> c
Input --> Filter
Gait .-> HRvarex
Filter --> HRvarex --> d
Filter --> HRstat --> d --> Scores
Filter --> HRvarnight --> d