# Title of Dataset: Single Pellet Profile Reactor for Measuring Concentration and Temperature Patterns on Porous Catalyst Pellets - Experimental Data

## Contact Data
Author
Name: Mats Finkeldei
ORCID: 0009-0006-3119-0611
Institution: Hamburg University of Technology - Institute of Chemical Reaction Engineering
Address: Eissendorfer Str. 38, 21073 Hamburg, Germany
Email: mats.finkeldei@tuhh.de

Author
Name: Philipp Reinold
ORCID: 0009-0004-2854-0145
Institution: Institute of Chemical Process Engineering
Address: Fritz-Haber-Weg 2, 76131 Karlsruhe, Baden-Württemberg, Germany
Email: philipp.reinold@kit.edu

Author
Name: Dr. Oliver Korup
Institution: Hamburg University of Technology - Institute of Chemical Reaction Engineering
Address: Eissendorfer Str. 38, 21073 Hamburg, Germany
Email: korup@tuhh.de

Author
Name: Prof. Dr.-Ing. Gregor D. Wehinger
ORCID: 0000-0002-1774-3391
Institution: Institute of Chemical Process Engineering
Address: Fritz-Haber-Weg 2, 76131 Karlsruhe, Baden-Württemberg, Germany
Email: gregor.wehinger@kit.edu

Author/Principal Investigator Information
Name: Prof. Dr. Raimund Horn
ORCID: 0000-0001-8457-3161
Institution: Hamburg University of Technology - Institute of Chemical Reaction Engineering
Address: Eissendorfer Str. 38, 21073 Hamburg, Germany
Email: horn@tuhh.de

Experimental dataset for a CO2 methanation (Sabatier reaction) study:

```
CO2 + 4 H2 -> CH4 + 2 H2O
```

Two measurement techniques were combined per experiment on a cylindrical
catalyst pellet:

- **IR thermography** — a camera looking down onto the pellet's top face,
  with a conical mirror surrounding the pellet reflecting its curved side
  wall into the same field of view (see "IR Camera Geometry" below).
- **Mass spectrometry (MS)** — a scanning capillary measuring gas
  composition at 10 positions along the pellet axis.

The companion analysis code (which reads this dataset and reproduces every
processed file and figure here) is published separately — see
[Code](#code) below.

## Equipment

- **IR camera**: Image IR 8380 hp, InfraTec GmbH, Dresden, Germany
- **Mass spectrometer**: HAL300S/3, Hiden Analytical, Warrington, England

## Experimental Matrix

- 4 feed temperatures: 290, 320, 350, 380 °C
- 4 CO2:H2 feed ratios: 1:4 (stoichiometric), 1:3, 1:2, 1:1
- 16 experiments total, all measured on 2025-10-23
- `ratio` field in metadata = CO2/H2 volumetric flow (0.25 for 1:4, 1.0 for 1:1)
- Total flow constant at 1.0 mL/min (reactive gas + 0.2 mL/min Ar carrier)
- `"open_end"` in folder names: the MS capillary was inserted directly into
  the pellet with an open tip, sucking reactive gases out. Not relevant to
  the IR data.

## Directory Structure

```
data/                                  (this dataset's root)
├── mask_config.yaml                   # Shared angular cold-spot mask (all 16 experiments)
├── calibration/
│   ├── data_raw/
│   │   ├── file690.csv                # Calibration run: H2 + CO2 known mixtures
│   │   └── file691.csv                # Calibration run: CH4 known mixtures
├── data/                              # 16 experiment folders (see below)
│   ├── 2025-10-23_open_end_290C_1to1/
│   ├── 2025-10-23_open_end_290C_1to2/
│   ├── ...                            # 290/320/350/380 C x 1to1/1to2/1to3/1to4
│   └── 2025-10-23_open_end_380C_1to4/
├── results/                           # Cross-experiment MS aggregation outputs
│   ├── ms_calibrated_with_H2O.csv
│   └── ms_calibrated_molefraction.csv
└── schemas/                           # JSON Schema descriptions of the config/metadata formats below
    ├── config_schema.json
    ├── metadata_schema.json
    └── mask_config_schema.json
```

The aggregated, calibrated, publication-ready table `calibrated_df.csv`
(molar flows + mole fractions for all 16 experiments, one row per
temperature/ratio/spatial-position combination) accompanies this dataset at
the top level of the data package, alongside `data/`.

### Per-Experiment Folder Structure

```
data/2025-10-23_open_end_<TEMP>C_1to<N>/
├── config.yaml         # IR processing config: paths + preprocessing/detection params + geometry
├── config_new.yaml      # Subset of config.yaml written by the interactive geometry step (paths + ellipses + plot limits) -- this is the one the batch pipeline actually reads
├── README.md            # Experiment summary (temperature, ratio, flows), generated from metadata.json
├── data_raw/
│   ├── ir_reference/    # 1 IR CSV: background/reference frame
│   ├── ir_sequence/     # ~135 IR CSVs: irdata_001.csv ... irdata_NNN.csv, one frame per 10 s
│   ├── ms/              # 1 MS CSV: ~200+ measurement cycles across all 10 capillary positions
│   └── metadata.json    # temp, ratio, gas flows, cycle_ranges (see schemas/metadata_schema.json)
└── data_processed/
    ├── subtracted/      # Reference-subtracted IR CSVs (same filenames as ir_sequence/)
    ├── unwrapped/       # Unwrapped IR CSVs, 200 (axial) x 360 (angular) grid, one per frame
    └── results/
        ├── average_temperature.csv        # Per-frame mean +/- std DeltaT (masked spatial average)
        ├── average_temperature_field.csv  # 200x360 field, time-averaged over steady-state frames 40-80
        ├── std_temperature_field.csv      # 200x360 field, time-std over the same frame range
        ├── row_average_temperature.csv    # Axial (row-wise) mean +/- std, reduced from the field above
        └── ms_normalized.csv              # Argon-normalized MS peak areas per capillary position
```

**Known gap**: `2025-10-23_open_end_290C_1to1/` is missing its `README.md`
and `data_raw/ms_calibration/` subfolder that the other 15 experiments have;
`ms_calibration/` is present-but-empty in all experiments where it exists
(a vestigial/unused folder, not part of the processing pipeline).

## File Formats

- **Raw IR CSVs** (`data_raw/ir_reference/`, `data_raw/ir_sequence/`):
  Latin-1 encoded, semicolon-separated, comma decimal, with a literal
  `[Data]` line marking the start of the numeric image table. Values are
  raw instrument counts/temperature; loaded via
  `ir_processing_v4.load_raw_csv`.
- **Processed IR CSVs** (`subtracted/`, `unwrapped/`, and the `results/`
  field CSVs): semicolon-separated, comma decimal, no header row. Values
  are **ΔT in Kelvin** relative to the reference frame. `subtracted/` files
  share the raw sequence's pixel grid; `unwrapped/` and the `results/`
  field CSVs are 200 (axial, rows) x 360 (angular, columns) grids.
- **Raw MS CSV** (`data_raw/ms/`): UTF-8, comma-separated. Contains an
  instrument preamble followed by a header row starting with `"Cycle"`;
  columns after `Cycle`, `Time`, `ms` are scanned AMU values (1.00-50.00 in
  0.1 steps), one row per measurement cycle (~7 s/cycle).
- **Processed MS / results CSVs** (`data_processed/results/*.csv`,
  `results/*.csv`, and `calibrated_df.csv`): standard comma-separated
  pandas output with a header row.
- **Config files** (`config.yaml`, `config_new.yaml`, `mask_config.yaml`):
  YAML; see `schemas/*.json` for full field descriptions.
- **Metadata** (`data_raw/metadata.json`): JSON; see
  `schemas/metadata_schema.json`.

### `calibrated_df.csv` columns

| Column | Description |
|---|---|
| `Cycle` | Averaged MS cycle number for this spatial position (float). |
| `H2`, `CH4`, `CO2`, `CO` | Calibrated molar flow, mol/min (after CO fragmentation correction and linear calibration). |
| `Ar` | Argon reference, constant `1.0` (normalization basis) in the non-mole-fraction variant. |
| `AssignedValue` | Capillary position, mm (24.5 down to 20.0; subtract 21.5 for the pellet-centered convention with boundaries at ±2.5 mm used in plots). |
| `temp` | Feed temperature, °C. |
| `temp_unit` | Unit string for `temp`. Some rows show `"Â°C"` instead of `"°C"` — see Known Issues. |
| `ratio` | CO2:H2 feed ratio (CO2/H2 volumetric flow). |
| `co2_flow`, `h2_flow`, `ar_flow` | Feed gas flows, mL/min. |
| `run_id` | Source experiment folder name, e.g. `2025-10-23_open_end_290C_1to1`. |
| `cycle_ranges` | Present for provenance; typically blank in this aggregated table. |

## IR Camera Geometry

The IR camera looks straight down onto the pellet's **top (flat) face**. A
**conical mirror** surrounds the pellet and reflects its **curved side
surface** into the camera's field of view.

In a raw IR image:
- The **central bright spot** is the direct view of the pellet's top face.
- The **bright ring surrounding the center** is the mirror's reflection of
  the pellet's cylindrical side wall.

`config.yaml` / `config_new.yaml`'s `unwrap.inner_ellipse` bounds the edge of
the pellet's top face; `unwrap.outer_ellipse` bounds the outer edge of the
mirror reflection. The annulus between them is therefore the reflected side
wall, which the code "unwraps" from Cartesian (x, y) into a rectangular
(radial, angular) grid.

After unwrapping, the 200x360 grid represents:
- **Rows (200, radial direction)**: axial height along the pellet's side
  wall — row 0 is the top, row 199 is the bottom.
- **Columns (360, angular direction)**: circumferential angle, 0-359°.

Gas flows enter from the **bottom** of the pellet. Frame acquisition
interval: **10 s/frame**. Steady-state time-averaging window: **frames
40-80** (t = 400-1000 s), consistent across all 16 experiments.

## Known Issues

- `metadata.json`'s `"temp_unit": "°C"` is read back with a corrupted
  degree sign (`"Â°C"`) in several downstream CSVs (a UTF-8/Latin-1
  decoding mismatch somewhere in the processing chain); the source
  `metadata.json` files themselves are correctly encoded.
- `2025-10-23_open_end_290C_1to1/` is missing its per-experiment `README.md`
  and `ms_calibration/` subfolder (see Directory Structure above).
- `ms_calibration/` subfolders (where present) are empty — vestigial,
  not used by the processing pipeline.
- `config.yaml` and `config_new.yaml` overlap but are not identical; see
  `schemas/config_schema.json` for which fields live in which file.
- The CO calibration factor used when aggregating all experiments is not
  visibly derived from the calibration runs included here (only H2, CO2,
  and CH4 calibration curves are fit from `calibration/data_raw/`) — see
  the companion code repository's README for details.

## Code

The companion analysis code (which produced every `data_processed/` and
`results/` file here from the `data_raw/` originals, and reproduces the
publication figures) is published separately. It expects this dataset to be
available either as a sibling `data/` folder next to the code's `code/`
folder, or anywhere else via the `METHANATION_DATA_ROOT` environment
variable — see the code repository's README for details.

## Citation

If you use this dataset, please cite it as:

Finkeldei, M., Reinold, P., Korup, O., Wehinger, G. D., & Horn, R. (2026).
*Single Pellet Profile Reactor for Measuring Concentration and Temperature
Patterns on Porous Catalyst Pellets - Experimental Data* [Data set]. TORE
(Technische Universität Hamburg Open Repository).
https://doi.org/10.15480/882.17442

## License

Experimental data of this kind generally does not constitute a copyrightable
work, so no copyright license can be granted for it. This dataset is
therefore released under the **Public Domain Mark Universal (PDM)** — see
[LICENSE](LICENSE). Even so, in keeping with good scientific practice, please
cite this dataset with attribution if you use it (see [Citation](#citation)
above). The companion code is licensed separately under the MIT License.
