jfjoch_process: default --reject-outliers 6 for rot3d (XDS-like)
Per-observation merge outlier rejection at 6 sigma is neutral-or-better across every test crystal (CC1/2 up or flat: lysoC 99.7->99.9, MyoB 98.9->99.6, EP0210 97.6->98.8, cytC 99.7->100.0, InsI2 99.2->99.7; R-meas slightly lower everywhere; ISa unchanged), and it is the lever for radiation-damaged / ice data (EP0117 reaches CC1/2 ~95% with it). Make it the rot3d default, like scale-fulls and smooth-g; --reject-outliers 0 disables it. Off for the non-rot3d partiality models, which were not benchmarked. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -21,6 +21,10 @@
|
||||
// Default rot3d per-frame scale-G smoothing range (XDS DELPHI-like), in degrees of rotation.
|
||||
constexpr double SMOOTH_G_DEFAULT_DEG = 5.0;
|
||||
|
||||
// Default rot3d per-observation merge outlier rejection (sigma from the per-reflection median, XDS-like).
|
||||
// Neutral-or-better across the test crystals; pass --reject-outliers 0 to disable.
|
||||
constexpr double REJECT_OUTLIERS_DEFAULT_NSIGMA = 6.0;
|
||||
|
||||
void print_usage() {
|
||||
std::cout << "Usage jfjoch_process {<options>} <input.h5>" << std::endl;
|
||||
std::cout << "Options:" << std::endl;
|
||||
@@ -66,7 +70,7 @@ void print_usage() {
|
||||
std::cout << " --min-partiality <num> Minimum partiality to accept reflection (default: 0.02)" << std::endl;
|
||||
std::cout << " --capture-uncertainty <num> rot3d: systematic sigma ~num*(1-captured_fraction)*I on under-captured fulls (default: 1.0 for rot3d, 0 otherwise)" << std::endl;
|
||||
std::cout << " --mosaicity <num> Diagnostic: fix the scaling mosaicity (deg) instead of the per-image seed" << std::endl;
|
||||
std::cout << " --reject-outliers <num> Per-observation merge outlier rejection, N sigma from the per-reflection median (default: off; e.g. 6, XDS/DIALS-style)" << std::endl;
|
||||
std::cout << " --reject-outliers <num> Per-observation merge outlier rejection, N sigma from the per-reflection median (default: 6 for rot3d, XDS/DIALS-style; 0 = off)" << std::endl;
|
||||
std::cout << " --reject-delta-cchalf <num> Per-crystal CC1/2-delta rejection: drop images with deltaCChalf below mean - N*stddev (default: off; e.g. 2.5)" << std::endl;
|
||||
std::cout << " --min-image-cc <num> Per-image CC limit in percent (default: no limit)" << std::endl;
|
||||
std::cout << " --scaling-iterations <num> Number of scaling iterations with no reference data (default: 3)" << std::endl;
|
||||
@@ -785,8 +789,8 @@ int main(int argc, char **argv) {
|
||||
scaling_settings.CaptureUncertaintyCoeff(capture_uncertainty_arg.value_or(combine_3d ? 1.0 : 0.0));
|
||||
scaling_settings.ForcedMosaicity(forced_mosaicity_arg);
|
||||
scaling_settings.MinCCForImage(min_image_cc / 100.0); // --min-image-cc is in percent; the setting is a fraction
|
||||
if (outlier_reject_nsigma)
|
||||
scaling_settings.OutlierRejectNsigma(*outlier_reject_nsigma);
|
||||
scaling_settings.OutlierRejectNsigma(
|
||||
outlier_reject_nsigma.value_or(combine_3d ? REJECT_OUTLIERS_DEFAULT_NSIGMA : 0.0));
|
||||
scaling_settings.FileFormat(intensity_format);
|
||||
|
||||
experiment.ImportScalingSettings(scaling_settings);
|
||||
|
||||
Reference in New Issue
Block a user