locs is a field name, not a value — retract yesterday's todo, file the real one - #354
Merged
Conversation
…e real one The todo landed in #353 was wrong. It claimed cicada_detect anchors on "the wrong landmark" for folder input and proposed a bench run at onset_field="peak". The anchor is correct and that run would have moved the detector onto the peak, which is the direction this project deliberately came from. Retracted in full and replaced. What is actually going on, in Tony's words: "the confusion is fields vs values … when i manually coded the early versions of the coordination routines, i just passed locs. the field name is probably locs. pretty quickly we put t50rise into the coordination data field locs. hence the crisis." locs is a legacy MATLAB findpeaks name — [pks, locs], plot detected peaks at x=locs y=pks. In the event store archive it is the peak time. Coordination wants the onset, not the peak, so t50rise went into the field still called locs. The name kept the old meaning; the contents did not. The consequence nobody had looked for: rise_durations() computes the rise interval as locs - t50rise. On a store that is peak - onset. On a folder those two fields hold the same value, so it returns zero for every event. Verified on dataset.current(), 20240708_13 fast: 2215 events, min 0.0, max 0.0. The real interval is right there in Stream.peak (peak - locs, median 0.30 s) and nothing in the tree reads it — has_peak has no callers at all. Latent, not live. OPERATING_POINTS['cicada'] uses fixed active_duration_sec=1.0, so rise_durations is off the deployed path and no published number is affected. It bites active_duration_mode="per_event", duration_field="rise_dur" — the mode explore_sce uses to tame long SLOW transients — where every cell would be marked active for zero seconds and a detector finding nothing would look like a detector that found nothing. Why the suite missed it: test_rise_durations_matches_definition runs on SLICE.fast, a store fixture, where locs genuinely is the peak. The function is correct there and wrong on the input the project actually uses. Nothing loaded a folder and asked what a duration came out as, so this adds that test on a synthetic folder, xfail(strict=True) so it documents the trap today and fails loudly the moment someone fixes it without removing the marker. Not the same as the producer team's cicada_zerowidth_explainer in the darkroom. That one is the detected event's output width collapsing when member onsets fall outside the peak window, and its floor is already implemented here. Theirs is the output width; this is the input duration. The todo says so, because conflating them is the obvious next mistake. Also corrects two overclaims about the Cossart corpus that the same misreading produced. The importer called their raster "the authors' own inference (CICADA / DeepCINAC)" — that lab publishes both tools, but nobody here has read their pipeline documentation, and naming a method on a guess is the class of error #292 exists about. It now says only that the data arrived binarised. Both the importer and the todo now state plainly that this lab's locs/t50rise history is OURS and transfers nowhere: Tony, "this doesn't apply to the cossart dandiset. i have no clue what's in there." No detector is touched. The retracted todo is what changing one on a misreading looks like. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Retracts the todo landed in #353. It claimed
cicada_detectanchors on "the wrong landmark" for folder input and proposed a bench run atonset_field="peak". The anchor is correct, and that run would have moved the detector onto the peak — the direction this project deliberately came from.What is actually going on
locsis a legacy field name and the value in it changed. From MATLABfindpeaks—[pks, locs], plot detected peaks atx=locs, y=pks— so in the event store archivelocsis the peak time. Coordination wants the onset, not the peak, sot50risewent into the field still calledlocs.The consequence nobody had looked for
rise_durations()computes the rise interval aslocs - t50rise. On a store that ispeak - onset. On a folder those two fields hold the same value, so it returns zero for every event.Verified on
dataset.current(),20240708_13fast:The interval is loaded into
Stream.peakand nothing reads it —has_peakhas no callers anywhere in the tree.Latent, not live.
OPERATING_POINTS["cicada"]uses fixedactive_duration_sec=1.0, sorise_durations()is off the deployed path and no published number is affected. It bitesactive_duration_mode="per_event", duration_field="rise_dur"— the mode explore_sce uses to tame long SLOW transients — where every cell is marked active for zero seconds, and a detector that then finds nothing looks like a detector that found nothing.Why the suite missed it:
test_rise_durations_matches_definitionruns onSLICE.fast, a store fixture, wherelocsgenuinely is the peak. The function is correct there and wrong on the input the project actually uses. Nothing loaded a folder and asked what a duration came out as — so this adds that, on a synthetic folder,xfail(strict=True)so it documents the trap today and fails loudly if someone fixes it without removing the marker.Not the producer team's zero-width
<darkroom>/constellation/cicada_zerowidth_explaineris a different zero: the detected event's outputwidth_seccollapsing when member onsets fall outside the peak window. Its floor is already implemented in this port. Theirs is the output width; this is the input duration. The todo says so, because conflating them is the obvious next mistake.Two overclaims about the Cossart corpus, also corrected
Same misreading, spilling onto a third party:
locs/t50risehistory is ours and transfers nowhere — "this doesn't apply to the cossart dandiset. i have no clue what's in there." The two corpora share a loader and nothing else.Verification
Suite 1454 passed, 16 skipped, 1 xfailed. Sapper clear. No detector is touched — the retracted todo is a standing demonstration of what changing one on a misreading would have done.
🤖 Generated with Claude Code