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>