Conversation
HatPdotS
commented
Aug 7, 2026
Owner
- Added switch to turn off caching mixin
- Switched the ADP distribution restraint from a Gaussian in log(B) to the shifted inverse-gamma distribution of Masmaliyeva & Murshudov (2019)
- Reworked outlier rejection to follow wilson criteria
- Reworked free flag generation so Friedel pairs get matching flags
- Fixed breaking bug were sigma_A estimation did not work on mps
Measured R-factor deltas, structure counts, p-values, and GPU/hardware speedups/timings are removed from docstrings and comments across the package; such results belong in the paper, not the code, where they go stale. Also drops the incorrect 'ml_noalpha is best on R_free' docstring claims. No behavioural change (docstrings/comments only). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The monomer library defines each amino acid free — ALA carries OXT and a protonated N, with carboxylate and ammonium geometry — and the in-chain form comes from the modifications the chem_link table names (DEL-OXT on the residue donating its C, DEL-HN1 or DEL-HNP on the one donating its N). Those chem_mod records were never read, so every linked residue kept its free-amino-acid restraints. The result was not merely a shifted target but an unreachable geometry: around a peptide carbonyl carbon the restrained CA-C-O, CA-C-N and O-C-N summed to 356.53° while the same carbon was restrained planar. With the modification applied they sum to exactly 360°, and likewise at the amide nitrogen (350.88° -> 360°). On deposited 1DAW the corrected targets move CA-C-O 117.15 -> 120.614°, CA-N-H 109.6 -> 118.729°, N-CA 1.488 -> 1.453 Å and C=O 1.251 -> 1.229 Å, dropping the bond RMSD from 0.0182 to 0.0131 Å and mean |z| from 1.14 to 0.83. Chain termini are left unmodified, so a real C-terminus keeps its OXT. - modifications.py parses the data_mod_* blocks and applies add/change/delete to bonds, angles, torsions, planes and chirals, matching atoms order-insensitively - the intra-residue builders take an optional per-residue key so a linked and a terminal residue of the same type draw from different components - the four duplicated copies of the residue-pairing helpers are hoisted to module level, so the modification assignment and the link builders cannot disagree about what a peptide pair is - mon_lib_list.cif is parsed once per process instead of once per build Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Every data-driven figure was last produced on 2026-08-05 by a build that had since moved on. This is a single-build regeneration: the old result directories were deleted first so no stale run could be mistaken for a current one, every benchmark re-run, and all eight plots re-rendered with their source-data CSVs and FIGURE_MEDIANS.md. Figure 2 (AF-start benchmark), conserved set n=723, PHENIX-scored. Run accounting per arm: af_initial 759/8, phenix 760/7, refmac 734/33, torchref 748/19. The PHENIX and AF-start arms came back bit-identical to the archive (734/734 and 759/759 ties), which is the null control that makes the rest of the comparison readable. The gap to REFMAC widened by +0.0019 paired R-free, of which +0.0016 is REFMAC itself moving 7.1 -> 8.0 (the AFS 7.1 install disappeared cluster-wide mid-rerun, so this was forced rather than chosen) and only +0.0003 is TorchRef 0.6.3. That split is attributable because PHENIX scoring is deterministic and unchanged. Figure 3a/3b pinned to cpu_xeon6230R, generation-matched to the A100 the quoted speedup depends on. The unchanged cctbx single-thread control reproduces the archive within ~1% on 9 of 10 structures (max 3%), so the measurement did not drift. ExtFig 1: 100-cell weight grid x 47 structures; the locked default (geometry 0.2154 / adp 0.02154) still wins -- not one of the other 99 cells beats it on paired R-free with a 95% bootstrap CI excluding zero. ExtFig 5: n=748, ml 0.3201 < ml_full 0.3211 < ml_noalpha 0.3247 < nll_beta 0.3258. figure_weight_screen.png is deleted rather than regenerated: the weight landscape is exF1/output/extended_figure1.png, and keeping a second stale copy in the figure2 directory invites citing the wrong one. Also fixes source-data corruption in figure_source_data.rounded(), which passed PDB codes through float(): '3E98' became '3e+98'. Present in the archived CSVs too. NB the plot and analysis scripts that generated these outputs are modified but are NOT in this commit, so it is not self-reproducing on its own. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ldd5qF6gWrhgHMiv7FcfW1
Commit 461d502b added the figures, source-data CSVs and FIGURE_MEDIANS.md but not the code that produces them, so it could not regenerate itself. This closes that, narrowly: given the benchmark runs, these eleven files reproduce every committed output. Nothing that *creates* runs or inputs is included -- submitters, worklist builders and the pipeline driver stay out, since the runs are deliberately not in the repository. paper/figure_source_data.py was untracked, which was the load-bearing gap: all seven plot scripts do `from figure_source_data import dump`, so without it none of them import and none of the committed CSVs can be rebuilt. The chain per figure, all of it now tracked: Figure 2, ExtFig 5 aggregate_figure_metrics.py -> plot_figure_af.py Figure 3a/3b plot_figure3a.py / plot_figure3b.py (read the results dirs) ExtFig 1 aggregate_weight_grid.py (already tracked) -> plot_exF1.py ExtFig 2 collect_exF2_data.py (already tracked) -> plot_exF2.py ExtFig 3 aggregate_crossscore.py (already tracked) -> plot_exF3.py ExtFig 4 aggregate_singlecore.py -> plot_singlecore.py FIGURE_MEDIANS.md summarize_medians.py figure_source_data.dump() refuses to write a zero-row file, so an empty panel surfaces as an error rather than a plausible-looking CSV. It also short-circuits on str, without which PDB codes went through float() and '3E98' became '3e+98' -- the corruption fixed in 461d502b. Run-derived intermediates (exF2/data, exF4/data, results.csv) are left uncommitted: they are outputs of the aggregation step above, not code, and are rebuilt from the runs. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ldd5qF6gWrhgHMiv7FcfW1
`.out` and `.err` were literal filenames, not `*.out` / `*.err`, so they matched nothing and every SLURM log in the tree showed up as untracked and committable: 10,820 of them under paper/ alone. One `git add -A` would have put all of them in the repository. Also ignores the result and snapshot directories the submitters regenerate (paper/archive, figure3_performance/archive, SF_calc_comparison/results_*, data/*/results_*), and generalises the per-structure run-output rule from paper/extended_figures/*/runs/ to paper/*/runs/, which is where scaling_benchmark and seeded_warm_corefine put theirs. Untracked files under paper/ drop from >10,820 to 360, and what remains is visible rather than buried: mostly small ancillary scripts that are genuinely uncommitted work. Nothing already tracked is affected -- the 73 files under data/fcalc/results_20260805_124020/ stay tracked, since .gitignore does not untrack. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ldd5qF6gWrhgHMiv7FcfW1
The front-page benchmark caption still described the pre-0.6.3 run while the figure above it had already been regenerated, so the two disagreed. Notably it said the restraints ran "slightly looser than PHENIX/REFMAC (bond RMSZ ~1.3)" when bond RMSZ is now 0.58, matching REFMAC and tighter than PHENIX. Every number is taken from paper/FIGURE_MEDIANS.md: R-free 0.3197 / 0.3165 / 0.3136, paired median differences +0.0006 and +0.0047, geometry RMS Z, runtime 0.77 / 0.25 / 3.09 min, n=723, 1.40-3.00 A. Each panel now states what it plots. Installation recommends a partial + sparse clone. A plain clone is ~436 MB, of which only ~50 MB is the library; the rest is paper/ history, and figure4_difference_refinement alone is 57% of the repository. The recommended command fetches ~40 MB. Measured, not estimated, and the flow was verified end to end: the sparse clone installs (pyproject.toml is present in cone mode) and `git sparse-checkout add paper` recovers the paper material without re-cloning. Also drops em-dashes from the prose, keeping them in the feature bullet and notebook table where they separate a label from its description. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ldd5qF6gWrhgHMiv7FcfW1
Forwarding dev to make sure main changes are compatible
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.