From 34b24133c7be9f54aeeb83ea9b36558152b87271 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Wed, 11 Feb 2026 19:59:32 +0100 Subject: [PATCH] jfjoch_process: More fixes --- image_analysis/scale_merge/ScaleAndMerge.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/image_analysis/scale_merge/ScaleAndMerge.cpp b/image_analysis/scale_merge/ScaleAndMerge.cpp index cbf16641..60c9597f 100644 --- a/image_analysis/scale_merge/ScaleAndMerge.cpp +++ b/image_analysis/scale_merge/ScaleAndMerge.cpp @@ -331,6 +331,8 @@ ScaleMergeResult ScaleAndMergeReflectionsCeres(const std::vector& ob const bool refine_partiality = opt.wedge_deg > 0.0; + std::vector is_valid_hkl_slot(nhkl, false); + for (const auto& o : obs) { size_t mos_slot = opt.per_image_mosaicity ? o.img_slot : 0; @@ -347,6 +349,7 @@ ScaleMergeResult ScaleAndMergeReflectionsCeres(const std::vector& ob &g[o.img_slot], &mosaicity[mos_slot], &Itrue[o.hkl_slot]); + is_valid_hkl_slot[o.hkl_slot] = true; } else { auto* cost = new ceres::AutoDiffCostFunction( new IntensityResidual(*o.r, o.sigma, opt.wedge_deg, refine_partiality)); @@ -356,6 +359,7 @@ ScaleMergeResult ScaleAndMergeReflectionsCeres(const std::vector& ob &g[o.img_slot], &mosaicity[mos_slot], &Itrue[o.hkl_slot]); + is_valid_hkl_slot[o.hkl_slot] = true; } } @@ -363,12 +367,12 @@ ScaleMergeResult ScaleAndMergeReflectionsCeres(const std::vector& ob if (opt.log_scaling_residual) { for (int i = 0; i < nimg; ++i) problem.SetParameterLowerBound(&g[i], 0, 1e-12); - for (int h = 0; h < nhkl; ++h) - problem.SetParameterLowerBound(&Itrue[h], 0, 1e-12); + for (int h = 0; h < nhkl; ++h) { + if (is_valid_hkl_slot[h]) + problem.SetParameterLowerBound(&Itrue[h], 0, 1e-12); + } } - // Optional Kabsch-like regularization for k - // Mosaicity refinement + bounds if (!opt.refine_mosaicity) { for (int i = 0; i < nimg; ++i)