# jonaskeller14/pyisomme architecture

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

- Interactive diagram: https://gitdiagram.com/jonaskeller14/pyisomme
- Repository: https://github.com/jonaskeller14/pyisomme

## Overview

pyisomme reads and modifies ISO-MME crash-test measurements, derives injury metrics, visualizes channels, and produces protocol-based safety assessments. The principal workflow is to load test data, select or derive channels, evaluate criteria and limits, then export a report. The map also includes the documented editing/conversion tools, comparison and correlation reports, and protocol validation. Sampled source supports the criterion and plotting details; some subsystem connections reflect README capabilities and are therefore shown only at the documented level.

Main entry points: [`pyisomme/report`](https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/report) (Assessment protocols), [`pyisomme/isomme.py`](https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/isomme.py) (ISO-MME container), [`pyisomme/cli`](https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/cli) (CLI commands), [`pyisomme/report/criterion.py`](https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/report/criterion.py) (Criterion tree)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Measurement data"]
  node_isomme["ISO-MME container<br/>[isomme.py]"]
  node_parsing["File parsing<br/>[parsing.py]"]
  node_channel["Channel operations<br/>[channel.py]"]
  node_code["Channel codes<br/>[code.py]"]
end

subgraph group_analysis["Signal analysis"]
  node_providers["Derived channels<br/>[providers.py]"]
  node_calculations["Injury calculations"]
end

subgraph group_assessment["Safety assessment"]
  node_limits["Limits and ratings"]
  node_criterion["Criterion tree<br/>[criterion.py]"]
  node_protocol_reports["Assessment protocols"]
  node_validation["Protocol validation"]
  node_correlation["Curve correlation"]
end

subgraph group_presentation["Plots and reports"]
  node_plotting["Channel plots"]
  node_report_pages["Report pages"]
  node_html["HTML export<br/>[html.py]"]
  node_pptx["PowerPoint export<br/>[pptx.py]"]
  node_pdf["PDF export"]
end

subgraph group_interface["User interface"]
  node_cli["CLI entry<br/>[__main__.py]"]
  node_cli_commands["CLI commands"]
end

node_user(("Engineer"))

node_user -->|"runs"| node_cli
node_cli -->|"dispatches"| node_cli_commands
node_cli_commands -->|"loads or writes"| node_isomme
node_isomme -->|"reads and writes"| node_parsing
node_isomme -->|"contains channels"| node_channel
node_channel -->|"uses codes"| node_code
node_isomme -->|"resolves derived channels"| node_providers
node_providers -->|"builds metrics"| node_calculations
node_calculations -->|"returns channels"| node_channel
node_criterion -->|"selects measurements"| node_isomme
node_criterion -->|"evaluates results"| node_limits
node_protocol_reports -->|"defines criteria"| node_criterion
node_protocol_reports -->|"provides pages"| node_report_pages
node_validation -->|"checks protocols"| node_protocol_reports
node_correlation -->|"compares tests"| node_isomme
node_cli_commands -->|"plots channels"| node_plotting
node_plotting -->|"displays limits"| node_limits
node_report_pages -->|"renders results"| node_criterion
node_report_pages -->|"renders curves"| node_plotting
node_cli_commands -->|"creates reports"| node_protocol_reports
node_protocol_reports -->|"exports HTML"| node_html
node_protocol_reports -->|"exports PowerPoint"| node_pptx
node_protocol_reports -.->|"exports PDF"| node_pdf

click node_cli "https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/__main__.py"
click node_cli_commands "https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/cli"
click node_isomme "https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/isomme.py"
click node_parsing "https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/parsing.py"
click node_channel "https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/channel.py"
click node_code "https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/code.py"
click node_providers "https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/providers.py"
click node_calculations "https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/calculate"
click node_limits "https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/limit_evaluation.py"
click node_criterion "https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/report/criterion.py"
click node_protocol_reports "https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/report"
click node_validation "https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/report/validate"
click node_correlation "https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/report/correlation"
click node_plotting "https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/plotting"
click node_report_pages "https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/report/page2"
click node_html "https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/report/page2/html.py"
click node_pptx "https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/report/page2/pptx.py"
click node_pdf "https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/report/page2"

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_isomme,node_parsing,node_channel,node_code toneBlue
class node_providers,node_calculations toneAmber
class node_limits,node_criterion,node_protocol_reports,node_validation,node_correlation toneMint
class node_plotting,node_report_pages,node_html,node_pptx,node_pdf toneRose
class node_cli,node_cli_commands,node_user toneIndigo
```

## Components

### Measurement data

- [ISO-MME container](https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/isomme.py): `pyisomme/isomme.py`
- [File parsing](https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/parsing.py): `pyisomme/parsing.py`
- [Channel operations](https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/channel.py): `pyisomme/channel.py`
- [Channel codes](https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/code.py): `pyisomme/code.py`

### Signal analysis

- [Derived channels](https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/providers.py): `pyisomme/providers.py`
- [Injury calculations](https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/calculate): `pyisomme/calculate`

### Safety assessment

- [Limits and ratings](https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/limit_evaluation.py): `pyisomme/limit_evaluation.py`
- [Criterion tree](https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/report/criterion.py): `pyisomme/report/criterion.py`
- [Assessment protocols](https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/report): `pyisomme/report`
- [Protocol validation](https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/report/validate): `pyisomme/report/validate`
- [Curve correlation](https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/report/correlation): `pyisomme/report/correlation`

### Plots and reports

- [Channel plots](https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/plotting): `pyisomme/plotting`
- [Report pages](https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/report/page2): `pyisomme/report/page2`
- [HTML export](https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/report/page2/html.py): `pyisomme/report/page2/html.py`
- [PowerPoint export](https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/report/page2/pptx.py): `pyisomme/report/page2/pptx.py`
- [PDF export](https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/report/page2): `pyisomme/report/page2`

### User interface

- [CLI entry](https://github.com/jonaskeller14/pyisomme/blob/master/pyisomme/__main__.py): `pyisomme/__main__.py`
- [CLI commands](https://github.com/jonaskeller14/pyisomme/tree/master/pyisomme/cli): `pyisomme/cli`

### Other components

- **Engineer**

## Connections

- Engineer → CLI entry: runs
- CLI entry → CLI commands: dispatches
- CLI commands → ISO-MME container: loads or writes
- ISO-MME container → File parsing: reads and writes
- ISO-MME container → Channel operations: contains channels
- Channel operations → Channel codes: uses codes
- ISO-MME container → Derived channels: resolves derived channels
- Derived channels → Injury calculations: builds metrics
- Injury calculations → Channel operations: returns channels
- Criterion tree → ISO-MME container: selects measurements
- Criterion tree → Limits and ratings: evaluates results
- Assessment protocols → Criterion tree: defines criteria
- Assessment protocols → Report pages: provides pages
- Protocol validation → Assessment protocols: checks protocols
- Curve correlation → ISO-MME container: compares tests
- CLI commands → Channel plots: plots channels
- Channel plots → Limits and ratings: displays limits
- Report pages → Criterion tree: renders results
- Report pages → Channel plots: renders curves
- CLI commands → Assessment protocols: creates reports
- Assessment protocols → HTML export: exports HTML
- Assessment protocols → PowerPoint export: exports PowerPoint
- Assessment protocols → PDF export: exports PDF
