jfjoch_process: More options
All checks were successful
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 12m4s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 13m16s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 13m29s
Build Packages / Generate python client (push) Successful in 17s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 13m54s
Build Packages / Create release (push) Has been skipped
Build Packages / build:rpm (rocky8) (push) Successful in 14m6s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 14m9s
Build Packages / Build documentation (push) Successful in 45s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 14m20s
Build Packages / build:rpm (rocky9) (push) Successful in 15m14s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 7m14s
Build Packages / Unit tests (push) Successful in 55m20s

This commit is contained in:
2026-02-11 16:26:36 +01:00
parent 217e86c23b
commit de8e8d3a64

View File

@@ -40,6 +40,8 @@ void print_usage(Logger &logger) {
logger.Info(" -d<num> High resolution limit for spot finding (default: 1.5)");
logger.Info(" -S<num> Space group number");
logger.Info(" -M Scale and merge (refine mosaicity) and write scaled.hkl + image.dat");
logger.Info(" -L Use log-scaling residual");
logger.Info(" -m Mosaicity refinement none|fixed|image (default: image)");
}
int main(int argc, char **argv) {
@@ -62,6 +64,10 @@ int main(int argc, char **argv) {
bool run_scaling = false;
std::optional<int> space_group_number;
bool log_residual = false;
enum class MosaicityRefinementMode { None, Fixed, Image };
MosaicityRefinementMode mosaicity_refinement_mode = MosaicityRefinementMode::Image;
float d_high = 1.5;
if (argc == 1) {
@@ -106,6 +112,22 @@ int main(int argc, char **argv) {
case 'M':
run_scaling = true;
break;
case 'L':
log_residual = true;
break;
case 'm':
if (strcmp(optarg, "none") == 0)
mosaicity_refinement_mode = MosaicityRefinementMode::None;
else if (strcmp(optarg, "fixed") == 0)
mosaicity_refinement_mode = MosaicityRefinementMode::Fixed;
else if (strcmp(optarg, "image") == 0)
mosaicity_refinement_mode = MosaicityRefinementMode::Image;
else {
logger.Error("Invalid mosaicity refinement mode: {}", optarg);
print_usage(logger);
exit(EXIT_FAILURE);
}
break;
default:
print_usage(logger);
exit(EXIT_FAILURE);
@@ -395,7 +417,20 @@ int main(int argc, char **argv) {
scale_opts.refine_mosaicity = true;
scale_opts.max_num_iterations = 500;
scale_opts.max_solver_time_s = 240.0; // generous cutoff for now
scale_opts.log_scaling_residual = log_residual;
switch (mosaicity_refinement_mode) {
case MosaicityRefinementMode::None:
scale_opts.refine_mosaicity = false;
break;
case MosaicityRefinementMode::Fixed:
scale_opts.refine_mosaicity = true;
scale_opts.per_image_mosaicity = false;
break;
case MosaicityRefinementMode::Image:
scale_opts.refine_mosaicity = true;
scale_opts.per_image_mosaicity = true;
break;
}
if (space_group)
scale_opts.space_group = *space_group;
else