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.
- {orfdata-0.29.0/orfdata.egg-info → orfdata-0.30.0}/PKG-INFO +16 -7
- {orfdata-0.29.0 → orfdata-0.30.0}/README.md +15 -6
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/catalogs.md +122 -9
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/coverage.md +4 -2
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/index.md +5 -3
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/species.md +1 -1
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/catalog.py +49 -15
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/catalogs.py +12 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/cli.py +9 -1
- orfdata-0.30.0/orfdata/data/catalogs.json +829 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/install.py +6 -4
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/proteome.py +27 -24
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/proteome_cli.py +6 -3
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/reference.py +2 -0
- orfdata-0.30.0/orfdata/sources/riborf.py +327 -0
- orfdata-0.30.0/orfdata/version.py +1 -0
- {orfdata-0.29.0 → orfdata-0.30.0/orfdata.egg-info}/PKG-INFO +16 -7
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata.egg-info/SOURCES.txt +16 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ncorf_mammals/README.md +8 -0
- orfdata-0.30.0/tests/data/ncorf_mammals/S3.xlsx +0 -0
- orfdata-0.30.0/tests/data/ncorf_mammals/human-ensembl107.gtf.gz +0 -0
- orfdata-0.30.0/tests/data/ncorf_mammals/human.bed +4 -0
- orfdata-0.30.0/tests/data/ncorf_mammals/human.pep.fa +8 -0
- orfdata-0.30.0/tests/data/riborf/README.md +44 -0
- orfdata-0.30.0/tests/data/riborf/SD3.xlsx +0 -0
- orfdata-0.30.0/tests/data/riborf/human-ensembl105.cdna.fa.gz +0 -0
- orfdata-0.30.0/tests/data/riborf/human-ensembl105.gtf.gz +0 -0
- orfdata-0.30.0/tests/data/riborf/human-ensembl105.ncrna.fa.gz +0 -0
- orfdata-0.30.0/tests/data/riborf/worm-ensembl105.cdna.fa.gz +0 -0
- orfdata-0.30.0/tests/data/riborf/worm-ensembl105.gtf.gz +0 -0
- orfdata-0.30.0/tests/data/riborf/worm-ensembl105.ncrna.fa.gz +0 -0
- orfdata-0.30.0/tests/data/riborf/yeast-ensembl115.cdna.fa.gz +0 -0
- orfdata-0.30.0/tests/data/riborf/yeast-ensembl115.dna.fa.gz +0 -0
- orfdata-0.30.0/tests/data/riborf/yeast-ensembl115.gtf.gz +0 -0
- orfdata-0.30.0/tests/data/riborf/zebrafish-ensembl115.cdna.fa.gz +0 -0
- orfdata-0.30.0/tests/data/riborf/zebrafish-ensembl115.gtf.gz +0 -0
- orfdata-0.30.0/tests/data/riborf/zebrafish-ensembl115.ncrna.fa.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_catalog_registry.py +4 -2
- orfdata-0.30.0/tests/test_more_species.py +192 -0
- orfdata-0.29.0/orfdata/data/catalogs.json +0 -307
- orfdata-0.29.0/orfdata/sources/riborf.py +0 -163
- orfdata-0.29.0/orfdata/version.py +0 -1
- orfdata-0.29.0/tests/data/ncorf_mammals/S3.xlsx +0 -0
- orfdata-0.29.0/tests/data/riborf/README.md +0 -21
- orfdata-0.29.0/tests/data/riborf/SD3.xlsx +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/LICENSE +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/MANIFEST.in +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/deploy.sh +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/copy-yeast.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/examples.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/human-tissue.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/ingolia-yeast.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/measurements.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/pairing.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/pfizer-protein.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/pfizer-rna.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/proteome.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/reference.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/search-references.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/source-references.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/storage.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/stylesheets/docs.css +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/docs/viral.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/docs.sh +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/lint.sh +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/mkdocs.yml +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/__init__.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/_pinned_genome.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/_structure.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/build.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/catalog_cli.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/catalog_manifest.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/chains.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/datasets.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/genomes.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/ires/rfam-15.1-human-ires.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/orf-evidence/AUTHOR-LICENSE.txt +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/orf-evidence/NOTICE.txt +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/orf-evidence/catalog.json.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/orf-evidence/manifest.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/uorf-evidence/AUTHOR-LICENSE.txt +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/uorf-evidence/NOTICE.txt +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/uorf-evidence/catalog.json.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/uorf-evidence/manifest.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/viral/NOTICE.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/data/viral/hpv16-refseq-CDS.json.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/dataset.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/dataset_cli.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/datasets.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/evidence.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/evidence_summary.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/genomes.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/genomes_cli.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/initiation_context.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/liftover.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/liftover_cli.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/measurements.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/model.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/pairing.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/reference_mapping.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/rna.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/search_reference.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sequence.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sources/__init__.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sources/copy.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sources/ingolia.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sources/ncorf_mammals.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sources/openprot.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sources/pfizer.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sources/pfizer_rna.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/sources/wang.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata/viral.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata.egg-info/dependency_links.txt +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata.egg-info/entry_points.txt +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata.egg-info/requires.txt +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/orfdata.egg-info/top_level.txt +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/pyproject.toml +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/setup.cfg +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/test.sh +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/conftest.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/aggregate_evidence.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/GSM1905474.soft +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/GSM1905474_KL9_fpkm.txt.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/GSM1905476.soft +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/GSM1905476_KL10_fpkm.txt.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/GSM1905478.soft +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/GSM1905478_KL11_fpkm.txt.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/GSM1905479.soft +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/GSM1905479_KL12_fpkm.txt.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/NOTICE.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/expected.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/geo-series.soft +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/manifest.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/methods.pdf +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/paper.xml +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/pmc-metadata.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/qconcat.fasta +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/copy/workbook.xlsx +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346111.metadata.txt +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346111.quant.txt.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346114.metadata.txt +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346114.quant.txt.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346115.metadata.txt +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346115.quant.txt.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346116.metadata.txt +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346116.quant.txt.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346117.metadata.txt +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346117.quant.txt.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346118.metadata.txt +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346118.quant.txt.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346120.metadata.txt +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346120.quant.txt.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346122.metadata.txt +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/GSM346122.quant.txt.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/NOTICE.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/expected.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/manifest.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ingolia/readMe.txt.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ncorf_mammals/ensembl107.cdna.fa.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ncorf_mammals/ensembl107.gtf.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ncorf_mammals/mouse.bed +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/ncorf_mammals/mouse.pep.fa +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/openprot/README.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/openprot/ensembl106.cdna.fa.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/openprot/ensembl106.gtf.gz +0 -0
- {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
- {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
- {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
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/NOTICE.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/dog/expected.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/dog/manifest.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/dog/protein.tsv +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/dog/search.fasta +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/human/expected.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/human/manifest.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/human/protein.tsv +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/human/search.fasta +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/mouse/expected.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/mouse/manifest.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/mouse/protein.tsv +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer/mouse/search.fasta +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/GSE325522_family.soft.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/GSE325523_family.soft.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/GSE325525_family.soft.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/NOTICE.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/counts.csv.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/dog-annotation.gtf.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/dog-expected.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/dog-manifest.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/mouse-annotation.gtf.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/mouse-expected.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/mouse-manifest.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/pfizer_rna/samples.xlsx +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/README.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/canis_lupus_familiaris.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/context-keys-v0.4.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/ensembl115.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/homo_sapiens.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/mitochondrial.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/mus_musculus.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/saccharomyces_cerevisiae.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/references/uniprot_literature.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/regions/NOTICE.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/regions/ingolia.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/riborf/ensembl107.cdna.fa.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/riborf/ensembl107.gtf.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/riborf/ensembl107.ncrna.fa.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/search_reference/NOTICE.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/search_reference/dog.fasta +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/search_reference/ensembl83-expected.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/search_reference/ensembl83-human.fasta.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/search_reference/expected.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/storage/README.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/storage/generate.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/storage/v1.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/storage/v1.sqlite +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/storage/v2.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/storage/v2.sqlite +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/storage/v3.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/storage/v3.sqlite +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/viral/NC_001526.4.gb.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/wang/NOTICE.md +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/wang/annotation.gtf.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/wang/copies.zip +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/wang/expected.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/wang/manifest.json +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/wang/protein.zip +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/wang/rna.zip +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/data/wang/search.fasta.gz +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_copy.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_cross_reference_pairing.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_ensembl_search_reference.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_evidence_rules.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_evidence_summary.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_genetic_codes.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_genomes.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_ingolia.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_initiation_context.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_liftover.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_local_build_queries.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_measurements.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_merge_catalogs.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_ncorf_mammals.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_openprot.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_orf_cases.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_paired_selectors.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_pairing.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_pfizer.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_pfizer_rna.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_proteome.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_reference_context.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_reference_mapping.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_reference_orf.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_region_targets.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_riborf.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_search_reference.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_selectors.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_storage.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_uorf_catalog.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_viral.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tests/test_wang.py +0 -0
- {orfdata-0.29.0 → orfdata-0.30.0}/tools/__init__.py +0 -0
- {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.
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
|
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
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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).
|
|
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
|
|
37
|
-
|
|
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
|
-
|
|
|
102
|
-
|
|
|
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
|
-
|
|
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.
|
|
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})"
|
|
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. ``
|
|
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
|
-
|
|
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(
|
|
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",
|