From 0538b96f9ee14e08ed22cb1a9be013be509e30cc Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Thu, 22 Jan 2026 16:33:29 +0100 Subject: [PATCH] XtalOptimizer: Bring back standard loss function for least squares --- image_analysis/geom_refinement/XtalOptimizer.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/image_analysis/geom_refinement/XtalOptimizer.cpp b/image_analysis/geom_refinement/XtalOptimizer.cpp index 54fe8d3a..a3e6ac39 100644 --- a/image_analysis/geom_refinement/XtalOptimizer.cpp +++ b/image_analysis/geom_refinement/XtalOptimizer.cpp @@ -126,10 +126,9 @@ struct XtalResidual { auto e_pred_hkl = e_latt.transpose() * e_obs_recip; - T dh = exp_h - e_pred_hkl[0]; - T dk = exp_k - e_pred_hkl[1]; - T dl = exp_l - e_pred_hkl[2]; - residual[0] = ceres::sqrt(dh * dh + dk * dk + dl * dl); + residual[0] = exp_h - e_pred_hkl[0]; + residual[1] = exp_k - e_pred_hkl[1]; + residual[2] = exp_l - e_pred_hkl[2]; return true; } @@ -456,14 +455,14 @@ bool XtalOptimizerInternal(XtalOptimizerData &data, continue; problem.AddResidualBlock( - new ceres::AutoDiffCostFunction( + new ceres::AutoDiffCostFunction( new XtalResidual(pt.x, pt.y, data.geom.GetWavelength_A(), data.geom.GetPixelSize_mm(), gonio_back_rot, h, k, l, data.crystal_system)), - new ceres::CauchyLoss(loss_scale), + nullptr, &beam_x, &beam_y, &distance_mm, @@ -608,5 +607,6 @@ bool XtalOptimizerInternal(XtalOptimizerData &data, bool XtalOptimizer(XtalOptimizerData &data, const std::vector &spots) { if (!XtalOptimizerInternal(data, spots, 0.3)) return false; + XtalOptimizerInternal(data, spots, 0.2); return XtalOptimizerInternal(data, spots, 0.1); }