Rotation: a diagnostic that opens the prediction window on its own width

Prediction and partiality read one number, the per-image sigma_M, so a sigma_M
that moves takes the integrated reflection population with it and there is no
way to ask which of the two uses carries a downstream difference.
--prediction-mosaicity fixes the width the prediction window opens to while the
partiality keeps using the measured sigma_M, which separates them.

Measured with it on a rotation crystal whose lattice search returns two
different cells a few tens of microns of detector distance apart: widening the
prediction window from the narrower branch's 0.203 deg to the wider branch's
0.272 deg adds 28% more partials and moves the merged statistics by less than
half a percent (I/sigma 6.1 -> 6.2, R_meas 12.7 -> 12.6%, ISa 10.7 -> 10.9);
narrowing the wide branch the other way removes 26% of its partials and
recovers nothing. On a tetragonal reference crystal a 4.7x over-wide window
costs 11%. The prediction window is not where a mosaicity difference turns into
a merged-data difference - the captured-fraction gate and the partiality
weighting downstream absorb a generous window.

Diagnostic only; off by default, so nothing changes unless it is asked for.
This commit is contained in:
2026-08-12 01:17:51 +02:00
parent 677ece7b59
commit a0604ff244
4 changed files with 42 additions and 1 deletions
+14
View File
@@ -77,6 +77,20 @@ std::optional<float> BraggIntegrationSettings::GetFixedProfileRadius_recipA() co
return fixed_profile_radius;
}
BraggIntegrationSettings & BraggIntegrationSettings::ForcedPredictionMosaicity_deg(std::optional<float> input) {
if (input) {
check_finite("Prediction mosaicity", input.value());
check_min("Prediction mosaicity [deg]", input.value(), 0.001);
check_max("Prediction mosaicity [deg]", input.value(), 10.0);
}
forced_prediction_mosaicity_deg = input;
return *this;
}
std::optional<float> BraggIntegrationSettings::GetForcedPredictionMosaicity_deg() const {
return forced_prediction_mosaicity_deg;
}
BraggIntegrationSettings &BraggIntegrationSettings::Integrator(IntegratorMode input) {
integrator_mode = input;
return *this;