-
Notifications
You must be signed in to change notification settings - Fork 0
Home
This repository implements a rigorous quantitative analysis workflow for Temporal Analysis of Products (TAP) mass spectrometry data. TAP requires the conversion of time-resolved electrical signals (counts or Amps) into absolute molar flux (
The fundamental equation used to transform the raw mass spectrometer signal
The master equation implemented in the code is:
| Symbol | Unit | Description |
|---|---|---|
|
Molar Flux of species |
||
|
Raw Intensity signal from the mass spectrometer at time |
||
| Baseline background signal (vacuum level) to be subtracted. | ||
| Intensity-to-Flux Constant. A dynamic scalar derived from the inert tracer in the current pulse. | ||
| Dimensionless |
Calibration Factor. A static scalar representing the relative detection efficiency of species |
-
Code Variable:
config['conv'] - UI Label: Intensity -> Flux Conversion
- Nature: Dynamic (Recalculated for every experiment across all pulses for each peak)
Purpose:
This factor translates the MS signal recorded based on number of counts/intensity into molar flux units (
Derivation: It is calculated by integrating the signal of the co-pulsed inert tracer (e.g., Argon) where the injected amount is known.
** Implementation Note:**
In multi-peak experiments (e.g., pump-probe), this value is defined separately for each peak (e.g., c_global_0, c_global_1).
-
Code Variable:
calibration_factor - UI Label: Calibration Factor (AMU X)
- Nature: Static (Determined separately, constant for each species [AMU])
Purpose: This is a material constant that corrects for the fact that the mass spectrometer is not equally sensitive to all molecules.
Derivation: This factor is determined in a separate external calibration experiment where a mixture of known composition with an inert (e.g., 50% Reactant / 50% Ar) is pulsed repeatedly.
Once determined, this value is "hard-coded" or entered once for the specific AMU and remains constant across all experiments involving that species.
For TAP results to effectively isolate surface kinetic effects, the reactor must operate in the Knudsen Diffusion Regime, where transport is dominated by molecule-wall collisions rather than molecule-molecule collisions. The software automatically validates this regime by calculating the statistical moments of the pulses.
| Parameter | Symbol | Unit | Derivation | Description |
|---|---|---|---|---|
| Zeroth Moment | The total moles of gas eluted during the pulse. Used to check mass balance closure against the injected amount. | |||
| Peak Height | The maximum instantaneous rate of molecules leaving the reactor. | |||
| Peak Time | The time elapsed between the pulse injection and the maximum flux detection. | |||
| Normalized Peak Height | A shape factor indicating the sharpness of the pulse. Used to validate transport (inert) or assess reaction kinetics (reactive). |
The product of the normalized peak height and the peak time provides a dimensionless shape factor that characterizes the diffusion quality.
-
Target Range:
$0.25 \le H_p \cdot t_p \le 0.35$ - Interpretation: A value near 0.3 indicates ideal one-dimensional Knudsen diffusion. Deviations suggest problems such as channeling, dead volumes, or transition-regime flow.
Before any scaling, the vacuum background must be removed. This is critical because even a small DC offset, when integrated over the long tail of a TAP pulse, will result in significant mass balance errors.
# Code Logic
corrected_raw = raw_vals - baseline_offsetThe code uses boolean masking to apply the specific
# The Master Equation in Code
# eff_conv combines the machine state (conv) and chemical physics (calibration_factor)
eff_conv = config['conv'] * calibration_factor
# Apply conversion only to the specific time window (mask)
flux_column[mask] = corrected_raw[mask] * eff_convAfter conversion, the software runs the validation check on the derived flux curve to ensure the experiment meets the criteria defined in Section 3.
# Code Logic: Validate Knudsen Criteria
Mo_avg = area_under_curve(t_list, f_list)
Hp_val = F_peak / Mo_avg
knudsen_product = Hp_val * t_p_val
if 0.25 <= knudsen_product <= 0.35:
status = "✓ EXCELLENT"