Handoff: Document the multiple-return-fraction gap (AI3D-337)
Summary
Continuation target: write a small, durable documentation note about the missing multiple-return-fraction channel in the AI3D-337 z-channel work. The channel cannot be produced because the LAS NumberOfReturns / ReturnNumber fields are stripped upstream during LAS → npz export; the rasterizer's input *_run3_points.npz carries only points, scan_angle, intensity, red, green, blue.
Miro's assessment (authoritative, include it in the doc): this gap is not a concern for the Z diff plots. Their main purpose is (a) checking whether lidar passes are aligned on the pavement parts and (b) seeing the edges of the pavement — both served by the existing channels. The gap should nevertheless be documented so nobody re-discovers it or silently assumes the channel exists.
Current state
- Branch
feature/zrange-extra-channels(5 commits, allAI3D-337, clean tree at handoff time, HEAD65b9308) addsTopdownRasterizer.compute_z_channels: per-cell cell-relative z-histogram →z_bimodality,z_lowest_layer_top,z_lowest_layer_jump,n_points. Additive; legacyprocess_tilebyte-identical. - The gap is already mentioned in two places, but neither carries Miro's "not a concern for the intended use" assessment:
- Commit message of
9843585("multiple-return-fraction channel NOT produced … Documented as follow-up."). - Docstring of
compute_z_channels—src/iolabs_image_analyzer_rasterizer/rasterization/topdown_rasterizer.py:1473-1478("See the branch validation report / module follow-ups.").
- Commit message of
- Background for the doc author: multi-return lidar points come from permeable/edge structures (vegetation, guardrail edges, sign posts); bare pavement gives 1-of-1 returns. A per-cell fraction of multi-return points was proposed in the AI3D-337 research doc (§ referenced as "s2" in the commit) as a discriminator to separate "high z-spread because guardrail/vegetation" from pavement. Recomputing it here is impossible — the information is physically absent from the npz input; only an upstream export change (Step 3 of
iolabs-point-cloud-segmentation-trajectory) could restore it.
Task & next steps
- Read the existing mentions (docstring around
topdown_rasterizer.py:1473, commit9843585message) so the new note links to them instead of duplicating. - Write the documentation note. Suggested home: a short section in
README.mdor a newdocs/note (repo hasdocs/plans/only; adocs/known-gaps.mdor similar is fine — pick what fits repo conventions, keep it brief). Content:- What the channel would be (per-cell fraction of points with
NumberOfReturns > 1) and why it was proposed (vegetation/guardrail vs. pavement discrimination, AI3D-337 research doc). - Why it can't be produced:
NumberOfReturns/ReturnNumberstripped during LAS → npz export upstream (Step 3,iolabs-point-cloud-segmentation-trajectory);*_run3_points.npzkeys arepoints, scan_angle, intensity, red, green, blue. - Impact assessment (Miro, 2026-09-01): acceptable. The Z diff plots' purpose is lidar-pass alignment on pavement and pavement-edge visibility; the multiple-return channel is not needed for that. Document as a known limitation, not a blocker.
- What it would take to add later: extend the upstream npz export to carry the return fields, then a straightforward extra per-cell scatter channel here.
- What the channel would be (per-cell fraction of points with
- Optionally update the docstring's trailing pointer ("See the branch validation report / module follow-ups.") to point at the new doc location.
- Commit on
feature/zrange-extra-channels, message prefixedAI3D-337:, one concise line, no co-author trailer (Miro's convention).
Key artifacts
| Handle | What |
|---|---|
/home/ai/dev/3dai.iolabs.imageanalyzer.rasterizer | Repo (WSL2). Branch feature/zrange-extra-channels, main branch master. |
src/iolabs_image_analyzer_rasterizer/rasterization/topdown_rasterizer.py:1473 | Existing docstring mention of the gap inside compute_z_channels. |
git show 9843585 | Commit that introduced the z-channels and first recorded the gap. |
scripts/run_zchannels.py | QA panel renderer (intensity | z_spread | J | B | top) — the "Z diff plots" context. |
| AI3D-337 | Jira issue; the research doc (§2) that proposed the channel lives with it. Not in this repo. |
iolabs-point-cloud-segmentation-trajectory, Step 3 | Upstream pipeline whose LAS → npz export strips the return fields. Any real fix lands there. |
Verification
- Nothing run for this handoff beyond
git log/grep; docs-only change ahead, but runpytestbefore committing if the docstring is touched (123 tests passing on branch per commit message).
Risks & open questions
- Doc location is the only real decision. Miro didn't specify where; README section vs.
docs/note vs. expanding the docstring alone. Any is acceptable — prefer one discoverable place plus pointers, not three copies. - Commit
9843585says "See the branch validation report" — no such report file exists in the repo (onlydocs/plans/perspective-multisegment-20260707.html). Don't chase it; treat the new note as the canonical record. - The exact upstream export code was not inspected in this session — the "stripped upstream" claim comes from the commit message and NPZ key list. If precision matters, verify the Step 3 export in
iolabs-point-cloud-segmentation-trajectorybefore asserting it in the doc.