Skip to content

feat: cluster-scale visualization — per-plane critical curves/caustics, large-FoV aplt helpers #577

Description

@Jammy2211

Overview

Cluster lenses need visualization that galaxy-scale plots don't provide: arcminute fields of view, tens of mass components, multiple source planes each with their own critical curves and caustics, and per-source multiple-image identification at a glance. A prototype exists (autolens_workspace_test/scripts/cluster/visualization.py, bespoke matplotlib) and PyAutoMind's cluster tracker carries a deferred "aplt plotter promotion" item this task subsumes. Autonomy: supervised --auto, in-session one-shot ship authorization (user directive 2026-07-08); Brain research-first suggestion overridden — scope is defined by the prompt + prototype.

Plan

  • New autolens/cluster/plot/ package of module-level aplt helpers (the shipped autolens/weak/plot/ pattern), re-exported into aplt:
    • plot_positions_overlay(...) — full-field log-norm image, per-source coloured observed positions, lens/member markers, optional kpc scale bar.
    • plot_image_group_zooms(...) — per-source zoom-panel grid sized to each image group.
    • plot_critical_curves(...) — tangential (+ radial) critical curves for every source plane of a multi-plane tracer, per-plane colours + legend (galaxy-scale defaults assume one source plane).
    • plot_caustics(...) — the corresponding per-plane caustics in source-plane coordinates.
    • subplot_cluster_dataset(...) — combined mosaic.
  • Per-plane curves computed via the existing LensCalc multi-plane machinery (use_multi_plane=True, plane_j=j) — no new solver code; numpy-path only (critical-curve solvers are not vmap-safe; documented).
  • Sensible large-FoV defaults: marching-grid resolution guidance for arcminute fields, marker sizes, line weights (from the prototype's cluster-tuned values).
  • Unit tests in test_autolens/cluster/plot/ (numpy-only, direct module imports per the weak-plot precedent, Agg backend, tmp-path outputs).
  • Rewrite autolens_workspace_test/scripts/cluster/visualization.py to consume the promoted aplt helpers, keeping its file-existence assertions (companion PR, library-first merge order).

Affected Repositories

  • PyAutoLens (primary) — parallel to the frozen dpie-lenstool-param claim (its diff = docs/api/mass.rst only; disjoint)
  • autolens_workspace_test — parallel to the frozen dpie-lenstool-param claim (its diff = scripts/cluster/lenstool_parity.py; disjoint)

Suggested branch: feature/cluster-visualization · Worktree: ~/Code/PyAutoLabs-wt/cluster-visualization/

Original Prompt

Click to expand starting prompt

$(cat PyAutoMind/feature/cluster/9_cluster_visualization.md)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions