Commit cfba52c
affinity_mask: spec-only fast path; legacy load is fallback
_maybe_apply_affinity_mask used to read the full (X, Y, Z) uint8 mask
volume, allocate a same-shape boolean zero_idx, and zero each prediction
channel via fancy indexing. On large volumes (12+ G voxels here) that
dominated decoding runtime.
build_affinity_mask already writes the full mask spec (low_z, high_z,
border_width, bg_thresh, axis_order, source_image) to the dataset attrs,
so we can reconstruct the mask implicitly:
- Z-gate: two contiguous slice writes per channel-axis end.
- Border + intensity: only the outer XY ring of width border_width is
read from the source zarr; voxels with intensity <= bg_thresh are
zeroed across all channels. Corner overlap removed by slicing the Y
strips between [bw, X-bw] on the X axis.
apply_affinity_mask_from_spec(predictions, spec) is the new in-place
helper, exported from connectomics.decoding.qc. Stage code first tries
_read_affinity_mask_spec(mask_path); when all five expected attrs are
present and axis_order=="XYZ" it takes the fast path, otherwise it
falls back to the legacy full-volume load. Output log prefixes the
legacy path with "(legacy load)" to make the active path obvious.
Verified parity on a synthetic (12, 14, 8) fixture: spec-only apply
produces byte-identical predictions to the legacy load (n_zero matches,
np.array_equal == True). All 40 existing affinity/QC unit tests pass.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent d57aeaf commit cfba52c
3 files changed
Lines changed: 154 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
| |||
16 | 17 | | |
17 | 18 | | |
18 | 19 | | |
| 20 | + | |
19 | 21 | | |
20 | 22 | | |
21 | 23 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
506 | 506 | | |
507 | 507 | | |
508 | 508 | | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
509 | 595 | | |
510 | 596 | | |
511 | 597 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
116 | 116 | | |
117 | 117 | | |
118 | 118 | | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
119 | 151 | | |
120 | 152 | | |
121 | 153 | | |
122 | | - | |
123 | | - | |
124 | | - | |
125 | | - | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
126 | 164 | | |
127 | 165 | | |
128 | 166 | | |
| |||
133 | 171 | | |
134 | 172 | | |
135 | 173 | | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
136 | 196 | | |
137 | 197 | | |
138 | 198 | | |
| |||
155 | 215 | | |
156 | 216 | | |
157 | 217 | | |
158 | | - | |
| 218 | + | |
| 219 | + | |
159 | 220 | | |
160 | 221 | | |
161 | 222 | | |
| |||
0 commit comments