Finding Planets · a bookSearchlearn.xhelio.ai
Part V · Below the noise: stacking · Chapter 21

Reusing the sums: trees and catalogues

Two ways to make sub-threshold stacking cheaper: share partial sums across trajectories (Grid Tree, FaXT, exact and interpolating trees, pruning hierarchies), or compress each image to a list of faint peaks and stack the list (Stetzler's catalogue Hough search). Both work, and both make you pay in sensitivity unless the accounting is done carefully.

In 2010 Alex Parker and JJ Kavelaars worked out what it would cost to stack LSST images along trial orbits for a 56-hour baseline. Their answer was 6.4×10166.4\times10^{16} pixel additions over 7,743 motion vectors, to reach a forecast depth of r′=28.6r'=28.6 for one selected population of distant bodies (Parker & Kavelaars 2010). The number is large, but most of it is redundant. Two trial orbits that end a few pixels apart after 56 hours are indistinguishable over any single night. Each night’s stack along “both” of them is the same stack, computed twice. Parker and Kavelaars saw this and proposed computing each nightly stack once and reusing it. They called the idea a Grid Tree, credited it to a 2002 thesis by R. L. Allen, and stated plainly that they had not implemented it.

This chapter is about the two families of shortcut that follow from that observation, and about what each one costs. The first family keeps the pixels and reuses partial sums: trees, recursive transforms, and hierarchies that prune. The second family throws most of the pixels away. It reduces each image to a catalogue of faint peaks, perhaps a hundred times smaller than the image, and stacks the catalogue instead. Both are real, published, and demonstrated on data. Both deliver large speedups in the papers that introduce them. And in both cases the speedup arrives together with a loss of sensitivity that has to be read off the same page. A tree whose digital paths drift away from the physical track, or a catalogue whose threshold discards the negative fluctuations, sees less signal than a full matched filter. Whether the trade is good depends on numbers that are often reported in different units, on different hardware, against different baselines. Much of the work of this chapter is lining those numbers up.

The background is Chapter 17 (shift-and-stack and KBMOD) and Chapter 20 (orbit-space banks). The template-bank geometry that sets every trial count here is developed in Chapter 38, and the radio-astronomy transforms that inspired the trees in Chapter 36.

Three ideas that share one name

The word “hierarchical” covers three different things, and most confusion about tree stacking comes from mixing them up.

A full-sum tree keeps every partial sum it needs and only changes the order in which additions are done. Like the fast Fourier transform, it can be exactly equivalent to the direct calculation: same templates, same scores, fewer operations.

A grid tree goes further. It uses the coarser motion resolution that suits a shorter time interval. A night needs fewer distinguishable velocities than a month, so the nightly stacks are computed on a coarser grid and each long trajectory is assigned to its nearest nightly representative. That is an approximation, and it needs a mismatch budget: a stated maximum loss of signal-to-noise ratio (SNR) from using a nearby template instead of the true one.

A pruning hierarchy discards whole regions of parameter space that look unpromising at an early level and refines only the survivors. On top of a mismatch budget it needs a false-dismissal budget: a stated probability of throwing away a source that the full search would have found.

Key idea

A tree is a data structure, not a guarantee. A full-sum tree can be exact. A grid tree trades a controlled template mismatch for speed. A pruning hierarchy also trades a controlled probability of missing sources. Any speed claim has to say which of the three it is, and pay for the matching loss in the same table.

The catalogue methods in the second half of the chapter belong to a fourth category: lossy compression of the input. They can be combined with any of the three.

The statistic that has to survive

Every method here tries to compute, or approximate, one quantity: the matched-filter likelihood of a moving point source. It is worth writing down once, because it tells us which shortcuts are free and which are not.

Take registered difference images did_i at times tit_i, with pixel covariance CiC_i, point-spread function (PSF) template pi(q)p_i(q) centred at position qq, and relative photometric response aia_i. A source of flux ff on trajectory qi(θ)q_i(\theta) produces

di=f ai pi(qi(θ))+ni,ni∼N(0,Ci).d_i=f\,a_i\,p_i\big(q_i(\theta)\big)+n_i,\qquad n_i\sim\mathcal N(0,C_i).

Define for each exposure the PSF-weighted image and its information,

ψi(q)=ai pi(q)TCi−1di,ϕi(q)=ai2 pi(q)TCi−1pi(q),\psi_i(q)=a_i\,p_i(q)^{\mathsf T}C_i^{-1}d_i,\qquad \phi_i(q)=a_i^2\,p_i(q)^{\mathsf T}C_i^{-1}p_i(q),

and sum them along the trajectory: A(θ)=∑iψi(qi(θ))A(\theta)=\sum_i\psi_i(q_i(\theta)), B(θ)=∑iϕi(qi(θ))B(\theta)=\sum_i\phi_i(q_i(\theta)). Then, up to a constant, log⁡L=fA−12f2B\log\mathcal L=fA-\tfrac12f^2B. The best-fit flux is f^=A/B\hat f=A/B, and the detection statistic is Z=A/BZ=A/\sqrt B, which has unit variance under the null for a fixed template. This is the sufficient-statistic form that KBMOD implements (Whidden et al. 2019). With diagonal noise, ψi\psi_i is the inverse-variance-weighted PSF correlation of the image and ϕi\phi_i is the inverse variance correlated with the squared PSF. Masked pixels simply have zero inverse variance.

The property that makes trees possible is additivity. For any two disjoint sets of exposures LL and RR,

(AL∪R,BL∪R)(θ)=(AL,BL)(θ)+(AR,BR)(θ).(A_{L\cup R},B_{L\cup R})(\theta)=(A_L,B_L)(\theta)+(A_R,B_R)(\theta).

This identity is exact. It says that a partial stack over one night is a legitimate piece of the full stack, provided we store the right thing. We must store the signed numerator AA and the information BB, not a per-night significance, not a clipped positive flux, not a maximum over motions, and not a squared SNR. A night in which the faint source happened to land on a negative noise fluctuation still carries evidence, and that evidence has to reach the final sum with its sign intact. A weighted mean is nestable only if its total weight travels with it. A median is not nestable at all. Parker and Kavelaars made exactly this distinction between weighted-average coadds and median coadds (2010).

For NN identical exposures and constant flux the ideal SNR grows as N\sqrt N. In general it is f∑iϕif\sqrt{\sum_i\phi_i}. A tree changes how this sum is computed. It cannot change the ceiling.

Why shorter intervals need fewer velocities

The redundancy that trees exploit comes from how motion resolution depends on time. For a circular Gaussian PSF of dispersion σ\sigma, a template displaced by δ\delta from the true source has normalised overlap R=exp⁡[−∣δ∣2/(4σ2)]R=\exp[-|\delta|^2/(4\sigma^2)]. Over many exposures the overlap is approximately the information-weighted average of this factor, and for small parameter errors Δθ\Delta\theta it becomes a quadratic form,

1−R≃ΔθTg Δθ,g=∑iwi JiTJi4σi2,1-R\simeq\Delta\theta^{\mathsf T}g\,\Delta\theta,\qquad g=\sum_i\frac{w_i\,J_i^{\mathsf T}J_i}{4\sigma_i^2},

where JiJ_i is the Jacobian of position with respect to parameters at exposure ii and the weights wiw_i sum to one. This is the template-bank metric of Chapter 38, applied to orbits by Geringer-Sameth et al. (2025).

For linear motion over a duration TT, the velocity spacing at fixed loss scales as Δv∝σ/T\Delta v\propto\sigma/T. A fixed two-dimensional region of physical velocities therefore needs V∝T2V\propto T^2 trial velocities. Halve the interval and you need a quarter as many. With acceleration as a free parameter, the acceleration spacing scales as T−2T^{-2} and the count grows much faster still. This is the source of all reuse: short segments have few distinguishable motions, so many long trajectories collapse onto the same short pieces.

A history in three threads

Allen, Parker and Kavelaars

The astronomical lineage begins with deep “pencil-beam” searches for trans-Neptunian objects (TNOs): many short exposures of one small field, stacked along guessed motions to reach below the single-exposure limit (Chapter 17, Chapter 19). Once those searches spanned several nights, the motion grid needed for the full baseline was far finer than any single night could resolve.

The tree that was described but never built

Alex Parker, then at the University of Victoria, and JJ Kavelaars, at the National Research Council’s Herzberg Institute, posted their paper on 19 April 2010. Its main implemented result was a way to choose economical motion grids by simulating a target orbital population, propagating it to the actual observation times, and keeping only the shift vectors needed to cover it. Applied retrospectively to three earlier surveys, it cut their grids from 25 to 19, 95 to 28, and 736 to 494 vectors.

Section 2.3.4 then described a further optimisation, “a multi-level grid tree described by Allen (2002)”, from R. L. Allen’s University of Michigan doctoral thesis: stack each night on a nightly grid, then shift and combine the nightly products on a grid suited to the whole baseline. The authors were explicit: “While we have not implemented this method, we can estimate its results.” Their estimate was 2.25 times fewer additions for two nights and 6.25 times for three (Parker & Kavelaars 2010).

The thesis itself has not been checked for this book, so its title and details rest on that citation. The paper’s text gives 732 for the third original grid where its Table 1 gives 736; the table is used here.

Radio precedents

Radio astronomers had been summing along curved tracks recursively for decades. A pulse from a distant source arrives later at low frequencies because of dispersion in the interstellar plasma, so a search must sum a dynamic spectrum along many candidate delay curves. Taylor’s 1974 tree dedispersion combined frequency channels recursively along digital approximations to those curves. Its straight-line pieces mismatch the true f−2f^{-2} dispersion law. In 2014 Barak Zackay and Eran Ofek published the fast dispersion measure transform (FDMT), a recurrence tied to the actual dispersion curve, with an explicit treatment of discretisation (Zackay & Ofek 2014). It is discussed in Chapter 36.

Kendrick Smith’s 2016 coherent pulsar-search tree is the closest mathematical precedent for optical trees that interpolate. It combines statistics from shorter intervals, tabulated on coarser local grids, and reaches constant asymptotic work per final template when the template bank dominates other costs (Smith 2016). His Appendix A shows how transposing the search operator reveals the effective template, and so the accumulated interpolation error, that the tree actually applies. In 2018 Guy Nir, Zackay and Ofek applied recursive line summation to streaks inside a single astronomical image, with O(L2log⁡L)O(L^2\log L) cost against O(L3)O(L^3) for direct line sums on an L×LL\times L image (Nir, Zackay & Ofek 2018); see Chapter 11.

FaXT and its scrutiny

The earliest recursive stacker for faint moving objects that this book’s sources show being built and applied to survey data is the fast discrete X-ray transform, FaXT. Tam Nguyen, Deborah Woods, Jessica Ruprecht and Jonathan Birge published it in the Astronomical Journal in February 2024 (Nguyen et al. 2024). Its abstract describes staged pairwise shift-and-add with reuse of short tracks, and reports more than a thousand asteroids detected in TESS images below the single-frame detection limit, using “moderate computational resources.” That establishes a real-data application. It is a count of detections, not of new discoveries. The full text could not be retrieved for this book, so the TESS sector, limiting magnitude, hardware and run time are not given here.

The clearest look at FaXT’s speed–sensitivity trade comes from Sophia Matthews and Nguyen at the AMOS conference in 2026 (Matthews & Nguyen 2026). They find it about 100 times faster than nearest-pixel shift-and-add at 256 frames, and they also find that it loses more signal. Those two results belong together, and the sections below explain why.

Three other recent works supply ingredients. Vivek Gupta and colleagues’ ESAM (2024) compiles an arbitrary set of radio masks into reusable exact partial sums (Gupta et al. 2024). Geringer-Sameth, Golovich and Iwabuchi (2025) quantify orbit-bank mismatch for multi-year optical stacks and propose segmentation (2025). Pravir Kumar and Zackay’s LOKI (2026) develops calibrated, staged pruning for coherent pulsar searches on GPUs (Kumar & Zackay 2026).

The Grid Tree, and what its savings count

Parker and Kavelaars’s construction has two separate savings, and it is worth keeping them apart.

The first is choosing the grid. On a two-dimensional plane of endpoint displacements, covering every point within a maximum error ϵ\epsilon with square cells needs one grid point per area 2ϵ22\epsilon^2. A triangular lattice needs one per (33/2)ϵ2(3\sqrt3/2)\epsilon^2. The ratio of point counts is 4/(33)≃0.7704/(3\sqrt3)\simeq0.770, a 23% saving. The paper reports about this improvement, and stresses a related point about coordinates: grids laid out in fixed steps of speed and angle oversample slow motions and undersample fast ones.

The second saving is the tree. Here is the paper’s cost argument, rewritten. Let PP be the number of starting pixels, nn the number of nights, ee the number of exposures per night, and FF the number of motion vectors needed for the full baseline. Direct stacking costs about PFnePFne additions. The paper’s illustrative schedule has nights and days of equal length, so the total baseline is (2n−1)(2n-1) night-lengths. The tree introduces two levels of approximation, and the worst-case position errors at the two levels add. To keep the same total budget, each level gets half the error, which multiplies the density of each two-dimensional grid by four. So the top-level grid needs about 4F4F vectors, and each night, being (2n−1)(2n-1) times shorter, needs (2n−1)2(2n-1)^2 times fewer:

Ftop≃4F,Fnight≃4F(2n−1)2.F_{\rm top}\simeq4F,\qquad F_{\rm night}\simeq\frac{4F}{(2n-1)^2}.

The total cost is the nightly stacking plus the top-level merge:

Ctree≃P[ne 4F(2n−1)2+4nF].C_{\rm tree}\simeq P\left[ne\,\frac{4F}{(2n-1)^2}+4nF\right].

When there are many exposures per night, e≫(2n−1)2e\gg(2n-1)^2, the first term dominates and

CflatCtree≃(2n−1)24.\frac{C_{\rm flat}}{C_{\rm tree}}\simeq\frac{(2n-1)^2}{4}.

For two nights this is 9/4=2.259/4=2.25; for three, 25/4=6.2525/4=6.25. These are the published figures. Three things deserve notice. They count additions only. The final grid has four times as many trajectories as the flat one, so there are four times as many stack images to inspect and four times as many statistical trials. And the large-ee condition is essential: dropping the merge term without it exaggerates the gain. For more than two levels, splitting the error equally between levels quickly becomes expensive, and the right hierarchy has to be optimised jointly over segmentation, per-level resolution and memory, not by applying the two-level gain repeatedly.

The LSST simulation that motivated all this is plotted below. It excludes the tree. It is still useful, because it shows how expensive depth is: going from an 8-hour to a 56-hour baseline at opposition gained 0.6 magnitudes and cost about 120 times more arithmetic.

27.82828.228.428.628.81014101510161017Pixel additionsForecast limiting r' magnitude8 h (5.4e+14, 28)8 h32 h (1.8e+16, 28.4)32 h56 h (6.4e+16, 28.6)56 h7 h (2.7e+14, 27.9)7 h31 h (9.4e+15, 28.3)31 h54 h (4.9e+16, 28.5)54 hAt opposition45 degrees from opposition
The 2010 forecast: depth bought with additions. Parker and Kavelaars's simulated multinight LSST search for a selected outer Solar System population. Each point is a stacking baseline (hours); the cost is the number of pixel additions without any tree optimisation. Going from 8 to 56 hours buys 0.6 mag at about 120 times the arithmetic. Historical forecast, not an observation. Source: Parker & Kavelaars (2010), arXiv:1004.3287, Table 4.

FaXT: recursive digital straight tracks

FaXT takes reuse to its logical end. Instead of two levels, it uses log⁡2N\log_2N levels, halving the time interval at each step. The cost of doing so is that its tracks are not quite straight.

The recurrence

Consider N=2mN=2^m equally spaced frames and, in one coordinate, an integer endpoint displacement dd between 00 and N−1N-1 pixels. Nearest-pixel shift-and-add follows the path nN(k,d)=round⁡(kd/(N−1))n_N(k,d)=\operatorname{round}(kd/(N-1)) for frames k=0,…,N−1k=0,\dots,N-1. FaXT instead defines its path recursively:

f1(⋅,0)=(0),fN(⋅,d)=[ fN/2(⋅,⌊d/2⌋),    fN/2(⋅,⌊d/2⌋)+⌈d/2⌉ ].f_1(\cdot,0)=(0),\qquad f_N(\cdot,d)=\Big[\,f_{N/2}(\cdot,\lfloor d/2\rfloor),\;\; f_{N/2}(\cdot,\lfloor d/2\rfloor)+\lceil d/2\rceil\,\Big].

In words: the path of length NN with displacement dd is the path of length N/2N/2 with displacement ⌊d/2⌋\lfloor d/2\rfloor, followed by the same half-length path shifted by ⌈d/2⌉\lceil d/2\rceil. The path ends at the right place, and the two halves are the same child, so its partial sum can be computed once and used by every parent that needs it. In two dimensions the stack obeys

SN(x,y,dx,dy)=SL(x,y,ax,ay)+SR(x+bx, y+by, ax,ay),S_N(x,y,d_x,d_y)=S_{L}(x,y,a_x,a_y)+S_{R}(x+b_x,\,y+b_y,\,a_x,a_y),

with a=⌊d/2⌋a=\lfloor d/2\rfloor and b=⌈d/2⌉b=\lceil d/2\rceil componentwise; the right child is the later half in time. (This zero-based form follows Matthews and Nguyen’s Eqs. 3–5.) For a likelihood search the same recurrence would be applied separately to the ψ\psi and ϕ\phi maps. The published comparison uses aperture sums, not this full noise-weighted model.

The catch is that the recursive path is not the nearest digital approximation of the straight line. Matthews and Nguyen find that the two coincide for every allowed displacement up to eight frames and diverge beyond that. The figure shows a 16-frame example with a 3-pixel displacement. The nearest-pixel path steps at frames 3, 8 and 13. The FaXT path steps at 4, 8 and 12, because each half inherits the same child. At frame 3 the physical position is 0.6 pixels, the nearest path is at 1, and FaXT is at 0.

0123051015Frame indexDisplacement (pixels) (0, 0) (1, 0.2) (2, 0.4) (3, 0.6) (4, 0.8) (5, 1) (6, 1.2) (7, 1.4) (8, 1.6) (9, 1.8) (10, 2) (11, 2.2) (12, 2.4) (13, 2.6) (14, 2.8) (15, 3) (0, 0) (1, 0) (2, 0) (3, 1) (4, 1) (5, 1) (6, 1) (7, 1) (8, 2) (9, 2) (10, 2) (11, 2) (12, 2) (13, 3) (14, 3) (15, 3) (0, 0) (1, 0) (2, 0) (3, 0) (4, 1) (5, 1) (6, 1) (7, 1) (8, 2) (9, 2) (10, 2) (11, 2) (12, 3) (13, 3) (14, 3) (15, 3)Physical straight lineNearest-pixel pathFaXT digital path
Three tracks with the same endpoints. A straight track across 16 frames with a total displacement of 3 pixels, its nearest-integer pixel path, and the FaXT recursive digital path. Both digital paths start at 0 and end at 3, but FaXT moves in blocks of four frames because each half-interval inherits its child's displacement. The tree is exactly additive along its own path; the path is not the nearest approximation of the physical line. Source: Constructed from the recurrence in Matthews & Nguyen (2026), AMOS, Eqs. 3-5; derived values, not observations.
8 frames: 64 motions root, scored for detection frames 1-4: 16 motions signed A and B kept frames 5-8: 16 motions signed A and B kept frames 1-2: 4 frames 3-4: 4 frames 5-6: 4 frames 7-8: 4 12 34 56 78 root motions d = 2 and d = 3 both read the child with d = 1 single frames: one motion each (one coordinate shown; counts are joint 2-D motions)
The FaXT merge tree for eight frames. Each level halves the time interval and has a quarter as many joint two-dimensional motions per block, so the total number of merges per level stays close to the number of final motions. Two root motions share one left child, which is why the work is reused. Nothing is thresholded at internal nodes: they pass signed sums upward.

Counting the work

Let PP be the number of starting positions and V=N2V=N^2 the number of final joint displacements, so the search has M=PVM=PV trials. A level with blocks of length kk has N/kN/k blocks, each with k2k^2 motions, so it does NkNk merges per origin. Summing over the dyadic levels k=2,4,…,Nk=2,4,\dots,N,

CF=P∑j=1log⁡2NN 2j=P(2N2−2N)=cF M,cF=2(1−1N).C_F=P\sum_{j=1}^{\log_2N}N\,2^j=P(2N^2-2N)=c_F\,M,\qquad c_F=2\left(1-\frac1N\right).

Direct stacking visits NMNM epoch–trial pairs. FaXT does about 2M2M merges. The arithmetic ratio is N/cFN/c_F, about 128.5 at N=256N=256. If image size also scales as P∼N2P\sim N^2, the familiar statements follow: direct stacking is O(N5)O(N^5) and FaXT O(N4)O(N^4). Those exponents assume that image side, frame count and both velocity ranges all grow together. They are not complexity bounds for a fixed image and bank.

Memory traffic gives a less flattering ratio. Carrying two FP32 channels (AA and BB), one merge reads two 8-byte pairs and writes one: 24 bytes. A streamed direct gather reads 8 bytes per epoch–trial pair and keeps its accumulators in registers. Ignoring caches and coordinate arithmetic,

Gbytes≃8NM24 cFM=N3cF  ⟶  N6.G_{\rm bytes}\simeq\frac{8NM}{24\,c_FM}=\frac{N}{3c_F}\;\longrightarrow\;\frac N6 .

At 256 frames that is 42.8, a third of the arithmetic ratio. On a GPU, where such a low-arithmetic-intensity kernel is limited by memory bandwidth rather than by additions (Chapter 40), the traffic ratio is the more relevant screening number. Neither ratio is a measured speedup.

What the 2026 assessment measured

Matthews and Nguyen simulated 1,000 image stacks each at 64, 128 and 256 frames, with a per-frame SNR of 4 and random velocities. Because the nearest-pixel search was slow, only 240 stacks were run with it at 256 frames. FaXT was about 100 times faster at 256 frames. The processor is not stated. The mean photometric loss of nearest-pixel stacking stayed between 27% and 28%, while FaXT’s grew from 32% at 64 frames to 37% at 256 (Matthews & Nguyen 2026, §6.2).

These loss percentages need a careful reading. The paper’s simulations use a one-pixel detection aperture, and with its modelled Gaussian pixel response (dispersion 0.5 pixel) that aperture can hold at most about 47% of the source’s light, so a large part of both methods’ loss is the aperture, not the tracking. The difference between the methods, five to ten percentage points, is the part due to FaXT’s path. In a separate faint-source test at 64 frames, with a per-frame SNR of 0.875 chosen so that the ideal stacked SNR is 7, the detection rate at threshold 7 was about 6% for nearest-pixel and 3% for FaXT. These are aperture-based losses on undersampled images. They cannot be converted directly into matched-filter overlap.

The paper also tests refinement: fitting a physical moving PSF to the retained detections. Refinement recovers almost everything for the detections that survive. In a geosynchronous-orbit case study, retained SNR before refinement was 0.50 for nearest-pixel and 0.48 for FaXT, and 0.94 for both afterwards. But refinement has a price, and it cannot help detections that never crossed the threshold.

GEO case study, normalised timesNearest-pixelFaXT
Search181
Refinementn/a25
SNR retained before refinement0.500.48
SNR retained after refinement0.940.94

In that example, search plus refinement for FaXT took 26 units, more than the unrefined nearest-pixel search. In the paper’s low-Earth-orbit example, two FaXT scores were 6.74 and 6.98 where nearest-pixel gave 7.37 and 7.22. At a threshold of 7, FaXT lost both before refinement could see them. In the 256-frame runtime test, on the other hand, FaXT plus refinement ran well within the nearest-pixel time. The honest summary is that FaXT’s search is much faster, its threshold sees less signal, and whether the whole pipeline is faster depends on how many candidates go to refinement.

Exact along the wrong path

A recursive transform can be exactly additive along its own digital paths and still lose signal, because those paths are not the physical track. The same lesson appears in radio astronomy. ESAM’s experiments found that FDMT’s implicit discretised masks can lose up to 40% of SNR at low dispersion relative to a differently specified brute-force bank (Gupta et al. 2024). Neither result contradicts the algebra. Both distinguish the digital family the recurrence computes from the physical signal it is meant to match.

The book project’s own design studies looked at the same question with a matched-filter measure instead of aperture flux. They are unpublished CPU experiments and models, and are reported here as such. With pixel-integrated Gaussian PSFs of dispersion 1.2 pixels at 256 epochs, the worst selected FaXT template responded at 0.956 of the nearest-pixel template, an extra 4.35% SNR loss, or 0.048 mag. At dispersion 0.8 pixel the ratio was 0.917. Searching neighbouring origins over the same displacement bank did not remove the worst case. Against a sensitivity budget of 2% SNR, which is −2.5log⁡100.98=0.0219-2.5\log_{10}0.98=0.0219 mag, unmodified FaXT does not qualify at these frame counts.

Assumptions hidden in the frame index

FaXT’s recurrence runs over frame indices. That assumes equally spaced exposures and straight-line motion with displacements in a fixed non-negative range. Negative motions need reflected copies of the transform. Motions outside the range need other banks. Padding the frame count to a power of two does not make irregular timestamps regular. A missing image can contribute zero information, but the path is still defined by frame index, not by the true time. Real survey cadences, with gaps, unequal exposures, parallax and curvature, therefore need either a different recurrence or a different tree.

Exact trees: compile the paths you actually need

One alternative keeps a discrete trajectory bank exactly and reuses only subtracks that really are identical. ESAM showed how to do this for arbitrary radio masks: each internal product is identified by two child identifiers and an offset, and duplicate products are stored once (Gupta et al. 2024). Its Python reference implementation needed more than ten times fewer operations than direct dedispersion on its example bank, while reproducing the supplied masks exactly.

For images, the analogue is to remove the common translation from each temporal subtrack, hash the remaining relative path, and intern child pairs recursively:

compile(track, interval):
    remove the track's common integer translation over this interval
    if interval is one exposure: return leaf id
    left  = compile(track restricted to first half)
    right = compile(track restricted to second half)
    key   = (left, right, relative translation, weight metadata)
    return existing product with this key, or create it

The result is a directed acyclic graph rather than a tree, because many parents share a child. Evaluating HH unique products over PP origins costs O(PH)O(PH). There is no guarantee that HH stays close to the number of final motions. Arbitrary masks, weights and irregular cadence can sharply reduce the number of identical subtracks.

The project’s exact-path prototype measured this. With uniform cadence at 256 frames, the bank has 65,536 final joint motions but needs 1,476,320 internal states, 22.5 per final motion, against FaXT’s 1.99. The logical traffic ratio falls from FaXT’s 42.8 to 3.79. Gaps do not always hurt. A schedule with two observing seasons needed only 7.66 states per motion, a traffic ratio of 11.1, because many within-season paths become identical. These are prototype counts and derived ratios, not a lower bound for all exact algorithms.

110100101001000Frames NMerge states per final motion (32, 5.0234) (64, 8.9102) (128, 13.7031) (256, 22.5269) (32, 1.9375) (64, 1.96875) (128, 1.98438) (256, 1.99219) (256, 7.66)Exact nearest paths, uniform cadenceFaXT, c = 2(1 - 1/N)Exact nearest paths, two seasons
How much a tree must store to stay exact. Internal merge states per final joint motion for uniform-cadence banks. FaXT's count follows c = 2(1 - 1/N). Preserving the exact nearest-pixel path of every trajectory requires many more distinct partial sums, growing with frame count; a two-season schedule at 256 frames (single point) restores much of the reuse because within-season paths coincide. These are counts from a CPU prototype in the book project's own design studies, not GPU timings. Source: Project prior-art audit (2026, unpublished), exact-signature counts, via the research for this book; FaXT series derived.
110100101001000Frames NDirect / tree logical bytes (32, 2.12) (64, 2.39) (128, 3.11) (256, 3.79) (32, 5.51) (64, 10.84) (128, 21.5) (256, 42.83) (256, 11.14)Exact nearest paths, uniformFaXTExact nearest paths, two seasons
Ideal memory-traffic advantage of a tree over a direct gather. Logical FP32 traffic ratio N/(3c) between a direct gather (8 bytes per epoch per trial) and a two-channel tree (24 bytes per merge). This is a screening bound that ignores caches, coordinates, boundaries and refinement. It is not a runtime speedup. Source: Derived from the state counts in Figure 21-merge-states (project audit, 2026, unpublished) with the byte model of this book's research.

The two figures make the central trade visible. FaXT’s economy comes from forcing every path into a shape that shares children. Keeping the physical path costs most of that economy back.

Interpolating trees in local coordinates

A second alternative keeps a physical family of curves and interpolates the shorter-interval statistics. For a segment ss, map the parent’s parameters into each child’s local coordinates with transformations FsLF_{sL} and FsRF_{sR}:

(As,Bs)(θ)=(AL,BL)(FsLθ)+(AR,BR)(FsRθ).(A_s,B_s)(\theta)=(A_L,B_L)(F_{sL}\theta)+(A_R,B_R)(F_{sR}\theta).

This identity is exact for continuous child surfaces. Storing the children on a finite grid and interpolating introduces the error. Smith’s pulsar tree uses exactly this structure, with local Legendre-polynomial coordinates (Smith 2016).

The project’s optical study writes each spatial coordinate in a segment centred at csc_s with half-span hsh_s as x(t)=u0+u1z+u2(z2−1/3)x(t)=u_0+u_1z+u_2(z^2-1/3), where z=(t−cs)/hsz=(t-c_s)/h_s. For a child with centre offset d=(cc−cs)/hsd=(c_c-c_s)/h_s and half-span ratio r=hc/hsr=h_c/h_s, the child’s coefficients are

u0c=u0+d u1+[d2+(r2−1)/3]u2,u1c=r (u1+2d u2),u2c=r2u2.\begin{aligned} u_{0c}&=u_0+d\,u_1+\big[d^2+(r^2-1)/3\big]u_2,\\ u_{1c}&=r\,(u_1+2d\,u_2),\qquad u_{2c}=r^2u_2 . \end{aligned}

These identities are exact for a quadratic and work for irregular exposure times. What is approximate is the interpolation, and whether a quadratic is an adequate model of the motion. A single quadratic over years is not a Keplerian orbit. A useful optical tree needs local orbit Jacobians or an explicit parallax basis.

Why the geometric series is not the whole story

In dd spatial dimensions with independent motion derivatives up to order qq, the order-kk coefficient count at fixed mismatch scales as TdkT^{dk}, so the bank scales as TpT^p with

p=d∑k=1qk=d q(q+1)2.p=d\sum_{k=1}^{q}k=\frac{d\,q(q+1)}{2}.

If the full-span bank has MM states including position, each halving of the interval multiplies the number of nodes by two and shrinks each node’s bank by 2−p2^{-p}. Summed over depths, the ideal total for p>1p>1 is

I≃M1−21−p.I\simeq\frac{M}{1-2^{1-p}}.

Linear motion in two dimensions has p=2p=2 and I≃2MI\simeq2M, matching FaXT’s cF→2c_F\to2. Quadratic motion has p=6p=6 and I≃32M/31I\simeq32M/31, barely more than the final bank. That looks almost free. It is not, because there are now six coordinates including position, and interpolating in six dimensions is expensive. Multilinear interpolation reads 26=642^6=64 table entries per child. A four-point cubic reads 46=4,0964^6=4{,}096. Oversampling each intermediate axis by a factor oo to control interpolation error multiplies the intermediate density by o6o^6:

IM≃1+o631,\frac IM\simeq1+\frac{o^6}{31},

which is 3.07 at o=2o=2 and 133 at o=4o=4. The geometric series is real, but so is the curse of dimensionality in the interpolation stencil.

The project’s CPU experiments put numbers on the sensitivity side, for a two-dimensional Gaussian PSF. Native multilinear interpolation lost 2.5% to 4.2% of expected SNR across the tested cadences and frame counts. Twice-oversampled linear interpolation lost at most 0.63%. Native cubic interpolation reached about 0.42% worst-case loss but at many more taps. With a narrower PSF (dispersion 0.8 pixel), native cubic loss rose to 2.8%, a reminder that results on well-sampled PSFs do not transfer to undersampled instruments. On speed, a straightforward table implementation was modelled at only 0.55–0.94 times the speed of an ideal direct gather at 1,024 exposures, and a proposed tiled schedule at 5.6–18.9 times, before calibration and support costs. No GPU was used for any of these numbers.

The error budget

A hierarchical approximation has at least four separate sources of loss: finite template spacing, digital path quantisation, interpolation of partial tables, and numerical precision. Pruning adds a fifth, the chance of discarding a detectable source. Each should be allocated and measured separately.

Worst-case geometric errors add across levels, ϵtotal≤∑ℓϵℓ\epsilon_{\rm total}\le\sum_\ell\epsilon_\ell. They cannot be added in quadrature as if they were independent random errors. That is why Parker and Kavelaars split the budget between levels, and why their final grid got four times denser.

Interpolation raises a subtler problem: normalisation. If the tree estimates A~=∑jcjA(qj)\widetilde A=\sum_jc_jA(q_j) from neighbouring table entries, its null variance is

Var⁡0A~=∑j,kcjckCov⁡[A(qj),A(qk)],\operatorname{Var}_0\widetilde A=\sum_{j,k}c_jc_k\operatorname{Cov}\big[A(q_j),A(q_k)\big],

which is generally neither ∑jcjB(qj)\sum_jc_jB(q_j) nor ∑jcj2B(qj)\sum_jc_j^2B(q_j), because neighbouring matched-filter values share pixels. The correct normalisation uses the norm of the effective template hh that the whole tree applies. For whitened true template ee, the response is

R=⟨e,h⟩∥e∥ ∥h∥,Δm=−2.5log⁡10R.R=\frac{\langle e,h\rangle}{\|e\|\,\|h\|},\qquad \Delta m=-2.5\log_{10}R .

Applying the transpose of the full linear search operator to one output cell reconstructs hh without building every output. This is Smith’s method, which the project’s full-sum study applied to optical trees. The study found that interpolating the information BB as if it were an ordinary image gave null standard deviations of 0.75–0.80 for native linear interpolation and 0.90–0.93 for twice-sampled linear interpolation, instead of 1. A score whose null is that far from unit variance has badly miscalibrated tails. Exact refinement at the end fixes the scores of retained candidates. It cannot fix a misnormalised early rejection.

Trials do not shrink

For MM tests with unit-normal one-sided scores, the union bound P0(max⁡Z>u)≤M Φˉ(u)P_0(\max Z>u)\le M\,\bar\Phi(u) holds even when the tests are correlated. For M=1012M=10^{12} and a global false-alarm probability of 0.01, it requires u≃7.65u\simeq7.65. A tree does not reduce MM: it evaluates the same templates faster. But a tree with smoother digital paths can change how correlated neighbouring scores are, so two methods with the same nominal threshold need not have the same actual false-alarm rate. Matthews and Nguyen quote a Gaussian false-positive probability of 3.58×10−53.58\times10^{-5} per 84×84×6484\times84\times64 stack at threshold 7. That is a nominal calculation, not a measured artefact rate. A real comparison needs injected sources and null runs through the whole pipeline. Chapter 1 covers the statistics.

Pruning hierarchies

A pruning hierarchy combines reusable sums with selection. Start from short segments or coarse parameter cells, accumulate their evidence, refine the grid where it looks promising, and drop the rest. The design rule that matters most is that early stages must not require an individual detection. A faint object’s first night may well be consistent with noise. Requiring each night to cross a threshold, or taking the maximum over motions within each night before combining, changes the statistic and gives up the N\sqrt N gain. The gates have to act on signed, accumulated evidence, and be permissive enough that their false-dismissal rate is small and measured.

Smith distinguishes the fully coherent tree from semicoherent and hierarchical searches. LOKI extends coherent accumulation with optimised thresholds and GPU batching; its implementation is C++20 with OpenMP and CUDA, and its published benchmarks ran on an NVIDIA L40S (Kumar & Zackay 2026). These are pulsar results. They establish an architecture, not an optical speed factor.

The project’s optical transfer of the idea keeps signed nightly statistics, calibrates permissive gates, and rescores survivors on the original maps. In a CPU image experiment with 480 epochs over 20 irregular nights, 37,632 fine trajectories and 192 injected cubes, it made 19.2 times fewer statistic accesses than exhaustive stacking and 8.6 times fewer than a sequential-rejection control, with identical blind recoveries in the sample. The measured ratio of local nightly table work to global gather work was 0.027. A more favourable production assumption of 0.005 led to a modelled H100 gain of 10.3 times over one comparator, falling to 6.8 after charging an extra normalisation pass and 6.0 against a stronger sequential comparator. The measured and favourable geometries are different numbers and should not be conflated.

A later project study counted that ratio on real cadences: actual Subaru Hyper Suprime-Cam timestamps from New Horizons search campaigns in 2020 and 2024, with topocentric Earth geometry and propagated Keplerian orbits. For month-scale banks of TNOs at 30–100 au the counted ratios were tiny, between 1.3×10−91.3\times10^{-9} and 3.7×10−53.7\times10^{-5}, because a month resolves angular rates and curvature that a four-hour night cannot. That removes one objection. It does not settle the speed question: the modelled factor against a strong sequential baseline was 15–23 times in central cases, 3–4 under adverse hardware assumptions, and 7.3 for the hardest central case once a masked-normalisation pass was charged. All of these are models. The tables that are cheap to build have to be queried, compacted and normalised, and those costs now dominate.

Catalogue-domain stacking

The second family takes a different view of the redundancy. Most pixels in a difference image are noise, and most trial trajectories pass through nothing. Instead of summing pixels, find the local peaks in each image at a very low threshold, keep their positions and times, and look for sets of peaks that line up along a common motion. A faint body produces a statistically coherent sequence of peaks even when no single exposure could establish its existence. Random noise peaks rarely line up.

From bubble chambers to asteroid catalogues

The tool for “find the parameters that many points agree on” is the Hough transform, invented to find particle tracks in bubble-chamber photographs. Each observation votes for every parameter combination that could explain it, and true structures appear as peaks in the vote accumulator. Christoph Dalitz, Tilman Schramke and Manuel Jeltsch’s 2017 iterative Hough transform for lines in three-dimensional point clouds, developed on particle-track data among other examples, added two important steps: refine each coarse peak with orthogonal least squares, then subtract the votes of the points assigned to it before looking for the next (Dalitz, Schramke & Jeltsch 2017).

The statistical foundation for using faint catalogues came from Tamás Budavári, Alexander Szalay and Thomas Loredo in 2016–2017 (Budavári, Szalay & Loredo 2017). They asked whether a survey could publish low-threshold catalogues and recover faint stationary sources by combining them. In an idealised simulation with nine epochs and a one-sigma threshold, the answer was yes, provided both flux and position agreement were used. Two details of their model matter here. The noise hypothesis describes detected peaks, whose heights are biased upward compared with Gaussian pixels. And epochs with no catalogue entry also carry evidence.

Pan-STARRS supplied a practical demonstration. Kai-Jie Lo, Chan-Kao Chang, Hsing-Wen Lin and colleagues reused six nights of high-cadence Pan-STARRS1 observations from October 2016, taken for asteroid rotation periods, with about thirty exposures per field per night (Lo et al. 2020). Overlaying each night’s catalogue positions in a “master frame” made asteroid tracks visible as straight lines, which a two-dimensional Hough transform extracted. They recovered 3,819 of 3,870 known asteroids accessible to the comparison, and reported 3,574 previously unrecognised asteroid tracks, mostly at 21.5≲wP1≲22.521.5\lesssim w_{P1}\lesssim22.5. The authors caution that some short tracks may be pieces of the same body and that short arcs hinder recovery, so this is a count of reported tracks, not of secure orbits.

Pedro Bernardinelli, Gary Bernstein, Masao Sako and the Dark Energy Survey (DES) team showed the other half of the idea: confirm catalogue candidates with pixels (Bernardinelli et al. 2020). Candidate TNO orbits came from catalogue detections. Each was then tested by measuring flux at the predicted positions in images where the object had not been detected. This sub-threshold significance used information not involved in proposing the orbit. Of 424 candidate linkages, 316 passed, including 245 DES discoveries and 139 first reported in that paper.

Steven Stetzler, Mario Jurić, Pedro Bernardinelli, Dino Bektešević, Colin Orion Chandler, Andrew Connolly and the DECam Ecliptic Exploration Project (DEEP) collaboration put the threads together in An Efficient Shift-and-Stack Algorithm Applied to Detection Catalogs, posted on 30 September 2025 (Stetzler et al. 2025). They took one long stare from DEEP, field A0c on 3 April 2019: 104 exposures of 120 seconds each in the VR band. They injected synthetic asteroids and TNOs, built source catalogues at thresholds from one to five sigma, and searched them. The same data had been searched with GPU KBMOD. The result is the most complete published measurement of what a catalogue search gains and loses against a pixel search on the same images.

How much signal survives a threshold

A source with true single-exposure SNR νi\nu_i appears in a catalogue with threshold τ\tau whenever noise lifts its measured SNR above τ\tau. In the Gaussian approximation,

pflux,i=P(ν^i≥τ∣νi)=12erfc⁡ ⁣(τ−νi2).p_{\mathrm{flux},i}=P(\hat\nu_i\ge\tau\mid\nu_i)=\tfrac12\operatorname{erfc}\!\left(\frac{\tau-\nu_i}{\sqrt2}\right).

A source need not be above threshold on average to appear sometimes. Combining those intermittent appearances is what lets a catalogue search beat the single-exposure limit. It also biases the measured fluxes upward.

The peak also has to land where the search expects it. For a circular Gaussian PSF with Gaussian scale aia_i, Stetzler uses the positional variance σx,i2=σy,i2≃2ai2/νi2\sigma_{x,i}^2=\sigma_{y,i}^2\simeq2a_i^2/\nu_i^2. If the true projected position sits at the centre of a square bin of width dd, the chance of being caught is

pi≃pflux,i  erf⁡ ⁣(d νi4ai)2.p_i\simeq p_{\mathrm{flux},i}\;\operatorname{erf}\!\left(\frac{d\,\nu_i}{4a_i}\right)^{2}.

The number of signal votes S=∑iXiS=\sum_iX_i, with XiX_i a Bernoulli variable of probability pip_i, is Poisson-binomial with mean ∑ipi\sum_ip_i. The figure evaluates this for 104 exposures. At a one-sigma threshold, a source with true SNR 0.5 is expected to leave 32 peaks, but only about 5 of them land in a centred bin of width 3a3a. At three sigma it leaves under one.

0204060801000.511.522.53True single-exposure SNRExpected signal peaks (of 104) (0.5, 32.09) (1, 52) (1.5, 71.91) (2, 87.5) (2.5, 97.05) (3, 101.63) (0.5, 5.24) (1, 26.3) (1.5, 56.76) (2, 81.67) (2.5, 95.5) (3, 101.34) (0.5, 0.65) (1, 2.37) (1.5, 6.95) (2, 16.5) (2.5, 32.09) (3, 52) (0.5, 0.11) (1, 1.2) (1.5, 5.48) (2, 15.4) (2.5, 31.58) (3, 51.85)Threshold 1, flux onlyThreshold 1, captured in binThreshold 3, flux onlyThreshold 3, captured in bin
How a faint mover leaks into a low-threshold catalogue. Expected number of the 104 exposures in which a source of given true single-exposure SNR produces a catalogue peak, for thresholds of 1 and 3 sigma. Solid flux-only curves use the Gaussian selection probability; the 'captured' curves also require the noisy centroid to land in a centred bin of width 3a (a is the PSF Gaussian scale). Idealised estimates: local-maximum selection, noise votes, masks and bin phase are omitted. Source: Calculated from the selection model in Stetzler et al. (2025), arXiv:2509.26279, section 2.2 (figure data compiled for this book).

This is an instructive approximation, not an exact likelihood for faint peaks. It assumes the right velocity, centred bins, Gaussian centroid errors and independent selection and position. The divergence of σx\sigma_x as ν→0\nu\to0 is a diagnosis: at very low SNR the measured peak need not be a perturbed image of the source at all. Widening the bin catches more true positions but also collects more noise peaks, over an area d2d^2.

The noise side is a count of local maxima of a smoothed random field. With λi(τ)\lambda_i(\tau) the surface density of noise peaks above threshold and AiA_i the valid area of the projected bin (d2d^2 with full coverage), the number of noise votes in a cell is approximately Pois(Λ)\mathrm{Pois}(\Lambda) with Λ=∑iλi(τ)Ai\Lambda=\sum_i\lambda_i(\tau)A_i. The peak density is not the Gaussian tail probability per raw pixel. Smoothing by the PSF reduces the number of independent opportunities, and peak selection shifts the height distribution upward. Budavári and colleagues give the analytic peak density in their Appendix A, which is the place to implement it from. (The specialised form in Stetzler’s v1 preprint differs algebraically from Budavári’s equations, including a missing square root. This is an observation from comparing the two texts, not an established erratum.)

A count threshold KK is then chosen so that P[Pois(Λ)≥K]≤Nfalse/HP[\mathrm{Pois}(\Lambda)\ge K]\le N_{\rm false}/H for HH accumulator cells. That gives the expected number of false cells. The number of distinct false objects also depends on clustering and on how candidates are removed. Smoothed-field peaks are correlated, survey artefacts are worse than Poisson, and empirical null runs remain necessary.

The algorithm

Stetzler’s method projects every detection back to a reference time for each trial velocity, bins the projected positions, and treats the stack of velocity-indexed histograms as one accumulator:

C = all catalogue peaks above threshold tau, from every exposure
V = velocity lattice over the search region, spacing about d / T
H = zero counts over (velocity, x bin, y bin)
for v in V:
    for detection in C:
        u = detection.position - v * (detection.time - t0)
        H[v, bin(u, d)] += 1
while max(H) >= K and fewer than the output cap:
    cell   = argmax(H)
    voters = detections that voted for cell
    remove every vote of these voters from H, at all velocities
    track  = robust MCD regression of voter positions on time
    gather all detections within d of the track; optionally refit
    output track

The fit treats time, which is known accurately, as the independent variable and sky position as the response. It uses minimum-covariance-determinant (MCD) estimates of mean and covariance instead of ordinary least squares. MCD looks for the subset of points whose covariance has the smallest determinant, and with a support fraction near one half it can tolerate nearly half the points being outliers. That robustness is what makes coarse, contaminated clusters usable. It is not a detection guarantee: structured outliers or two real objects in one cluster can defeat it.

The search parameters were as follows (Stetzler et al. 2025, Table 1). Bin widths are in units of the PSF scale aa.

Catalogue thresholdTNO bin width d/ad/aMain-belt bin width d/ad/a
11not searched
21not searched
3310
41010
51010

The TNO velocity search covered 0.003–0.04 deg/day (about 0.45–6 arcsec/hour) in all directions; the main-belt search covered 0.1–0.5 deg/day. Sixty detectors were searched. The depth comparisons used a count cut giving 200 results per detector. Main-belt thresholds below three were not attempted because of their cost.

Where the speed comes from

Let MM be the number of catalogue detections, NvN_v the number of trial velocities, B≃Ω/d2B\simeq\Omega/d^2 the number of spatial bins per velocity over a field of solid angle Ω\Omega, and RR the number of extracted candidates. A straightforward implementation costs

O(NtP+MNv+RBNv)O(N_tP+MN_v+RBN_v)

plus vote removal and fitting. The terms are source extraction over NtN_t images of PP pixels, voting, and repeated scans of the accumulator for the maximum. A brute-force pixel search costs O(NtPNv,img)O(N_tPN_{v,\rm img}).

The gain has two origins. The first is obvious: there are far fewer peaks than pixels. Stetzler’s example 2048×40962048\times4096 detector shows peak counts smaller than pixel counts by factors of roughly 10210^2 to 10610^6 across the plotted thresholds. The second is less obvious and just as large. A velocity grid of spacing d/Td/T over a rectangle of velocity spans Wx×WyW_x\times W_y has Nv≃T2WxWy/d2N_v\simeq T^2W_xW_y/d^2 velocities, and the accumulator has

H≃Nv Ωd2=T2WxWy Ωd4H\simeq N_v\,\frac{\Omega}{d^2}=\frac{T^2W_xW_y\,\Omega}{d^4}

cells. Because the catalogue cluster is refined afterwards by regression, the search can use a much larger dd than a pixel likelihood could tolerate, and the cost falls as d−4d^{-4}. As an illustration, not a reported run: for a 162 arcmin² field, a four-hour baseline, a 1-arcsec bin and the all-direction TNO annulus above, the velocity lattice has about 1,800 points and the accumulator about 1.05×1091.05\times10^9 cells. A five-times-larger bin cuts this by 54=6255^4=625, to about 1.7×1061.7\times10^6.

The sparse input does not guarantee small memory. Storing every detection’s projected bin for every velocity takes O(MNv)O(MN_v), and the accumulator O(BNv)O(BN_v). At the lowest thresholds, this is what limits the method.

The measured trade

Here is Stetzler’s central table. Search time is the paper’s total catalogue CPU-time column. The comparison baseline is a specially written CPU implementation of the image search’s core loop, which took 2.54 core-hours and 17.5 GB, while the comparison depth m50=25.47±0.01m_{50}=25.47\pm0.01 comes from the GPU KBMOD run. Speedups and memory ratios keep the paper’s inequality signs, because the CPU baseline excludes reporting and filtering results.

ThresholdTNO m50m_{50}CPU minutesMemory, GBSpeedupMemory ratio
125.87±0.2125.87\pm0.2139.5190.8≥3.9×\ge3.9\times≤10.92\le10.92
225.21±0.0525.21\pm0.055.015.4≥30.8×\ge30.8\times≤0.88\le0.88
324.68±0.0424.68\pm0.041.81.4≥85.9×\ge85.9\times≤0.08\le0.08
424.29±0.0524.29\pm0.051.10.4≥138.6×\ge138.6\times≤0.02\le0.02
523.96±0.0623.96\pm0.060.80.4≥203.3×\ge203.3\times≤0.02\le0.02
0.111010010002424.52525.526TNO m50 (approximately r-calibrated VR mag)Search time (CPU minutes)threshold 1 (25.87, 39.5)threshold 12 (25.21, 5)23 (24.68, 1.8)34 (24.29, 1.1)45 (23.96, 0.8)5image (25.47, 152.4)imageCatalogue searchImage search (CPU time, GPU-KBMOD depth)
Catalogue stacking: depth against search time. Stetzler et al.'s DECam test (104 exposures). Each catalogue point is one source-detection threshold. The open comparison point combines the GPU KBMOD depth (m50 = 25.47) with the 2.54 core-hours of a separate CPU image-search implementation, so it is not a single measured pipeline. False-positive rates were not matched between methods. Reference: single-exposure m50 = 23.7; ideal 104-exposure coadd about 26.2. Source: Stetzler et al. (2025), arXiv:2509.26279, Table 3 and section 4.3.
Threshold 1190.8 GBThreshold 215.4 GBThreshold 31.4 GBThreshold 40.4 GBThreshold 50.4 GBCPU image search17.5 GBMemory (GB, log scale)
Catalogue stacking: memory by threshold. Peak memory of the catalogue search at each source-detection threshold, against 17.5 GB for the CPU image-search comparator. The deepest configuration needs eleven times the comparator's memory, mainly because projections for every velocity and a dense accumulator are held at once. Source: Stetzler et al. (2025), arXiv:2509.26279, Table 3 and section 4.3.

The paper summarises the threshold-two search as a speedup of 30.8 times with 88% of the memory, at a cost of 0.25 mag. (Subtracting the printed numbers gives 0.26; the paper’s printed difference is 0.25.) For reference, the measured single-exposure m50m_{50} was 23.7, and the ideal gain from 104 equal exposures is 1.25log⁡10104=2.521.25\log_{10}104=2.52 mag, giving an idealised coadd limit of about 26.2. KBMOD itself reached 25.47, well short of that ideal: a blind search over many trajectories needs a higher threshold than a test of one known trajectory, and its candidate filtering has losses of its own.

What does 0.25 mag cost in observing time? A source must be 100.1=1.2610^{0.1}=1.26 times brighter to be detected, and in the background-limited regime recovering that by integrating longer takes 1.262=1.581.26^2=1.58 times the exposure. So a 30-fold saving in search compute was bought with the equivalent of a 58% increase in telescope time, or with a loss of the faintest objects. Whether that is a good trade depends on the science: it is cheap for a survey whose bottleneck is compute and expensive for one whose bottleneck is photons.

Three reasons not to over-read the table

First, the speedup is measured against a CPU implementation of the image search written for the comparison, not against an optimised GPU search on the same hardware. Second, the depth comparison uses GPU KBMOD, a different program with its own thresholds: a coadded significance of ten and a search covering 180 degrees around the ecliptic, while the catalogue search covered all directions and kept a fixed number of results per detector. Third, the authors state that they did not achieve parity in false-positive or true-positive rates. The threshold-one search’s m50=25.87m_{50}=25.87 is deeper than the KBMOD run, but at an unknown false-alarm rate it does not show superior sensitivity. Fixing the number of candidates does not fix their purity.

The paper also measured astrometry. Both methods give sub-pixel trajectories over most of the tested range, but catalogue-fit accuracy worsens at about magnitudes 25–26, while KBMOD stays near one DECam pixel (0.263 arcsec). Faint centroids are noisy and selection-biased, so a regression advantage on bright objects does not carry to the discovery limit.

Forced photometry: go back to the pixels

Once a candidate exists, the pixels are cheap to revisit. Measure the flux fif_i, with variance si2s_i^2 and expected scaling gig_i, at the predicted position in every usable image, including negative values and epochs with no detection:

F^=∑igifi/si2∑igi2/si2,Zforced=∑igifi/si2∑igi2/si2.\hat F=\frac{\sum_ig_if_i/s_i^2}{\sum_ig_i^2/s_i^2},\qquad Z_{\rm forced}=\frac{\sum_ig_if_i/s_i^2}{\sqrt{\sum_ig_i^2/s_i^2}} .

At fixed PSF and position this is the same linear statistic as A/BA/\sqrt B. Its attraction is that it is evaluated only for CC candidates, at cost O(CNt)O(CN_t) reads from precomputed matched-filter maps. If CC grew to the whole trajectory bank, it would be the pixel search again.

DES is the worked example. It measured windowed, sky-subtracted fluxes at predicted positions with a one-arcsec Gaussian window and combined them by inverse variance, using only images without a linked detection and skipping exposures within an hour of one. Candidates were accepted with an empirical boundary STS>2Nimages\mathrm{STS}>2\sqrt{N_{\rm images}}, plus blinded visual inspection. That boundary is specific to the survey, not a universal Gaussian prescription. Two cautions apply to any new catalogue search. Measuring high flux after fitting the trajectory to the same noisy data is not independent evidence: hold out exposures, or calibrate the joint proposal-plus-photometry procedure on null data. And forced photometry can rescue weak epochs of a proposed object but cannot recover one the proposal stage never nominated.

pixel likelihood search difference images psi, phi maps fine trajectory bank signed likelihood A/sqrt(B) catalogue Hough search difference images peaks above tau vote counts per bin robust line fit, regather loss: values below tau, negative fluctuations loss: flux and uncertainty per peak confirmation forced flux, all epochs signed significance orbit and follow-up pixels re-read
Where information goes. The pixel search keeps signed matched-filter evidence for every trajectory. The catalogue search loses information twice (dots): at the threshold, which discards sub-threshold and negative values, and at integer voting, which discards each peak's flux and uncertainty. Forced photometry (bottom) returns to the original pixels (dashed) to recover signed evidence, but only for trajectories the catalogue proposed.

Stacked detections are not stacked images

The phrase “stacked detections” has other meanings in Pan-STARRS work, and they should not be confused. Lo’s master frame is an overlay of catalogue positions. After removing noisy detector regions, points near stationary sources and isolated points, a typical nightly field still held about 260,000 detections. The Hough transform sampled angles from 1 to 179 degrees in 0.1-degree steps and needed at least five detections per segment. It took about twenty-five minutes per master frame on a five-node cluster of four-core Intel i7-2600 machines (Lo et al. 2020). Separately, Pan-STARRS image-stack catalogues come from ordinary coadds; positions found in stacks seed forced photometry on the individual warped exposures (Magnier et al. 2020). That preserves weak evidence at fixed positions, not along unknown moving paths, and a stellar-aligned stack smears a mover. The 2025 Pan-STARRS distant-planet search by Matthew Holman, Kevin Napier, Matthew Payne and Jacob Kurlander used ordinary single-exposure catalogues with a stationary-source veto that removed 80–95% of detections, and found 692 Solar System objects including 642 TNOs (Holman et al. 2025). It is a large catalogue search, but not a sub-threshold one; it is treated in Chapter 9 and Chapter 12.

Landmark results

YearWorkWhat it establishedKey number and status
2002Allen thesis (cited by Parker & Kavelaars)Two-level multinight grid treeAttribution only; thesis not checked
2010Parker & KavelaarsPopulation-selected grids; proposed Grid Tree2.25× and 6.25× fewer additions, estimated, unimplemented
2014Zackay & Ofek, FDMTEndpoint-conditioned curved tree sums2NtNf+NtNΔlog⁡2Nf2N_tN_f+N_tN_\Delta\log_2N_f operations
2016SmithInterpolating coherent pulsar treeO(1)O(1) asymptotic work per final model
2017Budavári, Szalay & LoredoBayesian fusion of low-threshold cataloguesSimulation: 9 epochs at 1σ
2020Lo et al., Pan-STARRSCatalogue overlay plus Hough3,819/3,870 known recovered; 3,574 new tracks reported
2020Bernardinelli et al., DESCatalogue proposals confirmed by sub-threshold pixels316 TNOs from 424 candidate linkages
2024Nguyen et al., FaXTRecursive stacker on real TESS dataMore than 1,000 sub-threshold asteroid detections
2024Gupta et al., ESAMExact compilation of arbitrary masksMore than 10× fewer operations in example
2025Stetzler et al.Low-threshold catalogue shift-and-stack30.8× (vs CPU) at 0.25 mag shallower; false alarms unmatched
2026Matthews & NguyenFaXT speed and loss, simulatedAbout 100× faster at 256 frames; loss 37% vs 27–28%
2026Project studies (unpublished)CPU sensitivity audits, GPU modelsFaXT extra loss 4.35%; exact paths 22.5 states/motion

None of the tree-specific sources supplies a survey-wide count of new bodies attributable to the recursion itself.

Limitations and open problems

The digital path can spend the sensitivity budget before any GPU work begins. FaXT’s economy comes from paths that drift from the physical line. At the frame counts where it is fastest, its extra loss exceeds a 2% SNR budget in the project’s matched-filter tests and is visible in the published aperture losses.

Normalisation is the common failure. Interpolating information maps as if they were images, or ignoring the correlation between neighbouring table entries, miscalibrates the null. Near masks, chip gaps and changing PSFs the correction varies from place to place. A miscalibrated early gate loses sources that exact final scoring cannot bring back.

Real cadences and real orbits are not details. Gaps, unequal exposures, parallax, curvature and distance uncertainty add resolved directions that a frame-index recurrence does not represent. Conversely, physical constraints can reduce a generic polynomial bank, so the pessimistic six-coordinate count above is not an impossibility proof.

Intermediate tables can dominate memory. The project’s audit notes that a 2562256^2 origin tile times 65,536 motions, storing one FP32 numerator–information pair per root, already takes 34.4 GB, and the two half-length children add 17.2 GB. Root streaming and tiling are required even when the images fit easily.

Pruning changes completeness, and refinement can eat the savings. A low partial score does not imply a low final score. Lowering a seed threshold to keep faint sources admits rapidly more noise candidates, because the Gaussian tail grows steeply as the threshold falls. Matthews and Nguyen’s GEO case shows refinement costing more than the search it follows.

For catalogues, the threshold is irreversible. No association method can recover a signed flux from a record that says only “no peak above threshold.” Censoring models recover part of the lost evidence, not all of it. The data-processing inequality bounds the best catalogue statistic by the best image statistic under the same model. The size of the loss depends on brightness, PSF sampling, threshold, stored metadata and follow-up access; it is not a universal quarter magnitude.

Artefacts break the clean null. Difference residuals recur at stars, shared templates correlate exposures, and diffraction spikes and detector edges make structured patterns of peaks. A constant-density Poisson model understates such tails. Null tests must preserve the instrument’s structure; scrambling times alone may destroy the very artefacts that create real false candidates.

Greedy removal and bin phase can hide objects. A real cluster can straddle a bin edge. A noisier maximum can remove some of its detections first. Overlapping bins or multiple grid offsets help, at a cost in work and in altered null statistics.

Reporting is incomplete. The original FaXT TESS configuration is not accessible; the detailed 2026 FaXT study is simulated, undersampled and run on unstated hardware; Stetzler does not give a processor model or GPU-hours for the catalogue benchmark; and the project’s GPU numbers are models. These are specific missing measurements, not reasons to dismiss demonstrated reuse.

Where the room is

The physical ceiling is the correctly weighted matched filter on the true trajectory, with the right light-curve model. Trees cannot create photons or restore information removed by masking, trailing or over-aggressive background subtraction. A larger parameter space raises both the bank size and the detection threshold. Everything else here is algorithm and engineering: the exposure loop, repeated coordinate evaluation, duplicate short tracks, intermediate storage, memory traffic, repeated accumulator scans and data movement. Those can change by large factors without new photons. The question is always against what.

A decision rule for trees

For MM final tests with an average of Eˉ\bar E useful exposures each, an ideal FP32 direct search reads about 8EˉM8\bar EM bytes. An exact two-channel tree with cMcM merge states moves about 24cM24cM logical bytes. Before caches and other work, the tree beats the direct search on traffic only when

c<Eˉ/3,c<\bar E/3,

and wins by a factor of ten only when c<Eˉ/30c<\bar E/30. If the direct search reads a two-byte encoded pair while the tree keeps FP32 partials, the tenfold condition tightens to c<Eˉ/120c<\bar E/120. These are screening inequalities, but they are cheap to evaluate before writing a kernel. At 256 frames the project’s roofline model gave FaXT 31.2 times over an FP32 direct gather, but only 7.8 times over an encoded one; exact nearest paths gave 2.8 and 0.69 times. The comparator matters as much as the algorithm.

The input-reading bound depends on useful coverage, not nominal frame count. A field with thousands of archived exposures but few overlapping any one output trajectory does not suit a dense tree. Charge the direct search only for the useful intersections K=∑θNvalid(θ)K=\sum_\theta N_{\rm valid}(\theta), and trim the tree’s empty states in the same way, or the apparent gain will consist largely of work the baseline never needed to do. This is why dense, long stacks of one field (Chapter 19) are the natural home for trees, and sparse multi-year archives (Chapter 20) are not.

Algorithmic opportunities: trees

Compile joint physical subtracks. Use real timestamps, the observatory’s ephemeris and a sensitivity-controlled bank; hash joint two-coordinate path signatures ESAM-style; measure the resulting graph size, live memory and footprint metadata on real optical data before building GPU kernels.

Adapt the local model. An acceleration term that a short segment cannot resolve should vanish there instead of being interpolated in six dimensions down to single exposures. Smith already proposed lowering the polynomial degree down the tree. The open contribution is a validated optical geometry with a calibrated error bound.

Schedule for memory, not for additions. Tile neighbouring origins and motions together, fuse upper merges into candidate reduction, and keep heavily reused children in cache or shared memory. Addition-only trees have low arithmetic intensity; tensor cores do not help them automatically.

Make normalisation part of the transform. Precompute effective-template norms where noise is stationary and switch to exact gathering near masks. Charge the cost: in the project’s pruning model, adding the normalisation pass cut the projected gain from 10.3 to 6.8 times.

Optimise the whole policy. Allocate geometric approximation, seed threshold, false-dismissal probability and refinement cost jointly, against a sequential-rejection baseline given the same completeness budget, and report limiting-flux recovery at matched false alarms per unit wall time.

Catalogues: engineering limits first

Most of the catalogue method’s weaknesses are representation and engineering, and several have clear fixes.

The threshold-one memory problem comes from materialising projections for every velocity and a dense accumulator. Streaming velocity tiles, computing projections in registers, voting into a tile and extracting its candidates before discarding it, would move memory from O(MNv+BNv)O(MN_v+BN_v) toward O(M+BNv,tile)O(M+BN_{v,\rm tile}). The subtlety is that the paper removes a cluster’s votes globally before choosing the next; independent tiles cannot reproduce that order exactly, so an overcomplete set of per-tile maxima has to be merged and conflicts resolved, and injection tests must confirm that the changed order does not cost completeness.

Repeated full scans for the maximum create the RBNvRBN_v term. Per-tile maxima, a heap with lazy validation, or GPU compaction followed by a segmented top-kk would remove it. Whether dense histograms or sparse sorted keys win depends on occupancy, which should be measured. On a GPU the bottleneck is scattered histogram updates and membership bookkeeping, not floating-point arithmetic; tensor cores do not accelerate integer binning.

The sensitivity loss is the harder problem, and the most interesting one. Stetzler’s score is an integer count: a bright peak and a barely-above-threshold noise peak each get one vote. Storing each peak’s flux, centroid covariance, local noise and coverage, and accumulating a likelihood-weighted score with the censored evidence of Budavári’s model, would recover some of what equal counting discards. The authors list likelihood accumulation as future work. The weights must be robust, or bright subtraction residuals will dominate. And the right endpoint is a hybrid: a cheap sparse proposal stage tuned for recall at a fixed candidate budget, followed by signed forced photometry or a local pixel likelihood for the survivors. Cutting the proposal set tenfold could plausibly cut the follow-up work tenfold, but that is an engineering target, not a demonstrated speedup, and it holds only if measured recall and final false-alarm rate stay fixed.

The experiment that would settle it

For both families the missing measurement is the same. Take identical calibrated exposures and injections with identical spatial and velocity coverage. Run an optimised dense GPU likelihood search, the published tree or catalogue method, an optimised GPU version of it, and a hybrid. Report completeness against flux and rate at a common false-object density after the same final validation. Include extraction, I/O, transfers, refinement and pixel follow-up in the end-to-end time, and report kernel time, memory, device model and code revision separately. Until that table exists, a “30×” or “100×” is a statement about one program against another, not about what the method can do.

Chapter 42 puts these trees and catalogues alongside the other routes to a large equal-sensitivity speedup. The short version from this chapter: reuse is real and old; its price is paid in path fidelity, normalisation and memory traffic; and the most promising designs keep signed sums all the way up, spend exact pixel work only where cheap evidence points, and measure every stage’s survival probability.

References

  1. Bernardinelli, P. H., Bernstein, G. M., Sako, M. et al. (2020). Trans-Neptunian objects found in the first four years of the Dark Energy Survey. ApJS 247, 32. arXiv:1909.01478
  2. Budavári, T., Szalay, A. S., Loredo, T. J. (2017). Faint Object Detection in Multi-Epoch Observations via Catalog Data Fusion. ApJ 838, 52. arXiv:1611.03171
  3. Dalitz, C., Schramke, T., Jeltsch, M. (2017). Iterative Hough Transform for Line Detection in 3D Point Clouds. Image Processing On Line 7, 184–196. doi:10.5201/ipol.2017.208
  4. Geringer-Sameth, A., Golovich, N., Iwabuchi, K. (2025). Multi-year Stacking Searches for Solar System Bodies. arXiv preprint. arXiv:2509.25428
  5. Gupta, V., Bannister, K. W., Flynn, C., James, C. (2024). Efficient Summation of Arbitrary Masks: ESAM. arXiv preprint. arXiv:2412.10678
  6. Holman, M. J., Napier, K. J., Payne, M. J., Kurlander, J. A. (2025). A Pan-STARRS Search for Distant Planets: Part 1. arXiv preprint. arXiv:2506.02144
  7. Kumar, P., Zackay, B. (2026). Coherent Signal Detection with Pruning I: Finding Short-Period Binary Pulsars in Circular Orbits. arXiv preprint. arXiv:2607.07700
  8. Lo, K.-J., Chang, C.-K., Lin, H.-W. et al. (2020). Asteroid Discovery and Light Curve Extraction Using the Hough Transform: A Rotation Period Study for Sub-Kilometer Main-Belt Asteroids. AJ 159, 25. arXiv:1910.07146
  9. Magnier, E. A., Chambers, K. C., Flewelling, H. A. et al. (2020). The Pan-STARRS Data Processing System. ApJS. arXiv:1612.05240
  10. Matthews, S., Nguyen, T. (2026). Performance Assessment of Track-Before-Detect Algorithms and Post-Search Refinement Methods. AMOS Technical Conference. amostech.com
  11. Nguyen, T., Woods, D. F., Ruprecht, J., Birge, J. (2024). Efficient Search and Detection of Faint Moving Objects in Image Data. AJ 167, 113. doi:10.3847/1538-3881/ad20e0
  12. Nir, G., Zackay, B., Ofek, E. O. (2018). Optimal and Efficient Streak Detection in Astronomical Images. AJ 156, 229. arXiv:1806.04204
  13. Parker, A. H., Kavelaars, J. J. (2010). Pencil-Beam Surveys for Trans-Neptunian Objects: Novel Methods for Optimization and Characterization. PASP. arXiv:1004.3287
  14. Smith, K. M. (2016). New Algorithms for Radio Pulsar Search. arXiv preprint. arXiv:1610.06831
  15. Stetzler, S., Jurić, M., Bernardinelli, P. H. et al. (2025). An Efficient Shift-and-Stack Algorithm Applied to Detection Catalogs. AJ 170, 352. arXiv:2509.26279
  16. Whidden, P. J., Kalmbach, J. B., Connolly, A. J. et al. (2019). Fast Algorithms for Slow Moving Asteroids: Constraints on the Distribution of Kuiper Belt Objects. AJ 157, 119. arXiv:1901.02492
  17. Zackay, B., Ofek, E. O. (2017). An Accurate and Efficient Algorithm for Detection of Radio Bursts with an Unknown Dispersion Measure, for Single-Dish Telescopes and Interferometers. ApJ 836, 187. arXiv:1411.5373
  18. Finding Planets project (2026). Design studies: full-sum trajectory trees; recursive stacking prior-art audit; LOKI transfer study; regime-D table-ratio test. Unpublished internal reports (CPU experiments and GPU performance models; no GPU measurements).