# jpnino1018/motion-analyzer-pdg architecture

> Architecture diagram of the GitHub repository jpnino1018/motion-analyzer-pdg, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jpnino1018/motion-analyzer-pdg
- Repository: https://github.com/jpnino1018/motion-analyzer-pdg

## Overview

The product is a wearable-IMU motion analysis tool for foot and ankle exercises, with a Streamlit assessment UI and a separate batch-to-CSV workflow. Users upload sensor JSON or process files from a data directory; readings are normalized, optionally trimmed, analyzed into repetition and amplitude metrics, and visualized. The UI also presents a rule-based Parkinson’s severity assessment. The sampled code establishes core processing calls; some UI wiring and README-described capabilities are not fully excerpted, so uncertain links are omitted or marked dashed.

Main entry points: [`app.py`](https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/app.py) (Assessment UI), [`src/preprocessing/movement_processor.py`](https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/src/preprocessing/movement_processor.py) (Movement Processor), [`main.py`](https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/main.py) (Batch Runner), [`src/analysis/parkinson_diagnosis.py`](https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/src/analysis/parkinson_diagnosis.py) (Severity Diagnosis)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["User Workflows"]
  node_streamlit_ui["Assessment UI<br/>[app.py]"]
  node_batch_runner["Batch Runner<br/>[main.py]"]
end

subgraph group_prep["Signal Preparation"]
  node_normalization["Format Normalization<br/>[app.py]"]
  node_inactive_trim["Idle Trimming<br/>[cleaners.py]"]
  node_movement_processor["Movement Processor"]
  node_signal_processor["Signal Processing"]
end

subgraph group_analysis["Movement Analysis"]
  node_movement_analyzer["Feature Analysis"]
  node_parkinson_diagnosis["Severity Diagnosis"]
end

subgraph group_results["Assessment Results"]
  node_movement_visualizer["Movement Plots"]
  node_ui_results["Clinical Results<br/>[app.py]"]
  node_csv_results["Metrics CSV<br/>[main.py]"]
end

node_user(("Clinician / User"))
node_sensor_json["IMU JSON"]

node_user -->|"uploads data"| node_streamlit_ui
node_sensor_json -->|"provides readings"| node_streamlit_ui
node_streamlit_ui -->|"normalizes formats"| node_normalization
node_normalization -.->|"passes readings"| node_movement_processor
node_batch_runner -->|"loads files"| node_sensor_json
node_batch_runner -->|"processes sides"| node_movement_processor
node_movement_processor -->|"trims idle data"| node_inactive_trim
node_movement_processor -->|"detects peaks"| node_signal_processor
node_movement_processor -->|"analyzes features"| node_movement_analyzer
node_streamlit_ui -->|"processes readings"| node_movement_processor
node_streamlit_ui -->|"detects display peaks"| node_signal_processor
node_batch_runner -->|"plots comparison"| node_movement_visualizer
node_streamlit_ui -.->|"requests assessment"| node_parkinson_diagnosis
node_parkinson_diagnosis -.->|"supplies interpretation"| node_ui_results
node_streamlit_ui -->|"shows metrics"| node_ui_results
node_batch_runner -->|"writes metrics"| node_csv_results

click node_streamlit_ui "https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/app.py"
click node_batch_runner "https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/main.py"
click node_normalization "https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/app.py"
click node_inactive_trim "https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/src/preprocessing/cleaners.py"
click node_movement_processor "https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/src/preprocessing/movement_processor.py"
click node_signal_processor "https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/src/preprocessing/signal_processing.py"
click node_movement_analyzer "https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/src/analysis/movement_analysis.py"
click node_parkinson_diagnosis "https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/src/analysis/parkinson_diagnosis.py"
click node_movement_visualizer "https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/src/visualization/movement_visualizer.py"
click node_ui_results "https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/app.py"
click node_csv_results "https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/main.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_streamlit_ui,node_batch_runner,node_user toneBlue
class node_normalization,node_inactive_trim,node_movement_processor,node_signal_processor toneAmber
class node_movement_analyzer,node_parkinson_diagnosis toneMint
class node_movement_visualizer,node_ui_results,node_csv_results toneRose
class node_sensor_json toneIndigo
```

## Components

### User Workflows

- [Assessment UI](https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/app.py): `app.py`
- [Batch Runner](https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/main.py): `main.py`

### Signal Preparation

- [Format Normalization](https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/app.py): `app.py`
- [Idle Trimming](https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/src/preprocessing/cleaners.py): `src/preprocessing/cleaners.py`
- [Movement Processor](https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/src/preprocessing/movement_processor.py): `src/preprocessing/movement_processor.py`
- [Signal Processing](https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/src/preprocessing/signal_processing.py): `src/preprocessing/signal_processing.py`

### Movement Analysis

- [Feature Analysis](https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/src/analysis/movement_analysis.py): `src/analysis/movement_analysis.py`
- [Severity Diagnosis](https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/src/analysis/parkinson_diagnosis.py): `src/analysis/parkinson_diagnosis.py`

### Assessment Results

- [Movement Plots](https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/src/visualization/movement_visualizer.py): `src/visualization/movement_visualizer.py`
- [Clinical Results](https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/app.py): `app.py`
- [Metrics CSV](https://github.com/jpnino1018/motion-analyzer-pdg/blob/master/main.py): `main.py`

### Other components

- **Clinician / User**
- **IMU JSON**

## Connections

- Clinician / User → Assessment UI: uploads data (evidence: `README.md`)
- IMU JSON → Assessment UI: provides readings (evidence: `README.md`)
- Assessment UI → Format Normalization: normalizes formats (evidence: `app.py`)
- Format Normalization → Movement Processor: passes readings (evidence: `app.py`)
- Batch Runner → IMU JSON: loads files (evidence: `main.py`)
- Batch Runner → Movement Processor: processes sides (evidence: `main.py`)
- Movement Processor → Idle Trimming: trims idle data (evidence: `src/preprocessing/movement_processor.py`)
- Movement Processor → Signal Processing: detects peaks (evidence: `src/preprocessing/movement_processor.py`)
- Movement Processor → Feature Analysis: analyzes features (evidence: `src/preprocessing/movement_processor.py`)
- Assessment UI → Movement Processor: processes readings (evidence: `app.py`)
- Assessment UI → Signal Processing: detects display peaks (evidence: `app.py`)
- Batch Runner → Movement Plots: plots comparison (evidence: `main.py`)
- Assessment UI → Severity Diagnosis: requests assessment (evidence: `app.py`)
- Severity Diagnosis → Clinical Results: supplies interpretation (evidence: `app.py`)
- Assessment UI → Clinical Results: shows metrics (evidence: `app.py`)
- Batch Runner → Metrics CSV: writes metrics (evidence: `main.py`)
