projects / pyroflue
Pyroflue — Emission Factor Analysis
A Python module I built to help a PhD student post-process and visualize flue gas emission data from Buss et al. (2022). The paper runs pyrolysis experiments on seven waste types and produces thousands of raw measurement points; the module handles the full pipeline from raw concentrations to normalized emission factors and publication-ready charts.
The experiment — what was measured and why
Pyrolysis converts organic waste into biochar at high temperature and low oxygen. The process produces a combustible gas that, when burned, releases flue gas pollutants. The paper investigates seven feedstocks: clean wood chip pellets, waste timber, garden waste, two digested sludges, limed sewage sludge, and food waste reject.
The core scientific question is: which feedstocks produce unacceptable emissions, and by how much? To answer it, results must be expressed in a way that is independent of reactor scale and run duration — that is, as emission factors.
1) Measure pollutant concentrations in the flue gas
During each run, instruments continuously sample the exhaust stream and record concentrations for NOₓ, SO₂, CO, CH₄, N₂O, NH₃, HCl, and other species. These are the raw numbers — a ratio telling you how much of the exhaust is a given pollutant at any point in time. This is what Figure 7 of the paper displays.
The unit refers to a normal cubic metre — gas volume corrected to standard temperature and pressure so readings are comparable across different conditions.
2) Convert concentration → mass emission rate
A concentration alone does not tell you how much pollutant is actually leaving the stack — that also depends on how fast the gas is flowing. Multiplying concentration by the volumetric flow rate gives the mass of pollutant emitted per second.
Integrating over the full experiment duration gives the total mass of pollutant emitted per run. This is where the bulk of the post-processing work sits: aligning time-series measurements, handling gaps, and accumulating mass across thousands of data points per experiment.
3) Normalize by biochar output → emission factor (Figure 8)
Different runs produce different amounts of biochar depending on feedstock, temperature, and batch size. Dividing total emitted mass by biochar output removes those effects, leaving a number that represents the environmental cost per unit of product — the emission factor.
This makes the results directly comparable across feedstocks, reactor scales, and studies. It is also the standard input for life-cycle assessment (LCA) and regulatory benchmarking — for example, comparing pyrolysis emissions against EU waste incineration limits.
What the three plot groups show
The interactive lab app organizes emission factors into three groups, each highlighting a different environmental dimension:
- Major emissions — CO₂, CH₄, CO, NMVOC, TSP, PIC. These capture overall combustion quality. High CO or unburnt hydrocarbons indicate incomplete combustion; CO₂ dominates but varies with carbon content of the feedstock.
- Nitrogen emissions — NOₓ, N₂O, NH₃, HCN. Nitrogen-rich feedstocks like sewage sludge stand out clearly here. NOₓ and N₂O are both greenhouse gases and regulated pollutants; their emission factors confirm why sludge requires more stringent flue gas treatment.
- Acid gases — HCl and SO₂. Chlorine- and sulfur-containing waste produces these; they drive requirements for scrubbers and downstream abatement systems.
The key finding: clean wood and garden waste behave well across all groups; digested and limed sludges consistently produce the highest emission factors, particularly for nitrogen species.