diff --git a/tools/jfjoch_process.cpp b/tools/jfjoch_process.cpp index 873312a2..d15276ae 100644 --- a/tools/jfjoch_process.cpp +++ b/tools/jfjoch_process.cpp @@ -32,6 +32,9 @@ void print_usage(Logger &logger) { logger.Info(" -s Start image number (default: 0)"); logger.Info(" -e End image number (default: all)"); logger.Info(" -v Verbose output"); + logger.Info(" -R[num] Rotation indexing (optional: min angular range deg)"); + logger.Info(" -F Use FFT indexing algorithm (default: Auto)"); + logger.Info(" -x No least-square beam center refinement"); } int main(int argc, char **argv) { @@ -47,7 +50,10 @@ int main(int argc, char **argv) { int start_image = 0; int end_image = -1; // -1 indicates process until end bool verbose = false; - bool rotation_index = false; + bool rotation_indexing = false; + std::optional rotation_indexing_range; + bool use_fft = false; + bool refine_beam_center = true; if (argc == 1) { print_usage(logger); @@ -55,7 +61,7 @@ int main(int argc, char **argv) { } int opt; - while ((opt = getopt(argc, argv, "o:N:s:e:vR")) != -1) { + while ((opt = getopt(argc, argv, "o:N:s:e:vR::Fx")) != -1) { switch (opt) { case 'o': output_prefix = optarg; @@ -73,7 +79,14 @@ int main(int argc, char **argv) { verbose = true; break; case 'R': - rotation_index = true; + rotation_indexing = true; + if (optarg) rotation_indexing_range = atof(optarg); + break; + case 'F': + use_fft = true; + break; + case 'x': + refine_beam_center = false; break; default: print_usage(logger); @@ -117,9 +130,19 @@ int main(int argc, char **argv) { // Configure Indexing IndexingSettings indexing_settings; - indexing_settings.Algorithm(IndexingAlgorithmEnum::FFT); - indexing_settings.RotationIndexing(rotation_index); - indexing_settings.GeomRefinementAlgorithm(GeomRefinementAlgorithmEnum::BeamCenter); + if (use_fft) + indexing_settings.Algorithm(IndexingAlgorithmEnum::FFT); + else + indexing_settings.Algorithm(IndexingAlgorithmEnum::Auto); + + indexing_settings.RotationIndexing(rotation_indexing); + if (rotation_indexing_range.has_value()) + indexing_settings.RotationIndexingMinAngularRange_deg(rotation_indexing_range.value()); + + if (refine_beam_center) + indexing_settings.GeomRefinementAlgorithm(GeomRefinementAlgorithmEnum::BeamCenter); + else + indexing_settings.GeomRefinementAlgorithm(GeomRefinementAlgorithmEnum::None); experiment.ImportIndexingSettings(indexing_settings); SpotFindingSettings spot_settings;