From 957980307f0dc895ac3ecfa9c8f10502e7ab705b Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Tue, 17 Feb 2026 13:18:40 +0100 Subject: [PATCH] jfjoch_process: Add anomalous mode --- tools/jfjoch_process.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/jfjoch_process.cpp b/tools/jfjoch_process.cpp index 0f3e1090..dc2cc9ab 100644 --- a/tools/jfjoch_process.cpp +++ b/tools/jfjoch_process.cpp @@ -43,6 +43,7 @@ void print_usage(Logger &logger) { 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)"); + logger.Info(" -A Anomalous mode (don't merge Friedel pairs)"); } int main(int argc, char **argv) { @@ -63,6 +64,7 @@ int main(int argc, char **argv) { bool use_fft = false; bool refine_beam_center = true; bool run_scaling = false; + bool anomalous_mode = false; std::optional space_group_number; bool log_residual = false; @@ -77,7 +79,7 @@ int main(int argc, char **argv) { } int opt; - while ((opt = getopt(argc, argv, "o:N:s:e:vR::Fxd:S:MLm:")) != -1) { + while ((opt = getopt(argc, argv, "o:N:s:e:vR::Fxd:S:MLm:A")) != -1) { switch (opt) { case 'o': output_prefix = optarg; @@ -116,6 +118,9 @@ int main(int argc, char **argv) { case 'L': log_residual = true; break; + case 'A': + anomalous_mode = true; + break; case 'm': if (strcmp(optarg, "none") == 0) mosaicity_refinement_mode = MosaicityRefinementMode::None; @@ -419,6 +424,8 @@ int main(int argc, char **argv) { 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; + scale_opts.merge_friedel = !anomalous_mode; + switch (mosaicity_refinement_mode) { case MosaicityRefinementMode::None: scale_opts.refine_mosaicity = false;