Unify still processing on one --force-still flag; scaling follows rotation indexing

Fold the two overlapping knobs into one. Rotation-vs-stills is now a single decision
(IsRotationIndexing() = goniometer && rotation-indexing) that drives BOTH indexing and
scaling/merging - there is no independent scaling-model switch:

- ScalingSettings: drop combine_3d and force_still_processing (and Combine3D/GetCombine3D,
  ForceStillProcessing/GetForceStillProcessing). The scaling stage reads
  experiment.IsRotationIndexing() instead - rotation indexing implies RotationScaleMerge,
  no rotation indexing implies per-image ScaleOnTheFly.
- jfjoch_process: merge --process-as-stills and --force-still-processing into one
  --force-still (turns rotation processing off entirely: still indexing + still scaling).
  The rotation-specific scaling defaults (scale-fulls, smooth-G, capture uncertainty,
  outlier rejection) now key on rotation_indexing.
- jfjoch_scale: replace -P fixed|rot3d with --force-still; rotation is auto-detected from the
  goniometer (RotationIndexing set accordingly) so it matches jfjoch_process.
- jfjoch_viewer: the "process as stills" toggle already sets RotationIndexing; drop the now
  redundant Combine3D/ForceStillProcessing calls.

Rotation path unchanged (lyso 16.4/99.6%/87.3%); --force-still routes to ScaleOnTheFly; the
-R + --force-still conflict still errors. CUDA + non-CUDA + viewer all build.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-03 12:20:45 +02:00
co-authored by Claude Opus 4.8
parent b4d3d40cd8
commit 7d5fb15413
7 changed files with 41 additions and 90 deletions
+3 -2
View File
@@ -111,13 +111,14 @@ std::string JFJochProcessCommandLine(const ProcessConfig &config,
args.emplace_back("--single-pass-rotation");
if (!config.reuse_rotation_spots)
args.emplace_back("--redo-rotation-spots");
} else if (experiment.GetGoniometer().has_value()) {
// rotation dataset processed as stills -> the user overrode the default with --force-still
args.emplace_back("--force-still");
}
if (config.run_scaling) {
args.emplace_back("-M");
const auto sc = experiment.GetScalingSettings();
if (sc.GetForceStillProcessing())
args.emplace_back("--force-still-processing");
if (!sc.GetMergeFriedel())
args.emplace_back("-A");
if (sc.GetRefineB())