# phenological/nmr-parser architecture

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

- Interactive diagram: https://gitdiagram.com/phenological/nmr-parser
- Repository: https://github.com/phenological/nmr-parser

## Overview

nmr.parser is an R package for reading Bruker IVDr NMR experiment folders into analysis-ready data. The main workflow optionally discovers experiment folders with `scanFolder()`, then `readExperiment()` coordinates parameter, spectrum, title, ERETIC, QC, lipoprotein, PACS, and small-molecule readers. Individual readers are also available, and `extend_lipo()` derives additional lipoprotein measures; reference-table functions expose metadata independently. The README documents these capabilities and relationships; source excerpts were unavailable, so internal wiring beyond the documented orchestration is not inferred.

Main entry points: [`R/readExperiment.R`](https://github.com/phenological/nmr-parser/blob/main/R/readExperiment.R) (Experiment reader), [`R/scanFolder.R`](https://github.com/phenological/nmr-parser/blob/main/R/scanFolder.R) (Folder scan), [`R/readLipo.R`](https://github.com/phenological/nmr-parser/blob/main/R/readLipo.R) (Lipoprotein reader), [`R/readParams.R`](https://github.com/phenological/nmr-parser/blob/main/R/readParams.R) (Parameter readers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_discovery["Experiment discovery"]
  node_scan["Folder scan<br/>[scanFolder.R]"]
  node_experiment["Experiment reader<br/>[readExperiment.R]"]
end

subgraph group_acquisition["Experiment readers"]
  node_params["Parameter readers<br/>[readParams.R]"]
  node_param["Single parameter<br/>[readParam.R]"]
  node_spectrum["Spectrum reader<br/>[readSpectrum.R]"]
  node_title["Title reader<br/>[readTitle.R]"]
  node_eretic["ERETIC readers<br/>[readEretic.R]"]
  node_ereticf80["ERETIC F80<br/>[readEreticF80.R]"]
end

subgraph group_reports["Report readers"]
  node_qc["QC reader<br/>[readQc.R]"]
  node_lipo["Lipoprotein reader<br/>[readLipo.R]"]
  node_pacs["PACS reader<br/>[readPacs.R]"]
  node_quant["Quant reader<br/>[readQuant.R]"]
end

subgraph group_analysis["Derived data"]
  node_extend["Lipo derivation<br/>[extend_lipo.R]"]
  node_tables["Reference tables<br/>[getLipoTable.R]"]
  node_pacs_table["PACS table<br/>[getPacsTable.R]"]
  node_qc_table["QC table<br/>[getQcTable.R]"]
  node_sm_table["Small molecule table<br/>[getSmTable.R]"]
end

node_analyst(("R user"))
node_brukerfiles["Bruker files"]

node_analyst -->|"requests scan"| node_scan
node_scan -->|"searches folders"| node_brukerfiles
node_scan -->|"supplies paths"| node_experiment
node_analyst -->|"requests read"| node_experiment
node_experiment -->|"dispatches"| node_params
node_experiment -->|"dispatches"| node_spectrum
node_experiment -->|"dispatches"| node_title
node_experiment -->|"dispatches"| node_eretic
node_experiment -->|"dispatches"| node_ereticf80
node_experiment -->|"dispatches"| node_qc
node_experiment -->|"dispatches"| node_lipo
node_experiment -->|"dispatches"| node_pacs
node_experiment -->|"dispatches"| node_quant
node_brukerfiles -->|"reads"| node_params
node_brukerfiles -->|"reads"| node_param
node_brukerfiles -->|"reads"| node_spectrum
node_brukerfiles -->|"reads"| node_title
node_brukerfiles -->|"reads"| node_eretic
node_brukerfiles -->|"reads"| node_ereticf80
node_brukerfiles -->|"reads"| node_qc
node_brukerfiles -->|"reads"| node_lipo
node_brukerfiles -->|"reads"| node_pacs
node_brukerfiles -->|"reads"| node_quant
node_lipo -->|"derives measures"| node_extend

click node_scan "https://github.com/phenological/nmr-parser/blob/main/R/scanFolder.R"
click node_experiment "https://github.com/phenological/nmr-parser/blob/main/R/readExperiment.R"
click node_params "https://github.com/phenological/nmr-parser/blob/main/R/readParams.R"
click node_param "https://github.com/phenological/nmr-parser/blob/main/R/readParam.R"
click node_spectrum "https://github.com/phenological/nmr-parser/blob/main/R/readSpectrum.R"
click node_title "https://github.com/phenological/nmr-parser/blob/main/R/readTitle.R"
click node_eretic "https://github.com/phenological/nmr-parser/blob/main/R/readEretic.R"
click node_ereticf80 "https://github.com/phenological/nmr-parser/blob/main/R/readEreticF80.R"
click node_qc "https://github.com/phenological/nmr-parser/blob/main/R/readQc.R"
click node_lipo "https://github.com/phenological/nmr-parser/blob/main/R/readLipo.R"
click node_pacs "https://github.com/phenological/nmr-parser/blob/main/R/readPacs.R"
click node_quant "https://github.com/phenological/nmr-parser/blob/main/R/readQuant.R"
click node_extend "https://github.com/phenological/nmr-parser/blob/main/R/extend_lipo.R"
click node_tables "https://github.com/phenological/nmr-parser/blob/main/R/getLipoTable.R"
click node_pacs_table "https://github.com/phenological/nmr-parser/blob/main/R/getPacsTable.R"
click node_qc_table "https://github.com/phenological/nmr-parser/blob/main/R/getQcTable.R"
click node_sm_table "https://github.com/phenological/nmr-parser/blob/main/R/getSmTable.R"

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_scan,node_experiment,node_analyst toneBlue
class node_params,node_param,node_spectrum,node_title,node_eretic,node_ereticf80 toneAmber
class node_qc,node_lipo,node_pacs,node_quant toneMint
class node_extend,node_tables,node_pacs_table,node_qc_table,node_sm_table toneRose
class node_brukerfiles toneIndigo
```

## Components

### Experiment discovery

- [Folder scan](https://github.com/phenological/nmr-parser/blob/main/R/scanFolder.R): `R/scanFolder.R`
- [Experiment reader](https://github.com/phenological/nmr-parser/blob/main/R/readExperiment.R): `R/readExperiment.R`

### Experiment readers

- [Parameter readers](https://github.com/phenological/nmr-parser/blob/main/R/readParams.R): `R/readParams.R`
- [Single parameter](https://github.com/phenological/nmr-parser/blob/main/R/readParam.R): `R/readParam.R`
- [Spectrum reader](https://github.com/phenological/nmr-parser/blob/main/R/readSpectrum.R): `R/readSpectrum.R`
- [Title reader](https://github.com/phenological/nmr-parser/blob/main/R/readTitle.R): `R/readTitle.R`
- [ERETIC readers](https://github.com/phenological/nmr-parser/blob/main/R/readEretic.R): `R/readEretic.R`
- [ERETIC F80](https://github.com/phenological/nmr-parser/blob/main/R/readEreticF80.R): `R/readEreticF80.R`

### Report readers

- [QC reader](https://github.com/phenological/nmr-parser/blob/main/R/readQc.R): `R/readQc.R`
- [Lipoprotein reader](https://github.com/phenological/nmr-parser/blob/main/R/readLipo.R): `R/readLipo.R`
- [PACS reader](https://github.com/phenological/nmr-parser/blob/main/R/readPacs.R): `R/readPacs.R`
- [Quant reader](https://github.com/phenological/nmr-parser/blob/main/R/readQuant.R): `R/readQuant.R`

### Derived data

- [Lipo derivation](https://github.com/phenological/nmr-parser/blob/main/R/extend_lipo.R): `R/extend_lipo.R`
- [Reference tables](https://github.com/phenological/nmr-parser/blob/main/R/getLipoTable.R): `R/getLipoTable.R`
- [PACS table](https://github.com/phenological/nmr-parser/blob/main/R/getPacsTable.R): `R/getPacsTable.R`
- [QC table](https://github.com/phenological/nmr-parser/blob/main/R/getQcTable.R): `R/getQcTable.R`
- [Small molecule table](https://github.com/phenological/nmr-parser/blob/main/R/getSmTable.R): `R/getSmTable.R`

### Other components

- **R user**
- **Bruker files**

## Connections

- R user → Folder scan: requests scan
- Folder scan → Bruker files: searches folders
- Folder scan → Experiment reader: supplies paths
- R user → Experiment reader: requests read
- Experiment reader → Parameter readers: dispatches
- Experiment reader → Spectrum reader: dispatches
- Experiment reader → Title reader: dispatches
- Experiment reader → ERETIC readers: dispatches
- Experiment reader → ERETIC F80: dispatches
- Experiment reader → QC reader: dispatches
- Experiment reader → Lipoprotein reader: dispatches
- Experiment reader → PACS reader: dispatches
- Experiment reader → Quant reader: dispatches
- Bruker files → Parameter readers: reads
- Bruker files → Single parameter: reads
- Bruker files → Spectrum reader: reads
- Bruker files → Title reader: reads
- Bruker files → ERETIC readers: reads
- Bruker files → ERETIC F80: reads
- Bruker files → QC reader: reads
- Bruker files → Lipoprotein reader: reads
- Bruker files → PACS reader: reads
- Bruker files → Quant reader: reads
- Lipoprotein reader → Lipo derivation: derives measures
