XtalOptimizer: Bring back standard loss function for least squares
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 11m58s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 12m59s
Build Packages / Generate python client (push) Successful in 27s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 13m33s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 13m49s
Build Packages / Create release (push) Has been skipped
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 13m59s
Build Packages / Build documentation (push) Successful in 43s
Build Packages / build:rpm (rocky8) (push) Successful in 14m5s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 14m18s
Build Packages / build:rpm (rocky9) (push) Successful in 15m5s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 7m35s
Build Packages / Unit tests (push) Successful in 51m51s

This commit is contained in:
2026-01-22 16:33:29 +01:00
parent 96712a4bfe
commit 0538b96f9e
@@ -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<XtalResidual, 1, 1, 1, 1, 2, 3, 3, 3>(
new ceres::AutoDiffCostFunction<XtalResidual, 3, 1, 1, 1, 2, 3, 3, 3>(
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<SpotToSave> &spots) {
if (!XtalOptimizerInternal(data, spots, 0.3))
return false;
XtalOptimizerInternal(data, spots, 0.2);
return XtalOptimizerInternal(data, spots, 0.1);
}