diff --git a/rugnux/Rugnux.cpp b/rugnux/Rugnux.cpp index 3bdbfde8b..77b0e1c14 100644 --- a/rugnux/Rugnux.cpp +++ b/rugnux/Rugnux.cpp @@ -1604,6 +1604,18 @@ ProcessResult Rugnux::RunAllPasses(RugnuxObserver *observer) { // wrong), or its CC1/2 collapses relative to pass 1. Both bounds are set where only a failure // reaches them, so a normal run - where pass 2 is a little better - keeps pass 2. // + // The completeness arm only bites when the search merge is in a fixed group (-S). De novo that + // merge is in P1 and does not count its possible reflections at all, so there is no + // completeness and CC1/2 decides alone. Counting them there was measured and not taken: it + // costs 5.2 ms, but a merge that fills its own asymmetric unit reads 27-43% of the P1 + // hemisphere over 28 rotation crystals, so the 100.5% bound is never approached and no + // decision changes - it would only put a figure into the report that reads as the dataset's + // completeness and is not one. Two cheaper stand-ins were measured on that corpus and failed: + // pass 2's search-merge OBSERVATION count never drops below 90% of pass 1's even when pass 2 + // predicts 44% fewer partials, and pass 2's search-merge COMPLETENESS relative to pass 1's + // fires only on passes that reached FINER, because this merge is never resolution-cut and the + // possible list grows with the range - it reverted two healthy crystals and rescued none. + // // The comparison is made on each pass's SEARCH merge, not on the final one. Each pass // determines its own space group, so the two final merges can be in different groups, and // completeness and CC1/2 in different groups are not the same measurement. The search merge is