Pull Request №732 RosettaCommons/rosetta/main ← lyskov-ai/rosetta/fix/off-by-one-sewing-splice-denovo
Merge: 8ebeca78061b79e9fbbc68db33a78b2fd0361428←81e01be06812a7d6aa6e7f52a8513f988c9df389
Fix off-by-one loops + self-distance bug in SEWING/splice/de novo/RNA (split 3/4 of #707)
----------------
Merge commit message:
Fix off-by-one loops + self-distance bug (SEWING / splice / de novo / RNA)
Split from #707. Two related fixes in structural-assembly / design code.
Off-by-one in 1-indexed loops (< -> <=), last element was silently skipped:
- legacy_sewing/conformation/Assembly.cc x2 (pose_loop_anchors,
disconnected_segments -- the last segment, which by definition has no next,
was skipped, exactly the case '!has_next(i)' is meant to catch)
- pose_sewing/movers/BlockwiseAnalysisMover.cc
- pose_sewing/movers/OmnibusDisulfideAnalysisLabelerMover.cc
- splice/SampleRotamersFromPDB.cc x2 (rotamer-deduplication scan)
- splice/SpliceManager.cc (PSSM row check -- 'go over all the PSSM segments')
- stepwise/legacy/modeler/rna/StepWiseRNA_WorkingParametersSetup.cc
- rna/movers/RNAIdealizeMover.cc (CoordinateConstraint application)
- denovo_design/components/FoldGraph.cc
- fldsgn/MatchResidues.cc x2 (RMSD/superimpose atom-id map build)
- features/strand_assembly/StrandBundleFeatures.cc x2 (per-atom distance scan)
Self-distance copy/paste bug in the two pose_sewing movers:
'pose.residue(upstream_res).xyz(2).distance(pose.residue(upstream_res).xyz(2))'
is identically 0, so the '<= crit_dist_' gate was always satisfied and the
distance filter was a no-op. Corrected the second operand to downstream_res.
Note: the pose_sewing regression test output changes with this batch; the
change is intentional and warrants scientific sign-off before merge.