diff --git a/image_analysis/scale_merge/RotationScaleMergeGPU.cu b/image_analysis/scale_merge/RotationScaleMergeGPU.cu index c34d9e68..9b8123f4 100644 --- a/image_analysis/scale_merge/RotationScaleMergeGPU.cu +++ b/image_analysis/scale_merge/RotationScaleMergeGPU.cu @@ -354,7 +354,9 @@ namespace { const double corr = p.corr[i]; const double I_corr = pooled_I(i) * corr; const double sigma_corr = double(p.sigma[i]) * corr; - const double bkg_var = sigma_corr * sigma_corr - corr * I_corr; + // max(0, I): a down-fluctuated partial carries no Poisson signal to remove, and + // removing a negative one inflates the background part instead of leaving it alone. + const double bkg_var = sigma_corr * sigma_corr - corr * Dmax(0.0, I_corr); double var = Dmax(0.0, bkg_var) + corr * Dmax(0.0, F); if (!(var > 0.0)) var = sigma_corr * sigma_corr; const double w = 1.0 / var;