Skip to content

Add conformer generation workflow (#30) - #75

Merged
galjos merged 2 commits into
mainfrom
conformer-generation
Jul 6, 2026
Merged

Add conformer generation workflow (#30)#75
galjos merged 2 commits into
mainfrom
conformer-generation

Conversation

@galjos

@galjos galjos commented Jul 6, 2026

Copy link
Copy Markdown
Member

Resolves #30 — a conformer generation workflow for molecule screening, per the issue's two notes (decide RDKit as backend; expose a small public API before wiring into screening).

What changed

  • thermo/conformers.py (new) — RDKit is the conformer backend. generate(smiles, max_conformers=, optimize=, prune_rms_thresh=, energy_window=, random_seed=) embeds conformers with ETKDGv3, optionally MMFF-optimises and sorts by energy, and prunes by RMSD + an optional energy window. Returns energy-sorted ASE Atoms. write_conformers(...) writes them as .xyz so a directory feeds straight into screen.
  • Public APIgenerate_conformers / write_conformers exported from ThermoScreening.thermo.
  • CLIthermo conformers "<SMILES>" --max-conformers N [--energy-window K] [--no-optimize] writes the ensemble; then thermo screen <dir> screens it.
  • README roadmap updated.

Verified end-to-end

thermo conformers "CCCC" → 2 conformers → thermo screen butane_confs --engine xtb-cli → 2 results, 0 failed.

Tests

tests/thermo/test_conformers.py (embed, max-count, energy-window, no-optimize, bad-SMILES, write→read, public export) + CLI parse/run + main() dispatch. RDKit is a declared dependency so these run in CI; the RDKit import is guarded with a clear message if absent (# pragma: no cover).

Closes #30. Full suite: 268 passed / 11 skipped; patch fully covered.

Resolves #30: a conformer generation workflow for screening.

- thermo/conformers.py: RDKit is the conformer backend. `generate(smiles, ...)`
  embeds conformers with ETKDG, optionally MMFF-optimises + energy-window/RMSD
  prunes them, and returns energy-sorted ASE Atoms. `write_conformers` writes
  them as .xyz so a directory can be fed straight to `screen`.
- Public API: `generate_conformers` / `write_conformers` exported from
  `ThermoScreening.thermo`.
- CLI: `thermo conformers <SMILES>` writes the ensemble, then
  `thermo screen <dir>` screens it (verified end-to-end with xtb-cli).

RDKit is already a declared dependency; the import is guarded with a clear
message if absent.

Closes #30
@codecov

codecov Bot commented Jul 6, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 98.48485% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 96.80%. Comparing base (69f7bb9) to head (a617a58).

Files with missing lines Patch % Lines
ThermoScreening/thermo/conformers.py 97.77% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main      #75      +/-   ##
==========================================
+ Coverage   96.73%   96.80%   +0.06%     
==========================================
  Files          24       25       +1     
  Lines        1564     1629      +65     
==========================================
+ Hits         1513     1577      +64     
- Misses         51       52       +1     
Flag Coverage Δ
unittests 96.80% <98.48%> (+0.06%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

- conformers module docstring: say MMFF (there is no UFF fallback).
- run_conformers: catch ValueError/ImportError and print a clean stderr message
  + exit 1, instead of surfacing a raw traceback.
@galjos
galjos merged commit c3ba41f into main Jul 6, 2026
3 checks passed
@galjos
galjos deleted the conformer-generation branch July 6, 2026 12:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add conformer generation workflow

1 participant