# chenzhuo-2026/cuaunc-h2s-sensor architecture

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

- Interactive diagram: https://gitdiagram.com/chenzhuo-2026/cuaunc-h2s-sensor
- Repository: https://github.com/chenzhuo-2026/cuaunc-h2s-sensor

## Overview

This repository reproduces H₂S gas-sensor discrimination experiments: raw resistance recordings are processed into 500-point waveforms, then classified and evaluated with CNN and conventional ML models. The principal workflow runs from recording preparation through model training to concentration/generalization results. Separate branches cover mixed-gas inference and CNN-embedding visualization. The README documents these capabilities; sampled source confirms key preprocessing, training, and inference behavior, while wiring for unsampled scripts is shown only where the README supports it.

Main entry points: [`data/preprocessed`](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/tree/main/data/preprocessed) (Waveform arrays), [`results`](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/tree/main/results) (Trained models), [`code/train_cnn_cv.py`](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/train_cnn_cv.py) (CNN cross-validation), [`code/train_cnn_concentration.py`](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/train_cnn_concentration.py) (CNN concentration training)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_prep["Waveform preparation"]
  node_raw[("Raw recordings")]
  node_process["Window preprocessing<br/>[data_process.py]"]
  node_convert["Dataset assembly<br/>[data_convert.py]"]
  node_prepared[("Waveform arrays")]
  node_split["Concentration split"]
  node_splitdata[("Split arrays")]
end

subgraph group_learn["Model training"]
  node_dataset["Gas dataset<br/>[dataset.py]"]
  node_cnnmodel["1D CNN<br/>[model.py]"]
  node_cnntrain["CNN cross-validation<br/>[train_cnn_cv.py]"]
  node_cnnconc["CNN concentration training"]
  node_mltrain["ML baselines<br/>[train_ml_cv.py]"]
  node_knntrain["KNN baseline<br/>[train_knn_cv.py]"]
  node_mlconc["ML concentration training"]
  node_models[("Trained models")]
end

subgraph group_eval["Evaluation"]
  node_unseen["Unseen H₂S evaluation<br/>[eval_unseen_h2s.py]"]
  node_knneval["KNN split evaluation"]
  node_results["Metrics and predictions"]
end

subgraph group_infer["Inference and analysis"]
  node_mixed["Mixed-gas inference<br/>[infer_mixed_gas.py]"]
  node_unseeninfer["Raw H₂S inference"]
  node_tsne["Embedding visualization<br/>[visualize_tsne.py]"]
end

node_researcher(("Researcher"))

node_researcher -->|"runs processing"| node_process
node_raw -->|"reads recordings"| node_process
node_process -->|"writes processed windows"| node_convert
node_convert -->|"writes arrays"| node_prepared
node_researcher -->|"runs split"| node_split
node_prepared -.->|"reads waveforms"| node_split
node_split -->|"writes split arrays"| node_splitdata
node_researcher -->|"runs training"| node_cnntrain
node_prepared -->|"loads arrays"| node_cnntrain
node_cnntrain -->|"constructs batches"| node_dataset
node_cnntrain -->|"trains network"| node_cnnmodel
node_cnntrain -->|"saves checkpoints"| node_models
node_researcher -->|"runs training"| node_mltrain
node_prepared -->|"loads arrays"| node_mltrain
node_mltrain -->|"saves models"| node_models
node_researcher -->|"runs training"| node_knntrain
node_prepared -->|"loads arrays"| node_knntrain
node_knntrain -->|"saves models"| node_models
node_researcher -->|"runs evaluation"| node_cnnconc
node_splitdata -->|"loads split"| node_cnnconc
node_cnnconc -->|"constructs batches"| node_dataset
node_cnnconc -->|"trains network"| node_cnnmodel
node_cnnconc -->|"writes metrics"| node_results
node_researcher -->|"runs evaluation"| node_mlconc
node_splitdata -->|"loads split"| node_mlconc
node_mlconc -->|"writes metrics"| node_results
node_researcher -->|"runs evaluation"| node_unseen
node_raw -->|"supplies held-out H₂S"| node_unseen
node_models -->|"loads CNN ensemble"| node_unseen
node_unseen -->|"calls preprocessing"| node_unseeninfer
node_unseen -->|"writes predictions"| node_results
node_researcher -->|"runs evaluation"| node_knneval
node_splitdata -->|"loads split"| node_knneval
node_knneval -->|"writes metrics"| node_results
node_researcher -->|"runs inference"| node_mixed
node_models -->|"loads CNN ensemble"| node_mixed
node_mixed -->|"writes predictions"| node_results
node_researcher -->|"runs visualization"| node_tsne
node_prepared -->|"loads waveforms"| node_tsne
node_models -->|"loads CNN checkpoint"| node_tsne
node_tsne -->|"writes embeddings"| node_results

click node_raw "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/tree/main/data/raw_data"
click node_process "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/data_process.py"
click node_convert "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/data_convert.py"
click node_prepared "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/tree/main/data/preprocessed"
click node_split "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/split_train_test.py"
click node_splitdata "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/tree/main/data"
click node_dataset "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/dataset.py"
click node_cnnmodel "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/model.py"
click node_cnntrain "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/train_cnn_cv.py"
click node_cnnconc "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/train_cnn_concentration.py"
click node_mltrain "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/train_ml_cv.py"
click node_knntrain "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/train_knn_cv.py"
click node_mlconc "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/train_ml_concentration.py"
click node_models "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/tree/main/results"
click node_unseen "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/eval_unseen_h2s.py"
click node_knneval "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/eval_knn_concentration.py"
click node_mixed "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/infer_mixed_gas.py"
click node_unseeninfer "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/infer_unseen_h2s.py"
click node_tsne "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/visualize_tsne.py"
click node_results "https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/tree/main/results"

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_raw,node_process,node_convert,node_prepared,node_split,node_splitdata toneBlue
class node_dataset,node_cnnmodel,node_cnntrain,node_cnnconc,node_mltrain,node_knntrain,node_mlconc,node_models toneAmber
class node_unseen,node_knneval,node_results toneMint
class node_mixed,node_unseeninfer,node_tsne toneRose
class node_researcher toneIndigo
```

## Components

### Waveform preparation

- [Raw recordings](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/tree/main/data/raw_data): `data/raw_data`
- [Window preprocessing](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/data_process.py): `code/data_process.py`
- [Dataset assembly](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/data_convert.py): `code/data_convert.py`
- [Waveform arrays](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/tree/main/data/preprocessed): `data/preprocessed`
- [Concentration split](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/split_train_test.py): `code/split_train_test.py`
- [Split arrays](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/tree/main/data): `data`

### Model training

- [Gas dataset](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/dataset.py): `code/dataset.py`
- [1D CNN](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/model.py): `code/model.py`
- [CNN cross-validation](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/train_cnn_cv.py): `code/train_cnn_cv.py`
- [CNN concentration training](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/train_cnn_concentration.py): `code/train_cnn_concentration.py`
- [ML baselines](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/train_ml_cv.py): `code/train_ml_cv.py`
- [KNN baseline](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/train_knn_cv.py): `code/train_knn_cv.py`
- [ML concentration training](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/train_ml_concentration.py): `code/train_ml_concentration.py`
- [Trained models](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/tree/main/results): `results`

### Evaluation

- [Unseen H₂S evaluation](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/eval_unseen_h2s.py): `code/eval_unseen_h2s.py`
- [KNN split evaluation](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/eval_knn_concentration.py): `code/eval_knn_concentration.py`
- [Metrics and predictions](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/tree/main/results): `results`

### Inference and analysis

- [Mixed-gas inference](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/infer_mixed_gas.py): `code/infer_mixed_gas.py`
- [Raw H₂S inference](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/infer_unseen_h2s.py): `code/infer_unseen_h2s.py`
- [Embedding visualization](https://github.com/chenzhuo-2026/cuaunc-h2s-sensor/blob/main/code/visualize_tsne.py): `code/visualize_tsne.py`

### Other components

- **Researcher**

## Connections

- Researcher → Window preprocessing: runs processing
- Raw recordings → Window preprocessing: reads recordings
- Window preprocessing → Dataset assembly: writes processed windows
- Dataset assembly → Waveform arrays: writes arrays
- Researcher → Concentration split: runs split
- Waveform arrays → Concentration split: reads waveforms
- Concentration split → Split arrays: writes split arrays
- Researcher → CNN cross-validation: runs training
- Waveform arrays → CNN cross-validation: loads arrays
- CNN cross-validation → Gas dataset: constructs batches
- CNN cross-validation → 1D CNN: trains network
- CNN cross-validation → Trained models: saves checkpoints
- Researcher → ML baselines: runs training
- Waveform arrays → ML baselines: loads arrays
- ML baselines → Trained models: saves models
- Researcher → KNN baseline: runs training
- Waveform arrays → KNN baseline: loads arrays
- KNN baseline → Trained models: saves models
- Researcher → CNN concentration training: runs evaluation
- Split arrays → CNN concentration training: loads split
- CNN concentration training → Gas dataset: constructs batches
- CNN concentration training → 1D CNN: trains network
- CNN concentration training → Metrics and predictions: writes metrics
- Researcher → ML concentration training: runs evaluation
- Split arrays → ML concentration training: loads split
- ML concentration training → Metrics and predictions: writes metrics
- Researcher → Unseen H₂S evaluation: runs evaluation
- Raw recordings → Unseen H₂S evaluation: supplies held-out H₂S
- Trained models → Unseen H₂S evaluation: loads CNN ensemble
- Unseen H₂S evaluation → Raw H₂S inference: calls preprocessing
- Unseen H₂S evaluation → Metrics and predictions: writes predictions
- Researcher → KNN split evaluation: runs evaluation
- Split arrays → KNN split evaluation: loads split
- KNN split evaluation → Metrics and predictions: writes metrics
- Researcher → Mixed-gas inference: runs inference
- Trained models → Mixed-gas inference: loads CNN ensemble
- Mixed-gas inference → Metrics and predictions: writes predictions
- Researcher → Embedding visualization: runs visualization
- Waveform arrays → Embedding visualization: loads waveforms
- Trained models → Embedding visualization: loads CNN checkpoint
- Embedding visualization → Metrics and predictions: writes embeddings
