orfdata 0.42.3__tar.gz → 0.42.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (403) hide show
  1. {orfdata-0.42.3/orfdata.egg-info → orfdata-0.42.4}/PKG-INFO +1 -1
  2. {orfdata-0.42.3 → orfdata-0.42.4}/docs/catalogs.md +58 -61
  3. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/catalog.py +48 -7
  4. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/catalog_manifest.py +24 -1
  5. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/catalogs.py +9 -3
  6. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/cli.py +2 -2
  7. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/catalogs.json +146 -1
  8. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/liftover.py +5 -1
  9. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/proteome.py +3 -0
  10. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/riborf.py +10 -2
  11. orfdata-0.42.4/orfdata/sources/riborf_native.py +430 -0
  12. orfdata-0.42.4/orfdata/version.py +1 -0
  13. {orfdata-0.42.3 → orfdata-0.42.4/orfdata.egg-info}/PKG-INFO +1 -1
  14. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata.egg-info/SOURCES.txt +6 -1
  15. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/riborf/README.md +19 -17
  16. orfdata-0.42.4/tests/data/riborf/gencodeM25.gtf.gz +0 -0
  17. orfdata-0.42.4/tests/data/riborf/gencodeM25.rna.fa.gz +0 -0
  18. orfdata-0.42.4/tests/data/riborf/v3-manifest.json +131 -0
  19. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_catalog_registry.py +1 -0
  20. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_data_resources.py +1 -1
  21. orfdata-0.42.4/tests/test_riborf.py +489 -0
  22. orfdata-0.42.4/tools/verify_riborf_native.py +161 -0
  23. orfdata-0.42.3/orfdata/version.py +0 -1
  24. orfdata-0.42.3/tests/test_riborf.py +0 -135
  25. {orfdata-0.42.3 → orfdata-0.42.4}/LICENSE +0 -0
  26. {orfdata-0.42.3 → orfdata-0.42.4}/MANIFEST.in +0 -0
  27. {orfdata-0.42.3 → orfdata-0.42.4}/README.md +0 -0
  28. {orfdata-0.42.3 → orfdata-0.42.4}/deploy.sh +0 -0
  29. {orfdata-0.42.3 → orfdata-0.42.4}/docs/copy-yeast.md +0 -0
  30. {orfdata-0.42.3 → orfdata-0.42.4}/docs/coverage.md +0 -0
  31. {orfdata-0.42.3 → orfdata-0.42.4}/docs/dog-data-sources.md +0 -0
  32. {orfdata-0.42.3 → orfdata-0.42.4}/docs/dog-peptides.md +0 -0
  33. {orfdata-0.42.3 → orfdata-0.42.4}/docs/downloads.md +0 -0
  34. {orfdata-0.42.3 → orfdata-0.42.4}/docs/downstream.md +0 -0
  35. {orfdata-0.42.3 → orfdata-0.42.4}/docs/examples.md +0 -0
  36. {orfdata-0.42.3 → orfdata-0.42.4}/docs/human-tissue.md +0 -0
  37. {orfdata-0.42.3 → orfdata-0.42.4}/docs/index.md +0 -0
  38. {orfdata-0.42.3 → orfdata-0.42.4}/docs/ingolia-yeast.md +0 -0
  39. {orfdata-0.42.3 → orfdata-0.42.4}/docs/mammary-stroma.md +0 -0
  40. {orfdata-0.42.3 → orfdata-0.42.4}/docs/measurements.md +0 -0
  41. {orfdata-0.42.3 → orfdata-0.42.4}/docs/pairing.md +0 -0
  42. {orfdata-0.42.3 → orfdata-0.42.4}/docs/pfizer-peptides.md +0 -0
  43. {orfdata-0.42.3 → orfdata-0.42.4}/docs/pfizer-protein.md +0 -0
  44. {orfdata-0.42.3 → orfdata-0.42.4}/docs/pfizer-rna.md +0 -0
  45. {orfdata-0.42.3 → orfdata-0.42.4}/docs/proteome.md +0 -0
  46. {orfdata-0.42.3 → orfdata-0.42.4}/docs/reference.md +0 -0
  47. {orfdata-0.42.3 → orfdata-0.42.4}/docs/search-references.md +0 -0
  48. {orfdata-0.42.3 → orfdata-0.42.4}/docs/source-references.md +0 -0
  49. {orfdata-0.42.3 → orfdata-0.42.4}/docs/species.md +0 -0
  50. {orfdata-0.42.3 → orfdata-0.42.4}/docs/storage.md +0 -0
  51. {orfdata-0.42.3 → orfdata-0.42.4}/docs/stylesheets/docs.css +0 -0
  52. {orfdata-0.42.3 → orfdata-0.42.4}/docs/viral.md +0 -0
  53. {orfdata-0.42.3 → orfdata-0.42.4}/docs.sh +0 -0
  54. {orfdata-0.42.3 → orfdata-0.42.4}/lint.sh +0 -0
  55. {orfdata-0.42.3 → orfdata-0.42.4}/mkdocs.yml +0 -0
  56. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/__init__.py +0 -0
  57. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/_pinned_genome.py +0 -0
  58. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/_structure.py +0 -0
  59. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/artifact_archives.py +0 -0
  60. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/build.py +0 -0
  61. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/catalog_cli.py +0 -0
  62. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/cli_output.py +0 -0
  63. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/chains.json +0 -0
  64. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/datasets.json +0 -0
  65. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/genomes.json +0 -0
  66. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/ires/rfam-15.1-human-ires.json +0 -0
  67. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/orf-evidence/AUTHOR-LICENSE.txt +0 -0
  68. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/orf-evidence/NOTICE.txt +0 -0
  69. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/orf-evidence/catalog.json.gz +0 -0
  70. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/orf-evidence/manifest.json +0 -0
  71. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/uorf-evidence/AUTHOR-LICENSE.txt +0 -0
  72. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/uorf-evidence/NOTICE.txt +0 -0
  73. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/uorf-evidence/catalog.json.gz +0 -0
  74. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/uorf-evidence/manifest.json +0 -0
  75. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/viral/NOTICE.md +0 -0
  76. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/viral/gdc-grch38-d1-vd1-coverage.tsv +0 -0
  77. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/viral/gdc-grch38-d1-vd1-genbank.tsv +0 -0
  78. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/viral/gdc-grch38-d1-vd1-pave.tsv +0 -0
  79. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/viral/hpv16-refseq-CDS.json.gz +0 -0
  80. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data/viral/subsets.yaml +0 -0
  81. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/data_resources.py +0 -0
  82. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/dataset.py +0 -0
  83. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/dataset_cli.py +0 -0
  84. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/datasets.py +0 -0
  85. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/download_cli.py +0 -0
  86. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/downloads.py +0 -0
  87. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/evidence.py +0 -0
  88. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/evidence_summary.py +0 -0
  89. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/fasta.py +0 -0
  90. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/genbank.py +0 -0
  91. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/genomes.py +0 -0
  92. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/genomes_cli.py +0 -0
  93. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/gtf.py +0 -0
  94. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/initiation_context.py +0 -0
  95. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/install.py +0 -0
  96. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/liftover_cli.py +0 -0
  97. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/measurements.py +0 -0
  98. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/model.py +0 -0
  99. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/net.py +0 -0
  100. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/numeric_vector.py +0 -0
  101. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/pairing.py +0 -0
  102. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/proteome_cli.py +0 -0
  103. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/record_sources.py +0 -0
  104. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/reference.py +0 -0
  105. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/reference_ledger.py +0 -0
  106. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/reference_mapping.py +0 -0
  107. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/reference_table.py +0 -0
  108. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/refseq.py +0 -0
  109. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/rna.py +0 -0
  110. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/search_reference.py +0 -0
  111. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sequence.py +0 -0
  112. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/__init__.py +0 -0
  113. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/copy.py +0 -0
  114. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/ingolia.py +0 -0
  115. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/kaabinejadian.py +0 -0
  116. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/mammary_stroma.py +0 -0
  117. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/ncorf_mammals.py +0 -0
  118. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/openprot.py +0 -0
  119. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/peptideatlas.py +0 -0
  120. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/pfizer.py +0 -0
  121. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/pfizer_attribution.py +0 -0
  122. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/pfizer_dataset.py +0 -0
  123. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/pfizer_definitions.py +0 -0
  124. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/pfizer_evidence.py +0 -0
  125. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/pfizer_lineage.py +0 -0
  126. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/pfizer_native.py +0 -0
  127. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/pfizer_queries.py +0 -0
  128. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/pfizer_rna.py +0 -0
  129. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/pfizer_vendor.py +0 -0
  130. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/sources/wang.py +0 -0
  131. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/viral.py +0 -0
  132. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/viral_annotation.py +0 -0
  133. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/viral_cli.py +0 -0
  134. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/viral_coverage.py +0 -0
  135. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/viral_panel.py +0 -0
  136. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/viral_registry.py +0 -0
  137. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata/viral_subsets.py +0 -0
  138. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata.egg-info/dependency_links.txt +0 -0
  139. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata.egg-info/entry_points.txt +0 -0
  140. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata.egg-info/requires.txt +0 -0
  141. {orfdata-0.42.3 → orfdata-0.42.4}/orfdata.egg-info/top_level.txt +0 -0
  142. {orfdata-0.42.3 → orfdata-0.42.4}/pyproject.toml +0 -0
  143. {orfdata-0.42.3 → orfdata-0.42.4}/setup.cfg +0 -0
  144. {orfdata-0.42.3 → orfdata-0.42.4}/test.sh +0 -0
  145. {orfdata-0.42.3 → orfdata-0.42.4}/tests/conftest.py +0 -0
  146. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/aggregate_evidence.json +0 -0
  147. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/copy/GSM1905474.soft +0 -0
  148. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/copy/GSM1905474_KL9_fpkm.txt.gz +0 -0
  149. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/copy/GSM1905476.soft +0 -0
  150. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/copy/GSM1905476_KL10_fpkm.txt.gz +0 -0
  151. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/copy/GSM1905478.soft +0 -0
  152. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/copy/GSM1905478_KL11_fpkm.txt.gz +0 -0
  153. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/copy/GSM1905479.soft +0 -0
  154. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/copy/GSM1905479_KL12_fpkm.txt.gz +0 -0
  155. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/copy/NOTICE.md +0 -0
  156. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/copy/expected.json +0 -0
  157. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/copy/geo-series.soft +0 -0
  158. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/copy/manifest.json +0 -0
  159. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/copy/methods.pdf +0 -0
  160. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/copy/paper.xml +0 -0
  161. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/copy/pmc-metadata.json +0 -0
  162. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/copy/qconcat.fasta +0 -0
  163. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/copy/workbook.xlsx +0 -0
  164. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/GSM346111.metadata.txt +0 -0
  165. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/GSM346111.quant.txt.gz +0 -0
  166. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/GSM346114.metadata.txt +0 -0
  167. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/GSM346114.quant.txt.gz +0 -0
  168. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/GSM346115.metadata.txt +0 -0
  169. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/GSM346115.quant.txt.gz +0 -0
  170. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/GSM346116.metadata.txt +0 -0
  171. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/GSM346116.quant.txt.gz +0 -0
  172. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/GSM346117.metadata.txt +0 -0
  173. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/GSM346117.quant.txt.gz +0 -0
  174. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/GSM346118.metadata.txt +0 -0
  175. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/GSM346118.quant.txt.gz +0 -0
  176. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/GSM346120.metadata.txt +0 -0
  177. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/GSM346120.quant.txt.gz +0 -0
  178. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/GSM346122.metadata.txt +0 -0
  179. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/GSM346122.quant.txt.gz +0 -0
  180. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/NOTICE.md +0 -0
  181. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/expected.json +0 -0
  182. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/manifest.json +0 -0
  183. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ingolia/readMe.txt.gz +0 -0
  184. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/kaabinejadian/README.md +0 -0
  185. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/kaabinejadian/Results.zip +0 -0
  186. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/kaabinejadian/manifest-v1.json +0 -0
  187. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/kaabinejadian/manifest.json +0 -0
  188. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/kaabinejadian/sdrf.tsv +0 -0
  189. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/mammary_stroma/NOTICE.md +0 -0
  190. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/mammary_stroma/geo.soft.gz +0 -0
  191. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/mammary_stroma/manifest.json +0 -0
  192. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/mammary_stroma/paper.xml +0 -0
  193. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/mammary_stroma/peptides.txt +0 -0
  194. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/mammary_stroma/project.json +0 -0
  195. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/mammary_stroma/proteinGroups.txt +0 -0
  196. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/mammary_stroma/rna.csv.gz +0 -0
  197. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ncorf_mammals/README.md +0 -0
  198. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ncorf_mammals/S3.xlsx +0 -0
  199. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ncorf_mammals/ensembl107.cdna.fa.gz +0 -0
  200. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ncorf_mammals/ensembl107.gtf.gz +0 -0
  201. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ncorf_mammals/human-ensembl107.gtf.gz +0 -0
  202. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ncorf_mammals/human.bed +0 -0
  203. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ncorf_mammals/human.pep.fa +0 -0
  204. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ncorf_mammals/mouse.bed +0 -0
  205. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/ncorf_mammals/mouse.pep.fa +0 -0
  206. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/openprot/README.md +0 -0
  207. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/openprot/ensembl106.cdna.fa.gz +0 -0
  208. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/openprot/ensembl106.gtf.gz +0 -0
  209. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/openprot/mouse-openprot-2_2-altprots+isoforms-min_2_pep-GRCm39.106.bed.zip +0 -0
  210. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/openprot/mouse-openprot-2_2-altprots+isoforms-min_2_pep-GRCm39.106.fasta.zip +0 -0
  211. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/openprot/mouse-openprot-2_2-altprots+isoforms-min_2_pep-GRCm39.106.tsv.zip +0 -0
  212. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/peptideatlas/README.md +0 -0
  213. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/peptideatlas/atlas_build.tsv.zip +0 -0
  214. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/peptideatlas/ensembl.pep.fa.gz +0 -0
  215. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/peptideatlas/manifest.json +0 -0
  216. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/NOTICE.md +0 -0
  217. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/dog/expected.json +0 -0
  218. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/dog/manifest.json +0 -0
  219. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/dog/protein.tsv +0 -0
  220. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/dog/search.fasta +0 -0
  221. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/human/expected.json +0 -0
  222. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/human/manifest.json +0 -0
  223. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/human/protein.tsv +0 -0
  224. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/human/search.fasta +0 -0
  225. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/mouse/expected.json +0 -0
  226. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/mouse/manifest.json +0 -0
  227. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/mouse/protein.tsv +0 -0
  228. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/mouse/search.fasta +0 -0
  229. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/vendor/NOTICE.md +0 -0
  230. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/vendor/acquisition-missingness.json +0 -0
  231. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/vendor/definitions.json +0 -0
  232. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/vendor/dog-panel.json +0 -0
  233. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/vendor/membership-search-slice.fasta +0 -0
  234. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/vendor/memberships.json +0 -0
  235. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/vendor/native.json +0 -0
  236. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/vendor/parent-status-search-slice.fasta +0 -0
  237. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/vendor/parent-status.json +0 -0
  238. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/vendor/psm-parent-sets-search-slice.fasta +0 -0
  239. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/vendor/psm-parent-sets.json +0 -0
  240. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/vendor/search-slice.fasta +0 -0
  241. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/vendor/search-slice.json +0 -0
  242. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/vendor/study-slice.xml +0 -0
  243. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer/vendor/summary-samples.json +0 -0
  244. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer_rna/GSE325522_family.soft.gz +0 -0
  245. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer_rna/GSE325523_family.soft.gz +0 -0
  246. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer_rna/GSE325525_family.soft.gz +0 -0
  247. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer_rna/NOTICE.md +0 -0
  248. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer_rna/counts.csv.gz +0 -0
  249. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer_rna/dog-annotation.gtf.gz +0 -0
  250. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer_rna/dog-expected.json +0 -0
  251. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer_rna/dog-manifest.json +0 -0
  252. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer_rna/mouse-annotation.gtf.gz +0 -0
  253. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer_rna/mouse-expected.json +0 -0
  254. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer_rna/mouse-manifest.json +0 -0
  255. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/pfizer_rna/samples.xlsx +0 -0
  256. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/references/README.md +0 -0
  257. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/references/canis_lupus_familiaris.json +0 -0
  258. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/references/context-keys-v0.4.json +0 -0
  259. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/references/ensembl115.json +0 -0
  260. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/references/homo_sapiens.json +0 -0
  261. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/references/mitochondrial.json +0 -0
  262. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/references/mus_musculus.json +0 -0
  263. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/references/saccharomyces_cerevisiae.json +0 -0
  264. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/references/transcript_orf_v1_0.42.0.json +0 -0
  265. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/references/uniprot_literature.json +0 -0
  266. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/regions/NOTICE.md +0 -0
  267. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/regions/ingolia.json +0 -0
  268. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/riborf/SD3.xlsx +0 -0
  269. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/riborf/ensembl107.cdna.fa.gz +0 -0
  270. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/riborf/ensembl107.gtf.gz +0 -0
  271. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/riborf/ensembl107.ncrna.fa.gz +0 -0
  272. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/riborf/human-ensembl105.cdna.fa.gz +0 -0
  273. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/riborf/human-ensembl105.gtf.gz +0 -0
  274. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/riborf/human-ensembl105.ncrna.fa.gz +0 -0
  275. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/riborf/worm-ensembl105.cdna.fa.gz +0 -0
  276. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/riborf/worm-ensembl105.gtf.gz +0 -0
  277. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/riborf/worm-ensembl105.ncrna.fa.gz +0 -0
  278. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/riborf/yeast-ensembl115.cdna.fa.gz +0 -0
  279. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/riborf/yeast-ensembl115.dna.fa.gz +0 -0
  280. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/riborf/yeast-ensembl115.gtf.gz +0 -0
  281. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/riborf/zebrafish-ensembl115.cdna.fa.gz +0 -0
  282. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/riborf/zebrafish-ensembl115.gtf.gz +0 -0
  283. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/riborf/zebrafish-ensembl115.ncrna.fa.gz +0 -0
  284. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/search_reference/NOTICE.md +0 -0
  285. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/search_reference/dog.fasta +0 -0
  286. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/search_reference/ensembl83-expected.json +0 -0
  287. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/search_reference/ensembl83-human.fasta.gz +0 -0
  288. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/search_reference/expected.json +0 -0
  289. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/storage/README.md +0 -0
  290. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/storage/generate.py +0 -0
  291. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/storage/v1.json +0 -0
  292. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/storage/v1.sqlite +0 -0
  293. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/storage/v2.json +0 -0
  294. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/storage/v2.sqlite +0 -0
  295. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/storage/v3.json +0 -0
  296. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/storage/v3.sqlite +0 -0
  297. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/storage/v4.json +0 -0
  298. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/storage/v4.sqlite +0 -0
  299. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/viral/GRCh83.d1.vd1_virus_decoy.txt.gz +0 -0
  300. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/viral/NC_001526.4.gb.gz +0 -0
  301. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/viral/genbank/HBV__X04615.1.gb.gz +0 -0
  302. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/viral/genbank/HPV16__K02718.1.gb.gz +0 -0
  303. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/viral/genbank/HPV35__X74477.1.gb.gz +0 -0
  304. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/viral/genbank/HPV51__M62877.1.gb.gz +0 -0
  305. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/viral/genbank/HPV56__X74483.1.gb.gz +0 -0
  306. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/wang/NOTICE.md +0 -0
  307. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/wang/annotation.gtf.gz +0 -0
  308. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/wang/copies.zip +0 -0
  309. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/wang/expected.json +0 -0
  310. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/wang/manifest.json +0 -0
  311. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/wang/protein.zip +0 -0
  312. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/wang/rna.zip +0 -0
  313. {orfdata-0.42.3 → orfdata-0.42.4}/tests/data/wang/search.fasta.gz +0 -0
  314. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_artifact_archives.py +0 -0
  315. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_copy.py +0 -0
  316. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_cross_reference_pairing.py +0 -0
  317. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_dog_export_read_ahead.py +0 -0
  318. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_dog_ncorf_search.py +0 -0
  319. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_dog_peptides.py +0 -0
  320. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_downloads.py +0 -0
  321. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_ensembl_search_reference.py +0 -0
  322. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_evidence_rules.py +0 -0
  323. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_evidence_summary.py +0 -0
  324. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_export_sqlite_rows.py +0 -0
  325. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_extraction_budget.py +0 -0
  326. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_ftps_sqlite.py +0 -0
  327. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_genbank.py +0 -0
  328. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_genbank_equivalence.py +0 -0
  329. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_genetic_codes.py +0 -0
  330. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_genomes.py +0 -0
  331. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_ingolia.py +0 -0
  332. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_initiation_context.py +0 -0
  333. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_liftover.py +0 -0
  334. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_local_build_queries.py +0 -0
  335. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_mammary_stroma.py +0 -0
  336. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_measurements.py +0 -0
  337. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_merge_catalogs.py +0 -0
  338. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_more_species.py +0 -0
  339. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_ncorf_mammals.py +0 -0
  340. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_numeric_vector.py +0 -0
  341. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_openprot.py +0 -0
  342. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_orf_cases.py +0 -0
  343. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_orf_gtf.py +0 -0
  344. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_package_dog_dataset.py +0 -0
  345. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_package_sqlite_archive.py +0 -0
  346. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_paired_selectors.py +0 -0
  347. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_pairing.py +0 -0
  348. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_pfizer.py +0 -0
  349. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_pfizer_attribution.py +0 -0
  350. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_pfizer_dataset.py +0 -0
  351. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_pfizer_definitions.py +0 -0
  352. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_pfizer_evidence.py +0 -0
  353. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_pfizer_lineage.py +0 -0
  354. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_pfizer_native.py +0 -0
  355. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_pfizer_rna.py +0 -0
  356. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_pfizer_vendor.py +0 -0
  357. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_protein_set.py +0 -0
  358. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_proteome.py +0 -0
  359. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_proteome_external.py +0 -0
  360. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_proteome_fasta_tokens.py +0 -0
  361. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_proteome_producer_graph.py +0 -0
  362. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_reference_context.py +0 -0
  363. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_reference_ledger.py +0 -0
  364. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_reference_mapping.py +0 -0
  365. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_reference_orf.py +0 -0
  366. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_reference_table.py +0 -0
  367. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_refseq.py +0 -0
  368. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_region_targets.py +0 -0
  369. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_search_reference.py +0 -0
  370. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_selectors.py +0 -0
  371. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_storage.py +0 -0
  372. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_transcript_orf_serialization.py +0 -0
  373. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_uorf_catalog.py +0 -0
  374. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_verify_dog_dataset.py +0 -0
  375. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_viral.py +0 -0
  376. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_viral_bundle.py +0 -0
  377. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_viral_cli.py +0 -0
  378. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_viral_collections.py +0 -0
  379. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_viral_completeness.py +0 -0
  380. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_viral_coverage.py +0 -0
  381. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_viral_initiation.py +0 -0
  382. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_viral_origin_join.py +0 -0
  383. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_viral_sources.py +0 -0
  384. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_viral_subsets.py +0 -0
  385. {orfdata-0.42.3 → orfdata-0.42.4}/tests/test_wang.py +0 -0
  386. {orfdata-0.42.3 → orfdata-0.42.4}/tools/README-dog-results.md +0 -0
  387. {orfdata-0.42.3 → orfdata-0.42.4}/tools/__init__.py +0 -0
  388. {orfdata-0.42.3 → orfdata-0.42.4}/tools/build_dog_dataset.py +0 -0
  389. {orfdata-0.42.3 → orfdata-0.42.4}/tools/build_gdc_viral_coverage.py +0 -0
  390. {orfdata-0.42.3 → orfdata-0.42.4}/tools/build_hpv16_cds.py +0 -0
  391. {orfdata-0.42.3 → orfdata-0.42.4}/tools/build_reference_ledger.py +0 -0
  392. {orfdata-0.42.3 → orfdata-0.42.4}/tools/dog_result_plan.json +0 -0
  393. {orfdata-0.42.3 → orfdata-0.42.4}/tools/export_dog_lineage.py +0 -0
  394. {orfdata-0.42.3 → orfdata-0.42.4}/tools/export_dog_results.py +0 -0
  395. {orfdata-0.42.3 → orfdata-0.42.4}/tools/export_sqlite_rows.py +0 -0
  396. {orfdata-0.42.3 → orfdata-0.42.4}/tools/extraction_budget.py +0 -0
  397. {orfdata-0.42.3 → orfdata-0.42.4}/tools/ftps_sqlite.py +0 -0
  398. {orfdata-0.42.3 → orfdata-0.42.4}/tools/inspect_dog_results.py +0 -0
  399. {orfdata-0.42.3 → orfdata-0.42.4}/tools/normalize_dog_evidence.py +0 -0
  400. {orfdata-0.42.3 → orfdata-0.42.4}/tools/package_dog_dataset.py +0 -0
  401. {orfdata-0.42.3 → orfdata-0.42.4}/tools/package_sqlite_archive.py +0 -0
  402. {orfdata-0.42.3 → orfdata-0.42.4}/tools/verify_dog_dataset.py +0 -0
  403. {orfdata-0.42.3 → orfdata-0.42.4}/tools/verify_mammary_stroma.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orfdata
3
- Version: 0.42.3
3
+ Version: 0.42.4
4
4
  Summary: Reference proteomes with evidence-backed noncanonical ORFs on PyEnsembl genomes
5
5
  Author: OpenVax
6
6
  License-Expression: Apache-2.0
@@ -82,29 +82,19 @@ pip install "orfdata"
82
82
  orfdata setup --species mouse --accept-terms # Three catalogues and the chains
83
83
  ```
84
84
 
85
- `orfdata setup` downloads the published Chang et al. catalogue, builds the other
86
- registered mouse catalogues from their pinned sources, and downloads the chain files (`--accept-terms` for UCSC's non-commercial
85
+ `orfdata setup` downloads the published Chang et al. and RibORF catalogues, builds OpenProt from their pinned sources, and downloads the chain files (`--accept-terms` for UCSC's non-commercial
87
86
  GRCm38/GRCm39 chains). It prints what it did with each: built, downloaded,
88
87
  already installed, repaired or skipped. If one fails, the rest are still
89
88
  installed and it exits with status 1, naming each failure; in Python,
90
89
  `install_species` raises `InstallError`, whose `result` holds the same
91
- report. `load_catalog(species="mouse")` then merges the three,
92
- in this order, into 60,707 ORFs: 2,976 MS-supported OpenProt ORFs, 16,484
93
- Ribo-seq ORFs of Chang et al. and 51,991 of Yang et al. 10,448 of Chang's and
94
- Yang's ORFs are the same ORF (28 of them also in OpenProt), and 296 OpenProt
95
- ORFs have Ribo-seq support from one or both, 242 from Yang et al. alone. On
96
- Ensembl 115 (GRCm39):
97
-
98
- | Evidence | Selected | Added to the proteome |
99
- | --- | ---: | ---: |
100
- | `"ms"` (default) | 2,976 | 2,854 |
101
- | `RiboSeq()` | 58,109 | 57,992 |
102
- | `RiboSeq() & MS()` | 378 | 371 |
103
- | `None` | 60,707 | 60,475 |
104
-
105
- Loading the merged catalogue takes about 10 seconds and 1.1 GB of memory, once
106
- per process, whichever evidence is selected. On GRCm38 and NCBIM37 all three
107
- are [lifted automatically](#every-assembly-of-a-species).
90
+ report. `load_catalog(species="mouse")` merges OpenProt, Chang et al. and
91
+ Yang et al. in that order. Current inputs contain 2,976 MS-supported OpenProt
92
+ ORFs, 16,484 Chang et al. ORFs and 51,831 validated Yang et al. target placements.
93
+ Overlapping source models merge by coding path and protein while keeping their
94
+ original evidence. Merged counts and target-genome placement counts depend on
95
+ these versions; inspect the resulting catalogue and proteome layer receipts.
96
+ On GRCm38 and NCBIM37 the catalogues are
97
+ [lifted automatically](#every-assembly-of-a-species).
108
98
 
109
99
  ### Mouse Ribo-seq ORFs (Chang et al.)
110
100
 
@@ -143,48 +133,55 @@ ATG, CTG, GTG or TTG. Its types are uORF (8,294), lncORF (3,576), uoORF
143
133
 
144
134
  ### Mouse RibORF ORFs (Yang et al.)
145
135
 
146
- `riborf-mouse` holds the mouse ORFs that RibORF 2.0 identified as translated in
147
- the Ribo-seq data of Yang et al. (Nat Commun 2024,
148
- [doi:10.1038/s41467-024-46240-9](https://doi.org/10.1038/s41467-024-46240-9);
149
- 224 samples in 26 GEO series): uORF (26,052), lncORF (8,149), iORF (6,155),
150
- dORF (5,174), uoORF (3,157), N-terminal truncation (2,059), doORF (670) and
151
- extension (575). The source's ouORF, odORF and
152
- noncoding types take Chang et al.'s names, so `--biotype uoORF` finds both
153
- sources' overlapping uORFs. Annotated CDSs, likely sequencing errors,
154
- and stop-codon readthrough are not imported. Release 2 retains 11,902 valid
155
- ORFs shorter than five residues. Release 1, which applied a five-residue import
156
- floor, remains available explicitly as `--version 1`.
157
-
158
- - **Placement.** The source gives mm10 / GENCODE vM25 transcript coordinates
159
- (a 1-based start, an exclusive end) and no proteins. Rather than lift mm10
160
- through a restricted chain, each ORF is placed on the same transcript in
161
- Ensembl 107 GRCm39 and translated from that transcript's sequence. Of the
162
- 54,128 non-skipped source rows, 51,991 resolve. Listed as unresolved, with the
163
- reason: 1,642 rows on transcripts that changed length since GENCODE
164
- vM25, 399 on transcripts that Ensembl 107 has in its GTF but in
165
- neither FASTA, 95 on transcripts that are gone, and one whose
166
- transcript's sequence changed at the same length. Placing through the
167
- transcript gives the same coding path as lifting the source's mm10 blocks
168
- through UCSC's chain for all but 2, in a duplicated region of chr14 where
169
- the chain is ambiguous. Of the 12,222 source rows below five residues,
170
- 11,902 resolve and 320 carry one of the same explicit failures. In all,
171
- 51,881 place on Ensembl 115.
172
- - **Sources.** Supplementary Data 3 (CC BY 4.0) and Ensembl 107's GTF, cDNA
173
- and ncRNA FASTAs; about 115 MB, of which the 32 MB GTF is the one Chang et
174
- al.'s catalogue uses, so `orfdata setup` downloads it once.
175
- - **Evidence.** Presence in the source's set is aggregate Ribo-seq support:
176
- `RiboSeq()` selects every ORF, `RiboSeq(min_studies=2)` none.
177
- - **Length policy.** `catalog.query(min_protein_length=5)` and
178
- `Proteome.build(..., min_protein_length=5)` reproduce a downstream
179
- five-residue selection without removing short models from the catalogue.
180
- Proteome layers record the threshold and number filtered.
181
- - **IDs.** `riborf_` and the GRCm39 start and stop, such as
182
- `riborf_4_120262600_120262620_+`, never a name Chang et al. use. Two paths
183
- with the same start and stop add their transcript (`…@ENSMUST00000226495.2`),
184
- and a lookup by the shared name lists both, as for OpenProt's split
185
- accessions. An ORF in both sets merges by its coding path and protein,
186
- whatever its name, and keeps Chang et al.'s ID; its `riborf_` ID still
187
- finds it.
136
+ `riborf-mouse` generation 3 reconstructs the ORFs reported by Yang et al.
137
+ (Nat Commun 2024,
138
+ [doi:10.1038/s41467-024-46240-9](https://doi.org/10.1038/s41467-024-46240-9))
139
+ against their original GENCODE M25/GRCm38 reference before any placement on
140
+ Ensembl 107/GRCm39. The original table supplies RNA intervals and BED blocks,
141
+ not protein sequences. All 54,128 non-skipped rows reconstruct against the
142
+ pinned native RNA, with the full transcript version, length, start/stop and
143
+ every BED block checked.
144
+
145
+ - **Download.** `orfdata data fetch riborf-mouse` installs the verified 24.9 MB
146
+ catalogue. Rebuilding remains available from its pinned source files.
147
+ - **Target placement.** Exact full RNA, coding nucleotide sequence and translated
148
+ protein must agree. All target cDNA and ncRNA sequences are searched, including
149
+ duplicate loci and renamed transcripts. A surviving stable ID, unchanged RNA
150
+ length or matching start/stop alone cannot transfer evidence.
151
+ - **Coverage.** 51,831 rows have a unique validated target placement, representing
152
+ 41,882 distinct proteins. Another 118 have multiple exact target placements;
153
+ 2,179 lack an unchanged complete target RNA. These 2,297 retain their native
154
+ models, sequences, evidence and explicit mapping reasons in
155
+ `catalog.metadata["unresolved"]`. `extra_orfs(...).unlifted` also reports them
156
+ under the requested evidence rule. A changed RNA with an unchanged small CDS
157
+ remains unresolved under this conservative placement method.
158
+ - **Provenance.** Placed records retain their native `ORFRecord` in
159
+ `record.lifted_from` and a typed `record.reference_mapping`. The latter records
160
+ source/target references, original row ID, RNA interval, native CDS, source
161
+ pins, coordinate checks and exact sequence comparisons. Evidence summaries
162
+ continue to name the native reference and protein. No chain file is invented;
163
+ `record.liftover` is `None`. JSON and TSV exports retain both objects.
164
+ Managed manifests keep target annotation contexts in `references` and native
165
+ evidence contexts in `source_references`.
166
+ - **Sources.** Supplementary Data 3 (CC BY 4.0), native GENCODE M25 GTF/RNA and
167
+ Ensembl 107 GTF/cDNA/ncRNA: about 198 MB in total. The 32 MB target GTF is also
168
+ used by Chang et al., so species setup acquires it once.
169
+ - **Evidence and length.** The 224 samples in 26 GEO series provide aggregate
170
+ RibORF presence, not per-ORF named studies. `RiboSeq()` selects the target
171
+ records; `MS()` and `RiboSeq(min_studies=2)` select none. The catalogue retains
172
+ 11,858 target ORFs shorter than five residues. Consumers choose length limits
173
+ when querying or building proteomes.
174
+ - **IDs and earlier generations.** IDs are `riborf_` followed by the original
175
+ source row ID, including its native transcript version and RNA interval.
176
+ They do not relabel a current coordinate as an original observation.
177
+ Generations 1/2 reconstructed proteins directly from the target annotation;
178
+ new builds of those unvalidated generations fail before downloads and direct
179
+ callers to generation 3. Archived files remain historical data, with their
180
+ saved provenance; they are not retroactively sequence-validated.
181
+
182
+ The source's ouORF, odORF and noncoding categories use the common uoORF, doORF
183
+ and lncORF names. Canonical CDSs, likely sequencing errors and stop-codon
184
+ readthrough rows remain excluded.
188
185
 
189
186
  ## Mouse ORFs from OpenProt
190
187
 
@@ -11,7 +11,7 @@ import os
11
11
  import re
12
12
  from collections import Counter
13
13
  from copy import copy, deepcopy
14
- from dataclasses import asdict, dataclass, replace
14
+ from dataclasses import asdict, dataclass, field, replace
15
15
  from importlib.resources import files
16
16
  from pathlib import Path
17
17
  from typing import NamedTuple, Optional
@@ -22,8 +22,10 @@ from .evidence import MS_METHODS, evidence_rule, stored_method
22
22
  from .evidence_summary import EvidenceSummary, unique_summaries
23
23
  from .initiation_context import KOZAK_PREFERENCES, InitiationContext
24
24
  from .liftover import Liftover
25
+ from .measurements import _plain
25
26
  from .model import ORFModel, TranscriptORF, _contig, _id_forms, _species, _transcript_match
26
- from .reference import ReferenceContext
27
+ from .reference import ReferenceContext, ScopedTarget
28
+ from .reference_mapping import ReferenceMapping
27
29
  from .sequence import genetic_code, reverse_complement_dna
28
30
 
29
31
 
@@ -142,17 +144,35 @@ class ORFRecord:
142
144
  members: tuple = ()
143
145
  lifted_from: Optional["ORFRecord"] = None
144
146
  liftover: Optional[Liftover] = None
147
+ reference_mapping: Optional[ReferenceMapping] = field(default=None, hash=False)
145
148
 
146
149
  def __post_init__(self):
147
150
  object.__setattr__(self, "summaries", unique_summaries(self.summaries))
148
151
  object.__setattr__(self, "members", tuple(self.members))
149
- if (self.lifted_from is None) != (self.liftover is None):
150
- raise ValueError("A lifted record names both its original record and the chain")
151
152
  original = self.lifted_from
153
+ methods = int(self.liftover is not None) + int(self.reference_mapping is not None)
154
+ if methods != int(original is not None):
155
+ raise ValueError("A placed record names its original and exactly one chain or reference mapping")
152
156
  if original is not None and any(getattr(self, name) != getattr(original, name) for name in (
153
157
  "orf_id", "protein_sequence", "translation_table", "start_codon", "source",
154
158
  "ribosome_studies", "peptides", "summaries")):
155
159
  raise ValueError(f"A lifted record keeps its original's ID, protein and evidence: {self.orf_id}")
160
+ mapping = self.reference_mapping
161
+ if mapping is not None:
162
+ if not isinstance(mapping, ReferenceMapping):
163
+ raise TypeError("ORF reference placements require a ReferenceMapping")
164
+ if original.reference_context is None or self.reference_context is None:
165
+ raise ValueError("ORF reference placements require both reference identities")
166
+ source = ScopedTarget(original.reference_context, "orf", original.orf_id, original.source)
167
+ target = ScopedTarget(self.reference_context, "orf", self.orf_id, self.source)
168
+ if mapping.source != source or mapping.targets != (target,) or mapping.status != "unique":
169
+ raise ValueError("ORF reference mapping endpoints disagree with the records")
170
+ digest = hashlib.sha256(self.protein_sequence.encode("ascii")).hexdigest()
171
+ if not mapping.sequence_validated or mapping.validation["sequence"]["source_sha256"] != digest:
172
+ raise ValueError("ORF reference mapping protein identity disagrees with the records")
173
+ expected = {"source": _placement_position(original), "target": _placement_position(self)}
174
+ if _plain(mapping.validation.get("position")) != expected:
175
+ raise ValueError("ORF reference mapping positions disagree with the records")
156
176
  if self.members:
157
177
  # Each member validated its own summaries against its own identity.
158
178
  key = _merge_key(self)
@@ -229,7 +249,7 @@ class ORFRecord:
229
249
 
230
250
  def to_dict(self):
231
251
  """Return a serializable copy of this record."""
232
- result = asdict(self)
252
+ result = _plain(self)
233
253
  if not self.summaries:
234
254
  result.pop("summaries")
235
255
  if self.reference_context is None:
@@ -246,7 +266,10 @@ class ORFRecord:
246
266
  result["lifted_from"] = self.lifted_from.to_dict()
247
267
  else:
248
268
  result.pop("lifted_from")
269
+ if self.liftover is None:
249
270
  result.pop("liftover")
271
+ if self.reference_mapping is None:
272
+ result.pop("reference_mapping")
250
273
  return result
251
274
 
252
275
  def map_initiation_position(self, position, *, genome_build):
@@ -417,6 +440,12 @@ class ORFRecord:
417
440
  }
418
441
 
419
442
 
443
+ def _placement_position(record):
444
+ """The coding placement bound by a typed source-to-target reference mapping."""
445
+ return dict(transcript_id=record.transcript_id, contig=record.contig, strand=record.strand,
446
+ coding_blocks=[list(block) for block in record.coding_blocks])
447
+
448
+
420
449
  def _qualify_colliding_ids(records):
421
450
  """Give colliding source records unique catalogue IDs, retaining their native records."""
422
451
  records = tuple(records)
@@ -436,7 +465,7 @@ def _qualify_colliding_ids(records):
436
465
  names = [f"{quote(r.source, safe='')}:{quote(r.orf_id, safe='')}" if i in qualified
437
466
  else r.orf_id for i, r in enumerate(records)]
438
467
  return tuple(r if name == r.orf_id else replace(
439
- r, orf_id=name, members=r.members or (r,), lifted_from=None, liftover=None)
468
+ r, orf_id=name, members=r.members or (r,), lifted_from=None, liftover=None, reference_mapping=None)
440
469
  for r, name in zip(records, names))
441
470
 
442
471
 
@@ -449,6 +478,15 @@ class ORFCatalog:
449
478
  self.genome_build = metadata["genome_build"]
450
479
  self.taxon_id = metadata["taxon_id"]
451
480
  self.species = metadata["species"]
481
+ for entry in metadata.get("unresolved", ()):
482
+ if entry.get("native_record") is not None:
483
+ native = _record(entry["native_record"])
484
+ mapping = ReferenceMapping.from_dict(entry["reference_mapping"])
485
+ expected = ScopedTarget(native.reference_context, "orf", native.orf_id, native.source)
486
+ if (mapping.source != expected or mapping.status == "unique"
487
+ or mapping.target_reference.taxon_id != self.taxon_id
488
+ or mapping.target_reference.genome_build != self.genome_build):
489
+ raise ValueError("Unresolved reference mapping disagrees with its native record or catalogue")
452
490
  self._by_id = {r.orf_id: r for r in self.records}
453
491
  self._aliases = {}
454
492
  self._by_source_id = {}
@@ -834,7 +872,7 @@ def merge_catalogs(catalogs):
834
872
  pinned = {None if m.reference_context is None else m.reference_context.key for m in members}
835
873
  records.append(replace(
836
874
  # The merged ORF is no one source's lift; each member keeps its own lift provenance.
837
- primary, members=tuple(members), lifted_from=None, liftover=None,
875
+ primary, members=tuple(members), lifted_from=None, liftover=None, reference_mapping=None,
838
876
  initiation_context=_shared_context(primary, members),
839
877
  # Sources pinned to different annotations of one assembly leave the ORF unpinned.
840
878
  reference_context=primary.reference_context if len(pinned) == 1 else None, **_union(members, study)))
@@ -927,7 +965,10 @@ def _record(row, legacy=False):
927
965
  row["members"] = tuple(_record(m) for m in row.get("members", ()))
928
966
  if row.get("lifted_from") is not None:
929
967
  row["lifted_from"] = _record(row["lifted_from"])
968
+ if row.get("liftover") is not None:
930
969
  row["liftover"] = Liftover(**row["liftover"])
970
+ if row.get("reference_mapping") is not None:
971
+ row["reference_mapping"] = ReferenceMapping.from_dict(row["reference_mapping"])
931
972
  return ORFRecord(**row)
932
973
 
933
974
 
@@ -21,14 +21,22 @@ class CatalogManifest(_Record):
21
21
  coverage: Mapping
22
22
  processing: Mapping
23
23
  schema: str = "orfdata.catalog-manifest.v1"
24
+ source_references: tuple = ()
24
25
 
25
26
  @classmethod
26
27
  def from_dict(cls, data):
27
28
  values = dict(data)
28
29
  values["references"] = tuple(ReferenceContext(**c) for c in values["references"])
29
30
  values["sources"] = tuple(SourceAsset.from_dict(s) for s in values["sources"])
31
+ values["source_references"] = tuple(ReferenceContext(**c) for c in values.get("source_references", ()))
30
32
  return cls(**values)
31
33
 
34
+ def to_dict(self):
35
+ result = super().to_dict()
36
+ if not self.source_references:
37
+ result.pop("source_references")
38
+ return result
39
+
32
40
  def __post_init__(self):
33
41
  for name in ("catalog_id", "version", "title"):
34
42
  _identifier(getattr(self, name), name)
@@ -54,6 +62,14 @@ class CatalogManifest(_Record):
54
62
  builds = {r.genome_build for r in self.references if r.genome_build is not None}
55
63
  if len(builds) != 1 or not any(r.is_genomic for r in self.references):
56
64
  raise ValueError("A catalogue must have one assembly and a complete genomic reference")
65
+ if isinstance(self.source_references, str):
66
+ raise TypeError("Source references must be a sequence of contexts")
67
+ object.__setattr__(self, "source_references", tuple(self.source_references))
68
+ if any(not isinstance(r, ReferenceContext) or not r.is_genomic
69
+ or r.taxon_id != self.taxon_id for r in self.source_references):
70
+ raise ValueError("Native source references must be genomic contexts of the catalogue species")
71
+ if len({r.key for r in self.source_references}) != len(self.source_references):
72
+ raise ValueError("Duplicate native source reference contexts")
57
73
  if any(not isinstance(s, SourceAsset) for s in self.sources):
58
74
  raise TypeError("Catalogue sources must be SourceAssets")
59
75
  if len({s.asset_id for s in self.sources}) != len(self.sources):
@@ -91,9 +107,16 @@ class CatalogManifest(_Record):
91
107
  reference = record.reference_context
92
108
  if reference is None or not reference.is_genomic or reference.key not in references:
93
109
  raise ValueError("Managed ORF records require a declared complete genomic reference")
110
+ evidence_references = references | {r.key for r in self.source_references}
94
111
  for summary in catalog.evidence_summaries:
95
- if summary.target.reference.key not in references:
112
+ if summary.target.reference.key not in evidence_references:
96
113
  raise ValueError("Evidence summary reference is absent from catalogue manifest")
114
+ for entry in catalog.metadata.get("unresolved", ()):
115
+ if entry.get("native_record") is not None:
116
+ native = ReferenceContext(**entry["native_record"]["reference_context"])
117
+ target = ReferenceContext(**entry["reference_mapping"]["target_reference"])
118
+ if native.key not in evidence_references or target.key not in references:
119
+ raise ValueError("Unresolved placement reference is absent from catalogue manifest")
97
120
  counts = dict(distinct_protein_sequences=len({r.protein_sequence for r in catalog.records}),
98
121
  evidence_summaries=len(catalog.evidence_summaries))
99
122
  for key, actual in counts.items():
@@ -40,7 +40,7 @@ def _copy_catalog(inputs, output, manifest):
40
40
  handle.write(json.dumps(catalog.to_dict(), sort_keys=True, separators=(",", ":"), allow_nan=False).encode())
41
41
 
42
42
 
43
- def _builder(manifest):
43
+ def _builder(manifest, *, for_build=False):
44
44
  """The packaged importer a release names; import paths in metadata are never executed."""
45
45
  importer = manifest.processing.get("importer")
46
46
  if importer == "catalog-copy-v1":
@@ -54,7 +54,13 @@ def _builder(manifest):
54
54
 
55
55
  return lambda inputs, output: import_orfs(inputs, output, manifest)
56
56
  if importer in ("riborf-v1", "riborf-v2"):
57
- from .sources.riborf import import_orfs
57
+ from .sources.riborf import import_orfs, validate_transcript_manifest
58
+
59
+ if for_build:
60
+ validate_transcript_manifest(manifest)
61
+ return lambda inputs, output: import_orfs(inputs, output, manifest)
62
+ if importer == "riborf-native-v3":
63
+ from .sources.riborf_native import import_orfs
58
64
 
59
65
  return lambda inputs, output: import_orfs(inputs, output, manifest)
60
66
  if importer in ("riborf-genome-v1", "riborf-genome-v2"):
@@ -198,7 +204,7 @@ class CatalogRegistry:
198
204
  def build(self, name, version=None, *, force=False, source_paths=None, download_options=None):
199
205
  """Explicitly materialize an allowlisted catalogue source adapter."""
200
206
  manifest = self.info(name, version)
201
- return build_catalog(manifest, _builder(manifest), cache_root=self._cache_root,
207
+ return build_catalog(manifest, _builder(manifest, for_build=True), cache_root=self._cache_root,
202
208
  source_paths=source_paths, force=force, download_options=download_options)
203
209
 
204
210
  def inspect_build(self, name, version=None, *, verify_files=True):
@@ -320,14 +320,14 @@ def _query(args, parser, catalog_loader):
320
320
  "initiation_context_json",
321
321
  )
322
322
  scoped = not isinstance(catalog, UORFCatalog)
323
- provenance = ("members", "liftover", "lifted_from")
323
+ provenance = ("members", "liftover", "lifted_from", "reference_mapping")
324
324
  if scoped:
325
325
  fields += ("start_codon", "reference_context_json", "summaries_json") + tuple(
326
326
  f + "_json" for f in provenance)
327
327
  elif any(r.summaries for r in records):
328
328
  # The released upstream-only columns have no place for aggregate counts.
329
329
  parser.error("The legacy upstream-ORF TSV cannot export aggregate evidence; use --format json")
330
- elif any(r.members or r.liftover for r in records):
330
+ elif any(r.members or r.lifted_from for r in records):
331
331
  parser.error("The legacy upstream-ORF TSV cannot export merged or lifted records; use --format json")
332
332
  elif any(getattr(r, "start_codon", None) for r in records):
333
333
  parser.error("The legacy upstream-ORF TSV cannot export declared start codons; use --format json")
@@ -205,7 +205,7 @@
205
205
  "priority": 20
206
206
  },
207
207
  "riborf-mouse": {
208
- "default_version": "2",
208
+ "default_version": "3",
209
209
  "priority": 30,
210
210
  "versions": {
211
211
  "1": {
@@ -408,6 +408,151 @@
408
408
  "redistributable": true
409
409
  },
410
410
  "assets": {}
411
+ },
412
+ "3": {
413
+ "manifest": {
414
+ "catalog_id": "riborf-mouse",
415
+ "version": "3",
416
+ "title": "Mouse RibORF 2.0 translated ORFs of Yang et al. 2024",
417
+ "references": [
418
+ {
419
+ "taxon_id": 10090,
420
+ "species": "mus_musculus",
421
+ "genome_build": "GRCm39",
422
+ "annotation_name": "ensembl",
423
+ "annotation_version": "107",
424
+ "assembly_accession": null,
425
+ "strain": null,
426
+ "strain_taxon_id": null,
427
+ "sequence_sha256": null,
428
+ "taxonomy_version": "ncbi-2026-10-12",
429
+ "source_sha256": null
430
+ }
431
+ ],
432
+ "sources": [
433
+ {
434
+ "asset_id": "table",
435
+ "url": "https://static-content.springer.com/esm/art%3A10.1038%2Fs41467-024-46240-9/MediaObjects/41467_2024_46240_MOESM6_ESM.xlsx",
436
+ "sha256": "4dc8444c2fd3da25c7066074c71d1ec5427afd5d005862c6c61dc3f27fb9d32c",
437
+ "size": 24211005,
438
+ "access_terms": "Supplementary Data 3 of Yang et al., Nat Commun 2024, CC BY 4.0.",
439
+ "license_url": null,
440
+ "redistributable": true,
441
+ "metadata": {}
442
+ },
443
+ {
444
+ "asset_id": "gtf",
445
+ "url": "https://ftp.ensembl.org/pub/release-107/gtf/mus_musculus/Mus_musculus.GRCm39.107.gtf.gz",
446
+ "sha256": "15af16b7bef88c4309a82d49579fdd967f6ac8769b7f0bf657bbf7ee73b779e3",
447
+ "size": 31861821,
448
+ "access_terms": "Ensembl imposes no restrictions on access to, or use of, the data provided.",
449
+ "license_url": null,
450
+ "redistributable": true,
451
+ "metadata": {}
452
+ },
453
+ {
454
+ "asset_id": "cdna",
455
+ "url": "https://ftp.ensembl.org/pub/release-107/fasta/mus_musculus/cdna/Mus_musculus.GRCm39.cdna.all.fa.gz",
456
+ "sha256": "34499a727ff72bdddb2f32e5831b14fb5a9d20218cd79b8639dc8736b2c596c0",
457
+ "size": 51269494,
458
+ "access_terms": "Ensembl imposes no restrictions on access to, or use of, the data provided.",
459
+ "license_url": null,
460
+ "redistributable": true,
461
+ "metadata": {}
462
+ },
463
+ {
464
+ "asset_id": "ncrna",
465
+ "url": "https://ftp.ensembl.org/pub/release-107/fasta/mus_musculus/ncrna/Mus_musculus.GRCm39.ncrna.fa.gz",
466
+ "sha256": "0472b7d912e84d838485ecf236670a68319a32fb4580062cd9768c7bce85d9ab",
467
+ "size": 7668482,
468
+ "access_terms": "Ensembl imposes no restrictions on access to, or use of, the data provided.",
469
+ "license_url": null,
470
+ "redistributable": true,
471
+ "metadata": {}
472
+ },
473
+ {
474
+ "asset_id": "source_gtf",
475
+ "url": "https://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_mouse/release_M25/gencode.vM25.annotation.gtf.gz",
476
+ "sha256": "e6c9704cb5832b8a1c71431ecac9ea30057377c72cdc9a12dc5d0405ab066d5a",
477
+ "size": 28542432,
478
+ "access_terms": "GENCODE reference annotation/transcript data under EMBL-EBI data-use terms.",
479
+ "license_url": "https://www.ebi.ac.uk/about/terms-of-use/",
480
+ "redistributable": true,
481
+ "metadata": {}
482
+ },
483
+ {
484
+ "asset_id": "source_rna",
485
+ "url": "https://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_mouse/release_M25/gencode.vM25.transcripts.fa.gz",
486
+ "sha256": "5139cf409a680b60434716ca10ad4e474cbbe5d2e4d11af7553edfad8ed73670",
487
+ "size": 54587418,
488
+ "access_terms": "GENCODE reference annotation/transcript data under EMBL-EBI data-use terms.",
489
+ "license_url": "https://www.ebi.ac.uk/about/terms-of-use/",
490
+ "redistributable": true,
491
+ "metadata": {}
492
+ }
493
+ ],
494
+ "citations": [
495
+ "Yang H, Li Q, Stroup EK, Wang S, Ji Z. Widespread stable noncanonical peptides identified by integrated analyses of ribosome profiling and ORF features. Nat Commun. 2024;15:1932. doi:10.1038/s41467-024-46240-9"
496
+ ],
497
+ "coverage": {
498
+ "records": 51831,
499
+ "distinct_protein_sequences": 41882,
500
+ "evidence_summaries": 51831,
501
+ "source_rows": 54128,
502
+ "short_rows": 12222,
503
+ "native_valid_rows": 54128,
504
+ "resolved_rows": 51831,
505
+ "unresolved_rows": 2297,
506
+ "short_records": 11858
507
+ },
508
+ "processing": {
509
+ "importer": "riborf-native-v3",
510
+ "sheet": "mouse",
511
+ "source": "riborf-mouse",
512
+ "release": "NatCommun-15-1932",
513
+ "skip_types": [
514
+ "canonical",
515
+ "seqerror",
516
+ "readthrough"
517
+ ],
518
+ "biotypes": {
519
+ "ouORF": "uoORF",
520
+ "odORF": "doORF",
521
+ "noncoding": "lncORF"
522
+ },
523
+ "scope": "Native GENCODE vM25/mm10 ORFs reconstructed first; target Ensembl 107/GRCm39 placement requires exact full RNA, CDS and protein, with every source BED block validated. Aggregate presence only.",
524
+ "report_protein_lengths_below": 5,
525
+ "source_annotation": "GENCODE vM25"
526
+ },
527
+ "schema": "orfdata.catalog-manifest.v1",
528
+ "source_references": [
529
+ {
530
+ "taxon_id": 10090,
531
+ "species": "mouse",
532
+ "genome_build": "GRCm38",
533
+ "annotation_name": "gencode",
534
+ "annotation_version": "M25",
535
+ "assembly_accession": null,
536
+ "strain": null,
537
+ "strain_taxon_id": null,
538
+ "sequence_sha256": "5139cf409a680b60434716ca10ad4e474cbbe5d2e4d11af7553edfad8ed73670",
539
+ "taxonomy_version": "ncbi-2026-10-12",
540
+ "source_sha256": "e6c9704cb5832b8a1c71431ecac9ea30057377c72cdc9a12dc5d0405ab066d5a"
541
+ }
542
+ ]
543
+ },
544
+ "distribution": {
545
+ "access_terms": "Built from pinned Yang et al. Supplementary Data 3 (CC BY 4.0), native GENCODE vM25 RNA/GTF, and Ensembl 107 target annotation/RNA. Original references and evidence retained; exact-sequence placement only.",
546
+ "redistributable": true,
547
+ "data_release": "data-riborf-mouse-3"
548
+ },
549
+ "assets": {
550
+ "catalog.json.gz": {
551
+ "url": "https://github.com/openvax/orfdata/releases/download/data-riborf-mouse-3/riborf-mouse-3.json.gz",
552
+ "sha256": "2d60d7783821f3ab88485197b141c355ca07fbe6e5a9da78cec42262508c5d03",
553
+ "size": 24875346
554
+ }
555
+ }
411
556
  }
412
557
  }
413
558
  },
@@ -374,7 +374,8 @@ def _lift(record, chain):
374
374
  source_sha256=chain.liftover.sha256)
375
375
  lifted = replace(record, contig=contig, strand=strand, coding_blocks=blocks,
376
376
  genome_build=chain.liftover.target_build, reference_context=pinned,
377
- initiation_context=None, members=members, lifted_from=record, liftover=chain.liftover)
377
+ initiation_context=None, members=members, lifted_from=record, liftover=chain.liftover,
378
+ reference_mapping=None)
378
379
  context = record.initiation_context
379
380
  if context is not None:
380
381
  positions = [chain.map(record.contig, p, p) for p in context.genomic_positions]
@@ -394,6 +395,9 @@ def unlifted(metadata):
394
395
  """Every record a catalogue's lifts left out, through each hop and merged input: (record, assembly, reason)."""
395
396
  from .catalog import _record
396
397
 
398
+ for entry in metadata.get("unresolved", ()):
399
+ if entry.get("native_record") is not None and entry.get("reference_mapping") is not None:
400
+ yield _record(entry["native_record"]), metadata["genome_build"], entry["reason"]
397
401
  lift = metadata.get("liftover")
398
402
  if lift:
399
403
  yield from unlifted(lift["input"]["metadata"])
@@ -2085,6 +2085,9 @@ def _filter_unlifted(metadata, accepts):
2085
2085
  """Apply a union selection to failed lifts as well as placed records."""
2086
2086
  from .catalog import _record
2087
2087
 
2088
+ if "unresolved" in metadata:
2089
+ metadata["unresolved"] = [entry for entry in metadata["unresolved"]
2090
+ if entry.get("native_record") is None or accepts(_record(entry["native_record"]))]
2088
2091
  lift = metadata.get("liftover")
2089
2092
  if lift:
2090
2093
  _filter_unlifted(lift["input"]["metadata"], accepts)
@@ -12,8 +12,9 @@ end, the stop codon included.
12
12
  The source gives no protein sequences, so each ORF is placed through the same
13
13
  transcript in a pinned Ensembl annotation (:func:`import_orfs`): its
14
14
  transcript coordinates map through that transcript's exons, and its protein is
15
- translated from that transcript's sequence. For mouse this also moves the ORFs
16
- from mm10 to GRCm39 without a chain file with usage restrictions. A row is
15
+ translated from that transcript's sequence. Mouse uses the separate native
16
+ GENCODE M25 reconstruction and exact-sequence placement in ``riborf_native``;
17
+ the unvalidated historical mouse rebuilds are rejected here. A row is
17
18
  left out, with the reason, when the transcript is missing, has no sequence or
18
19
  changed length since the source's annotation, or when its sequence there
19
20
  doesn't start with the stated codon and end at its first stop.
@@ -110,8 +111,15 @@ def _parsed(processing, sheet_rows):
110
111
  return parsed, source_rows, short
111
112
 
112
113
 
114
+ def validate_transcript_manifest(manifest):
115
+ """Reject superseded mouse builds before acquiring their source files."""
116
+ if manifest.references[0].taxon_id == 10090:
117
+ raise ValueError("Mouse RibORF generations 1/2 lack native sequence validation; build generation 3")
118
+
119
+
113
120
  def import_orfs(inputs, output, manifest):
114
121
  """Write the catalogue ``manifest`` describes from the source table and the pinned Ensembl files."""
122
+ validate_transcript_manifest(manifest)
115
123
  processing = manifest.processing
116
124
  reference = manifest.references[0]
117
125
  # Ensembl IDs carry a version (ENST00000000233.10); C. elegans names have dots of their own (2L52.1a.1).