PixelRefine: profile multiplier as --profile-multiplier flag; outlier rejection default off
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 29m33s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 29m48s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 29m54s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 31m23s
Build Packages / build:rpm (rocky8) (push) Successful in 31m27s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 33m18s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 33m33s
Build Packages / XDS test (durin plugin) (push) Successful in 19m8s
Build Packages / Generate python client (push) Successful in 44s
Build Packages / Build documentation (push) Successful in 1m42s
Build Packages / Create release (push) Skipped
Build Packages / XDS test (neggia plugin) (push) Successful in 20m33s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 24m26s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 22m0s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 26m3s
Build Packages / build:rpm (rocky9) (push) Successful in 29m41s
Build Packages / DIALS test (push) Successful in 33m17s
Build Packages / Unit tests (push) Successful in 2h52m56s

(1) Promote the Term-2 profile-width multiplier from the PR_RMULT env knob to a real
BraggIntegrationSettings::profile_multiplier (default 6) + jfjoch_process
--profile-multiplier flag. Removes the last PR_* env knob; IndexAndRefine reads the
setting. (2) Flip the merge outlier rejection default to OFF (ScalingSettings
outlier_reject_nsigma 6 -> 0); it stays available via --reject-outliers <nsigma>, since
it helps the jet R-free but is dataset-dependent (drops crystal-2 CCref).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-15 13:48:11 +02:00
co-authored by Claude Opus 4.8
parent 102a2a7c81
commit 8a9d80eb71
5 changed files with 35 additions and 4 deletions
+16 -2
View File
@@ -72,7 +72,7 @@ void print_usage() {
std::cout << " -w, --wedge[=num] Refine image wedge during scaling with starting wedge value" << std::endl;
std::cout << " --scaling-high-resolution <num> High resolution limit for spot finding (default: no limit)" << std::endl;
std::cout << " --min-partiality <num> Minimum partiality to accept reflection (default: 0.02)" << std::endl;
std::cout << " --reject-outliers <num> Per-observation merge outlier rejection, N sigma from the per-reflection median (default: 6; 0 disables)" << 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 << " --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;
std::cout << " --scaling-output <txt> Output format for scaling results mtz|cif|txt (default: mtz)" << std::endl;
@@ -82,6 +82,7 @@ void print_usage() {
std::cout << " Pixel refinement (experimental, select via -r pixelrefine, needs --reference-mtz)" << std::endl;
std::cout << " --bandwidth <num> Relative X-ray bandwidth FWHM (e.g. 0.01 for 1% DMM); default from file or 0" << std::endl;
std::cout << " --integration-radius <r> Signal-box radius r1, or r1,r2,r3 (px). One value => r2=r1+2, r3=r1+4" << std::endl;
std::cout << " --profile-multiplier <num> PixelRefine: scale the measured tangential profile width R1 (default: 6; XDS-style generous aperture)" << std::endl;
}
enum {
@@ -99,7 +100,8 @@ enum {
OPT_FORCE_ROTATION_LATTICE,
OPT_BANDWIDTH,
OPT_INTEGRATION_RADIUS,
OPT_REJECT_OUTLIERS
OPT_REJECT_OUTLIERS,
OPT_PROFILE_MULTIPLIER
};
static option long_options[] = {
@@ -138,6 +140,7 @@ static option long_options[] = {
{"bandwidth", required_argument, nullptr, OPT_BANDWIDTH},
{"integration-radius", required_argument, nullptr, OPT_INTEGRATION_RADIUS},
{"reject-outliers", required_argument, nullptr, OPT_REJECT_OUTLIERS},
{"profile-multiplier", required_argument, nullptr, OPT_PROFILE_MULTIPLIER},
{nullptr, 0, nullptr, 0}
};
@@ -320,6 +323,7 @@ int main(int argc, char **argv) {
std::optional<float> d_min_scale_merge;
std::optional<std::string> integration_radius_arg; // "r1" or "r1,r2,r3"
std::optional<double> outlier_reject_nsigma; // merge per-observation outlier rejection
std::optional<float> profile_multiplier; // PixelRefine Term-2 profile-width multiplier
if (argc == 1) {
print_usage();
@@ -515,6 +519,9 @@ int main(int argc, char **argv) {
case OPT_REJECT_OUTLIERS:
outlier_reject_nsigma = std::stod(optarg);
break;
case OPT_PROFILE_MULTIPLIER:
profile_multiplier = std::stof(optarg);
break;
case OPT_MIN_IMAGE_CC:
min_image_cc = std::stod(optarg);
break;
@@ -707,6 +714,13 @@ int main(int argc, char **argv) {
logger.Info("Integration radii set to r1={:.1f} r2={:.1f} r3={:.1f}", r1, r2, r3);
}
if (profile_multiplier) {
BraggIntegrationSettings bis = experiment.GetBraggIntegrationSettings();
bis.ProfileMultiplier(*profile_multiplier);
experiment.ImportBraggIntegrationSettings(bis);
logger.Info("PixelRefine profile-width multiplier set to {:.1f}", *profile_multiplier);
}
SpotFindingSettings spot_settings;
spot_settings.enable = true;
spot_settings.indexing = true;