Coherent summing keeps the pulse shape that incoherent searches discard
A narrow pulse spread across a long Fourier transform appears as many harmonics at integer multiples of the spin frequency. Standard searches add the powers of those harmonics and throw away their phases, which is why the method is called incoherent harmonic summing: it gains sensitivity but loses the pulse shape, and harmonics left unsummed still carry signal.
CoherentSearch.jl instead interpolates the complex amplitudes of typically 60 harmonics at each trial frequency, inverse transforms them into a pulse profile, and tests that profile against boxcar templates of many widths. Because the same harmonics are reused to fold at two to six times each trial frequency almost for free, the code reaches fold depths that a time-domain folding search would pay for separately.
The paper frames this as doing the Fast Folding Algorithm's job in the Fourier domain. Folding keeps every harmonic with its phase but costs O(N²) per trial naively, and even the FFA's O(N log N) has historically carried a large constant; the Fourier route starts from one transform the search already computes.
A normalized spectrum gives one threshold for the whole search
The comparison does not use a common nominal signal-to-noise ratio, because a value of 8 means different things in different codes: they come from different numbers of trials, over noise of different shapes, with tails of different weight. Instead the study fixes the measured false-alarm rate at 0.1 false alarms per observation and lets each code use whatever threshold delivers that rate.
On white noise that threshold is 6.75 for CoherentSearch.jl, 7.20 for accelsearch, 7.55 for riptide configurations A and C, and 7.65 for configuration B. A code can then win in two separable ways: a lower threshold, which depends on the shape of its noise tail, and more measured signal above threshold, which depends on how well its filter matches the pulse.
The lower threshold is available because the input spectrum is normalized, so the noise in every reconstructed profile is known in closed form rather than estimated per profile. That removes per-profile scatter and lets a single threshold hold across all fold depths and frequencies. The paper reports that measuring the noise scale from whitened data instead of computing it changes the detection fraction by less than a point in every knee bin.
The 869,574 injections draw pulse shapes from a measured population
The headline fractions come from 869,574 simulated pulsars. Two thirds are slow, with periods drawn log-uniformly from 20 ms to 5 s; one third are millisecond pulsars with periods from a Gaussian of mean 3.5 ms and width 1 ms, truncated to 1.5–10 ms.
Slow pulsars take duty cycles and profile shapes from the measured widths of the 1176 pulsars in the MeerKAT Thousand-Pulsar-Array sample, bootstrapping that table's residuals about its duty-cycle versus period relation and its ratio of 10% to 50% widths. Scattered pulsars are kept, since dropping them would bias the population narrow. Each profile is a von Mises core with wings solved to reproduce the drawn width ratio, because a single von Mises cannot represent about a third of the measured population. Millisecond pulsars take uniform duty cycles between 2% and 30%.
This matters for reading the percentages: they describe recovery of a population shaped like observed pulsars, not a grid of idealized narrow pulses. Only 12.6% of the slow population sits below 1% duty cycle, so the hardest cases are a minority of the total.
The lead is largest for narrow pulses and reverses at the deepest folds
In white noise CoherentSearch.jl recovers 76.3% of injections. riptide recovers 64.5% in configuration C, its recommended regime, at about three times the run time; 50.2% in configuration A, matched to the new code's coverage and work; and 71.4% in configuration B, at about seven times the run time. accelsearch recovers 41.6% much more quickly, and prepfold, told the period, reaches 99.4% as a best case rather than a search competitor.
Duty cycle is the axis that matters most. At duty cycles of 0.5–1%, configuration A finds 8.6% against 66.3% for the new code; below 0.5%, 2.2% against 46.7%. Configuration C's 120–140-bin folds roughly double configuration A's detections between 1% and 4% duty cycle and match configuration B above 8%, but below 1% it finds 11.5% and 32.3% against 46.7% and 66.3%, because its folds stop at 140 bins.
Configuration B, folding 960–1040 bins where the default folds 120, beats the default below 0.5% duty cycle, 61.1% against 46.7%, and ties it between 0.5% and 1%. Above 1% the default is ahead of all three configurations at every width. The paper attributes its narrow-pulse loss to harmonic truncation rather than the boxcar filter: a model of the recovered statistic agrees with an ideal matched filter truncated at H harmonics to 0.1% at these widths, and at 0.3% duty cycle a pulse spans less than half of one of the 120 profile bins.
Against the recommended FFA, the whole margin is the threshold
The paper separates the two sources of advantage directly. Scored at riptide's own threshold of 7.55 instead of its own 6.75, CoherentSearch.jl would detect 61.6% of white-noise injections. That is more than configuration A's 50.2% but less than configuration C's 64.5%.
So against configuration A, a little over half of the lead comes from the lower threshold and the rest from recovering more signal. Against configuration C, the lower threshold accounts for all of the lead, and C's folds recover slightly more signal overall. For pulsars detected by both, the new code recovers more signal below 2% duty cycle and less above 4%, the expected pattern for a 120–140-bin fold against a ladder of fold depths.
A logistic fit to detection fraction against injected signal-to-noise ratio gives the brightness at which each code detects half the injections: 6.84 for CoherentSearch.jl, 7.15 for riptide B, 7.58 for riptide C, 8.49 for riptide A, and 9.07 for accelsearch. Below 1% duty cycle the ordering changes: 7.64 for the default, 7.57 for riptide B, 9.86 for riptide C, and 6.77 for the new code's deep pass.
Red noise moves the new threshold not at all, but whitening is mandatory
Under injected red noise the new code's threshold does not move, and the paired red-minus-white difference in its statistic is exactly zero above 100 Hz at every knee. The injected brightness needed for 50% detection rises by factors of 1.00, 1.00, 1.05, 1.12, and 1.27 across the five knee bins, so the cost is confined to low frequencies. The paper places this at or below the bottom of the 1.1–2 degradation range that prior PALFA injections measured for 0.1–2 s pulsars, noting that those observations also contain radio-frequency interference while this study models only red noise.
riptide's behavior depends on how it is treated. Running as its authors intend, with time-domain running-median de-trending, its candidate list fills with false positives at slow periods once the knee rises above about 0.3 Hz: its threshold for 0.1 false alarms per observation climbs from 7.6 to 250, and one threshold per observation drives its detection fraction effectively to zero. Giving it its own threshold in each spin-frequency band recovers it to 79.6% at the mildest knee and 30.9% at the most severe, against 84.2% and 54.5% for the new code, but band matching cannot fully repair a flooded list because chance coincidences inflate claimed detections.
The fairest test feeds riptide the same whitened data. With its running-median filter off, its threshold is flat at 7.55–7.65, and configuration C recovers 61.3% at the mildest knee and 38.3% at the most severe, against 76.1% and 48.1% for CoherentSearch.jl on the same observations. Both codes keep 63% of their mild-noise sensitivity at the worst knee, and whitening costs riptide about 1% on white noise. The paper concludes that the FFA and the new code lose sensitivity to red noise in the same proportion, and that riptide's collapse comes entirely from its de-trending step.
Whitening is not optional for the Fourier method. Running it on the raw FFT, with the noise scale measured from the data because the analytic value assumes a normalized input, drops the detection fraction from 77% to 1% across the same knee range and forces the matched threshold from 6.8 to 11.8. A single scale factor cannot fix a red spectrum, because a trial at r sums harmonics out to 60r and may mix bins whose noise powers differ by orders of magnitude.
Speed favors the Fourier code, and a deep pass covers the narrowest pulses
On one CPU core CoherentSearch.jl is 1.4–2.2 times faster than riptide at matched frequency coverage, scales to 27 times faster on 48 cores, and modern GPUs run it up to nine times faster than a 20-core workstation. It remains slower than accelsearch by an order of magnitude, so the paper says a survey that wants to skim the brightest pulsars first should still run an incoherent FFT search first.
The default configuration's one loss is to a much deeper FFA fold below 0.5% duty cycle. A second pass with 120 harmonics and decimation factors up to 12, over spin frequencies below 5 Hz only, covers every injected pulsar below 0.5% duty cycle, all of which are slower than 1.7 Hz in this population. It takes 3.1 s per observation against the default's 10.8 s on one CPU core and on its own finds 71.3% of the narrowest pulsars, the best of any search in the study.
The union of the two passes, with its threshold measured on the concatenated candidate lists so the second pass pays for its own trials, is ahead of riptide B at every duty cycle: 66.2% against 61.1% at the narrowest and 77.0% against 65.5% at the widest, for 13.9 s per observation against 79.1 s. Over the whole population the second pass adds only 1.3 points, because the pulsars it benefits are a small slice of the population, and the default configuration remains the paper's main subject.
The comparison excludes interference and acceleration searches
The study deliberately excludes radio-frequency interference. riptide has no interference-excision stage because it detrends in the time domain, so zapping the spectrum would be a step imposed on it, and the paper notes that prior tests of PRESTO masking found little effect on sensitivity. The red-noise model is likewise only red noise, which is why the paper places its degradation at the low end of what flux-calibrated injections into real observations measured.
Acceleration searches are also outside the method as implemented. A pulsar in a tight binary smears its harmonics across neighboring bins in proportion to harmonic number, and the efficiencies that make the code fast, especially tabulated interpolation weights and harmonic reuse across decimations, rely on every harmonic being a fixed multiple of one trial frequency. The paper's suggested route for accelerated pulsars is a time-domain acceleration search that stretches or compresses the series before the FFT, which would remain compatible with the code.
The paper also notes that the method is not specific to pulsars: any search for a narrow periodic shape at unknown period is a search over harmonic phases as well as amplitudes, and it names exoplanet transit searches as an example that would need a different FFT normalization and a bank of dips rather than pulses.
Sources used in this answer
A Coherent Harmonic Summing Pulsar Search Code
At 0.1 false alarms per observation, CoherentSearch.jl recovers 76.3% of 869,574 injected pulsars in white noise versus 64.5% for riptide's recommended FFA configuration and 41.6% for PRESTO's accelsearch; against the recommended FFA the entire margin comes from a lower threshold enabled by an analytically known noise scale.
