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>.
- Upstream: https://github.com/ExcitedStates/qfit-3.0
- License: MIT
Versions
- 2025.3 (Dec 2025) — current. Post-2024-paper qFit-ligand
(RDKit
-sm SMILESroute,-emflag). Python 3.12, solvers cvxpy + pyscipopt (SCIP) declared ininstall_requires— no CPLEX size cap. One extra:cctbx-base(structure I/O imports iotbx/scitbx/cctbx/mmtbx but upstream lists it only in conda'senvironment.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 thevprefix — itsurls:is overridden per-version inconfig.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.