orfdata 0.29.0__tar.gz → 0.30.0__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 (263) hide show
  1. {orfdata-0.29.0/orfdata.egg-info → orfdata-0.30.0}/PKG-INFO +16 -7
  2. {orfdata-0.29.0 → orfdata-0.30.0}/README.md +15 -6
  3. {orfdata-0.29.0 → orfdata-0.30.0}/docs/catalogs.md +122 -9
  4. {orfdata-0.29.0 → orfdata-0.30.0}/docs/coverage.md +4 -2
  5. {orfdata-0.29.0 → orfdata-0.30.0}/docs/index.md +5 -3
  6. {orfdata-0.29.0 → orfdata-0.30.0}/docs/species.md +1 -1
  7. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/catalog.py +49 -15
  8. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/catalogs.py +12 -0
  9. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/cli.py +9 -1
  10. orfdata-0.30.0/orfdata/data/catalogs.json +829 -0
  11. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/install.py +6 -4
  12. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/proteome.py +27 -24
  13. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/proteome_cli.py +6 -3
  14. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/reference.py +2 -0
  15. orfdata-0.30.0/orfdata/sources/riborf.py +327 -0
  16. orfdata-0.30.0/orfdata/version.py +1 -0
  17. {orfdata-0.29.0 → orfdata-0.30.0/orfdata.egg-info}/PKG-INFO +16 -7
  18. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata.egg-info/SOURCES.txt +16 -0
  19. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ncorf_mammals/README.md +8 -0
  20. orfdata-0.30.0/tests/data/ncorf_mammals/S3.xlsx +0 -0
  21. orfdata-0.30.0/tests/data/ncorf_mammals/human-ensembl107.gtf.gz +0 -0
  22. orfdata-0.30.0/tests/data/ncorf_mammals/human.bed +4 -0
  23. orfdata-0.30.0/tests/data/ncorf_mammals/human.pep.fa +8 -0
  24. orfdata-0.30.0/tests/data/riborf/README.md +44 -0
  25. orfdata-0.30.0/tests/data/riborf/SD3.xlsx +0 -0
  26. orfdata-0.30.0/tests/data/riborf/human-ensembl105.cdna.fa.gz +0 -0
  27. orfdata-0.30.0/tests/data/riborf/human-ensembl105.gtf.gz +0 -0
  28. orfdata-0.30.0/tests/data/riborf/human-ensembl105.ncrna.fa.gz +0 -0
  29. orfdata-0.30.0/tests/data/riborf/worm-ensembl105.cdna.fa.gz +0 -0
  30. orfdata-0.30.0/tests/data/riborf/worm-ensembl105.gtf.gz +0 -0
  31. orfdata-0.30.0/tests/data/riborf/worm-ensembl105.ncrna.fa.gz +0 -0
  32. orfdata-0.30.0/tests/data/riborf/yeast-ensembl115.cdna.fa.gz +0 -0
  33. orfdata-0.30.0/tests/data/riborf/yeast-ensembl115.dna.fa.gz +0 -0
  34. orfdata-0.30.0/tests/data/riborf/yeast-ensembl115.gtf.gz +0 -0
  35. orfdata-0.30.0/tests/data/riborf/zebrafish-ensembl115.cdna.fa.gz +0 -0
  36. orfdata-0.30.0/tests/data/riborf/zebrafish-ensembl115.gtf.gz +0 -0
  37. orfdata-0.30.0/tests/data/riborf/zebrafish-ensembl115.ncrna.fa.gz +0 -0
  38. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_catalog_registry.py +4 -2
  39. orfdata-0.30.0/tests/test_more_species.py +192 -0
  40. orfdata-0.29.0/orfdata/data/catalogs.json +0 -307
  41. orfdata-0.29.0/orfdata/sources/riborf.py +0 -163
  42. orfdata-0.29.0/orfdata/version.py +0 -1
  43. orfdata-0.29.0/tests/data/ncorf_mammals/S3.xlsx +0 -0
  44. orfdata-0.29.0/tests/data/riborf/README.md +0 -21
  45. orfdata-0.29.0/tests/data/riborf/SD3.xlsx +0 -0
  46. {orfdata-0.29.0 → orfdata-0.30.0}/LICENSE +0 -0
  47. {orfdata-0.29.0 → orfdata-0.30.0}/MANIFEST.in +0 -0
  48. {orfdata-0.29.0 → orfdata-0.30.0}/deploy.sh +0 -0
  49. {orfdata-0.29.0 → orfdata-0.30.0}/docs/copy-yeast.md +0 -0
  50. {orfdata-0.29.0 → orfdata-0.30.0}/docs/examples.md +0 -0
  51. {orfdata-0.29.0 → orfdata-0.30.0}/docs/human-tissue.md +0 -0
  52. {orfdata-0.29.0 → orfdata-0.30.0}/docs/ingolia-yeast.md +0 -0
  53. {orfdata-0.29.0 → orfdata-0.30.0}/docs/measurements.md +0 -0
  54. {orfdata-0.29.0 → orfdata-0.30.0}/docs/pairing.md +0 -0
  55. {orfdata-0.29.0 → orfdata-0.30.0}/docs/pfizer-protein.md +0 -0
  56. {orfdata-0.29.0 → orfdata-0.30.0}/docs/pfizer-rna.md +0 -0
  57. {orfdata-0.29.0 → orfdata-0.30.0}/docs/proteome.md +0 -0
  58. {orfdata-0.29.0 → orfdata-0.30.0}/docs/reference.md +0 -0
  59. {orfdata-0.29.0 → orfdata-0.30.0}/docs/search-references.md +0 -0
  60. {orfdata-0.29.0 → orfdata-0.30.0}/docs/source-references.md +0 -0
  61. {orfdata-0.29.0 → orfdata-0.30.0}/docs/storage.md +0 -0
  62. {orfdata-0.29.0 → orfdata-0.30.0}/docs/stylesheets/docs.css +0 -0
  63. {orfdata-0.29.0 → orfdata-0.30.0}/docs/viral.md +0 -0
  64. {orfdata-0.29.0 → orfdata-0.30.0}/docs.sh +0 -0
  65. {orfdata-0.29.0 → orfdata-0.30.0}/lint.sh +0 -0
  66. {orfdata-0.29.0 → orfdata-0.30.0}/mkdocs.yml +0 -0
  67. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/__init__.py +0 -0
  68. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/_pinned_genome.py +0 -0
  69. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/_structure.py +0 -0
  70. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/build.py +0 -0
  71. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/catalog_cli.py +0 -0
  72. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/catalog_manifest.py +0 -0
  73. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/chains.json +0 -0
  74. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/datasets.json +0 -0
  75. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/genomes.json +0 -0
  76. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/ires/rfam-15.1-human-ires.json +0 -0
  77. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/orf-evidence/AUTHOR-LICENSE.txt +0 -0
  78. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/orf-evidence/NOTICE.txt +0 -0
  79. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/orf-evidence/catalog.json.gz +0 -0
  80. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/orf-evidence/manifest.json +0 -0
  81. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/uorf-evidence/AUTHOR-LICENSE.txt +0 -0
  82. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/uorf-evidence/NOTICE.txt +0 -0
  83. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/uorf-evidence/catalog.json.gz +0 -0
  84. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/uorf-evidence/manifest.json +0 -0
  85. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/viral/NOTICE.md +0 -0
  86. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/viral/hpv16-refseq-CDS.json.gz +0 -0
  87. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/dataset.py +0 -0
  88. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/dataset_cli.py +0 -0
  89. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/datasets.py +0 -0
  90. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/evidence.py +0 -0
  91. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/evidence_summary.py +0 -0
  92. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/genomes.py +0 -0
  93. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/genomes_cli.py +0 -0
  94. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/initiation_context.py +0 -0
  95. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/liftover.py +0 -0
  96. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/liftover_cli.py +0 -0
  97. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/measurements.py +0 -0
  98. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/model.py +0 -0
  99. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/pairing.py +0 -0
  100. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/reference_mapping.py +0 -0
  101. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/rna.py +0 -0
  102. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/search_reference.py +0 -0
  103. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sequence.py +0 -0
  104. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sources/__init__.py +0 -0
  105. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sources/copy.py +0 -0
  106. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sources/ingolia.py +0 -0
  107. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sources/ncorf_mammals.py +0 -0
  108. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sources/openprot.py +0 -0
  109. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sources/pfizer.py +0 -0
  110. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sources/pfizer_rna.py +0 -0
  111. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sources/wang.py +0 -0
  112. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/viral.py +0 -0
  113. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata.egg-info/dependency_links.txt +0 -0
  114. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata.egg-info/entry_points.txt +0 -0
  115. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata.egg-info/requires.txt +0 -0
  116. {orfdata-0.29.0 → orfdata-0.30.0}/orfdata.egg-info/top_level.txt +0 -0
  117. {orfdata-0.29.0 → orfdata-0.30.0}/pyproject.toml +0 -0
  118. {orfdata-0.29.0 → orfdata-0.30.0}/setup.cfg +0 -0
  119. {orfdata-0.29.0 → orfdata-0.30.0}/test.sh +0 -0
  120. {orfdata-0.29.0 → orfdata-0.30.0}/tests/conftest.py +0 -0
  121. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/aggregate_evidence.json +0 -0
  122. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/GSM1905474.soft +0 -0
  123. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/GSM1905474_KL9_fpkm.txt.gz +0 -0
  124. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/GSM1905476.soft +0 -0
  125. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/GSM1905476_KL10_fpkm.txt.gz +0 -0
  126. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/GSM1905478.soft +0 -0
  127. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/GSM1905478_KL11_fpkm.txt.gz +0 -0
  128. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/GSM1905479.soft +0 -0
  129. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/GSM1905479_KL12_fpkm.txt.gz +0 -0
  130. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/NOTICE.md +0 -0
  131. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/expected.json +0 -0
  132. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/geo-series.soft +0 -0
  133. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/manifest.json +0 -0
  134. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/methods.pdf +0 -0
  135. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/paper.xml +0 -0
  136. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/pmc-metadata.json +0 -0
  137. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/qconcat.fasta +0 -0
  138. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/workbook.xlsx +0 -0
  139. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346111.metadata.txt +0 -0
  140. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346111.quant.txt.gz +0 -0
  141. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346114.metadata.txt +0 -0
  142. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346114.quant.txt.gz +0 -0
  143. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346115.metadata.txt +0 -0
  144. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346115.quant.txt.gz +0 -0
  145. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346116.metadata.txt +0 -0
  146. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346116.quant.txt.gz +0 -0
  147. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346117.metadata.txt +0 -0
  148. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346117.quant.txt.gz +0 -0
  149. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346118.metadata.txt +0 -0
  150. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346118.quant.txt.gz +0 -0
  151. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346120.metadata.txt +0 -0
  152. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346120.quant.txt.gz +0 -0
  153. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346122.metadata.txt +0 -0
  154. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346122.quant.txt.gz +0 -0
  155. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/NOTICE.md +0 -0
  156. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/expected.json +0 -0
  157. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/manifest.json +0 -0
  158. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/readMe.txt.gz +0 -0
  159. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ncorf_mammals/ensembl107.cdna.fa.gz +0 -0
  160. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ncorf_mammals/ensembl107.gtf.gz +0 -0
  161. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ncorf_mammals/mouse.bed +0 -0
  162. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ncorf_mammals/mouse.pep.fa +0 -0
  163. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/openprot/README.md +0 -0
  164. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/openprot/ensembl106.cdna.fa.gz +0 -0
  165. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/openprot/ensembl106.gtf.gz +0 -0
  166. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/openprot/mouse-openprot-2_2-altprots+isoforms-min_2_pep-GRCm39.106.bed.zip +0 -0
  167. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/openprot/mouse-openprot-2_2-altprots+isoforms-min_2_pep-GRCm39.106.fasta.zip +0 -0
  168. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/openprot/mouse-openprot-2_2-altprots+isoforms-min_2_pep-GRCm39.106.tsv.zip +0 -0
  169. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/NOTICE.md +0 -0
  170. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/dog/expected.json +0 -0
  171. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/dog/manifest.json +0 -0
  172. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/dog/protein.tsv +0 -0
  173. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/dog/search.fasta +0 -0
  174. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/human/expected.json +0 -0
  175. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/human/manifest.json +0 -0
  176. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/human/protein.tsv +0 -0
  177. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/human/search.fasta +0 -0
  178. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/mouse/expected.json +0 -0
  179. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/mouse/manifest.json +0 -0
  180. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/mouse/protein.tsv +0 -0
  181. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/mouse/search.fasta +0 -0
  182. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/GSE325522_family.soft.gz +0 -0
  183. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/GSE325523_family.soft.gz +0 -0
  184. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/GSE325525_family.soft.gz +0 -0
  185. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/NOTICE.md +0 -0
  186. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/counts.csv.gz +0 -0
  187. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/dog-annotation.gtf.gz +0 -0
  188. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/dog-expected.json +0 -0
  189. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/dog-manifest.json +0 -0
  190. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/mouse-annotation.gtf.gz +0 -0
  191. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/mouse-expected.json +0 -0
  192. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/mouse-manifest.json +0 -0
  193. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/samples.xlsx +0 -0
  194. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/README.md +0 -0
  195. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/canis_lupus_familiaris.json +0 -0
  196. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/context-keys-v0.4.json +0 -0
  197. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/ensembl115.json +0 -0
  198. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/homo_sapiens.json +0 -0
  199. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/mitochondrial.json +0 -0
  200. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/mus_musculus.json +0 -0
  201. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/saccharomyces_cerevisiae.json +0 -0
  202. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/uniprot_literature.json +0 -0
  203. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/regions/NOTICE.md +0 -0
  204. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/regions/ingolia.json +0 -0
  205. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/riborf/ensembl107.cdna.fa.gz +0 -0
  206. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/riborf/ensembl107.gtf.gz +0 -0
  207. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/riborf/ensembl107.ncrna.fa.gz +0 -0
  208. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/search_reference/NOTICE.md +0 -0
  209. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/search_reference/dog.fasta +0 -0
  210. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/search_reference/ensembl83-expected.json +0 -0
  211. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/search_reference/ensembl83-human.fasta.gz +0 -0
  212. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/search_reference/expected.json +0 -0
  213. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/storage/README.md +0 -0
  214. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/storage/generate.py +0 -0
  215. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/storage/v1.json +0 -0
  216. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/storage/v1.sqlite +0 -0
  217. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/storage/v2.json +0 -0
  218. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/storage/v2.sqlite +0 -0
  219. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/storage/v3.json +0 -0
  220. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/storage/v3.sqlite +0 -0
  221. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/viral/NC_001526.4.gb.gz +0 -0
  222. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/wang/NOTICE.md +0 -0
  223. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/wang/annotation.gtf.gz +0 -0
  224. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/wang/copies.zip +0 -0
  225. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/wang/expected.json +0 -0
  226. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/wang/manifest.json +0 -0
  227. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/wang/protein.zip +0 -0
  228. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/wang/rna.zip +0 -0
  229. {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/wang/search.fasta.gz +0 -0
  230. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_copy.py +0 -0
  231. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_cross_reference_pairing.py +0 -0
  232. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_ensembl_search_reference.py +0 -0
  233. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_evidence_rules.py +0 -0
  234. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_evidence_summary.py +0 -0
  235. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_genetic_codes.py +0 -0
  236. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_genomes.py +0 -0
  237. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_ingolia.py +0 -0
  238. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_initiation_context.py +0 -0
  239. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_liftover.py +0 -0
  240. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_local_build_queries.py +0 -0
  241. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_measurements.py +0 -0
  242. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_merge_catalogs.py +0 -0
  243. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_ncorf_mammals.py +0 -0
  244. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_openprot.py +0 -0
  245. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_orf_cases.py +0 -0
  246. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_paired_selectors.py +0 -0
  247. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_pairing.py +0 -0
  248. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_pfizer.py +0 -0
  249. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_pfizer_rna.py +0 -0
  250. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_proteome.py +0 -0
  251. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_reference_context.py +0 -0
  252. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_reference_mapping.py +0 -0
  253. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_reference_orf.py +0 -0
  254. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_region_targets.py +0 -0
  255. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_riborf.py +0 -0
  256. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_search_reference.py +0 -0
  257. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_selectors.py +0 -0
  258. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_storage.py +0 -0
  259. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_uorf_catalog.py +0 -0
  260. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_viral.py +0 -0
  261. {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_wang.py +0 -0
  262. {orfdata-0.29.0 → orfdata-0.30.0}/tools/__init__.py +0 -0
  263. {orfdata-0.29.0 → orfdata-0.30.0}/tools/build_hpv16_cds.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orfdata
3
- Version: 0.29.0
3
+ Version: 0.30.0
4
4
  Summary: Reference proteomes with evidence-backed noncanonical ORFs on PyEnsembl genomes
5
5
  Author: OpenVax
6
6
  License-Expression: Apache-2.0
@@ -88,14 +88,23 @@ immunopeptidomics: peptides eluted from HLA molecules.
88
88
 
89
89
  ## Species
90
90
 
91
- The bundled noncanonical ORF catalogue is human GRCh38. Mouse has 48,805:
92
- Ribo-seq ORFs of Chang et al. 2025 and Yang et al. 2024, and 2,976 MS-supported
93
- ones from OpenProt 2.2;
94
- `pip install "orfdata[data,build-data]"` then `orfdata setup --species mouse`
95
- builds all three from their sources' own files. After `orfdata chains download` (add
91
+ | Species | Noncanonical ORFs | Sources |
92
+ | --- | ---: | --- |
93
+ | Human | 7,264 bundled; 57,607 with `catalogs="all"` | GENCODE; optionally Chang et al. 2025 and Yang et al. 2024 Ribo-seq |
94
+ | Mouse | 48,805 | Chang et al. and Yang et al. Ribo-seq, OpenProt 2.2 MS |
95
+ | Zebrafish | 9,759 | Yang et al. Ribo-seq |
96
+ | C. elegans | 2,849 | Yang et al. Ribo-seq |
97
+ | Yeast | 1,128 | Yang et al. Ribo-seq |
98
+ | Dog | none: no public dog Ribo-seq or ncORF MS exists | |
99
+
100
+ Human's bundled catalogue needs no setup. For the others, `pip install
101
+ "orfdata[data,build-data]"`, then `orfdata setup --species mouse` (or
102
+ `zebrafish`, `worm`, `yeast`, or `human --catalogs all`) builds the catalogues
103
+ from their sources' own files ([details](https://openvax.github.io/orfdata/catalogs/)).
104
+ After `orfdata chains download` (add
96
105
  `--accept-terms` for UCSC's non-commercial mouse chains), older assemblies
97
106
  (GRCh37, NCBI36, GRCm38, NCBIM37) and T2T-CHM13 use these catalogues lifted
98
- to them; `orfdata genomes install t2t-chm13` installs a CHM13 annotation. Dog and yeast proteomes contain their
107
+ to them; `orfdata genomes install t2t-chm13` installs a CHM13 annotation. Dog proteomes contain their
99
108
  PyEnsembl-annotated proteins. `load_catalog(species=...)` and
100
109
  `with_extra_orfs()` pick the catalogue for a species and raise when none is
101
110
  available or built.
@@ -56,14 +56,23 @@ immunopeptidomics: peptides eluted from HLA molecules.
56
56
 
57
57
  ## Species
58
58
 
59
- The bundled noncanonical ORF catalogue is human GRCh38. Mouse has 48,805:
60
- Ribo-seq ORFs of Chang et al. 2025 and Yang et al. 2024, and 2,976 MS-supported
61
- ones from OpenProt 2.2;
62
- `pip install "orfdata[data,build-data]"` then `orfdata setup --species mouse`
63
- builds all three from their sources' own files. After `orfdata chains download` (add
59
+ | Species | Noncanonical ORFs | Sources |
60
+ | --- | ---: | --- |
61
+ | Human | 7,264 bundled; 57,607 with `catalogs="all"` | GENCODE; optionally Chang et al. 2025 and Yang et al. 2024 Ribo-seq |
62
+ | Mouse | 48,805 | Chang et al. and Yang et al. Ribo-seq, OpenProt 2.2 MS |
63
+ | Zebrafish | 9,759 | Yang et al. Ribo-seq |
64
+ | C. elegans | 2,849 | Yang et al. Ribo-seq |
65
+ | Yeast | 1,128 | Yang et al. Ribo-seq |
66
+ | Dog | none: no public dog Ribo-seq or ncORF MS exists | |
67
+
68
+ Human's bundled catalogue needs no setup. For the others, `pip install
69
+ "orfdata[data,build-data]"`, then `orfdata setup --species mouse` (or
70
+ `zebrafish`, `worm`, `yeast`, or `human --catalogs all`) builds the catalogues
71
+ from their sources' own files ([details](https://openvax.github.io/orfdata/catalogs/)).
72
+ After `orfdata chains download` (add
64
73
  `--accept-terms` for UCSC's non-commercial mouse chains), older assemblies
65
74
  (GRCh37, NCBI36, GRCm38, NCBIM37) and T2T-CHM13 use these catalogues lifted
66
- to them; `orfdata genomes install t2t-chm13` installs a CHM13 annotation. Dog and yeast proteomes contain their
75
+ to them; `orfdata genomes install t2t-chm13` installs a CHM13 annotation. Dog proteomes contain their
67
76
  PyEnsembl-annotated proteins. `load_catalog(species=...)` and
68
77
  `with_extra_orfs()` pick the catalogue for a species and raise when none is
69
78
  available or built.
@@ -16,11 +16,19 @@ original PyEnsembl transcript through `ReferenceORF`. To use several catalogues
16
16
  for one species together, see
17
17
  [merging catalogues](proteome.md#merging-catalogues).
18
18
 
19
- The packaged registry has three mouse catalogues, each built from its sources'
20
- own files: [OpenProt's MS-supported ORFs](#mouse-orfs-from-openprot),
21
- [Chang et al.'s Ribo-seq ORFs](#mouse-ribo-seq-orfs-chang-et-al) and
22
- [Yang et al.'s RibORF ORFs](#mouse-riborf-orfs-yang-et-al). `orfdata setup
23
- --species mouse` installs all three, with the chain files. `orfdata catalogs status`
19
+ The packaged registry builds each catalogue from its sources' own files:
20
+
21
+ | Species | Catalogues | ORFs |
22
+ | --- | --- | ---: |
23
+ | Mouse | [OpenProt's MS-supported ORFs](#mouse-orfs-from-openprot), [Chang et al.'s](#mouse-ribo-seq-orfs-chang-et-al) and [Yang et al.'s](#mouse-riborf-orfs-yang-et-al) Ribo-seq ORFs | 48,805 merged |
24
+ | Human | the bundled GENCODE set; optionally [Chang et al.'s and Yang et al.'s Ribo-seq ORFs](#human-ribo-seq-orfs-optional) | 7,264; 57,607 with both |
25
+ | Zebrafish | [Yang et al.'s Ribo-seq ORFs](#zebrafish-c-elegans-and-yeast) | 9,759 |
26
+ | C. elegans | [Yang et al.'s Ribo-seq ORFs](#zebrafish-c-elegans-and-yeast) | 2,849 |
27
+ | Yeast | [Yang et al.'s Ribo-seq ORFs](#zebrafish-c-elegans-and-yeast) | 1,128 |
28
+ | Dog | [none exists](#dog) | 0 |
29
+
30
+ `orfdata setup --species mouse` (or zebrafish, worm, yeast) installs a
31
+ species' catalogues, with the chain files. `orfdata catalogs status`
24
32
  (in Python, `catalog_status()`) lists every catalogue `load_catalog` can open,
25
33
  the bundled one included, with its species, assembly, record count, whether it
26
34
  is installed and whether it is used:
@@ -94,10 +102,7 @@ Ensembl 115 (GRCm39):
94
102
 
95
103
  Loading the merged catalogue takes about 10 seconds and 0.9 GB of memory, once
96
104
  per process, whichever evidence is selected. On GRCm38 and NCBIM37 all three
97
- are [lifted automatically](#every-assembly-of-a-species). Dog has no
98
- experimentally supported ORF catalogue from any source: OpenProt and the
99
- Ribo-seq resources have no dog data, and dog MS studies searched only canonical
100
- proteins.
105
+ are [lifted automatically](#every-assembly-of-a-species).
101
106
 
102
107
  ### Mouse Ribo-seq ORFs (Chang et al.)
103
108
 
@@ -238,6 +243,114 @@ Cite Leblanc S, et al. *OpenProt 2.0 builds a path to the functional
238
243
  characterization of alternative proteins.* Nucleic Acids Res. 2024;52(D1):D522–D528,
239
244
  [doi:10.1093/nar/gkad1050](https://doi.org/10.1093/nar/gkad1050).
240
245
 
246
+ ## Human Ribo-seq ORFs (optional)
247
+
248
+ Human's default is the bundled GENCODE catalogue: 7,264 ORFs, offline, with
249
+ no setup. Two larger Ribo-seq catalogues are optional, used only when asked
250
+ for, because they would change every human selection and make loading human
251
+ ORFs about 60 times slower:
252
+
253
+ ```sh
254
+ orfdata setup --species human --catalogs all # Builds both; about 225 MB of sources
255
+ ```
256
+
257
+ ```python
258
+ from orfdata import Proteome, extra_orfs, load_catalog
259
+
260
+ catalog = load_catalog(species="human", catalogs="all") # Bundled, Chang et al. and Yang et al., merged
261
+ orfs = extra_orfs(genome, "ribosome", catalogs="all")
262
+ proteome = Proteome.build(genome, "all", catalogs="all")
263
+ load_catalog(species="human", catalogs=["ncorf-mammals-human"]) # Just one
264
+ ```
265
+
266
+ `orfdata proteome --catalogs all` does the same. They merge after the bundled
267
+ catalogue, Chang et al.'s before Yang et al.'s as for mouse, so an ORF in
268
+ several keeps the first one's ID. Together they give 57,607 ORFs, of which 57,485 place on Ensembl 115; that
269
+ takes about a minute and 3.2 GB of memory, against about a second for the
270
+ bundled catalogue alone. Neither adds MS evidence, so `"ms"` selects the same
271
+ ORFs either way.
272
+
273
+ - **`ncorf-mammals-human`:** the human ncORFs of [Chang et
274
+ al.](#mouse-ribo-seq-orfs-chang-et-al), from 174 Ribo-seq libraries
275
+ (Table S1), built as for mouse on Ensembl 107 GRCh38: 11,621 of the
276
+ source's 11,623, two having a coding length that isn't their protein plus
277
+ a stop. Types: uORF (6,178), lncORF (2,231), uoORF (1,633), iORF (773),
278
+ dORF (694) and doORF (112); 997 start at GTG.
279
+ - **`riborf-human`:** the human ORFs of [Yang et
280
+ al.](#mouse-riborf-orfs-yang-et-al), from 136 samples in 30 GEO series, on
281
+ GENCODE V39, placed through the same Ensembl 105 transcripts (GENCODE V39
282
+ is Ensembl 105): 51,174 of the 51,275 rows long enough; 101 are on
283
+ transcripts with no sequence in Ensembl 105's FASTAs. Types: uORF (23,664),
284
+ lncORF (11,379), uoORF (4,548), dORF (3,747), N-terminal truncation (3,561),
285
+ iORF (2,547), extension (1,046) and doORF (682).
286
+
287
+ `catalogs` takes `None` (the species' default set), `"all"`, or catalogue
288
+ names, `"bundled"` among them. `orfdata catalogs status` marks optional
289
+ catalogues. Everywhere but human, every catalogue is in the default set.
290
+
291
+ ## Zebrafish, C. elegans and yeast
292
+
293
+ ```sh
294
+ orfdata setup --species zebrafish # or worm, or yeast
295
+ ```
296
+
297
+ Yang et al.'s RibORF 2.0 ORFs of [the mouse catalogue's
298
+ kind](#mouse-riborf-orfs-yang-et-al), at least 5 residues long, from each
299
+ species' sheet of Supplementary Data 3, imported the same way:
300
+
301
+ | Catalogue | Samples (GEO series) | Placed through | ORFs | On Ensembl 115 |
302
+ | --- | --- | --- | ---: | ---: |
303
+ | `riborf-zebrafish` | 20 (2) | Ensembl 115 GRCz11 transcripts | 9,759 | 9,759 |
304
+ | `riborf-worm` | 39 (1) | Ensembl 105 WBcel235 transcripts | 2,849 | 2,433 |
305
+ | `riborf-yeast` | 5 (1) | the R64-1-1 genome (sacCer3) | 1,128 | 171 |
306
+
307
+ - **Zebrafish:** every source transcript has the same length in Ensembl 100
308
+ to 115, so the catalogue uses 115. 18 rows have ambiguous bases in the ORF
309
+ and are left out. Types: N-terminal truncation (3,805), uORF (3,543), dORF
310
+ (771), iORF (605), lncORF (411), uoORF (304), extension (224) and doORF (96).
311
+ - **C. elegans:** the source's transcripts match Ensembl 100 and 105, and
312
+ WormBase changed many models after, so the catalogue uses 105; all 2,849
313
+ place there, 2,433 on 115. Transcript names with dots of their own
314
+ (`F45H11.11.1`) are kept whole. Types: truncation (614), iORF (596),
315
+ extension (556), uORF (521), uoORF (217), lncORF (151), doORF (117) and dORF
316
+ (77).
317
+ - **Yeast:** the source's yeast transcripts carry UTRs, and some are unstable
318
+ transcripts (CUTs, SUTs), none of which Ensembl's yeast annotation has; its
319
+ transcripts span only the CDS. So each ORF is placed from its genomic span
320
+ and translated from the pinned genome. The source gives block sizes but not
321
+ starts, so the 4 ORFs on two exons are rebuilt from their first block's
322
+ size at the start and last block's at the end, each across a GT-AG intron;
323
+ Ty1's programmed frameshift (`YNL284C-B`, two blocks 1 nt apart) is left
324
+ out. A record names the Ensembl transcript (`YNL046W_mRNA`) only when that
325
+ transcript carries its coding path; otherwise it names the source's
326
+ transcript (`YNR004W`, `CUT808`), with the Ensembl gene where there is one.
327
+ Only the 171 ORFs on an Ensembl transcript, such as truncations and iORFs,
328
+ place on a PyEnsembl genome; the rest (uORFs in 5′ UTRs, ORFs on CUTs) stay
329
+ in the catalogue, queryable by region and gene, until ORFs on source-defined
330
+ RNAs are supported (#66). Types: uORF (321), lncORF (249), dORF (224),
331
+ truncation (137), extension (67), uoORF (55), doORF (40) and iORF (35).
332
+
333
+ ## Dog
334
+
335
+ No public resource gives dog ORF-level translation evidence, as of October
336
+ 2026:
337
+
338
+ - **Ribo-seq.** No dog ribosome profiling is in GEO, SRA or ENA, and none of
339
+ OpenProt, RiboSeq.org (147 organisms), RPFdb, SmProt or GWIPS-viz has dog.
340
+ The one dog experiment published, Pfeffer et al. 2015 (canine pancreas
341
+ rough-ER microsomes), deposited no reads.
342
+ - **Mass spectrometry.** Every dog dataset searched canonical proteins only,
343
+ so none reports a noncanonical peptide as deposited: the Canine
344
+ PeptideAtlas (PXD052932, 245,884 peptides from 13 tissues, plasma and
345
+ urine), the dog tumour DLA immunopeptidome (PXD074485, about 12,700
346
+ ligands), the Pfizer TMT atlas (PXD070290) and the dog brain proteome
347
+ (PXD033420, PXD034449).
348
+
349
+ Dog ncORF evidence therefore needs those spectra searched again against dog
350
+ ORF sequences. Human and mouse ORFs are never transferred to dog by orthology.
351
+ Dog proteomes contain their PyEnsembl-annotated proteins, and dog RNA and
352
+ protein abundance are available as [measurements](measurements.md).
353
+
241
354
  ## Every assembly of a species
242
355
 
243
356
  Catalogues on another assembly of the species are lifted automatically. Download
@@ -33,8 +33,10 @@ Calibration and uncertainty remain attached to observations:
33
33
  The separate existence-evidence catalogue contains 7,264 human noncanonical
34
34
  ORFs, including 2,186 with reported MS support. Mouse has 48,805 ORFs: Ribo-seq ORFs
35
35
  from Chang et al. and Yang et al., and 2,976 OpenProt 2.2 ORFs with at least
36
- two unique MS peptides, built from their sources' files; dog and yeast have no experimental
37
- ncORF catalogue yet. Its
36
+ two unique MS peptides, built from their sources' files. Yang et al.'s Ribo-seq ORFs
37
+ cover zebrafish (9,759), C. elegans (2,849) and yeast (1,128), and with Chang et al.'s
38
+ are optional human catalogues; dog has no experimental ncORF catalogue, because no
39
+ dog Ribo-seq or ncORF MS search is public ([details](catalogs.md#dog)). Its
38
40
  ribosome evidence and pooled PSM counts are not sample-level ribosome
39
41
  occupancy or protein abundance.
40
42
 
@@ -96,10 +96,12 @@ transcript alongside them.
96
96
 
97
97
  | Species | Annotated proteins | Noncanonical ORFs |
98
98
  | --- | --- | --- |
99
- | Human | From PyEnsembl; T2T-CHM13 from a pinned Ensembl annotation | 7,264 GRCh38 ORFs, bundled; lifted to GRCh37, NCBI36 and [T2T-CHM13](catalogs.md#t2t-chm13) |
99
+ | Human | From PyEnsembl; T2T-CHM13 from a pinned Ensembl annotation | 7,264 GRCh38 ORFs, bundled; lifted to GRCh37, NCBI36 and [T2T-CHM13](catalogs.md#t2t-chm13). 57,607 with the [optional Ribo-seq catalogues](catalogs.md#human-ribo-seq-orfs-optional) of Chang et al. and Yang et al. (`catalogs="all"`) |
100
100
  | Mouse | From PyEnsembl | 48,805 ORFs on GRCm39: Ribo-seq ORFs of Chang et al. and Yang et al., and 2,976 MS-supported ones (OpenProt 2.2), [built locally](catalogs.md#mouse) with `orfdata setup --species mouse`; lifted to GRCm38 and NCBIM37 |
101
- | Dog | From PyEnsembl | None: no experimentally supported dog ORF set exists |
102
- | Budding yeast | From PyEnsembl | None released |
101
+ | Zebrafish | From PyEnsembl | 9,759 GRCz11 Ribo-seq ORFs of Yang et al., [built locally](catalogs.md#zebrafish-c-elegans-and-yeast) |
102
+ | C. elegans | From PyEnsembl | 2,849 WBcel235 Ribo-seq ORFs of Yang et al., built locally |
103
+ | Budding yeast | From PyEnsembl | 1,128 R64-1-1 Ribo-seq ORFs of Yang et al., built locally; 171 lie on Ensembl's transcripts |
104
+ | Dog | From PyEnsembl | None: [no public dog Ribo-seq or ncORF MS exists](catalogs.md#dog) |
103
105
 
104
106
  Other assemblies use a catalogue lifted to them once `orfdata chains download`
105
107
  has fetched the chain files (with `--accept-terms` for UCSC's non-commercial
@@ -4,7 +4,7 @@ Resolve names and IDs offline with `orfdata.reference.species_taxon(name)` and
4
4
  `species_name_for_taxon(taxon_id)`. The latter returns a canonical species name,
5
5
  or `None` for an unknown positive ID, without requiring an Ensembl annotation.
6
6
 
7
- ORFdata uses the same objects for human, mouse, dog, yeast and custom species.
7
+ ORFdata uses the same objects for human, mouse, dog, zebrafish, C. elegans, yeast and custom species.
8
8
  Every ORF states its NCBI species taxon, assembly and genetic code. A
9
9
  `ReferenceContext` also pins the annotation provider/version and can retain a
10
10
  versioned assembly accession, strain taxon/label and sequence-set SHA-256.
@@ -917,16 +917,21 @@ def load_uorf_catalog(path=None, *, expected_sha256=None):
917
917
  _BUNDLED = {("homo_sapiens", "GRCh38"): "orf-evidence"}
918
918
 
919
919
 
920
- def load_catalog(path=None, *, species=None, genome_build=None, registry=None, expected_sha256=None):
920
+ def load_catalog(path=None, *, species=None, genome_build=None, registry=None, expected_sha256=None,
921
+ catalogs=None):
921
922
  """Load the ORF catalogue for a species and assembly, or a local catalogue file.
922
923
 
923
924
  ``species`` is a name such as ``"mouse"`` or ``"mus_musculus"``; as in
924
925
  PyEnsembl, it defaults to human. ``genome_build`` is needed only when
925
926
  catalogues cover several assemblies of the species.
926
927
 
927
- Every catalogue for the species is used: the bundled ones and those in
928
+ The species' catalogues are used: the bundled ones and those in
928
929
  ``registry`` (by default the packaged :class:`CatalogRegistry`), each at
929
- its release on ``genome_build`` if it has one, else its default. One on
930
+ its release on ``genome_build`` if it has one, else its default.
931
+ ``catalogs`` chooses which: ``None`` for the species' default set,
932
+ ``"all"`` to add the optional ones too (such as human's Ribo-seq
933
+ catalogues beside the bundled GENCODE set), or a name or list of names
934
+ (``"bundled"`` for the bundled one). One on
930
935
  another assembly is lifted to ``genome_build`` through the pinned chain
931
936
  files, in as many hops as needed, and all are merged. Catalogues and chain files must already
932
937
  be installed (``orfdata catalogs download``/``build``, ``orfdata chains
@@ -947,14 +952,17 @@ def load_catalog(path=None, *, species=None, genome_build=None, registry=None, e
947
952
  raise ValueError(f"{path} is a {_species(catalog.species)} catalogue, not {_species(species)}")
948
953
  if genome_build is not None and genome_build != catalog.genome_build:
949
954
  raise ValueError(f"{path} is a {catalog.genome_build} catalogue, not {genome_build}")
955
+ if catalogs is not None:
956
+ raise ValueError("Pass a catalogue path or catalogs, not both")
950
957
  return catalog
951
958
  from .liftover import chain_downloaded, lift_to
952
959
 
953
960
  species = _species("human" if species is None else species)
954
961
  choices = _catalog_choices(registry)
955
- found = [c for c in choices if c.species == species]
962
+ found = _selected([c for c in choices if c.species == species], catalogs, species)
956
963
  builds = sorted({c.genome_build for c in found})
957
- known = "; ".join(f"{c.species} {c.genome_build} ({c.label})" for c in choices) or "none"
964
+ known = "; ".join(f"{c.species} {c.genome_build} ({c.label})"
965
+ for c in sorted(choices, key=lambda c: (c.species, c.genome_build, c.name))) or "none"
958
966
  annotated_only = (" For a proteome of annotated proteins only, pass extra_orfs=False "
959
967
  "(orfdata proteome --extra-orf-evidence none).")
960
968
  if not found:
@@ -1002,8 +1010,10 @@ def load_catalog(path=None, *, species=None, genome_build=None, registry=None, e
1002
1010
  except ImportError:
1003
1011
  step = "orfdata[data] installed, then "
1004
1012
  accept = " --accept-terms" if any(c.restricted for c in missing) else ""
1013
+ chosen = ("" if catalogs is None else " --catalogs " + (
1014
+ catalogs if isinstance(catalogs, str) else ",".join(catalogs)))
1005
1015
  raise ValueError(f"{species} {genome_build} ORFs need {step}" + "; and ".join(needs)
1006
- + f". Or install everything at once with 'orfdata setup --species {species}{accept}"
1016
+ + f". Or install everything at once with 'orfdata setup --species {species}{chosen}{accept}"
1007
1017
  f"{cli_root}'")
1008
1018
  # Lifting and merging take seconds; one process reuses the result for exactly the same inputs.
1009
1019
  key = (species, genome_build, expected_sha256, tuple((c.name, c.version, c.resource, _installed_at(c), tuple(
@@ -1069,6 +1079,23 @@ def _assembly_hint(species, genome_build, choices):
1069
1079
  return f" {genome_build} is a {', '.join(sorted(others))} assembly, not {species}." if others else ""
1070
1080
 
1071
1081
 
1082
+ def _selected(found, catalogs, species):
1083
+ """The species' catalogues a selection names: None for its default set, "all" for every one, or names."""
1084
+ if catalogs is None:
1085
+ return [c for c in found if not c.optional]
1086
+ names = [catalogs] if isinstance(catalogs, str) else list(catalogs)
1087
+ if "all" in names:
1088
+ return found
1089
+ known = sorted({c.name for c in found})
1090
+ if not known:
1091
+ return [] # load_catalog names the species that have catalogues.
1092
+ unknown = [n for n in names if n not in known]
1093
+ if not names or unknown:
1094
+ raise ValueError(f"No {species} catalogue named {', '.join(map(repr, unknown)) or 'in an empty selection'}; "
1095
+ f"{species} has {', '.join(known)}, or pass catalogs='all'")
1096
+ return [c for c in found if c.name in names]
1097
+
1098
+
1072
1099
  def _plan(found, species, genome_build):
1073
1100
  """The catalogues load_catalog uses for one species and assembly, each with the chains that lift it there.
1074
1101
 
@@ -1125,6 +1152,7 @@ class _Choice(NamedTuple):
1125
1152
  resource: Optional[str] = None
1126
1153
  version: Optional[str] = None
1127
1154
  priority: int = 0
1155
+ optional: bool = False
1128
1156
 
1129
1157
  @property
1130
1158
  def label(self):
@@ -1137,9 +1165,10 @@ def _catalog_choices(registry):
1137
1165
 
1138
1166
  registry = CatalogRegistry() if registry is None else registry
1139
1167
  priority = getattr(registry, "priority", lambda name: 100)
1168
+ optional = getattr(registry, "optional", lambda name: False)
1140
1169
  return [_Choice(s, b, "bundled", resource=r) for (s, b), r in _BUNDLED.items()] + [
1141
1170
  _Choice(_species(m.references[0].species), m.genome_build, m.catalog_id, registry, version=m.version,
1142
- priority=priority(m.catalog_id))
1171
+ priority=priority(m.catalog_id), optional=optional(m.catalog_id))
1143
1172
  for m in registry.list()]
1144
1173
 
1145
1174
 
@@ -1209,7 +1238,8 @@ class CatalogStatus:
1209
1238
  """One ORF catalogue load_catalog can open, and whether it is ready offline.
1210
1239
 
1211
1240
  ``selected`` marks the ones ``load_catalog(species=..., genome_build=...)``
1212
- uses, merged, for their species and assembly. ``installed`` is ``"bundled"``,
1241
+ uses, merged, for their species and assembly. ``optional`` marks those it
1242
+ uses only when asked for (``catalogs="all"`` or by name). ``installed`` is ``"bundled"``,
1213
1243
  ``"downloaded"``, ``"built"``, ``"damaged"`` or None; ``acquire`` names the explicit step
1214
1244
  that installs a missing one, ``"download"`` or ``"build"``. ``lifts_to``
1215
1245
  lists the other assemblies the pinned chains reach, each with its chains
@@ -1226,6 +1256,7 @@ class CatalogStatus:
1226
1256
  installed: Optional[str]
1227
1257
  acquire: Optional[str]
1228
1258
  lifts_to: tuple = ()
1259
+ optional: bool = False
1229
1260
 
1230
1261
 
1231
1262
  def catalog_status(*, registry=None):
@@ -1242,13 +1273,15 @@ def catalog_status(*, registry=None):
1242
1273
  root = getattr(registry, "_cache_root", None)
1243
1274
  plans = {}
1244
1275
 
1245
- def plan(species, build):
1246
- if (species, build) not in plans:
1276
+ def plan(species, build, catalogs=None):
1277
+ """What load_catalog uses on this assembly: the default set, or with ``catalogs="all"`` the optional too."""
1278
+ if (species, build, catalogs) not in plans:
1247
1279
  try:
1248
- plans[species, build] = _plan([c for c in choices if c.species == species], species, build)
1280
+ plans[species, build, catalogs] = _plan(
1281
+ _selected([c for c in choices if c.species == species], catalogs, species), species, build)
1249
1282
  except ValueError:
1250
- plans[species, build] = []
1251
- return plans[species, build]
1283
+ plans[species, build, catalogs] = []
1284
+ return plans[species, build, catalogs]
1252
1285
 
1253
1286
  def downloaded(chain):
1254
1287
  try:
@@ -1261,7 +1294,7 @@ def catalog_status(*, registry=None):
1261
1294
  selected = any(choice == c and not route for choice, route in plan(c.species, c.genome_build))
1262
1295
  lifts = tuple(dict(genome_build=build, chains=[x.name for x in route], downloaded=all(map(downloaded, route)))
1263
1296
  for build, route in sorted(chain_routes(c.species, c.genome_build).items())
1264
- if any(choice == c for choice, _ in plan(c.species, build)))
1297
+ if any(choice == c for choice, _ in plan(c.species, build, "all" if c.optional else None)))
1265
1298
  if c.registry is None:
1266
1299
  manifest = json.loads(files("orfdata").joinpath(f"data/{c.resource}/manifest.json").read_text())
1267
1300
  rows.append(CatalogStatus(c.species, c.genome_build, c.name, manifest["dataset_version"],
@@ -1271,5 +1304,6 @@ def catalog_status(*, registry=None):
1271
1304
  info = c.registry.info(c.name, c.version)
1272
1305
  rows.append(CatalogStatus(c.species, c.genome_build, c.name, c.version, info.title, info.coverage["records"],
1273
1306
  selected, _installed(c),
1274
- "download" if c.registry.published(c.name, c.version) else "build", lifts))
1307
+ "download" if c.registry.published(c.name, c.version) else "build", lifts,
1308
+ c.optional))
1275
1309
  return tuple(rows)
@@ -57,6 +57,10 @@ def _builder(manifest):
57
57
  from .sources.riborf import import_orfs
58
58
 
59
59
  return lambda inputs, output: import_orfs(inputs, output, manifest)
60
+ if importer == "riborf-genome-v1":
61
+ from .sources.riborf import import_genome_orfs
62
+
63
+ return lambda inputs, output: import_genome_orfs(inputs, output, manifest)
60
64
  raise ValueError("No packaged importer for this catalogue release")
61
65
 
62
66
 
@@ -82,6 +86,8 @@ class CatalogRegistry:
82
86
  raise ValueError("A catalogue default must be a pinned version")
83
87
  if type(entry.get("priority", 0)) is not int:
84
88
  raise ValueError(f"The {name} catalogue's priority must be an integer, lower merging first")
89
+ if type(entry.get("optional", False)) is not bool:
90
+ raise ValueError(f"The {name} catalogue's optional flag must be true or false")
85
91
  for version, release in entry["versions"].items():
86
92
  manifest = CatalogManifest.from_dict(release["manifest"])
87
93
  if (manifest.catalog_id, manifest.version) != (name, version):
@@ -130,6 +136,12 @@ class CatalogRegistry:
130
136
  raise ValueError(f"Unknown catalogue {name!r}; see 'orfdata catalogs list' or CatalogRegistry().list()")
131
137
  return self._definitions[name].get("priority", 100)
132
138
 
139
+ def optional(self, name):
140
+ """Whether the catalogue is used only when asked for (``catalogs="all"`` or its name), not by default."""
141
+ if name not in self._definitions:
142
+ raise ValueError(f"Unknown catalogue {name!r}; see 'orfdata catalogs list' or CatalogRegistry().list()")
143
+ return self._definitions[name].get("optional", False)
144
+
133
145
  def published(self, name, version=None):
134
146
  """Whether the release has a published artifact to download; otherwise it is built locally."""
135
147
  version = self._version(name, version)
@@ -59,13 +59,16 @@ def _setup(argv, prog):
59
59
  parser.add_argument("--accept-terms", action="store_true",
60
60
  help="Accept usage terms of restricted chain files, such as UCSC's non-commercial ones")
61
61
  parser.add_argument("--force", action="store_true", help="Install again even what is already installed")
62
+ parser.add_argument("--catalogs", metavar="NAMES", type=_catalog_names,
63
+ help="'all' to add the species' optional catalogues, such as human's Ribo-seq ones, or "
64
+ "comma-separated catalogue names; the species' default set by default")
62
65
  parser.add_argument("--cache-root", help="Cache directory instead of ORFDATA_CACHE, OPENVAX_DATA_CACHE or the default")
63
66
  parser.add_argument("--timeout", type=float, default=60,
64
67
  help="Seconds a download may stall before it is retried, then fails (default 60)")
65
68
  args = parser.parse_args(argv)
66
69
  try:
67
70
  result = install_species(args.species, accept_terms=args.accept_terms, force=args.force,
68
- cache_root=args.cache_root, timeout=args.timeout)
71
+ cache_root=args.cache_root, timeout=args.timeout, catalogs=args.catalogs)
69
72
  except InstallError as error: # What did install is still reported.
70
73
  json.dump(error.result, sys.stdout, indent=2)
71
74
  sys.stdout.write("\n")
@@ -76,6 +79,11 @@ def _setup(argv, prog):
76
79
  sys.stdout.write("\n")
77
80
 
78
81
 
82
+ def _catalog_names(value):
83
+ """``--catalogs``: "all", or comma-separated catalogue names."""
84
+ return value if value == "all" else [name for name in value.split(",") if name]
85
+
86
+
79
87
  def _add_query_arguments(parser, *, catalog_path=True):
80
88
  if catalog_path:
81
89
  parser.add_argument("--catalog", action="append",