rugnux: advice on the next collection keeps the two geometry rules only
Build Packages / Create release (push) Successful in 8s
Build Packages / Build documentation (push) Successful in 48s
Build Packages / build:portable:macos-arm64:nocuda (push) Successful in 5m24s
Build Packages / build:rugnux:linux-aarch64:cuda (push) Successful in 11m16s
Build Packages / build:portable:linux-x86_64:nocuda (push) Successful in 18m59s
Build Packages / build:portable:linux-x86_64:cuda (push) Successful in 23m24s
Build Packages / build:portable:windows-x86_64:nocuda (push) Successful in 24m58s
Build Packages / build:jfjoch:ubuntu2204:nocuda (push) Successful in 26m59s
Build Packages / build:portable:windows-x86_64:cuda (push) Successful in 28m57s
Build Packages / HDF5 consumer tests (DIALS, XDS) (push) Successful in 30m44s
Build Packages / build:jfjoch:rocky8:nocuda (push) Successful in 32m15s
Build Packages / build:jfjoch:rocky9:nocuda (push) Successful in 33m19s
Build Packages / build:jfjoch:ubuntu2404:nocuda (push) Successful in 28m24s
Build Packages / Generate python client (push) Successful in 33s
Build Packages / build:jfjoch:rocky8:cuda-sls9 (push) Successful in 31m10s
Build Packages / build:jfjoch:rocky9:cuda-sls9 (push) Successful in 34m28s
Build Packages / build:jfjoch:ubuntu2204:cuda (push) Successful in 26m30s
Build Packages / build:jfjoch:rocky9:cuda (push) Successful in 33m44s
Build Packages / build:jfjoch:rocky8:cuda (push) Successful in 33m9s
Build Packages / build:jfjoch:ubuntu2404:cuda (push) Successful in 31m30s
Build Packages / Unit tests (push) Successful in 1h47m14s
Build Packages / Validation Battery (push) Failing after 1h21m28s

The dose rule (REDUCE_DOSE) is left out of the merge: it reads a threshold on the
relative B, and the truncated-sweep witness found it wrong on one fired set in four.
The two coverage rules are exact geometry and their forecasts matched the measured
gains on every set checked.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HVeDQsU5a8AJUdJPgWevAK
This commit is contained in:
leonarski_fandClaude Fable 5.1 committed 2026-11-12 13:46:02 +01:00
1 parent d53e9a8fdd
commit 340e02072a
3 files changed
+1 -33

No files matched your search

+1 -4
View File
@@ -482,10 +482,7 @@ comparison is local in resolution, where xtriage's is a z-score of a shell again
**Advice on the next collection** - the rotation a sweep needs and the blind region about the spindle
that a second, tilted sweep recovers are the data-collection geometry set out by Z. Dauter,
"Data-collection strategies" (1999), Acta Cryst. D55, 1703-1717 (DOI not verified here). Reading the dose
a sweep was past its optimum by from its relative B rests on B growing linearly with dose, as measured by
S. Kmetko, N. S. Husseini, M. Naides, Y. Kalinin and R. E. Thorne, "Quantifying X-ray radiation damage in
protein crystals at cryogenic temperatures" (2006), Acta Cryst. D62, 1030-1038 (DOI not verified here).
"Data-collection strategies" (1999), Acta Cryst. D55, 1703-1717 (DOI not verified here).
### Physical corrections and calibration
-9
View File
@@ -357,15 +357,6 @@ sweeps only: a joint merge of several sweeps gets none.
the first that leaves under 1 % of the reciprocal space to the signal limit blind to both sweeps. It
counts no symmetry, so it is enough for any point group, and it is the same in every direction of
tilt (kappa, chi, or a re-mount).
- **`REDUCE_DOSE`** - the sweep was damage-limited. Counting against background, with the relative B
growing linearly with dose, the merged I/sigma at resolution d grows with dose as
(1 - exp(-x)) / sqrt(x), x = dB / (2 d^2), which peaks at dB = 2.5 d^2. Advised when
`RADIATION_DAMAGE_RELATIVE_B=` reached three times that at `FITTED_RESOLUTION=`, where the same curve
has lost a fifth of the I/sigma at d; **`ADVICE_REDUCE_DOSE_FACTOR=`** is the ratio, the factor that
brings the whole sweep to the optimum (attenuation, a shorter exposure, or the dose spread over more
crystal). It is relative only: no absolute dose is modelled. Checked on the battery by merging only the
first 1/factor of each sweep: where the rule fires, that part resolves as far as the whole sweep on
most sets, while on undamaged sweeps a third of the data loses resolution.
## Several sweeps merged as one
-20
View File
@@ -3027,26 +3027,6 @@ ReportDocument BuildReportDocument(const std::string &output_prefix,
"{:.1f}% of the unique reflections, which no length of sweep about this spindle measures",
tilt, 100.0 * *result.spindle_lost_unique_fraction));
}
// Dose: the relative B grew well past the dose at which the merged I/sigma at the fitted
// resolution d is largest. Counting against background, with B growing linearly in dose,
// I/sigma accumulated to a dose goes as (1 - exp(-x)) / sqrt(x) with x = dB / (2 d^2), which
// peaks at x = 1.26, i.e. dB = 2.5 d^2. Advised at three times that, where the same curve
// has lost a fifth of I/sigma at d; the factor brings the whole sweep to the optimum.
// B linear in dose: Kmetko et al. (2006) Acta Cryst. D62, 1030-1038
const double db = result.merge_statistics.radiation_damage_delta_b;
if (fitted_resolution && std::isfinite(db)) {
const double factor = db / (2.5 * *fitted_resolution * *fitted_resolution);
if (factor >= 3.0) {
Add(s, KeyReal("ADVICE_REDUCE_DOSE_FACTOR", factor, "{:.1f}"));
const auto t = experiment.GetAttenuatorTransmission();
advice.emplace_back("REDUCE_DOSE", fmt::format(
"reduce the dose per degree {:.1f}x{}, or spread it over more crystal: the relative B "
"grew by {:.0f} A^2 over the sweep, {:.1f}x the 2.5 d^2 at which the I/sigma at the "
"{:.2f} A limit stops growing with dose",
factor, t ? fmt::format(" (transmission {:.3g} -> {:.2g})", *t, *t / factor) : "",
db, factor, *fitted_resolution));
}
}
}
// ---- anisotropy