Skip to content

Feat: paper reproduction - #240

Draft
JemmaLDaniel wants to merge 24 commits into
mainfrom
feat-paper-scripts
Draft

Feat: paper reproduction#240
JemmaLDaniel wants to merge 24 commits into
mainfrom
feat-paper-scripts

Conversation

@JemmaLDaniel

@JemmaLDaniel JemmaLDaniel commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds a reviewer-facing path to regenerate Winnow paper figures and tables from public pins.

  • New paper_scripts/ analysis and plot helpers, documented in paper_scripts/README.md.
  • New Makefile.paper with paper-plot-* (deposit replot) vs paper-recompute-* (predict / train / other benchmarks and analyses), plus laptop vs heavy umbrellas.
  • paper dependency group (not a published extra) pins Glissade at a git SHA. The lockfile has also been updated.
  • Root Makefile clean helpers and .gitignore entries for paper_data/, paper_results/, paper_plots/.
  • Tiny package/docs touch: compute_features.yaml training_matrix_output_path: null, InstaNovo spelling in docs/cli.md.

The published winnow API is unchanged. Reproduction logic is not imported from paper_scripts/ into the package.

Test plan

  • make -f Makefile.paper paper-sync-group-paper then make -f Makefile.paper help
  • make -f Makefile.paper paper-setup (or selective downloads) then paper-check-artefacts
  • make -f Makefile.paper paper-plot-light against deposited artefacts
  • make -f Makefile.paper paper-recompute-laptop (needs Koina connection)
  • Confirm uv sync without --group paper still installs the published package only

Note for reviewers

The logic in these scripts must be merged unchanged, but they should all be readable without too much work.

@JemmaLDaniel JemmaLDaniel changed the title Feat paper scripts Feat: paper reproduction Aug 21, 2026
@github-actions

github-actions Bot commented Aug 21, 2026

Copy link
Copy Markdown

Coverage

Coverage Report
FileStmtsMissCoverMissing
__init__.py00100% 
data_types.py40100% 
calibration
   __init__.py00100% 
   calibration_features.py90100% 
   calibrator.py4963293%61, 64, 79, 84–85, 203, 302–303, 305, 308, 353–354, 495–496, 552, 616–617, 621, 626, 692–695, 1069–1070, 1221, 1225, 1251, 1255, 1264, 1281, 1286
   diagnostics.py1384468%71, 156–171, 214–215, 219, 260, 262–277, 288–294
calibration/features
   __init__.py100100% 
   base.py26196%84
   beam.py900100% 
   chimeric.py82198%213
   constants.py90100% 
   fragment_match.py78198%203
   mass_error.py68494%17, 21, 37–38
   retention_time.py206896%111, 114–115, 226, 237, 351, 354, 435
   sequence.py190100% 
   token_score.py37197%82
   utils.py261398%96, 368, 594
compat
   __init__.py00100% 
   instanovo.py10640%12, 14–15, 17, 24–25
datasets
   __init__.py00100% 
   calibration_dataset.py1441589%228, 238, 247, 260, 340, 342–343, 349–352, 354–357
   feature_dataset.py84495%21, 88, 183–184
   interfaces.py30100% 
   psm_dataset.py250100% 
datasets/data_loaders
   __init__.py60100% 
   instanovo.py1051684%90, 93, 119, 142, 168–169, 172–174, 176–177, 179, 182–184, 191
   mztab.py1793083%103, 106, 157, 161, 210–211, 223, 268, 271, 283–284, 317–318, 320–321, 323, 325, 331, 334–335, 342–344, 351, 353–356, 360, 501
   pointnovo.py90100% 
   primenovo.py1211091%121, 124, 211, 242, 254, 261–262, 373, 384, 389
   utils.py186398%25, 170, 441
   winnow.py41587%55–56, 86, 100–101
fdr
   __init__.py00100% 
   base.py581574%81, 85–86, 91, 98–99, 105, 126, 129–130, 135, 137–138, 144, 186
   database_grounded.py37197%100
   nonparametric.py26484%64, 70–71, 74
scripts
   __init__.py00100% 
   main.py47035424%23–26, 59, 61–62, 67–68, 78, 90, 95–97, 99–100, 102, 114, 119–120, 122–123, 125–126, 148, 152, 166–167, 182–183, 186, 195–196, 198, 215–216, 233, 252–253, 255–257, 259–260, 262–264, 266, 271, 296, 298–302, 323–324, 326–327, 330–331, 336, 341–342, 376–378, 380, 382, 387, 389, 393–395, 397, 399–401, 403, 405, 407–408, 411, 416, 418, 425–427, 432–435, 437–438, 440, 442, 457–458, 460–462, 464–469, 471, 485–486, 488–490, 492–493, 495–496, 498, 500–501, 508–511, 525, 527, 529–530, 532, 540–542, 544, 549, 555, 569, 571, 573–574, 576, 584–586, 588–589, 591–595, 597, 633–635, 637–640, 642, 646–649, 727, 748, 762, 780–784, 786–789, 815–817, 819, 821, 826, 828, 832–834, 836, 839, 841–844, 846, 854–856, 858, 860, 862, 865–867, 869–871, 878, 895–897, 900, 903, 908, 910, 913, 917–919, 921, 925–927, 929, 931–932, 937, 944, 952, 954, 956–957, 959, 961, 969–971, 973, 975–976, 978–979, 981–982, 984–985, 992–994, 1000, 1009–1010, 1012–1013, 1020–1022, 1024, 1026, 1031, 1033, 1036, 1040–1042, 1044–1045, 1048, 1051, 1053, 1059–1060, 1062–1063, 1067, 1074, 1082, 1084, 1086–1088, 1095–1097, 1099–1101, 1104, 1109, 1114, 1116–1117, 1119–1121, 1124, 1129, 1139, 1146, 1148, 1152, 1154–1155, 1159–1160, 1162, 1171–1174, 1176–1177, 1179, 1181, 1186, 1188–1190, 1192, 1195, 1197, 1203–1206, 1208–1209, 1211–1212, 1214–1215, 1217, 1223, 1230–1232, 1234, 1273–1274, 1315–1316, 1357–1358, 1388–1389, 1417–1418, 1448–1449, 1476–1477, 1507–1508, 1532–1533, 1557–1558
utils
   __init__.py40100% 
   config_formatter.py534024%29, 37–38, 40–42, 44, 55, 58–60, 62–63, 66–69, 72–74, 77–78, 80, 91, 102, 113, 127–128, 130–132, 145–147, 150, 153–154, 157–158, 160
   config_path.py76593%24–26, 117–118
   hydra_overrides.py12283%12, 15
   irt_calibration_config.py895735%13–14, 21–24, 32–39, 43–44, 52–55, 57–60, 62, 64–65, 77–78, 96–103, 114–117, 124–125, 140–143, 146, 148–149, 153, 155–156, 163, 165–166, 197
   koina_intensity_config.py903363%42, 68, 76, 78, 108, 111, 131, 160–172, 177–178, 182–183, 189–192, 201–202, 204–205, 209
   paths.py210100% 
   peptide.py69395%37–38, 94
   proteome.py1151289%41, 48, 68, 79, 84, 88, 119, 144–146, 174, 180
   rich_console.py70100% 
TOTAL357371080% 

Tests Skipped Failures Errors Time
671 0 💤 0 ❌ 0 🔥 50.384s ⏱️

@JemmaLDaniel JemmaLDaniel self-assigned this Aug 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant