Releases: baradlab/surface_morphometrics
Release list
2.0.0b4
Protein-patch workflow overhaul and a mesh-refinement pycurv speed fix.
Added
- Protein-to-membrane-edge distances. When per-triangle
thicknessis present,generate_patcheswrites a<prefix>_headgroup_distance(distance to the true membrane edge = midplane distance − thickness/2, measured at the patch's central triangle) per-particle into the annotated STAR, andpatch_statisticsreports it per-patch. Effective thickness falls back from the central triangle to the patch's distance-weighted mean, then to NaN. patch_statisticsreportsmin_protein_distanceper real patch and keeps the measurement prefix inregion_type(e.g.ribo_patch,ribo_random_patch) so multiple patch types can be compared.patch_analysis.measurement_prefix(defaultribo): patch measurement columns are prefixed, so re-running with a different prefix accumulates a second patch type (e.g.atp) on the same surface.
Changed
generate_patchesedits the membrane.gt/.vtp/.csvin place instead of a separate*_patchesset;patch_statistics/extract_patchesdefault to the in-place*.AVV_rh*files.--output-dirnow only affects the annotated STAR.- Refinement runs the final pycurv pass in a fresh subprocess — in-process at the end of a long run it was ~3–4× slower per NVV chunk (measured) from the loaded process's memory/allocator state, not the mesh. Also frees large arrays /
gc.collect()between iterations and surfaces.
Fixed
- Patch headgroup distance could exceed the protein distance (per-triangle-then-min came from different triangles, dropping NaN-thickness triangles). Now computed at the central triangle, guaranteeing
headgroup_distance ≤ min_protein_distance.
Notes
generate_patchessupports RELION 3/4 STAR files (absolute coordinates). RELION 5 centered coordinates (rlnCenteredCoordinate*Angst) are not yet supported — convert to absolute first.
Full changelog: see CHANGELOG.md.
2.0.0b3
Performance and robustness release for the mesh-refinement step, plus the move of the repository to the Barad Lab GitHub organization.
Changed
- Mesh refinement now runs pycurv only once, on the final surface. Every intermediate iteration (cross-correlation and dual-Gaussian) builds a fast lightweight graph from VTK normals and warns that the surface is not curvature-ready; a single full pycurv normal-vector-voting pass runs on the accepted surface after the loop — on every exit path, including an early convergence stop — so the result is always a clean, curvature-ready surface. Previously every dual-Gaussian iteration re-ran the slow voting (~28 min on large surfaces), which dominated refinement time.
- Mesh-refinement parallel fitting (dual-Gaussian offset centering and local thickness) now respects the configured
coresinstead of spawning one worker per logical CPU. Benchmarking showed throughput peaks near the configured core count and regresses beyond it, so this is both a correctness and a speed improvement. accept_refinementmessages now refer to "intermediate" iterations (any non-final iteration may lack a curvature graph), not specifically cross-correlation ones.- Repository moved to https://github.com/baradlab/surface_morphometrics.
Fixed
__version__insurface_morphometrics/__init__.pyhad drifted a release behindpyproject.toml; both version strings are now kept in sync.
Full changelog: see CHANGELOG.md.
2.0.0b2
A quality and robustness release on top of 2.0.0b1, focused on the density-profile bilayer fitting (mesh refinement and thickness measurement), a forgiving centralized config system, and packaging fixes.
Added
- Per-triangle
bilayer_resolutionscore (0–1) in the thickness CSV — a reliability flag separating strictly-resolved leaflets from prior-recovered (slightly thin) measurements. morphometrics new_config --simple— a minimal, fully-runnable starter config (--verbosestill gives the full annotated template).- Centralized config defaults so partial/stripped configs run; per-command required-key validation with clean errors; trailing slashes on directory paths no longer required.
- Distance/orientation measurements default to all-vs-all when
intra/interare omitted. - Plugins can contribute
morphometricssubcommands via amorphometrics.commandsentry point. - GitHub Actions test workflow and unit tests.
Changed
- Dual-Gaussian bilayer fitting overhaul (refinement + thickness): height-above-base leaflet detection, shared-width centered fit over a symmetric window (removes a ~0.1 nm centering bias and the collapse failure mode), and a two-tier gate that recovers locally-merged bilayers from the global prior while rejecting genuine single/skewed peaks.
- Thickness measurement applies a real quality gate (resolution + R² + physical range), reporting
NaNfor unmeasurable triangles. accept_refinementfalls back to a surface's last available iteration when it converged early.mesh_refinementdefaults now match the documented template.export_obj:--angstroms→--scale_to_angstromswith config-aware units.
Fixed
- pycurv fork deadlock on Linux (
OMP_NUM_THREADS=1). export_objreads legacy/empty VTP surfaces.- NumPy 2.x compatibility (
np.trapz); deprecatedmatplotlib.cm.get_cmap.
Full changelog: https://github.com/GrotjahnLab/surface_morphometrics/blob/main/CHANGELOG.md
2.0.0b1
v1.2
What's Changed
- Ensure compatibility with pymeshlab 2022.2.post3 by @m-albert in #26
- Update xyz2ply.py by @Kate-G-stem in #28
- Downgrade Python to 3.7.9 and adjust related dependencies by @hemanthkapa in #31
- Implemented Docker container and updated documentation by @hemanthkapa in #32
- fixing docker import pymeshlab error by @hemanthkapa in #34
- Fix description of point_weight config parameter by @m-albert in #37
- adding new dependancies for GUI by @hemanthkapa in #49
- Create quantifications_documentation.md by @hemanthkapa in #51
- Revert "Create quantifications_documentation.md" by @hemanthkapa in #52
- Initial Thickness Measurements by @bbarad in #53
- Fix pycurv multifile hang by @bbarad in #55
- Mesh refinement by @bbarad in #56
New Contributors
- @m-albert made their first contribution in #26
- @Kate-G-stem made their first contribution in #28
- @hemanthkapa made their first contribution in #31
Full Changelog: 1.1...1.2
v1.1
1.0beta1
v0.2
Version 0.2 is the fully pipelined and configurable version of the surface morphometrics pipeline. Tutorial data and config file included so you can really jump in! This is the version prepared in response to review, and I anticipate that v1.0 (released with the final manuscript) will look very similar to this (With some extra polishing of the visualization side of the workflow, and bugfixes of course)