Skip to main content

FTProductLab

DGX CI macOS GUI Python 3.10+

Reproducible Fischer–Tropsch carbon-number distribution, single-alpha ASF, product-cut, deviation, and olefin/paraffin analysis.

Observed FT product distribution, fitted ASF line, and residuals

Why

FTProductLab keeps carbon-number definitions, input basis, fit range, regression weighting, and truncation conventions visible. It does not turn a high R² into a claim that an ideal ASF mechanism is valid. Species remain category-resolved while totals are aggregated by carbon number for analysis.

Install

python -m pip install ftproductlab

The base package contains the scientific core and CLI and has no GUI, Qt, or plotting dependency. For figures and the Tk interface:

python -m pip install "ftproductlab[gui]"

Tk itself is supplied by Python, not PyPI. Homebrew Python users may need the matching formula, for example brew install python-tk@3.14.

30-second example

ftproductlab analyze examples/sample_distribution.csv \
  --basis molar --fit-min 5 --fit-max 20 \
  --cut C1:1:1 --cut C2-C4:2:4 --cut C5+:5 \
  --output ftproductlab-output --plots

The command writes a machine-readable analysis.json, point/cut/O-P CSV tables, and PNG/SVG/PDF figures. Run the built-in hand-checkable regression with:

ftproductlab validate

Python uses the same core:

from ftproductlab import FitConfig, InputBasis, ProductRecord, analyze_distribution

records = [ProductRecord(n, 0.2 * 0.8 ** (n - 1)) for n in range(1, 21)]
result = analyze_distribution(records, InputBasis.MOLAR, FitConfig(3, 20))
assert abs(result.fit.alpha - 0.8) < 1e-12

GUI

python -m ftproductlab.gui

The GUI is deliberately Tkinter/ttk rather than Qt. It creates one Tk() root, calls the same application service as the CLI, exports the same tables, and closes the event loop normally. Plot exports explicitly select Matplotlib Agg; the core and CLI do not import Tkinter, Matplotlib, PyQt, or PySide.

CSV schema and basis

Required columns are carbon_number and amount. Optional columns are category, species, molecular_weight_g_mol, and below_detection.

  • molar: amount is proportional to moles of product molecules.
  • carbon: amount is proportional to carbon moles; it is divided by carbon number before fitting.
  • mass: each record must provide molecular weight. FTProductLab never approximates all paraffins, olefins, and oxygenates as CH2.

Amounts may use any consistent scale. Zero measurements remain in output but cannot enter a logarithmic fit. Below-detection records remain visible and are excluded from fitting by default. Repeat --cut LABEL:MIN[:MAX] to define CLI cuts; the GUI exposes the same cut specification, and the Python API accepts CutDefinition objects directly.

Scientific basis

For molecular amount at carbon number n, the ideal single-alpha model is

x_n = (1 - alpha) alpha^(n - 1)

and the corresponding carbon fraction is

w_n = n (1 - alpha)^2 alpha^(n - 1).

FTProductLab estimates the slope of ln(molar-equivalent amount) against n over the user-specified range; alpha = exp(slope). The intercept is free because experimental datasets may be scaled or truncated. Uniform and amount-weighted regressions are explicit choices. No fit range is selected automatically, and C1/C2 are not silently removed.

The primary/statistical foundation is Flory's chain-length distribution (JACS 1936, DOI 10.1021/ja01301a016); its early FT application includes Friedel and Anderson (JACS 1950, DOI 10.1021/ja01159a039). A modern discussion of ideal ASF and structured deviations is Vervloet et al., Catalysis Science & Technology 2013. See the scientific-basis document for conventions and equations.

Validation

  • Exact synthetic geometric distributions recover alpha to floating-point precision.
  • Infinite molecular/carbon normalization and analytical carbon-cut sums have independent direct-summation tests.
  • Species aggregation, mass-to-mole conversion, C1/C2 deviations, product-cut closure, O/P zero denominators, detection flags, CSV, CLI, GUI export, plotting, and import isolation are tested.
  • A raw Apollo Ru/TiO2 workbook reproduces three explicit C30–C50 fits; processed industrial Fe/Mn tables exercise mass conversion, range-dependent alpha, residual, C5+, and O/P workflows. The Partington et al. Co/TiO2 study is retained as a published-number/metadata benchmark because its combined C10–C40 values are not tabulated.
  • Public-data validation exposed and now guards one plotting-normalization defect; numeric alpha and residual calculations were unaffected.

Details: validation record and source/checksum register.

Supported platforms

  • Python 3.10–3.14 for the core and CLI
  • Linux scientific core/CLI and Xvfb GUI checks on the project DGX runner
  • macOS GUI workflow on GitHub-hosted macOS plus local Apple Silicon smoke testing
  • Tk 8.6 or newer; no Qt binding is used or installed

The hosted GUI matrix covers Apple Silicon on Python 3.10 and 3.14 and Intel on Python 3.13. The setup-python 3.10 build on the macos-15-intel image is not a supported GUI combination because its Tk 8.5 build metadata conflicts with the image's Tk 8.6 runtime. See macOS notes.

Limitations

  • Version 0.1 implements an ideal, single-alpha descriptive fit only. Dual-alpha and modified ASF models are intentionally unsupported.
  • Missing products, detector response, phase collection, recycle, and analytical recovery can structure residuals; the software does not correct them without supplied data.
  • Observed product-cut fractions close over the supplied dataset. They are not an estimate of an unmeasured heavy tail.
  • Category names such as “gasoline”, “diesel”, and “wax” are not assigned automatically; carbon-number cut definitions are shown explicitly.
  • This is product-distribution decision support, not a reactor or kinetic mechanism model.

Development and citation

See CONTRIBUTING.md before changing an equation or GUI dependency and use CITATION.cff when citing the software. The name and competitive audit is recorded in docs/naming-audit.md.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ftproductlab-0.1.1.tar.gz (91.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ftproductlab-0.1.1-py3-none-any.whl (24.7 kB view details)

Uploaded Python 3

File details

Details for the file ftproductlab-0.1.1.tar.gz.

File metadata

  • Download URL: ftproductlab-0.1.1.tar.gz
  • Upload date:
  • Size: 91.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for ftproductlab-0.1.1.tar.gz
Algorithm Hash digest
SHA256 395b92bcb97b363ab0ac1a7f3a6a23aeabb465a27ff7eaec21bba8465f463ed0
MD5 6b366e401d13dc8a154e2e7b40064fd6
BLAKE2b-256 9f1c142aaf178b616e6f029417566e094e6053226cbf58e9b4dc0337f7f7a4a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftproductlab-0.1.1.tar.gz:

Publisher: release.yml on hdkim99/FTProductLab

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ftproductlab-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: ftproductlab-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 24.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for ftproductlab-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1be9b41b2766e075bfda622467276f39f8a00257f028eb44ce1661bb1359a578
MD5 c065cf0d830aff245937f9b367dd4729
BLAKE2b-256 d0378c67a72e6abc3de93b1214ec506c2a5697d1b878b50c00af293b7fb2e29d

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftproductlab-0.1.1-py3-none-any.whl:

Publisher: release.yml on hdkim99/FTProductLab

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page