Files

qfit

qFit 3 — automated multiconformer model building for X-ray crystallography and cryo-EM (qfit_protein, qfit_ligand, qfit_covalent_ligand, ...). Repo is named qfit-3.0; module follows the name/version rule as qfit/<version>.

Versions

  • 2025.3 (Dec 2025) — current. Post-2024-paper qFit-ligand (RDKit -sm SMILES route, -em flag). Python 3.12, solvers cvxpy + pyscipopt (SCIP) declared in install_requires — no CPLEX size cap. One extra: cctbx-base (structure I/O imports iotbx/scitbx/cctbx/mmtbx but upstream lists it only in conda's environment.yml; the PyPI manylinux_2_28 wheel works on Ra RHEL8 — no conda involved, anaconda repo is unreachable from Ra).
  • 3.2.2 (Aug 2022) — legacy, pre-paper qfit_ligand algorithm. Python 3.10 (numpy<1.22), cvxopt + CPLEX Community Edition pip-installed as extras. Last upstream tag with the v prefix — its urls: is overridden per-version in config.yaml.

How it is built

uv route (careless-style) from the sha-pinned GitHub tag tarball into $PREFIX/venv. The small C extension (_extensions.c) builds with the gcc/12.3.0 module (plain C, no gcc runtime dep). Both eras need SETUPTOOLS_SCM_PRETEND_VERSION (use_scm_version=True but the tarball has no .git). 3.x-only quirks (solver extras, setuptools<81 for the runtime pkg_resources import) are branched on V_PKG in build; upstream fixed both by 2024.3.

CPLEX caveat (3.x only): the pip cplex wheel is the IBM Community Edition, limited to 1000 variables/constraints. 2024.3+ uses SCIP and has no such cap.

uv must be on the build host (default ~/.local/bin/uv, override with UV=/path/to/uv).

Building on Ra

module use unstable && module load modbuild/2.1.3
cd qfit
modbuild build \
    --tmpdir=/das/work/p21/p21515/.cache/Pmodules \
    --distdir=/das/work/p21/p21515/.cache/Pmodules \
    2025.3
module use MX unstable && module load qfit/2025.3

Verifying the install

which qfit_protein                     # -> .../qfit/2025.3/venv/bin/qfit_protein
qfit_protein --help                    # argparse usage, no traceback
qfit_ligand --help                     # should list -sm/--smiles (2024.3+)
"$QFIT_ENV/bin/python" -c "import qfit, iotbx, pyscipopt, cvxpy; print(qfit.__version__)"

The post-refinement scripts (qfit_final_refine_xray.sh) call phenix: module load phenix before using them.

Adding a new version

Add version + tarball sha256 in files/config.yaml (sha256sum the downloaded <ver>.tar.gz — tags have no v prefix since 2024), check whether upstream relaxed the numpy pin further (may allow a newer venv Python), then build as above.