Errors in earlier results fixed. v0.6.0 and earlier have errors in dipole
moments, volumes, densities and, in some cases, cluster membership. See
Known issues in earlier versions
for which results are affected and how to correct them.
Relicensed under the GNU LGPL v3 or later (was GPL-3.0-only), so MolClusters can
be used as a library from software under any license.
Published on PyPI (pip install molclusters), with a Zenodo DOI for each release,
and a documentation site.
arrays returned by MolGroup/Cluster are read-only: changing
one in place raises ValueError, so work on array.copy(). A Cluster's graph
attributes can't be written (TypeError); nx.Graph(cluster.graph) gives a
modifiable copy. MolGroup.uni is now the read-only MolGroup.universe, and
residues returns a new group each call.
molclusters.json is replaced by molclusters.jsonl.zst
(or .jsonl.gz / .jsonl), in a new format: JSON Lines with snake_case keys
named as the MolGroup properties ("dipole_moment", "shape_parameter", ...),
the composition as a {resname: count} map, connections as
[i, j, distance, angle, n_hbonds] rows, the nuclei under
"Nucleus": {"nuclei", "combined_dipole_moment"}, and floats rounded to 6
decimal places. JsonReport's data attribute and encode_* methods are
gone; read the report with molclusters.report.read_report.
Radius, Diameter, Volume and Density in molclusters.json, and
the Radius and Density columns of solute_solvent.csv and nucleus_data.csv,
include the buffer. Reading MolGroup.radius, .diameter, .volume or .density on a
Universe without elements now raises ValueError.
Radius and Diameter in molclusters.json, and the Radius columns
of solute_solvent.csv and nucleus_data.csv, are now the equivalent sphere's
(sqrt(5/3) = 1.291x the radius of gyration), not the radius of gyration.
find() returns None instead of False for a molecule
that is in no cluster; check it with is None.
cls-n.gro, cls-id.gro and solute-.gro
are written to coordinates/ in the output directory instead of the
output directory itself.
MolClusters' clusters, mol_clt, find(),
clusters_size_evo, size_evolution and nucleus are removed. Use
molcls.tracker.clusters / .mol_clt / .find() after run(), and
molcls.analysis(SizeEvolution).data or molcls.analysis(Nucleus).
library code using the removed or renamed Cluster and
MDAResidueGroupAnalyzer members must move to the new names (MolGroup,
residues, graph, birth_time, age, distance); constructing a Cluster
now requires a connected group and cluster_id; and two Cluster objects
with the same graph no longer compare equal.
cluster ids can differ from earlier releases for the same
trajectory and config. A cluster that loses a merge no longer continues in a
remnant elsewhere (the remnant gets a new id), and a pure fragment now wins a
tie against a mixed fragment at any size, not only as a dimer. Outputs keyed by
cluster id (cls-id*.gro, ids in molclusters.json, id-based lifetimes) are
therefore not reproducible against earlier versions.