The official supplementary methods for Torres-García et al. (2022)
were reviewed against engine mssr_r_rev3 on 24 October 2026
and re-checked against the article, the supplement and the pinned R and
Python scripts on 27 October 2026. This comparison documents the defined
single-frame operator and its differences from the authors’ code. The
MATLAB code and the Fiji plugin were not compared for the single-frame
operator. The temporal definitions (29 October 2026) were checked
against Supplementary Table S2 and all four author implementations; the
MATLAB code and the Fiji plugin were read for them, not run.
Sources:
a48d05079a4f32fa7fe1748f6937f27308a43ba0e452aabb9841229bc85583e2.| Operation | Published location | Rev3 correspondence and boundary |
|---|---|---|
| Neighbourhood | S17, p.8; Fig. S8, p.18 | The default punctured disk follows the spatial support. Radius is
max(1, round(amp*fwhm/2)), using half-even rounding by
default. The named square option follows the Python backend’s different
support. |
| Local weights and mean shift | S25–S29, pp.9–10; S48, p.17 | Adaptive range-normalized Gaussian weights; centre minus weighted neighbour mean, with negatives clipped. Rev3 evaluates the equivalent weighted sum of local differences to reduce cancellation. |
| Cubic interpolation | S50–S51, p.26 | Published c=1/2 is exactly the separable Keys kernel
a=-1/2, and S50 is the separable product that rev3
implements. Grid alignment and repeated half-sample reflection are
package conventions; the authors’ backends differ (below). |
| Mesh compensation | Note 6.1.2, pp.27–28 | Average of the image and four symmetric axial shifts. Rev3 specifies
ceil(amp/2) and reflected edges, correcting the upstream R
shift asymmetry. |
| Refinement | Note 5.1.2/Fig. S11, p.21; article Fig. 2a | Subtraction, complement, normalization and current-map multiplication agree for finite nondegenerate steps; each further order starts from the previous map, as the article’s Fig. 2a legend and both scripts describe. Frame-wide maxima make independently normalized tiles different from a whole-frame computation. |
| Output weighting | Note 11.4, p.60 | Optional multiplication of the normalized structure map by the amplified input. Rev3 preserves orientation, correcting the R script’s rotation/multiplication mismatch. Weighted values remain nonquantitative. |
S51 cites Keys’s cubic convolution and a two-dimensional cubic
convolution (Reichenbach and Geng
2003); the latter develops a nonseparable kernel, but S50 is the
separable product. The authors’ scripts interpolate with neither: the R
script calls akima’s bicubic.grid (revised Akima method),
and the Python script calls SciPy’s interp2d, so its
default bicubic path (ftI = False) fails on SciPy 1.14 and
later. Both sample endpoint-aligned positions, which
grid = "endpoint" reproduces; the default
grid = "extent" preserves the field of view. With the R
script’s asymmetric mesh shifts as well, the amplified input already
differs beyond rounding, and MSSR’s range normalization and refinement
are nonlinear and can enlarge such differences locally. Pixel-wise
agreement with the authors’ amplified maps is therefore not
expected.
Supplementary Note 6 and the Python script also offer Fourier interpolation, which the article recommends for temporal analysis; mssrscopR does not implement it. The paper also describes scaling zero-order output to the original maximum (p.17), which differs from optional pixelwise weighting. Rev3 fixes its two output roles explicitly. Flat-input results, zero-range handling, skipped undefined refinement, arithmetic conditioning and resource refusals are documented implementation extensions. Quota masks are a separate package feature.
The source review does not expand numerical qualification: 76 cases at orders 0–3 pass within the sampled synthetic domain; two of the wider 98 cases fail at order 10. Orders above 3 retain an explicit warning. Passing cases do not prove accuracy for every input, parameter combination or derived mask.
The Gaussian theorem’s displayed derivative in S33 omits weight-derivative terms despite the weights’ intensity dependence. This review does not supply a proof for the full adaptive operator or assert that the theorem’s conclusion is false. Physical calibration, measured PSFs, resolution gain and application benefit remain separate requirements.
mssr_temporal() applies the pixel-wise temporal
functions of Supplementary Note 5.2 and Table S2 (p.25) to a stack of
per-frame MSSR maps, as in article Fig. 7a. Per pixel,
x_1, ..., x_M are the maps’ values, x̄ their
mean and δx_t = x_t − x̄.
| Statistic | Table S2 | mssrscopR | Authors’ code |
|---|---|---|---|
| Mean | (1/M) Σ x_i |
the same | plain average in all four tools |
| Var | (1/M) Σ (x_i − x̄)² |
population variance | Python 1/M; R, MATLAB and Fiji
1/(M − 1) |
| TPM | (1/M) Σ (x_i x_j)², with j undefined |
(Σ_t x_t)² = M² · Mean² |
(Σ_t x_t)² in all four tools |
| CV | Var / Mean |
literally Var / Mean, 0 where the mean is 0 |
Fiji only: sample variance divided by the mean |
| SOFI2, SOFI3 | ⟨δx_i δx_{i+1}⟩,
⟨δx_i δx_{i+1} δx_{i+2}⟩ |
lagged, signed deviations, averaged over the frames where every lag exists | Python, MATLAB: absolute deviations at zero lag; Fiji: absolute deviations, lags wrapping around |
| SOFI4 | lagged fourth-order product minus the three pair-product terms | the same, every term averaged over the same M − 3
frames |
Python, MATLAB: absolute value of ⟨δx⁴⟩ − 3⟨δx²⟩² on
absolute deviations at zero lag; Fiji: absolute value of the table form
on absolute deviations, lags wrapping around |
Notes:
k on, so their order 2 is the variance
without the first frame. Absolute deviations, used by all three tools,
keep a positive contribution of independent noise even at a lag, and
their orders 3 and 4 are no longer cumulants. These are different
statistics, not rounding differences, so the tools’ “SOFI” outputs do
not match mssr_temporal() by design. Orders 3 and 4 change
sign with the emitters’ duty cycle; sign = "absolute"
returns the absolute value.M, and its “CV” is Var / Mean, an index of
dispersion rather than the standard deviation divided by the mean;
mssrscopR follows the table. The R script also has a different
missing-data policy.diagnostics$mesh_index reports the
remaining sub-pixel grid on signal-free input pixels of the
field-of-view-preserving grid.The package tests compare the reduction with values derived by hand for constant, alternating and periodic stacks and with an explicit-loop implementation, check its offset, scale, time-reversal and pixel-order properties, and check that the stored and recomputed computation paths give the same values. These checks establish the definitions, not a resolution gain or any behaviour on real fluctuation data. Wavelength, depth and lifetime-delay axes cannot be substituted for time. Note 10.7 (p.54) explicitly leaves a full anisotropic 3D extension for further development.
The article’s open-access licence and the user guide’s plugin-specific public-domain statement do not resolve every upstream script or dependency’s redistribution terms. No upstream implementation or source payload is included in this qualification kit.