orfdata 0.42.2__tar.gz → 0.42.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {orfdata-0.42.2 → orfdata-0.42.4}/MANIFEST.in +1 -0
- {orfdata-0.42.2/orfdata.egg-info → orfdata-0.42.4}/PKG-INFO +1 -1
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/catalogs.md +58 -61
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/coverage.md +4 -3
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/dog-data-sources.md +4 -2
- orfdata-0.42.4/docs/mammary-stroma.md +104 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/pairing.md +6 -1
- {orfdata-0.42.2 → orfdata-0.42.4}/mkdocs.yml +1 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/catalog.py +48 -7
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/catalog_manifest.py +24 -1
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/catalogs.py +9 -3
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/cli.py +2 -2
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/catalogs.json +146 -1
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/datasets.json +255 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/liftover.py +5 -1
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/pairing.py +1 -1
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/proteome.py +3 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/__init__.py +4 -0
- orfdata-0.42.4/orfdata/sources/mammary_stroma.py +496 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/riborf.py +10 -2
- orfdata-0.42.4/orfdata/sources/riborf_native.py +430 -0
- orfdata-0.42.4/orfdata/version.py +1 -0
- {orfdata-0.42.2 → orfdata-0.42.4/orfdata.egg-info}/PKG-INFO +1 -1
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata.egg-info/SOURCES.txt +18 -1
- orfdata-0.42.4/tests/data/mammary_stroma/NOTICE.md +34 -0
- orfdata-0.42.4/tests/data/mammary_stroma/geo.soft.gz +0 -0
- orfdata-0.42.4/tests/data/mammary_stroma/manifest.json +238 -0
- orfdata-0.42.4/tests/data/mammary_stroma/paper.xml +2 -0
- orfdata-0.42.4/tests/data/mammary_stroma/peptides.txt +5 -0
- orfdata-0.42.4/tests/data/mammary_stroma/project.json +1 -0
- orfdata-0.42.4/tests/data/mammary_stroma/proteinGroups.txt +9 -0
- orfdata-0.42.4/tests/data/mammary_stroma/rna.csv.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/riborf/README.md +19 -17
- orfdata-0.42.4/tests/data/riborf/gencodeM25.gtf.gz +0 -0
- orfdata-0.42.4/tests/data/riborf/gencodeM25.rna.fa.gz +0 -0
- orfdata-0.42.4/tests/data/riborf/v3-manifest.json +131 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_catalog_registry.py +1 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_data_resources.py +1 -1
- orfdata-0.42.4/tests/test_mammary_stroma.py +213 -0
- orfdata-0.42.4/tests/test_riborf.py +489 -0
- orfdata-0.42.4/tools/verify_mammary_stroma.py +88 -0
- orfdata-0.42.4/tools/verify_riborf_native.py +161 -0
- orfdata-0.42.2/orfdata/version.py +0 -1
- orfdata-0.42.2/tests/test_riborf.py +0 -135
- {orfdata-0.42.2 → orfdata-0.42.4}/LICENSE +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/README.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/deploy.sh +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/copy-yeast.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/dog-peptides.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/downloads.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/downstream.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/examples.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/human-tissue.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/index.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/ingolia-yeast.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/measurements.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/pfizer-peptides.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/pfizer-protein.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/pfizer-rna.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/proteome.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/reference.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/search-references.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/source-references.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/species.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/storage.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/stylesheets/docs.css +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs/viral.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/docs.sh +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/lint.sh +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/__init__.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/_pinned_genome.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/_structure.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/artifact_archives.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/build.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/catalog_cli.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/cli_output.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/chains.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/genomes.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/ires/rfam-15.1-human-ires.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/orf-evidence/AUTHOR-LICENSE.txt +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/orf-evidence/NOTICE.txt +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/orf-evidence/catalog.json.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/orf-evidence/manifest.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/uorf-evidence/AUTHOR-LICENSE.txt +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/uorf-evidence/NOTICE.txt +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/uorf-evidence/catalog.json.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/uorf-evidence/manifest.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/viral/NOTICE.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/viral/gdc-grch38-d1-vd1-coverage.tsv +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/viral/gdc-grch38-d1-vd1-genbank.tsv +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/viral/gdc-grch38-d1-vd1-pave.tsv +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/viral/hpv16-refseq-CDS.json.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data/viral/subsets.yaml +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/data_resources.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/dataset.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/dataset_cli.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/datasets.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/download_cli.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/downloads.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/evidence.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/evidence_summary.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/fasta.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/genbank.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/genomes.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/genomes_cli.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/gtf.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/initiation_context.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/install.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/liftover_cli.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/measurements.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/model.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/net.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/numeric_vector.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/proteome_cli.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/record_sources.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/reference.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/reference_ledger.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/reference_mapping.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/reference_table.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/refseq.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/rna.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/search_reference.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sequence.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/copy.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/ingolia.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/kaabinejadian.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/ncorf_mammals.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/openprot.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/peptideatlas.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/pfizer.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/pfizer_attribution.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/pfizer_dataset.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/pfizer_definitions.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/pfizer_evidence.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/pfizer_lineage.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/pfizer_native.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/pfizer_queries.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/pfizer_rna.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/pfizer_vendor.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/sources/wang.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/viral.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/viral_annotation.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/viral_cli.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/viral_coverage.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/viral_panel.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/viral_registry.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata/viral_subsets.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata.egg-info/dependency_links.txt +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata.egg-info/entry_points.txt +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata.egg-info/requires.txt +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/orfdata.egg-info/top_level.txt +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/pyproject.toml +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/setup.cfg +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/test.sh +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/conftest.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/aggregate_evidence.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/copy/GSM1905474.soft +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/copy/GSM1905474_KL9_fpkm.txt.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/copy/GSM1905476.soft +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/copy/GSM1905476_KL10_fpkm.txt.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/copy/GSM1905478.soft +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/copy/GSM1905478_KL11_fpkm.txt.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/copy/GSM1905479.soft +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/copy/GSM1905479_KL12_fpkm.txt.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/copy/NOTICE.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/copy/expected.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/copy/geo-series.soft +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/copy/manifest.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/copy/methods.pdf +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/copy/paper.xml +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/copy/pmc-metadata.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/copy/qconcat.fasta +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/copy/workbook.xlsx +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/GSM346111.metadata.txt +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/GSM346111.quant.txt.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/GSM346114.metadata.txt +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/GSM346114.quant.txt.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/GSM346115.metadata.txt +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/GSM346115.quant.txt.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/GSM346116.metadata.txt +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/GSM346116.quant.txt.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/GSM346117.metadata.txt +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/GSM346117.quant.txt.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/GSM346118.metadata.txt +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/GSM346118.quant.txt.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/GSM346120.metadata.txt +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/GSM346120.quant.txt.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/GSM346122.metadata.txt +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/GSM346122.quant.txt.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/NOTICE.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/expected.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/manifest.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ingolia/readMe.txt.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/kaabinejadian/README.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/kaabinejadian/Results.zip +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/kaabinejadian/manifest-v1.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/kaabinejadian/manifest.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/kaabinejadian/sdrf.tsv +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ncorf_mammals/README.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ncorf_mammals/S3.xlsx +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ncorf_mammals/ensembl107.cdna.fa.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ncorf_mammals/ensembl107.gtf.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ncorf_mammals/human-ensembl107.gtf.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ncorf_mammals/human.bed +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ncorf_mammals/human.pep.fa +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ncorf_mammals/mouse.bed +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/ncorf_mammals/mouse.pep.fa +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/openprot/README.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/openprot/ensembl106.cdna.fa.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/openprot/ensembl106.gtf.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/openprot/mouse-openprot-2_2-altprots+isoforms-min_2_pep-GRCm39.106.bed.zip +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/openprot/mouse-openprot-2_2-altprots+isoforms-min_2_pep-GRCm39.106.fasta.zip +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/openprot/mouse-openprot-2_2-altprots+isoforms-min_2_pep-GRCm39.106.tsv.zip +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/peptideatlas/README.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/peptideatlas/atlas_build.tsv.zip +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/peptideatlas/ensembl.pep.fa.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/peptideatlas/manifest.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/NOTICE.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/dog/expected.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/dog/manifest.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/dog/protein.tsv +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/dog/search.fasta +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/human/expected.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/human/manifest.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/human/protein.tsv +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/human/search.fasta +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/mouse/expected.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/mouse/manifest.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/mouse/protein.tsv +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/mouse/search.fasta +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/vendor/NOTICE.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/vendor/acquisition-missingness.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/vendor/definitions.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/vendor/dog-panel.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/vendor/membership-search-slice.fasta +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/vendor/memberships.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/vendor/native.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/vendor/parent-status-search-slice.fasta +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/vendor/parent-status.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/vendor/psm-parent-sets-search-slice.fasta +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/vendor/psm-parent-sets.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/vendor/search-slice.fasta +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/vendor/search-slice.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/vendor/study-slice.xml +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer/vendor/summary-samples.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer_rna/GSE325522_family.soft.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer_rna/GSE325523_family.soft.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer_rna/GSE325525_family.soft.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer_rna/NOTICE.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer_rna/counts.csv.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer_rna/dog-annotation.gtf.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer_rna/dog-expected.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer_rna/dog-manifest.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer_rna/mouse-annotation.gtf.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer_rna/mouse-expected.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer_rna/mouse-manifest.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/pfizer_rna/samples.xlsx +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/references/README.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/references/canis_lupus_familiaris.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/references/context-keys-v0.4.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/references/ensembl115.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/references/homo_sapiens.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/references/mitochondrial.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/references/mus_musculus.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/references/saccharomyces_cerevisiae.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/references/transcript_orf_v1_0.42.0.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/references/uniprot_literature.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/regions/NOTICE.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/regions/ingolia.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/riborf/SD3.xlsx +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/riborf/ensembl107.cdna.fa.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/riborf/ensembl107.gtf.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/riborf/ensembl107.ncrna.fa.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/riborf/human-ensembl105.cdna.fa.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/riborf/human-ensembl105.gtf.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/riborf/human-ensembl105.ncrna.fa.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/riborf/worm-ensembl105.cdna.fa.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/riborf/worm-ensembl105.gtf.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/riborf/worm-ensembl105.ncrna.fa.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/riborf/yeast-ensembl115.cdna.fa.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/riborf/yeast-ensembl115.dna.fa.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/riborf/yeast-ensembl115.gtf.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/riborf/zebrafish-ensembl115.cdna.fa.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/riborf/zebrafish-ensembl115.gtf.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/riborf/zebrafish-ensembl115.ncrna.fa.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/search_reference/NOTICE.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/search_reference/dog.fasta +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/search_reference/ensembl83-expected.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/search_reference/ensembl83-human.fasta.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/search_reference/expected.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/storage/README.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/storage/generate.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/storage/v1.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/storage/v1.sqlite +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/storage/v2.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/storage/v2.sqlite +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/storage/v3.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/storage/v3.sqlite +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/storage/v4.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/storage/v4.sqlite +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/viral/GRCh83.d1.vd1_virus_decoy.txt.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/viral/NC_001526.4.gb.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/viral/genbank/HBV__X04615.1.gb.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/viral/genbank/HPV16__K02718.1.gb.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/viral/genbank/HPV35__X74477.1.gb.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/viral/genbank/HPV51__M62877.1.gb.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/viral/genbank/HPV56__X74483.1.gb.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/wang/NOTICE.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/wang/annotation.gtf.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/wang/copies.zip +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/wang/expected.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/wang/manifest.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/wang/protein.zip +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/wang/rna.zip +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/data/wang/search.fasta.gz +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_artifact_archives.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_copy.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_cross_reference_pairing.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_dog_export_read_ahead.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_dog_ncorf_search.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_dog_peptides.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_downloads.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_ensembl_search_reference.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_evidence_rules.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_evidence_summary.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_export_sqlite_rows.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_extraction_budget.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_ftps_sqlite.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_genbank.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_genbank_equivalence.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_genetic_codes.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_genomes.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_ingolia.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_initiation_context.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_liftover.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_local_build_queries.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_measurements.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_merge_catalogs.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_more_species.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_ncorf_mammals.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_numeric_vector.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_openprot.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_orf_cases.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_orf_gtf.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_package_dog_dataset.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_package_sqlite_archive.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_paired_selectors.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_pairing.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_pfizer.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_pfizer_attribution.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_pfizer_dataset.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_pfizer_definitions.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_pfizer_evidence.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_pfizer_lineage.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_pfizer_native.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_pfizer_rna.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_pfizer_vendor.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_protein_set.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_proteome.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_proteome_external.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_proteome_fasta_tokens.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_proteome_producer_graph.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_reference_context.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_reference_ledger.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_reference_mapping.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_reference_orf.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_reference_table.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_refseq.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_region_targets.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_search_reference.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_selectors.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_storage.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_transcript_orf_serialization.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_uorf_catalog.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_verify_dog_dataset.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_viral.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_viral_bundle.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_viral_cli.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_viral_collections.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_viral_completeness.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_viral_coverage.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_viral_initiation.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_viral_origin_join.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_viral_sources.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_viral_subsets.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tests/test_wang.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tools/README-dog-results.md +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tools/__init__.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tools/build_dog_dataset.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tools/build_gdc_viral_coverage.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tools/build_hpv16_cds.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tools/build_reference_ledger.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tools/dog_result_plan.json +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tools/export_dog_lineage.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tools/export_dog_results.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tools/export_sqlite_rows.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tools/extraction_budget.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tools/ftps_sqlite.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tools/inspect_dog_results.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tools/normalize_dog_evidence.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tools/package_dog_dataset.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tools/package_sqlite_archive.py +0 -0
- {orfdata-0.42.2 → orfdata-0.42.4}/tools/verify_dog_dataset.py +0 -0
|
@@ -15,3 +15,4 @@ recursive-include tests/data/ncorf_mammals *.bed *.fa *.xlsx *.gz *.md
|
|
|
15
15
|
recursive-include tests/data/riborf *.xlsx *.gz *.md
|
|
16
16
|
recursive-include tests/data/kaabinejadian *.zip *.tsv
|
|
17
17
|
recursive-include tests/data/peptideatlas *.zip *.gz
|
|
18
|
+
recursive-include tests/data/mammary_stroma *.gz *.txt *.xml
|
|
@@ -82,29 +82,19 @@ pip install "orfdata"
|
|
|
82
82
|
orfdata setup --species mouse --accept-terms # Three catalogues and the chains
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
`orfdata setup` downloads the published Chang et al.
|
|
86
|
-
registered mouse catalogues from their pinned sources, and downloads the chain files (`--accept-terms` for UCSC's non-commercial
|
|
85
|
+
`orfdata setup` downloads the published Chang et al. and RibORF catalogues, builds OpenProt from their pinned sources, and downloads the chain files (`--accept-terms` for UCSC's non-commercial
|
|
87
86
|
GRCm38/GRCm39 chains). It prints what it did with each: built, downloaded,
|
|
88
87
|
already installed, repaired or skipped. If one fails, the rest are still
|
|
89
88
|
installed and it exits with status 1, naming each failure; in Python,
|
|
90
89
|
`install_species` raises `InstallError`, whose `result` holds the same
|
|
91
|
-
report. `load_catalog(species="mouse")`
|
|
92
|
-
in
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
| --- | ---: | ---: |
|
|
100
|
-
| `"ms"` (default) | 2,976 | 2,854 |
|
|
101
|
-
| `RiboSeq()` | 58,109 | 57,992 |
|
|
102
|
-
| `RiboSeq() & MS()` | 378 | 371 |
|
|
103
|
-
| `None` | 60,707 | 60,475 |
|
|
104
|
-
|
|
105
|
-
Loading the merged catalogue takes about 10 seconds and 1.1 GB of memory, once
|
|
106
|
-
per process, whichever evidence is selected. On GRCm38 and NCBIM37 all three
|
|
107
|
-
are [lifted automatically](#every-assembly-of-a-species).
|
|
90
|
+
report. `load_catalog(species="mouse")` merges OpenProt, Chang et al. and
|
|
91
|
+
Yang et al. in that order. Current inputs contain 2,976 MS-supported OpenProt
|
|
92
|
+
ORFs, 16,484 Chang et al. ORFs and 51,831 validated Yang et al. target placements.
|
|
93
|
+
Overlapping source models merge by coding path and protein while keeping their
|
|
94
|
+
original evidence. Merged counts and target-genome placement counts depend on
|
|
95
|
+
these versions; inspect the resulting catalogue and proteome layer receipts.
|
|
96
|
+
On GRCm38 and NCBIM37 the catalogues are
|
|
97
|
+
[lifted automatically](#every-assembly-of-a-species).
|
|
108
98
|
|
|
109
99
|
### Mouse Ribo-seq ORFs (Chang et al.)
|
|
110
100
|
|
|
@@ -143,48 +133,55 @@ ATG, CTG, GTG or TTG. Its types are uORF (8,294), lncORF (3,576), uoORF
|
|
|
143
133
|
|
|
144
134
|
### Mouse RibORF ORFs (Yang et al.)
|
|
145
135
|
|
|
146
|
-
`riborf-mouse`
|
|
147
|
-
|
|
148
|
-
[doi:10.1038/s41467-024-46240-9](https://doi.org/10.1038/s41467-024-46240-9)
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
136
|
+
`riborf-mouse` generation 3 reconstructs the ORFs reported by Yang et al.
|
|
137
|
+
(Nat Commun 2024,
|
|
138
|
+
[doi:10.1038/s41467-024-46240-9](https://doi.org/10.1038/s41467-024-46240-9))
|
|
139
|
+
against their original GENCODE M25/GRCm38 reference before any placement on
|
|
140
|
+
Ensembl 107/GRCm39. The original table supplies RNA intervals and BED blocks,
|
|
141
|
+
not protein sequences. All 54,128 non-skipped rows reconstruct against the
|
|
142
|
+
pinned native RNA, with the full transcript version, length, start/stop and
|
|
143
|
+
every BED block checked.
|
|
144
|
+
|
|
145
|
+
- **Download.** `orfdata data fetch riborf-mouse` installs the verified 24.9 MB
|
|
146
|
+
catalogue. Rebuilding remains available from its pinned source files.
|
|
147
|
+
- **Target placement.** Exact full RNA, coding nucleotide sequence and translated
|
|
148
|
+
protein must agree. All target cDNA and ncRNA sequences are searched, including
|
|
149
|
+
duplicate loci and renamed transcripts. A surviving stable ID, unchanged RNA
|
|
150
|
+
length or matching start/stop alone cannot transfer evidence.
|
|
151
|
+
- **Coverage.** 51,831 rows have a unique validated target placement, representing
|
|
152
|
+
41,882 distinct proteins. Another 118 have multiple exact target placements;
|
|
153
|
+
2,179 lack an unchanged complete target RNA. These 2,297 retain their native
|
|
154
|
+
models, sequences, evidence and explicit mapping reasons in
|
|
155
|
+
`catalog.metadata["unresolved"]`. `extra_orfs(...).unlifted` also reports them
|
|
156
|
+
under the requested evidence rule. A changed RNA with an unchanged small CDS
|
|
157
|
+
remains unresolved under this conservative placement method.
|
|
158
|
+
- **Provenance.** Placed records retain their native `ORFRecord` in
|
|
159
|
+
`record.lifted_from` and a typed `record.reference_mapping`. The latter records
|
|
160
|
+
source/target references, original row ID, RNA interval, native CDS, source
|
|
161
|
+
pins, coordinate checks and exact sequence comparisons. Evidence summaries
|
|
162
|
+
continue to name the native reference and protein. No chain file is invented;
|
|
163
|
+
`record.liftover` is `None`. JSON and TSV exports retain both objects.
|
|
164
|
+
Managed manifests keep target annotation contexts in `references` and native
|
|
165
|
+
evidence contexts in `source_references`.
|
|
166
|
+
- **Sources.** Supplementary Data 3 (CC BY 4.0), native GENCODE M25 GTF/RNA and
|
|
167
|
+
Ensembl 107 GTF/cDNA/ncRNA: about 198 MB in total. The 32 MB target GTF is also
|
|
168
|
+
used by Chang et al., so species setup acquires it once.
|
|
169
|
+
- **Evidence and length.** The 224 samples in 26 GEO series provide aggregate
|
|
170
|
+
RibORF presence, not per-ORF named studies. `RiboSeq()` selects the target
|
|
171
|
+
records; `MS()` and `RiboSeq(min_studies=2)` select none. The catalogue retains
|
|
172
|
+
11,858 target ORFs shorter than five residues. Consumers choose length limits
|
|
173
|
+
when querying or building proteomes.
|
|
174
|
+
- **IDs and earlier generations.** IDs are `riborf_` followed by the original
|
|
175
|
+
source row ID, including its native transcript version and RNA interval.
|
|
176
|
+
They do not relabel a current coordinate as an original observation.
|
|
177
|
+
Generations 1/2 reconstructed proteins directly from the target annotation;
|
|
178
|
+
new builds of those unvalidated generations fail before downloads and direct
|
|
179
|
+
callers to generation 3. Archived files remain historical data, with their
|
|
180
|
+
saved provenance; they are not retroactively sequence-validated.
|
|
181
|
+
|
|
182
|
+
The source's ouORF, odORF and noncoding categories use the common uoORF, doORF
|
|
183
|
+
and lncORF names. Canonical CDSs, likely sequencing errors and stop-codon
|
|
184
|
+
readthrough rows remain excluded.
|
|
188
185
|
|
|
189
186
|
## Mouse ORFs from OpenProt
|
|
190
187
|
|
|
@@ -8,13 +8,14 @@ data coverage, independently of what the API can represent.
|
|
|
8
8
|
| --- | --- | --- | --- |
|
|
9
9
|
| Human | Wang: 29 specimens, gene/transcript FPKM and estimated copies/cell | Wang: 15,210 groups, iBAQ and estimated copies/cell; Pfizer: 10,352 groups, 37 channels, iBAQ/rIBAQ | Wang: adjacent cryosections; Pfizer: native RNA missing |
|
|
10
10
|
| Mouse | Pfizer: 606 libraries, 56,051 gene targets, counts | Pfizer: 12,124 groups, 63 channels, iBAQ/rIBAQ | Unresolved library-to-pool correspondence |
|
|
11
|
-
| Dog | Pfizer: 434 libraries, 30,941 gene targets, counts | Pfizer: 9,929 groups, 38 channels, iBAQ/rIBAQ |
|
|
11
|
+
| Dog | Pfizer: 434 libraries, 30,941 gene targets, counts; mammary stroma: 18,582 genes × 30 samples | Pfizer: 9,929 groups, 38 channels, iBAQ/rIBAQ; mammary stroma: 1,583 native groups × 28 samples | Mammary stroma: 14 shared specimens, 28 paired compartments and two RNA samples without protein mates; Pfizer crosswalk remains unresolved |
|
|
12
12
|
| Budding yeast | CoPY: four RNA libraries plus a source aggregate, FPKM and estimated copies/cell; Ingolia: four RNA libraries, counts and densities | CoPY: calibrated SRM and separately calibrated label-free estimates | CoPY: explicit source-cohort pairing; individual cross-assay replicate matches unknown |
|
|
13
13
|
|
|
14
14
|
## Peptides and MHC ligands
|
|
15
15
|
|
|
16
|
-
Dog has
|
|
16
|
+
Dog has four peptide-level datasets:
|
|
17
17
|
|
|
18
|
+
- **Mammary stroma** ([guide](mammary-stroma.md)): 5,413 native peptide rows, intensity and LFQ columns, reported group memberships and original control/decoy flags across 28 samples.
|
|
18
19
|
- **Pfizer native peptide evidence** ([guide](pfizer-peptides.md)): 953,980 target
|
|
19
20
|
peptide sequences, native peptide/PSM reporter quantities and reported protein-group
|
|
20
21
|
memberships. The 96 runs retain 38 tissue pools, four bridge channels and two
|
|
@@ -28,7 +29,7 @@ Dog has three peptide-level datasets:
|
|
|
28
29
|
dog tumours, each searched against four protein databases, and from three
|
|
29
30
|
human HCT 116 lines that each express one DLA-88 allele.
|
|
30
31
|
|
|
31
|
-
All
|
|
32
|
+
All four searched known proteins only. Other species have no peptide-level
|
|
32
33
|
measurement dataset yet; the human and mouse ORF catalogues carry pooled
|
|
33
34
|
peptide evidence for their noncanonical ORFs.
|
|
34
35
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# Canine paired measurements and translation-evidence audit
|
|
2
2
|
|
|
3
3
|
Source check: **28 October 2026**. This audit identifies importable measurement
|
|
4
|
-
files and their limitations.
|
|
4
|
+
files and their limitations. The subsequent [mammary-stroma importer](mammary-stroma.md)
|
|
5
|
+
now exposes the paired study through the common quantitative registry.
|
|
5
6
|
The [machine-readable audit](data/dog-source-audit-20261028.json) contains source
|
|
6
7
|
URLs, hashes, counts, search queries and a candidate sample crosswalk.
|
|
7
8
|
|
|
@@ -37,7 +38,8 @@ deposited search used a dated canonical UniProt reference, but its FASTA is not
|
|
|
37
38
|
among the 31 PRIDE files. Sequence/reference qualification remains necessary;
|
|
38
39
|
these data do not establish ncORF translation. Author-derived contrasts in the
|
|
39
40
|
supplementary workbooks must stay distinct from sample-level measurements.
|
|
40
|
-
|
|
41
|
+
The paired study is now imported as `canine-mammary-stroma`; the remaining dog
|
|
42
|
+
data requests stay tracked in [#20](https://github.com/openvax/orfdata/issues/20).
|
|
41
43
|
|
|
42
44
|
## Dog Ribo-seq and ncORF translation
|
|
43
45
|
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Paired canine mammary-stroma RNA and protein
|
|
2
|
+
|
|
3
|
+
`canine-mammary-stroma` imports the processed measurements of
|
|
4
|
+
[Amini et al. (2021)](https://doi.org/10.1016/j.neo.2021.03.001),
|
|
5
|
+
[GSE135183](https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE135183) and
|
|
6
|
+
[PXD023023](https://www.ebi.ac.uk/pride/archive/projects/PXD023023).
|
|
7
|
+
It uses the same data commands and `QuantitativeDataset` API as other species
|
|
8
|
+
and sources:
|
|
9
|
+
|
|
10
|
+
```sh
|
|
11
|
+
orfdata data info canine-mammary-stroma
|
|
12
|
+
orfdata data fetch canine-mammary-stroma
|
|
13
|
+
orfdata data path canine-mammary-stroma
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
```python
|
|
17
|
+
from orfdata import DatasetRegistry
|
|
18
|
+
|
|
19
|
+
registry = DatasetRegistry()
|
|
20
|
+
dataset = registry.open("canine-mammary-stroma") # Offline; no implicit download.
|
|
21
|
+
rna_reference, protein_reference = dataset.manifest.references
|
|
22
|
+
pairs = list(dataset.pairings())
|
|
23
|
+
complete_pairs = [pair for pair in pairs if pair.right_assay_id is not None]
|
|
24
|
+
pair = complete_pairs[0]
|
|
25
|
+
rna = dataset.measurements(
|
|
26
|
+
reference=pair.reference, assay_id=pair.left_assay_id, unit="estimated_count"
|
|
27
|
+
)
|
|
28
|
+
protein = dataset.measurements(
|
|
29
|
+
reference=pair.right_reference, assay_id=pair.right_assay_id, unit="LFQ intensity"
|
|
30
|
+
)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The release contains 993,560 native measurements in a 52 MB download and a
|
|
34
|
+
514 MB installed SQLite file. Rebuilding uses approximately 8 MB of pinned processed inputs; no raw MS
|
|
35
|
+
files, sequencing reads, alignment index or vendor database is required.
|
|
36
|
+
|
|
37
|
+
| Layer | Native scope | Quantities |
|
|
38
|
+
| --- | --- | --- |
|
|
39
|
+
| RNA | 18,582 Ensembl gene IDs × 30 samples, 15 cases | Integer estimated counts from Kallisto/tximport |
|
|
40
|
+
| Protein | 1,583 native MaxQuant groups × 28 samples, 14 cases | Intensity, LFQ intensity, iBAQ |
|
|
41
|
+
| Peptide | 5,413 native peptide rows × 28 samples | Intensity and the separately reported LFQ intensity columns |
|
|
42
|
+
|
|
43
|
+
Different quantitative columns do not add biological replicates. The 58
|
|
44
|
+
assays retain their original sample and run identities. Native MS rows include
|
|
45
|
+
77 reversed protein groups and 52 contaminant groups; these counts are not
|
|
46
|
+
counts of confidently detected canine proteins.
|
|
47
|
+
|
|
48
|
+
## Specimen pairing
|
|
49
|
+
|
|
50
|
+
The authors reused archived FFPE mammary specimens for separate laser-capture
|
|
51
|
+
RNA and protein preparations. The importer verifies a unique match between
|
|
52
|
+
clinical Table 1 and GEO by breed, age and histological subtype, recording
|
|
53
|
+
spelling normalizations and both original sets of labels. This is a
|
|
54
|
+
**metadata-derived crosswalk within an author-declared shared cohort**, not an
|
|
55
|
+
author-provided case-ID mapping.
|
|
56
|
+
|
|
57
|
+
Fourteen shared cases give 28 complete assay pairs: normal stroma and
|
|
58
|
+
cancer-associated stroma separately. Two RNA samples from GEO case 127 have
|
|
59
|
+
explicitly missing protein mates; the paper reports exclusion of proteomics
|
|
60
|
+
case 7 because its paraffin block was unavailable. No protein sample is invented.
|
|
61
|
+
|
|
62
|
+
These pairs use `same_specimen`. This basis means separate preparations from the
|
|
63
|
+
same original specimen, without claiming identical aliquots or adjacent
|
|
64
|
+
sections. Temporal labels refer to the original biological specimen, not the
|
|
65
|
+
dates of RNA sequencing and mass-spectrometry acquisition. Missing mates retain
|
|
66
|
+
an unknown temporal relationship. Pairing does not itself establish a
|
|
67
|
+
relationship between RNA genes and protein groups: this release has no
|
|
68
|
+
cross-modal target relations or current-reference mappings.
|
|
69
|
+
|
|
70
|
+
The normal compartment belongs to a cancer-bearing mammary specimen. It is not
|
|
71
|
+
a healthy-animal normal-tissue atlas. Source case IDs identify individual
|
|
72
|
+
specimens, and repeated compartments or quantities never imply additional dogs.
|
|
73
|
+
|
|
74
|
+
## Missingness, native records and reference limits
|
|
75
|
+
|
|
76
|
+
- RNA zeros remain measured zero counts. Counts are estimated gene-level values,
|
|
77
|
+
with no conversion to TPM, copies per cell or translation efficiency.
|
|
78
|
+
- MaxQuant MS zeros denote unquantified cells. Their numeric values are `None`
|
|
79
|
+
with status `missing`; the original `"0"` survives in provenance. The 2,156
|
|
80
|
+
native `"NaN"` iBAQ cells also remain missing, with a separate reason.
|
|
81
|
+
- Every native MS field survives once in the corresponding mapping's
|
|
82
|
+
`provenance["native_record"]`. Measurements retain source row/column, original
|
|
83
|
+
numeric text, identification type and the original control/decoy flags.
|
|
84
|
+
- Peptide mappings retain every reported native protein-group ID. A unique
|
|
85
|
+
assignment to one *group* is not unique protein or isoform detection. Group
|
|
86
|
+
records retain reported protein labels, including contaminants, without
|
|
87
|
+
assigning them to a canine biological protein reference.
|
|
88
|
+
- No source QC threshold, aggregation, imputation, differential-expression model
|
|
89
|
+
or RNA/protein ratio is applied. Consumers can inspect the native flags and
|
|
90
|
+
scores explicitly.
|
|
91
|
+
|
|
92
|
+
RNA was quantified against Ensembl transcripts on CanFam3.1; its exact release
|
|
93
|
+
and transcript sequence bytes are not reported. The protein search used a
|
|
94
|
+
canonical UniProt dog reference dated 2019-07-29 with decoys and contaminants;
|
|
95
|
+
the searched FASTA is absent from the deposited processed files. Both references
|
|
96
|
+
remain source-bound and incomplete. Source membership and uniqueness flags are
|
|
97
|
+
preserved, but no full-background sequence uniqueness is asserted. These data
|
|
98
|
+
provide neither ncORF translation evidence nor MHC-presentation evidence.
|
|
99
|
+
|
|
100
|
+
The [earlier source audit](dog-data-sources.md) records the acquisition and
|
|
101
|
+
crosswalk evidence. The PRIDE project declares CC0; GEO numerical data and
|
|
102
|
+
factual metadata use [GEO's public-data terms](https://www.ncbi.nlm.nih.gov/geo/info/disclaimer.html).
|
|
103
|
+
Factual clinical curation cites Table 1 of the CC BY-NC-ND article. Its original
|
|
104
|
+
text and figures are excluded from the dataset artifact.
|
|
@@ -17,7 +17,7 @@ a Cartesian product of technical replicates. Each row retains its assay pairing
|
|
|
17
17
|
and target relationship. A three-assay experiment can declare several pairwise
|
|
18
18
|
comparisons; sharing an RNA measurement does not create independent replicates.
|
|
19
19
|
|
|
20
|
-
Pairing bases are `same_material`, `adjacent_donor_tissue`,
|
|
20
|
+
Pairing bases are `same_material`, `same_specimen`, `adjacent_donor_tissue`,
|
|
21
21
|
`biological_replicate`, `independent_cultures`, `tissue_aggregate` and
|
|
22
22
|
`condition_aggregate`. The caller must choose the allowed bases. By default,
|
|
23
23
|
only explicitly concurrent assays are returned; opt into `longitudinal` or
|
|
@@ -116,3 +116,8 @@ identities nor transfers abundance or protein-existence evidence. ORF comparison
|
|
|
116
116
|
additionally require their own sequence, frame and positional evidence and
|
|
117
117
|
`allow_orfs=True`; a gene ortholog cannot establish an orthologous ncORF.
|
|
118
118
|
Human, mouse, dog, yeast and arbitrary other taxa use this same API.
|
|
119
|
+
|
|
120
|
+
`same_specimen` records separate preparations from the same original specimen.
|
|
121
|
+
It does not assert identical aliquots (`same_material`) or adjacent sections.
|
|
122
|
+
The [canine mammary-stroma dataset](mammary-stroma.md) uses this distinction and
|
|
123
|
+
retains missing mates explicitly.
|
|
@@ -41,6 +41,7 @@ nav:
|
|
|
41
41
|
- Human, mouse and dog protein: pfizer-protein.md
|
|
42
42
|
- Pfizer dog peptide and group evidence: pfizer-peptides.md
|
|
43
43
|
- Dog and mouse RNA: pfizer-rna.md
|
|
44
|
+
- Paired canine mammary stroma: mammary-stroma.md
|
|
44
45
|
- Yeast protein and RNA: copy-yeast.md
|
|
45
46
|
- Yeast RNA and ribosome occupancy: ingolia-yeast.md
|
|
46
47
|
- Dog MHC ligands and PeptideAtlas: dog-peptides.md
|
|
@@ -11,7 +11,7 @@ import os
|
|
|
11
11
|
import re
|
|
12
12
|
from collections import Counter
|
|
13
13
|
from copy import copy, deepcopy
|
|
14
|
-
from dataclasses import asdict, dataclass, replace
|
|
14
|
+
from dataclasses import asdict, dataclass, field, replace
|
|
15
15
|
from importlib.resources import files
|
|
16
16
|
from pathlib import Path
|
|
17
17
|
from typing import NamedTuple, Optional
|
|
@@ -22,8 +22,10 @@ from .evidence import MS_METHODS, evidence_rule, stored_method
|
|
|
22
22
|
from .evidence_summary import EvidenceSummary, unique_summaries
|
|
23
23
|
from .initiation_context import KOZAK_PREFERENCES, InitiationContext
|
|
24
24
|
from .liftover import Liftover
|
|
25
|
+
from .measurements import _plain
|
|
25
26
|
from .model import ORFModel, TranscriptORF, _contig, _id_forms, _species, _transcript_match
|
|
26
|
-
from .reference import ReferenceContext
|
|
27
|
+
from .reference import ReferenceContext, ScopedTarget
|
|
28
|
+
from .reference_mapping import ReferenceMapping
|
|
27
29
|
from .sequence import genetic_code, reverse_complement_dna
|
|
28
30
|
|
|
29
31
|
|
|
@@ -142,17 +144,35 @@ class ORFRecord:
|
|
|
142
144
|
members: tuple = ()
|
|
143
145
|
lifted_from: Optional["ORFRecord"] = None
|
|
144
146
|
liftover: Optional[Liftover] = None
|
|
147
|
+
reference_mapping: Optional[ReferenceMapping] = field(default=None, hash=False)
|
|
145
148
|
|
|
146
149
|
def __post_init__(self):
|
|
147
150
|
object.__setattr__(self, "summaries", unique_summaries(self.summaries))
|
|
148
151
|
object.__setattr__(self, "members", tuple(self.members))
|
|
149
|
-
if (self.lifted_from is None) != (self.liftover is None):
|
|
150
|
-
raise ValueError("A lifted record names both its original record and the chain")
|
|
151
152
|
original = self.lifted_from
|
|
153
|
+
methods = int(self.liftover is not None) + int(self.reference_mapping is not None)
|
|
154
|
+
if methods != int(original is not None):
|
|
155
|
+
raise ValueError("A placed record names its original and exactly one chain or reference mapping")
|
|
152
156
|
if original is not None and any(getattr(self, name) != getattr(original, name) for name in (
|
|
153
157
|
"orf_id", "protein_sequence", "translation_table", "start_codon", "source",
|
|
154
158
|
"ribosome_studies", "peptides", "summaries")):
|
|
155
159
|
raise ValueError(f"A lifted record keeps its original's ID, protein and evidence: {self.orf_id}")
|
|
160
|
+
mapping = self.reference_mapping
|
|
161
|
+
if mapping is not None:
|
|
162
|
+
if not isinstance(mapping, ReferenceMapping):
|
|
163
|
+
raise TypeError("ORF reference placements require a ReferenceMapping")
|
|
164
|
+
if original.reference_context is None or self.reference_context is None:
|
|
165
|
+
raise ValueError("ORF reference placements require both reference identities")
|
|
166
|
+
source = ScopedTarget(original.reference_context, "orf", original.orf_id, original.source)
|
|
167
|
+
target = ScopedTarget(self.reference_context, "orf", self.orf_id, self.source)
|
|
168
|
+
if mapping.source != source or mapping.targets != (target,) or mapping.status != "unique":
|
|
169
|
+
raise ValueError("ORF reference mapping endpoints disagree with the records")
|
|
170
|
+
digest = hashlib.sha256(self.protein_sequence.encode("ascii")).hexdigest()
|
|
171
|
+
if not mapping.sequence_validated or mapping.validation["sequence"]["source_sha256"] != digest:
|
|
172
|
+
raise ValueError("ORF reference mapping protein identity disagrees with the records")
|
|
173
|
+
expected = {"source": _placement_position(original), "target": _placement_position(self)}
|
|
174
|
+
if _plain(mapping.validation.get("position")) != expected:
|
|
175
|
+
raise ValueError("ORF reference mapping positions disagree with the records")
|
|
156
176
|
if self.members:
|
|
157
177
|
# Each member validated its own summaries against its own identity.
|
|
158
178
|
key = _merge_key(self)
|
|
@@ -229,7 +249,7 @@ class ORFRecord:
|
|
|
229
249
|
|
|
230
250
|
def to_dict(self):
|
|
231
251
|
"""Return a serializable copy of this record."""
|
|
232
|
-
result =
|
|
252
|
+
result = _plain(self)
|
|
233
253
|
if not self.summaries:
|
|
234
254
|
result.pop("summaries")
|
|
235
255
|
if self.reference_context is None:
|
|
@@ -246,7 +266,10 @@ class ORFRecord:
|
|
|
246
266
|
result["lifted_from"] = self.lifted_from.to_dict()
|
|
247
267
|
else:
|
|
248
268
|
result.pop("lifted_from")
|
|
269
|
+
if self.liftover is None:
|
|
249
270
|
result.pop("liftover")
|
|
271
|
+
if self.reference_mapping is None:
|
|
272
|
+
result.pop("reference_mapping")
|
|
250
273
|
return result
|
|
251
274
|
|
|
252
275
|
def map_initiation_position(self, position, *, genome_build):
|
|
@@ -417,6 +440,12 @@ class ORFRecord:
|
|
|
417
440
|
}
|
|
418
441
|
|
|
419
442
|
|
|
443
|
+
def _placement_position(record):
|
|
444
|
+
"""The coding placement bound by a typed source-to-target reference mapping."""
|
|
445
|
+
return dict(transcript_id=record.transcript_id, contig=record.contig, strand=record.strand,
|
|
446
|
+
coding_blocks=[list(block) for block in record.coding_blocks])
|
|
447
|
+
|
|
448
|
+
|
|
420
449
|
def _qualify_colliding_ids(records):
|
|
421
450
|
"""Give colliding source records unique catalogue IDs, retaining their native records."""
|
|
422
451
|
records = tuple(records)
|
|
@@ -436,7 +465,7 @@ def _qualify_colliding_ids(records):
|
|
|
436
465
|
names = [f"{quote(r.source, safe='')}:{quote(r.orf_id, safe='')}" if i in qualified
|
|
437
466
|
else r.orf_id for i, r in enumerate(records)]
|
|
438
467
|
return tuple(r if name == r.orf_id else replace(
|
|
439
|
-
r, orf_id=name, members=r.members or (r,), lifted_from=None, liftover=None)
|
|
468
|
+
r, orf_id=name, members=r.members or (r,), lifted_from=None, liftover=None, reference_mapping=None)
|
|
440
469
|
for r, name in zip(records, names))
|
|
441
470
|
|
|
442
471
|
|
|
@@ -449,6 +478,15 @@ class ORFCatalog:
|
|
|
449
478
|
self.genome_build = metadata["genome_build"]
|
|
450
479
|
self.taxon_id = metadata["taxon_id"]
|
|
451
480
|
self.species = metadata["species"]
|
|
481
|
+
for entry in metadata.get("unresolved", ()):
|
|
482
|
+
if entry.get("native_record") is not None:
|
|
483
|
+
native = _record(entry["native_record"])
|
|
484
|
+
mapping = ReferenceMapping.from_dict(entry["reference_mapping"])
|
|
485
|
+
expected = ScopedTarget(native.reference_context, "orf", native.orf_id, native.source)
|
|
486
|
+
if (mapping.source != expected or mapping.status == "unique"
|
|
487
|
+
or mapping.target_reference.taxon_id != self.taxon_id
|
|
488
|
+
or mapping.target_reference.genome_build != self.genome_build):
|
|
489
|
+
raise ValueError("Unresolved reference mapping disagrees with its native record or catalogue")
|
|
452
490
|
self._by_id = {r.orf_id: r for r in self.records}
|
|
453
491
|
self._aliases = {}
|
|
454
492
|
self._by_source_id = {}
|
|
@@ -834,7 +872,7 @@ def merge_catalogs(catalogs):
|
|
|
834
872
|
pinned = {None if m.reference_context is None else m.reference_context.key for m in members}
|
|
835
873
|
records.append(replace(
|
|
836
874
|
# The merged ORF is no one source's lift; each member keeps its own lift provenance.
|
|
837
|
-
primary, members=tuple(members), lifted_from=None, liftover=None,
|
|
875
|
+
primary, members=tuple(members), lifted_from=None, liftover=None, reference_mapping=None,
|
|
838
876
|
initiation_context=_shared_context(primary, members),
|
|
839
877
|
# Sources pinned to different annotations of one assembly leave the ORF unpinned.
|
|
840
878
|
reference_context=primary.reference_context if len(pinned) == 1 else None, **_union(members, study)))
|
|
@@ -927,7 +965,10 @@ def _record(row, legacy=False):
|
|
|
927
965
|
row["members"] = tuple(_record(m) for m in row.get("members", ()))
|
|
928
966
|
if row.get("lifted_from") is not None:
|
|
929
967
|
row["lifted_from"] = _record(row["lifted_from"])
|
|
968
|
+
if row.get("liftover") is not None:
|
|
930
969
|
row["liftover"] = Liftover(**row["liftover"])
|
|
970
|
+
if row.get("reference_mapping") is not None:
|
|
971
|
+
row["reference_mapping"] = ReferenceMapping.from_dict(row["reference_mapping"])
|
|
931
972
|
return ORFRecord(**row)
|
|
932
973
|
|
|
933
974
|
|
|
@@ -21,14 +21,22 @@ class CatalogManifest(_Record):
|
|
|
21
21
|
coverage: Mapping
|
|
22
22
|
processing: Mapping
|
|
23
23
|
schema: str = "orfdata.catalog-manifest.v1"
|
|
24
|
+
source_references: tuple = ()
|
|
24
25
|
|
|
25
26
|
@classmethod
|
|
26
27
|
def from_dict(cls, data):
|
|
27
28
|
values = dict(data)
|
|
28
29
|
values["references"] = tuple(ReferenceContext(**c) for c in values["references"])
|
|
29
30
|
values["sources"] = tuple(SourceAsset.from_dict(s) for s in values["sources"])
|
|
31
|
+
values["source_references"] = tuple(ReferenceContext(**c) for c in values.get("source_references", ()))
|
|
30
32
|
return cls(**values)
|
|
31
33
|
|
|
34
|
+
def to_dict(self):
|
|
35
|
+
result = super().to_dict()
|
|
36
|
+
if not self.source_references:
|
|
37
|
+
result.pop("source_references")
|
|
38
|
+
return result
|
|
39
|
+
|
|
32
40
|
def __post_init__(self):
|
|
33
41
|
for name in ("catalog_id", "version", "title"):
|
|
34
42
|
_identifier(getattr(self, name), name)
|
|
@@ -54,6 +62,14 @@ class CatalogManifest(_Record):
|
|
|
54
62
|
builds = {r.genome_build for r in self.references if r.genome_build is not None}
|
|
55
63
|
if len(builds) != 1 or not any(r.is_genomic for r in self.references):
|
|
56
64
|
raise ValueError("A catalogue must have one assembly and a complete genomic reference")
|
|
65
|
+
if isinstance(self.source_references, str):
|
|
66
|
+
raise TypeError("Source references must be a sequence of contexts")
|
|
67
|
+
object.__setattr__(self, "source_references", tuple(self.source_references))
|
|
68
|
+
if any(not isinstance(r, ReferenceContext) or not r.is_genomic
|
|
69
|
+
or r.taxon_id != self.taxon_id for r in self.source_references):
|
|
70
|
+
raise ValueError("Native source references must be genomic contexts of the catalogue species")
|
|
71
|
+
if len({r.key for r in self.source_references}) != len(self.source_references):
|
|
72
|
+
raise ValueError("Duplicate native source reference contexts")
|
|
57
73
|
if any(not isinstance(s, SourceAsset) for s in self.sources):
|
|
58
74
|
raise TypeError("Catalogue sources must be SourceAssets")
|
|
59
75
|
if len({s.asset_id for s in self.sources}) != len(self.sources):
|
|
@@ -91,9 +107,16 @@ class CatalogManifest(_Record):
|
|
|
91
107
|
reference = record.reference_context
|
|
92
108
|
if reference is None or not reference.is_genomic or reference.key not in references:
|
|
93
109
|
raise ValueError("Managed ORF records require a declared complete genomic reference")
|
|
110
|
+
evidence_references = references | {r.key for r in self.source_references}
|
|
94
111
|
for summary in catalog.evidence_summaries:
|
|
95
|
-
if summary.target.reference.key not in
|
|
112
|
+
if summary.target.reference.key not in evidence_references:
|
|
96
113
|
raise ValueError("Evidence summary reference is absent from catalogue manifest")
|
|
114
|
+
for entry in catalog.metadata.get("unresolved", ()):
|
|
115
|
+
if entry.get("native_record") is not None:
|
|
116
|
+
native = ReferenceContext(**entry["native_record"]["reference_context"])
|
|
117
|
+
target = ReferenceContext(**entry["reference_mapping"]["target_reference"])
|
|
118
|
+
if native.key not in evidence_references or target.key not in references:
|
|
119
|
+
raise ValueError("Unresolved placement reference is absent from catalogue manifest")
|
|
97
120
|
counts = dict(distinct_protein_sequences=len({r.protein_sequence for r in catalog.records}),
|
|
98
121
|
evidence_summaries=len(catalog.evidence_summaries))
|
|
99
122
|
for key, actual in counts.items():
|
|
@@ -40,7 +40,7 @@ def _copy_catalog(inputs, output, manifest):
|
|
|
40
40
|
handle.write(json.dumps(catalog.to_dict(), sort_keys=True, separators=(",", ":"), allow_nan=False).encode())
|
|
41
41
|
|
|
42
42
|
|
|
43
|
-
def _builder(manifest):
|
|
43
|
+
def _builder(manifest, *, for_build=False):
|
|
44
44
|
"""The packaged importer a release names; import paths in metadata are never executed."""
|
|
45
45
|
importer = manifest.processing.get("importer")
|
|
46
46
|
if importer == "catalog-copy-v1":
|
|
@@ -54,7 +54,13 @@ def _builder(manifest):
|
|
|
54
54
|
|
|
55
55
|
return lambda inputs, output: import_orfs(inputs, output, manifest)
|
|
56
56
|
if importer in ("riborf-v1", "riborf-v2"):
|
|
57
|
-
from .sources.riborf import import_orfs
|
|
57
|
+
from .sources.riborf import import_orfs, validate_transcript_manifest
|
|
58
|
+
|
|
59
|
+
if for_build:
|
|
60
|
+
validate_transcript_manifest(manifest)
|
|
61
|
+
return lambda inputs, output: import_orfs(inputs, output, manifest)
|
|
62
|
+
if importer == "riborf-native-v3":
|
|
63
|
+
from .sources.riborf_native import import_orfs
|
|
58
64
|
|
|
59
65
|
return lambda inputs, output: import_orfs(inputs, output, manifest)
|
|
60
66
|
if importer in ("riborf-genome-v1", "riborf-genome-v2"):
|
|
@@ -198,7 +204,7 @@ class CatalogRegistry:
|
|
|
198
204
|
def build(self, name, version=None, *, force=False, source_paths=None, download_options=None):
|
|
199
205
|
"""Explicitly materialize an allowlisted catalogue source adapter."""
|
|
200
206
|
manifest = self.info(name, version)
|
|
201
|
-
return build_catalog(manifest, _builder(manifest), cache_root=self._cache_root,
|
|
207
|
+
return build_catalog(manifest, _builder(manifest, for_build=True), cache_root=self._cache_root,
|
|
202
208
|
source_paths=source_paths, force=force, download_options=download_options)
|
|
203
209
|
|
|
204
210
|
def inspect_build(self, name, version=None, *, verify_files=True):
|
|
@@ -320,14 +320,14 @@ def _query(args, parser, catalog_loader):
|
|
|
320
320
|
"initiation_context_json",
|
|
321
321
|
)
|
|
322
322
|
scoped = not isinstance(catalog, UORFCatalog)
|
|
323
|
-
provenance = ("members", "liftover", "lifted_from")
|
|
323
|
+
provenance = ("members", "liftover", "lifted_from", "reference_mapping")
|
|
324
324
|
if scoped:
|
|
325
325
|
fields += ("start_codon", "reference_context_json", "summaries_json") + tuple(
|
|
326
326
|
f + "_json" for f in provenance)
|
|
327
327
|
elif any(r.summaries for r in records):
|
|
328
328
|
# The released upstream-only columns have no place for aggregate counts.
|
|
329
329
|
parser.error("The legacy upstream-ORF TSV cannot export aggregate evidence; use --format json")
|
|
330
|
-
elif any(r.members or r.
|
|
330
|
+
elif any(r.members or r.lifted_from for r in records):
|
|
331
331
|
parser.error("The legacy upstream-ORF TSV cannot export merged or lifted records; use --format json")
|
|
332
332
|
elif any(getattr(r, "start_codon", None) for r in records):
|
|
333
333
|
parser.error("The legacy upstream-ORF TSV cannot export declared start codons; use --format json")
|