← Reproduction studies

Is the signal even there, when you are told exactly where to look?

Measuring whether the signal behind each published Hubble Asteroid Hunter trail is recoverable from the archive images at its known position, as a function of trail brightness. A Facetwork FFL fan-out, 168 tasks. September 2026.

This is not a detector and it detects nothing. It is handed the published sky endpoints of a known trail and integrates flux along that one line. It never searches a frame, never generates candidate orientations or lengths, and cannot find an asteroid the catalogue did not already list. Generating candidates is the actual hard problem — the one the CNN and the volunteers were solving — and it is not attempted here.

So the numbers below are not recall. Recall is a property of a detector run over data it has not been given the answer to. These are signal-recoverability at a known position.

⚠️ An earlier version of this page called them an upper bound on what any detector could achieve, reasoning that a blind search must do at least as badly as one told where to look. That was wrong, and §5 shows the measurement that disproves it. Being told where to look also means being locked to the catalogue's orientation and length; a free search is less constrained in those dimensions even though it is more constrained in position. Neither method dominates.

1. Purpose of the analysis

Citizen science projects are often justified on the grounds that the task is too hard to automate. That is usually asserted rather than measured. This study measures a necessary condition for automation: at what brightness does the signal stop being recoverable at all, even when its exact position is known?

Below that point automation is not merely difficult, it is impossible by this route — there is nothing for a detector to find. Above it, automation might work or might not; this study does not say.

The answer is not a verdict on the project. It is the quantity that decides whether the human effort was necessary, and it can be computed because both the catalogue and the underlying images are public.

2. What the original work does

Hubble Asteroid Hunter showed archival HST images to volunteers, who marked asteroid trails; a convolutional network assisted, and the identifications were checked against known orbits. The published catalogue (Kruk et al. 2022, VizieR J/A+A/661/A85) contains 1,701 trails across 1,318 observations, each with sky endpoints, trail length, exposure timing and an observed magnitude.

Hubble Asteroid HunterThis workflow
Finds trailshuman inspection + CNN + orbit matchingno — integrates along a path it is given
Inputcomposites shown to volunteersindividual FLT exposures
Outputa catalogue of trailssignal recoverability per magnitude
Detects new objectsyesno — only re-measures known positions

It is given the answer — position, orientation and length — and asked only whether the signal is present and strong enough that an automated method could plausibly have found it. Note that this both helps (position is known) and constrains (angle and length are fixed to the catalogue's), so it is not simply an easier version of blind detection. §5b measures both on the same trails and finds neither dominates.

3. What our FFL workflow found

Fraction of published trails whose signal reaches 5 sigma when integrated along the catalogue path:

MagnitudeSignal recoveredFraction
15–161/1100%██████████████████
18–191/1100%██████████████████
19–202/450%█████████
20–213/475%██████████████
21–223/743%████████
22–231/119%██
23–240/90%
24–250/20%

11 of 39 measurable trails recovered (28%). Faintest recovered: mag 22.5. Brightest missed: mag 19.3.

There is a recoverability cliff between magnitude 21 and 23 — recoverability collapses across roughly two magnitudes and does not return. The published catalogue's median trail is magnitude 22.6, which sits below the cliff.

So the volunteers were not duplicating work a machine could have done cheaply. More than half the catalogue lies in the regime where the signal cannot be recovered even when handed the exact position to look at — so no detector, however good, finds it by integrating pixels along a line. That is a quantitative answer to "why did this need people", and it is the result the study exists for.

Brightness alone does not predict recoverability

Recoverability is not monotonic in magnitude. A magnitude 19.3 trail is missed while a 22.5 one is recovered. Detection depends on what the trail crosses: a faint trail on empty sky integrates cleanly, a brighter one over a galaxy does not. Any estimate of "how faint can we go" that quotes a single limiting magnitude is hiding this.

magsigmaoffset pxoutcomeobservation
15.0199.5(+0,+30)recoveredj9eps2010
18.965.5(-40,+40)recoveredjdxr56010
19.32.6(-20,+0)not foundj9eb03010
19.68.7(-30,-20)recoveredidl902010
19.80.6(+140,-130)not foundjbyq02010
19.819.5(-40,-30)recoveredibt013010
20.3103.4(+10,-10)recoveredj95y11030
20.510.3(+40,+10)recoveredjbit31010
20.612.3(-10,+10)recoveredjc9z03010
20.93.7(-20,+40)not foundjbyq01010
21.029.1(-10,+30)recoveredjd8905010
21.2-0.1(-100,-50)not foundic8503010
21.4-0.1(-120,+30)not foundicnk07020
21.411.8(+0,+10)recoveredjdm96d010
21.68.5(+0,+30)recoveredj9e730010
21.83.7(+70,+80)not foundj8oi14040
21.93.5(-10,-10)not foundicdx9i010
22.02.0(+40,-10)not foundj90za9020
22.10.5(-70,+20)not foundj9db0e010
22.22.9(+0,+40)not foundibyn04050
22.33.4(+0,+10)not foundidgg99020
22.40.3(-150,+0)not foundibsr05030
22.41.0(+10,+20)not foundjdlp01010
22.56.0(-10,+0)recoveredjbyn08020
22.63.7(-20,+10)not foundjbl7ac010
22.7—(+0,+0)not measurableie4n0t030
22.80.5(-60,-20)not foundjdh905010
22.81.5(+10,+20)not foundj9fz29020
22.90.9(-10,+10)not foundjbew1c020
23.00.7(+10,+10)not foundjcdub5020
23.11.1(+150,-70)not foundj8pu0z010
23.21.2(-20,+0)not foundibsr05020
23.31.4(-60,+50)not foundjcnw24010
23.41.3(-100,+90)not foundj8xi18010
23.50.8(-70,-30)not foundj9cq01010
23.60.5(+20,-80)not foundj9fz06010
23.71.7(-20,+0)not foundjcda08020
23.91.0(-30,-40)not foundjbt199010
24.14.3(+150,+10)not foundjdhk08010
24.40.6(-20,+0)not foundj91jc8010

4. Three things that had to be right first

Each of these would have produced a confident, wrong answer, and each was found by measurement rather than by the run failing.

The trails are not in the drizzled products

At the published position of the first trail tested, the standard drizzled image reads −0.09 sigma — nothing. Drizzling rejects cosmic rays, and a moving object sits at different pixels in every exposure, so the rejection deletes it. A study built on the obvious data product would have found no trails anywhere and concluded the catalogue was wrong. The workflow fetches individual FLT exposures instead: four times the data, and the only thing that works.

The astrometry is off by tens of pixels

A magnitude 15 trail sat 59 px from where its published sky coordinates predicted — an 8,000-sigma feature, unmissable by eye, invisible to a detector that trusts the WCS. ACS/WFC exposures carry SIP distortion but need the additional lookup corrections. The detector therefore scans a window of offsets and reports the offset it required: "found at the predicted pixels" and "found 60 px away" are different claims.

Thresholding before integrating destroys the signal

A faint trail sits at roughly 0.4 sigma per pixel. Thresholding at 3 sigma and then looking for lines finds nothing. Integrated along its length the same trail is about 5 sigma. The detector must integrate first; the obvious order is backwards.

5. Reproducing this

fw ffl run --primary examples/repro-asteroids/hah_trail_recovery.ffl \
           --library facetwork/ffl/file.ffl \
           --workflow repro.asteroids.RecoverPublishedTrails

Selection filters to trails with Nex=1 whose MJDsTrail equals MJDsExp, pinning each to the first exposure of its association — the one fetched. Without that the detector searches an exposure the asteroid was never in and reports a false non-detection. The sample is spread evenly across magnitude: taking the brightest 40 would return a flat 100% that answers nothing. foreach … limit 4 bounds how many ~170 MB exposures are in flight.

It reproduces itself

An accidental duplicate launch ran the same 40 trails a second time on the same fleet. The two runs agreed on 40 of 40 recovered/not verdicts. They disagreed on one sigma value, which is how a defect in this study was found: a non-measurement had been encoded as sigma = −99.0, sitting in a measurement column beside real values. measured is now a separate field — a measurement that did not happen is not a number, it is a different fact.

5b. The same 40 trails, searched blind

A second workflow searches each exposure with no knowledge of where any trail is: bin the frame, rotate to each of twelve orientations, integrate along rows, and keep local maxima above 3 sigma. Angles within 15° of the readout axes are skipped, because bleed columns and diffraction spikes are linear features a line filter cannot distinguish from an asteroid. The published position is used only afterwards, to ask where the real trail landed in the ranking.

Both workflows share the same selection facet, so the sample is identical.

FoundRate
Told where to look (position, angle, length)11/3928%
Blind search, trail in top 10 of ~900 candidates3/398%
Blind search, trail anywhere in the ranking21/39median rank 323
Neither method dominates, which is why the upper-bound claim was wrong. 10 of 39 trails disagree, and in both directions:

mag 19.3  told-where: 2.6 sigma, missed  →  blind: rank 1 of 900
mag 15.0  told-where: 199.5 sigma  →  blind: rank 65
mag 22.5  told-where: 6.0 sigma, found  →  blind: not in the ranking

Being told where to look also means being locked to the catalogue's orientation and length. Where the true trail differs in angle, or sits beyond the offset scan, the constrained search fails and the free one succeeds. The two are different constraint sets, not nested ones.

The result that matters

The brightest asteroid in the entire catalogue — magnitude 15.0, an unmissable 199.5 sigma when you know where to look — is only the 65th most line-like feature in its own frame. Sixty-four stars, bleed columns and diffraction spikes outrank it.

So the hard part was never finding lines. A frame yields ~900 candidates in about a second. The hard part is deciding which of them is an asteroid rather than an instrumental artifact, and a matched filter has no way to tell: they are all bright lines. That is exactly the judgement a CNN and human review supply, and it is why "we found linear features" and "we found asteroids" are different achievements.

magtold-where sigmafoundblind ranktop 10
15.0199.5yes65no
18.965.5yes3yes
19.32.6no1yes
19.68.7yes47no
19.80.6no—no
19.819.5yes56no
20.3103.4yes69no
20.510.3yes553no
20.612.3yes43no
20.93.7no247no
21.029.1yes1yes
21.2-0.1no—no
21.4-0.1no—no
21.411.8yes608no
21.68.5yes471no
21.83.7no775no
21.93.5no618no
22.02.0no—no
22.10.5no—no
22.22.9no521no
22.33.4no—no
22.41.0no—no
22.40.3no—no
22.56.0yes—no
22.63.7no868no
22.81.5no—no
22.80.5no—no
22.90.9no711no
23.00.7no—no
23.11.1no323no
23.21.2no—no
23.31.4no340no
23.41.3no—no
23.50.8no197no
23.60.5no353no
23.71.7no—no
23.91.0no—no
24.14.3no—no
24.40.6no—no

5c. Can the candidate list be thresholded? No.

Section 5b ends on a claim that was qualitative: a matched filter cannot tell an asteroid from an instrumental artifact. The obvious next move is to keep only the strongest candidates. We measured whether that works, on the 20 richest fields in the catalogue — 182 exposures, 364 chips, 327,600 candidates, 81 trail×exposure observations, about 31 GB streamed.

z cutTrails keptRecallCandidates per exposure
3 (as shipped)3240%1800
1002025%649
20079%219
30011%126
35000%98

There is no cut that makes the list reviewable. At the threshold where recall reaches zero, 98 candidates per exposure still survive. Real trails have median z = 128; the background has median z = 84 and a 99th percentile of 465. The distributions overlap almost entirely.

Why: the score is a flux statistic, not a significance. The lowest-scoring candidate anywhere in 327,600 is z = 30.6. A noise-normalised score would pile up against the detector’s own z > 3 cut; nothing comes within a factor of ten of it. The denominator is global pixel noise, so every galaxy, star halo and diffraction spike scores in the hundreds. Tuning the cut cannot repair a discriminant that measures brightness rather than straightness.

The magnitude breakdown carries a second finding, and it is not the expected shape:

MagnitudeRecall
15–20 (brightest)27%worse than the middle
20–2274%
22–2325%
23–25 (faintest)26%

The brightest bin does worse than the middle. Section 4 records why capping replaced masking: masking at 50 sigma once deleted a trail that was itself an 8,000 sigma feature. But capping at 30 sigma flattens a magnitude 15 trail to the same level as a bright star, discarding exactly the advantage that should make it trivial to find.

Differencing the frames does not fix it either

Every one of the 1,316 fields with a published trail has at least two exposures — 4,059 in total. The asteroid moves between them; the sky does not. So a median stack of the association is a model of the static sky, and subtracting it should remove the structure that makes z meaningless. We tested this on j96v05020: 12 exposures, 5 published trails, a standard ACS-WFC-DITHER-LINE pattern with all twelve pointings identical.

Raw framesGlobal shiftDistortion-corrected
Trails matched anywhere5/170/160/17
Background z (median of top 200)2118,2442,085

Resampling each frame through its full WCS — distortion lookup tables included — improved the background by 4×, so misalignment was a real part of it. It did not come close to fixing it. The reason is measurable, so we measured it: bin every pixel by how bright the static sky model is there, and look at the residual left behind.

Model brightness at that pixelPixelsMedian |residual|
blank sky (below median)253,0760.5 sigma
median – p90202,4600.8 sigma
p90 – p9945,5535.4 sigma
p99 – p99.9 (sources)4,55524 sigma
p99.9 – max (bright stars)50784 sigma
The subtraction is not the problem. The resampling is. On blank sky the difference is clean to 0.5 sigma — exactly what it should be. The residual scales with the flux underneath it, reaching 84 sigma at bright stars, and correlates with model brightness (r = +0.34 in log–log). That is the signature of undersampling: HST’s PSF is about 2 px across at 0.05″/px, so interpolating it to a sub-pixel offset leaves an error proportional to the source. Five hundred pixels at 84 sigma are more than enough to outrank an asteroid worth a few sigma per pixel.

This is precisely the problem drizzle exists to solve, and it cannot be interpolated away — which is why HAH I worked from drizzled products despite their cosmic-ray step removing the centres of bright trails. Doing this properly means running the drizzle toolchain with CR rejection disabled, so the stack is built without destroying the thing being looked for. That is a different and much larger project than a better threshold.
Two corrections to our own method, found while doing this. The alignment above was first attempted with phase cross-correlation, which reported offsets of 740–860 px for a dither the WCS puts at 298 px; the WCS is authoritative and the correlation was simply wrong. Separately, the catalogued RAs,DEs → RAe,DEe is the path across all the exposures a trail appears in — 74.5% of the catalogue has Nex > 1 — not the path within one frame, so matching it against a single exposure can place the target more than 200 px from the object.

The figures in sections 3 and 5b are unaffected and have been re-verified. That sample is drawn only from trails with Nex = 1 that start with the first exposure, so the catalogued path lies within one frame by construction: all 40 have an MJD span equal to their exposure time, 0 of 40 disagreeing.

What this costs to answer at scale is now known rather than guessed: the 1,316 fields hold 4,059 individual exposures, about 684 GB. The subset worth searching first is smaller — 1,107 frames (~187 GB) that sit inside a field already known to contain an asteroid but which no published trail is recorded in. None of it is worth downloading until a discriminant exists that survives the table at the top of this section.

6. Limitations

Generated by Facetwork workflow repro.asteroids.RecoverPublishedTrails · view FFL · source repo