asp-plot 3.5.0__tar.gz → 3.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. {asp_plot-3.5.0 → asp_plot-3.6.0}/ARCHITECTURE.md +1 -0
  2. {asp_plot-3.5.0 → asp_plot-3.6.0}/CHANGELOG.md +9 -0
  3. {asp_plot-3.5.0 → asp_plot-3.6.0}/PKG-INFO +1 -1
  4. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/cli/asp_report.py +8 -0
  5. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/report_pipeline.py +11 -5
  6. {asp_plot-3.5.0 → asp_plot-3.6.0}/pyproject.toml +1 -1
  7. {asp_plot-3.5.0 → asp_plot-3.6.0}/.flake8 +0 -0
  8. {asp_plot-3.5.0 → asp_plot-3.6.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  9. {asp_plot-3.5.0 → asp_plot-3.6.0}/.github/ISSUE_TEMPLATE/problem-report.yml +0 -0
  10. {asp_plot-3.5.0 → asp_plot-3.6.0}/.github/workflows/claude-code-review.yml +0 -0
  11. {asp_plot-3.5.0 → asp_plot-3.6.0}/.github/workflows/claude.yml +0 -0
  12. {asp_plot-3.5.0 → asp_plot-3.6.0}/.github/workflows/release.yml +0 -0
  13. {asp_plot-3.5.0 → asp_plot-3.6.0}/.github/workflows/run-tests.yml +0 -0
  14. {asp_plot-3.5.0 → asp_plot-3.6.0}/.gitignore +0 -0
  15. {asp_plot-3.5.0 → asp_plot-3.6.0}/.pre-commit-config.yaml +0 -0
  16. {asp_plot-3.5.0 → asp_plot-3.6.0}/.readthedocs.yaml +0 -0
  17. {asp_plot-3.5.0 → asp_plot-3.6.0}/AGENTS.md +0 -0
  18. {asp_plot-3.5.0 → asp_plot-3.6.0}/CLAUDE.md +0 -0
  19. {asp_plot-3.5.0 → asp_plot-3.6.0}/LICENSE +0 -0
  20. {asp_plot-3.5.0 → asp_plot-3.6.0}/README.md +0 -0
  21. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/__init__.py +0 -0
  22. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/alignment.py +0 -0
  23. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/altimetry.py +0 -0
  24. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/altimetry_plots.py +0 -0
  25. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/altimetry_source.py +0 -0
  26. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/asp_log.py +0 -0
  27. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/bodies.py +0 -0
  28. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/bundle_adjust.py +0 -0
  29. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/cli/__init__.py +0 -0
  30. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/cli/bundle_adjust_cameras.py +0 -0
  31. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/cli/csm_camera_plot.py +0 -0
  32. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/cli/dem_benchmark.py +0 -0
  33. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/cli/gallery.py +0 -0
  34. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/cli/request_planetary_altimetry.py +0 -0
  35. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/cli/stereo_geom.py +0 -0
  36. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/csm_analysis.py +0 -0
  37. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/csm_camera.py +0 -0
  38. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/csm_io.py +0 -0
  39. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/dem_benchmark.py +0 -0
  40. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/gallery.py +0 -0
  41. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/icesat2_source.py +0 -0
  42. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/mapproject.py +0 -0
  43. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/planetary_source.py +0 -0
  44. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/processing_parameters.py +0 -0
  45. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/report.py +0 -0
  46. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/report_captions.py +0 -0
  47. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/scenes.py +0 -0
  48. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/selections.py +0 -0
  49. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/sensors/__init__.py +0 -0
  50. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/sensors/aster.py +0 -0
  51. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/sensors/base.py +0 -0
  52. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/sensors/dimap.py +0 -0
  53. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/sensors/dimap_v1.py +0 -0
  54. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/sensors/rpc.py +0 -0
  55. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/sensors/worldview.py +0 -0
  56. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/stereo.py +0 -0
  57. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/stereo_geometry.py +0 -0
  58. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/stereopair_metadata_parser.py +0 -0
  59. {asp_plot-3.5.0 → asp_plot-3.6.0}/asp_plot/utils.py +0 -0
  60. {asp_plot-3.5.0 → asp_plot-3.6.0}/conda-forge-recipe/meta.yaml +0 -0
  61. {asp_plot-3.5.0 → asp_plot-3.6.0}/environment.yml +0 -0
@@ -247,6 +247,7 @@ All CLI tools are in `asp_plot/cli/` and use Click for argument parsing:
247
247
  - `--no-altimetry`: Skip the altimetry comparisons plotted by default. Auto-detects planetary body from DEM CRS: Earth → ICESat-2 (requires internet), Moon → LOLA, Mars → MOLA. For planetary DEMs, requires `--altimetry-csv`.
248
248
  - `--altimetry-csv`: Path to a LOLA/MOLA CSV from the ODE GDS API. **Mars: must be the `*_pts_csv.csv` (not `*_topo_csv.csv`) — the loader requires the `PLANET_RAD` column to avoid the oblate-areoid offset.** Moon accepts either the `*_topo_simple_csv.csv` (results=u) or the `*_pts_csv.csv` (results=p). Obtained via the `request_planetary_altimetry` CLI tool.
249
249
  - `--no-pc-align`: Skips the `pc_align` step; by default (when altimetry is on) the report runs `pc_align` against the reference altimetry (ICESat-2 for Earth, MOLA for Mars, LOLA for Moon) after the existing altimetry plots and appends an alignment report. **Earth success path**: adds four pages (alignment report page, pre/post landcover histogram, aligned profile, aligned best/worst segments). **Planetary success path**: adds three pages (alignment report page, pre/post mapview, pre/post histogram). `insufficient_points` and `no_improvement` outcomes emit a single alignment report page on either branch. Skipped automatically when `--no-altimetry` is set.
250
+ - `--pc-align-min-points`: Fewest altimetry points on the DEM for the `pc_align` step to run (`ReportConfig.pc_align_min_points`); `None`, the default, keeps the alignment methods' own minimums (500 ICESat-2 points, 20 LOLA/MOLA points). Below the minimum the alignment page says the step was skipped.
250
251
  - `--no-geometry`: Skip the stereo geometry plots drawn by default (used for planetary missions)
251
252
  - `--subset-km`: Hillshade subset size in km (default: 1.0)
252
253
  - `--atl06sr-time-range`: Time range for ICESat-2 ATL06-SR requests. `"all"` (default) for full mission, `"auto"` for scene metadata ±1 year, `"START,END"` for a custom range, or a single date (buffered by ±1 year).
@@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [3.6.0] - 2026-10-30
11
+
12
+ In this release:
13
+
14
+ - `asp_report --pc-align-min-points` sets how many altimetry points the `pc_align` step needs before it runs, so small DEMs that ICESat-2 crosses only a few times can still be aligned.
15
+
16
+ ### Added
17
+ - **`asp_report --pc-align-min-points N` sets how many altimetry points the `pc_align` step needs before it runs** (`ReportConfig.pc_align_min_points`). The step skipped itself below a fixed 500 ICESat-2 points (20 for LOLA/MOLA), so a report on a DEM of about 1 km², which ICESat-2 crosses only a few times, compared against the points but never aligned to them. The default is unchanged.
18
+
10
19
  ## [3.5.0] - 2026-10-23
11
20
 
12
21
  In this release:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: asp_plot
3
- Version: 3.5.0
3
+ Version: 3.6.0
4
4
  Summary: Package for plotting outputs Ames Stereo Pipeline processing
5
5
  Project-URL: Homepage, https://github.com/uw-cryo/asp_plot
6
6
  Project-URL: Documentation, https://asp-plot.readthedocs.io
@@ -92,6 +92,12 @@ def _reconstruct_command():
92
92
  default=False,
93
93
  help="Skip the pc_align step (run by default against the reference altimetry -- ICESat-2 for Earth, MOLA for Mars, LOLA for Moon -- appending the alignment-report pages; skipped automatically with --no-altimetry).",
94
94
  )
95
+ @click.option(
96
+ "--pc-align-min-points",
97
+ type=int,
98
+ default=None,
99
+ help="Fewest altimetry points on the DEM for the pc_align step to run; below it the alignment page says the step was skipped. Default: 500 for ICESat-2, 20 for LOLA/MOLA.",
100
+ )
95
101
  @click.option(
96
102
  "--no-geometry",
97
103
  is_flag=True,
@@ -155,6 +161,7 @@ def main(
155
161
  no_altimetry,
156
162
  altimetry_csv,
157
163
  no_pc_align,
164
+ pc_align_min_points,
158
165
  no_geometry,
159
166
  subset_km,
160
167
  atl06sr_time_range,
@@ -183,6 +190,7 @@ def main(
183
190
  plot_altimetry=not no_altimetry,
184
191
  altimetry_csv=altimetry_csv,
185
192
  pc_align=not no_pc_align,
193
+ pc_align_min_points=pc_align_min_points,
186
194
  plot_geometry=not no_geometry,
187
195
  subset_km=subset_km,
188
196
  atl06sr_time_range=atl06sr_time_range,
@@ -75,6 +75,9 @@ class ReportConfig:
75
75
  plot_altimetry: bool = True
76
76
  altimetry_csv: Optional[str] = None
77
77
  pc_align: bool = True
78
+ # Fewest altimetry points on the DEM for pc_align to run. None keeps the
79
+ # alignment methods' own defaults: 500 for ICESat-2, 20 for LOLA/MOLA.
80
+ pc_align_min_points: Optional[int] = None
78
81
  plot_geometry: bool = True
79
82
  subset_km: float = 1.0
80
83
  atl06sr_time_range: str = "all"
@@ -628,10 +631,10 @@ def _build_altimetry_earth(ctx: ReportContext, ctx_kwargs_altimetry: dict):
628
631
 
629
632
  # ---- pc_align + ICESat-2 alignment report (Earth only) ----
630
633
  if cfg.pc_align:
631
- align_result = icesat.align_and_evaluate(
632
- processing_level="all",
633
- improvement_threshold_pct=5.0,
634
- )
634
+ align_kwargs = {"processing_level": "all", "improvement_threshold_pct": 5.0}
635
+ if cfg.pc_align_min_points is not None:
636
+ align_kwargs["minimum_points"] = cfg.pc_align_min_points
637
+ align_result = icesat.align_and_evaluate(**align_kwargs)
635
638
  stats_row = _stats_row_from_result(align_result)
636
639
 
637
640
  align_title = "DEM Alignment with ICESat-2"
@@ -777,7 +780,10 @@ def _build_altimetry_planetary(ctx: ReportContext, body: str):
777
780
 
778
781
  # ---- pc_align + planetary alignment report (Moon/Mars) ----
779
782
  if cfg.pc_align:
780
- align_result = alt.align_and_evaluate_planetary()
783
+ align_kwargs = {}
784
+ if cfg.pc_align_min_points is not None:
785
+ align_kwargs["minimum_points"] = cfg.pc_align_min_points
786
+ align_result = alt.align_and_evaluate_planetary(**align_kwargs)
781
787
  stats_row = _stats_row_from_result(align_result)
782
788
 
783
789
  align_title = f"DEM Alignment with {instrument}"
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "asp_plot"
7
- version = "3.5.0"
7
+ version = "3.6.0"
8
8
  license = {text = "BSD-3-Clause"}
9
9
  authors = [
10
10
  { name="Ben Purinton", email="purinton@uw.edu" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes