orfdata 0.5.0__tar.gz → 0.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. {orfdata-0.5.0 → orfdata-0.6.0}/MANIFEST.in +1 -1
  2. {orfdata-0.5.0/orfdata.egg-info → orfdata-0.6.0}/PKG-INFO +8 -4
  3. {orfdata-0.5.0 → orfdata-0.6.0}/README.md +7 -3
  4. {orfdata-0.5.0 → orfdata-0.6.0}/docs/measurements.md +9 -2
  5. orfdata-0.6.0/docs/pfizer-protein.md +71 -0
  6. orfdata-0.6.0/orfdata/data/datasets.json +388 -0
  7. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/dataset_cli.py +22 -2
  8. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/datasets.py +10 -0
  9. orfdata-0.6.0/orfdata/sources/__init__.py +10 -0
  10. orfdata-0.6.0/orfdata/sources/pfizer.py +213 -0
  11. orfdata-0.6.0/orfdata/version.py +1 -0
  12. {orfdata-0.5.0 → orfdata-0.6.0/orfdata.egg-info}/PKG-INFO +8 -4
  13. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata.egg-info/SOURCES.txt +17 -0
  14. orfdata-0.6.0/tests/data/pfizer/NOTICE.md +14 -0
  15. orfdata-0.6.0/tests/data/pfizer/dog/expected.json +192 -0
  16. orfdata-0.6.0/tests/data/pfizer/dog/manifest.json +117 -0
  17. orfdata-0.6.0/tests/data/pfizer/dog/protein.tsv +6 -0
  18. orfdata-0.6.0/tests/data/pfizer/dog/search.fasta +6 -0
  19. orfdata-0.6.0/tests/data/pfizer/human/expected.json +190 -0
  20. orfdata-0.6.0/tests/data/pfizer/human/manifest.json +115 -0
  21. orfdata-0.6.0/tests/data/pfizer/human/protein.tsv +6 -0
  22. orfdata-0.6.0/tests/data/pfizer/human/search.fasta +6 -0
  23. orfdata-0.6.0/tests/data/pfizer/mouse/expected.json +193 -0
  24. orfdata-0.6.0/tests/data/pfizer/mouse/manifest.json +118 -0
  25. orfdata-0.6.0/tests/data/pfizer/mouse/protein.tsv +6 -0
  26. orfdata-0.6.0/tests/data/pfizer/mouse/search.fasta +6 -0
  27. orfdata-0.6.0/tests/test_pfizer.py +199 -0
  28. orfdata-0.5.0/orfdata/data/datasets.json +0 -1
  29. orfdata-0.5.0/orfdata/version.py +0 -1
  30. {orfdata-0.5.0 → orfdata-0.6.0}/LICENSE +0 -0
  31. {orfdata-0.5.0 → orfdata-0.6.0}/deploy.sh +0 -0
  32. {orfdata-0.5.0 → orfdata-0.6.0}/docs/design.md +0 -0
  33. {orfdata-0.5.0 → orfdata-0.6.0}/docs/pairing.md +0 -0
  34. {orfdata-0.5.0 → orfdata-0.6.0}/docs/reference.md +0 -0
  35. {orfdata-0.5.0 → orfdata-0.6.0}/docs/source-references.md +0 -0
  36. {orfdata-0.5.0 → orfdata-0.6.0}/docs/species.md +0 -0
  37. {orfdata-0.5.0 → orfdata-0.6.0}/lint.sh +0 -0
  38. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/__init__.py +0 -0
  39. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/build.py +0 -0
  40. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/catalog.py +0 -0
  41. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/cli.py +0 -0
  42. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/data/orf-evidence/AUTHOR-LICENSE.txt +0 -0
  43. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/data/orf-evidence/NOTICE.txt +0 -0
  44. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/data/orf-evidence/catalog.json.gz +0 -0
  45. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/data/orf-evidence/manifest.json +0 -0
  46. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/data/uorf-evidence/AUTHOR-LICENSE.txt +0 -0
  47. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/data/uorf-evidence/NOTICE.txt +0 -0
  48. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/data/uorf-evidence/catalog.json.gz +0 -0
  49. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/data/uorf-evidence/manifest.json +0 -0
  50. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/dataset.py +0 -0
  51. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/initiation_context.py +0 -0
  52. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/measurements.py +0 -0
  53. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/model.py +0 -0
  54. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/pairing.py +0 -0
  55. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/reference.py +0 -0
  56. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/reference_mapping.py +0 -0
  57. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata/sequence.py +0 -0
  58. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata.egg-info/dependency_links.txt +0 -0
  59. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata.egg-info/entry_points.txt +0 -0
  60. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata.egg-info/requires.txt +0 -0
  61. {orfdata-0.5.0 → orfdata-0.6.0}/orfdata.egg-info/top_level.txt +0 -0
  62. {orfdata-0.5.0 → orfdata-0.6.0}/pyproject.toml +0 -0
  63. {orfdata-0.5.0 → orfdata-0.6.0}/setup.cfg +0 -0
  64. {orfdata-0.5.0 → orfdata-0.6.0}/test.sh +0 -0
  65. {orfdata-0.5.0 → orfdata-0.6.0}/tests/conftest.py +0 -0
  66. {orfdata-0.5.0 → orfdata-0.6.0}/tests/data/references/README.md +0 -0
  67. {orfdata-0.5.0 → orfdata-0.6.0}/tests/data/references/canis_lupus_familiaris.json +0 -0
  68. {orfdata-0.5.0 → orfdata-0.6.0}/tests/data/references/context-keys-v0.4.json +0 -0
  69. {orfdata-0.5.0 → orfdata-0.6.0}/tests/data/references/homo_sapiens.json +0 -0
  70. {orfdata-0.5.0 → orfdata-0.6.0}/tests/data/references/mus_musculus.json +0 -0
  71. {orfdata-0.5.0 → orfdata-0.6.0}/tests/data/references/saccharomyces_cerevisiae.json +0 -0
  72. {orfdata-0.5.0 → orfdata-0.6.0}/tests/test_cross_reference_pairing.py +0 -0
  73. {orfdata-0.5.0 → orfdata-0.6.0}/tests/test_initiation_context.py +0 -0
  74. {orfdata-0.5.0 → orfdata-0.6.0}/tests/test_measurements.py +0 -0
  75. {orfdata-0.5.0 → orfdata-0.6.0}/tests/test_pairing.py +0 -0
  76. {orfdata-0.5.0 → orfdata-0.6.0}/tests/test_reference_context.py +0 -0
  77. {orfdata-0.5.0 → orfdata-0.6.0}/tests/test_reference_mapping.py +0 -0
  78. {orfdata-0.5.0 → orfdata-0.6.0}/tests/test_reference_orf.py +0 -0
  79. {orfdata-0.5.0 → orfdata-0.6.0}/tests/test_uorf_catalog.py +0 -0
@@ -1,3 +1,3 @@
1
1
  include lint.sh test.sh deploy.sh
2
2
  recursive-include docs *.md
3
- recursive-include tests *.py *.json *.md
3
+ recursive-include tests *.py *.json *.md *.tsv *.fasta
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orfdata
3
- Version: 0.5.0
3
+ Version: 0.6.0
4
4
  Summary: Reference open reading frames and experimental translation evidence on annotated transcripts
5
5
  Author: OpenVax
6
6
  License-Expression: Apache-2.0
@@ -95,12 +95,16 @@ RNA products. Reference evidence stays separate from evidence for a variant or
95
95
  fusion. See the [API and integration guide](docs/reference.md).
96
96
 
97
97
  The catalogue API supports other species, with explicit species and assembly
98
- checks. **Bundled experimental evidence is currently human-only**. Offline tests
98
+ checks. **The bundled experimental ORF catalogue is currently human-only**. Offline tests
99
99
  bind real human, mouse, dog and yeast reference slices; those fixtures are not
100
100
  new experimental ORF catalogues. [Species and reference identity](docs/species.md).
101
101
 
102
102
  Install with `pip install orfdata[pyensembl]`. See the
103
103
  [measurement API](docs/measurements.md) for native units, explicit samples and
104
- assays, and DataCache-managed downloads, and the
104
+ assays, and DataCache-managed downloads. Downloadable
105
+ [human, mouse and dog protein abundance](docs/pfizer-protein.md) uses the same
106
+ species-scoped API. These canonical-search protein groups do not establish
107
+ noncanonical ORF abundance. The
105
108
  [quantitative, multispecies data roadmap](https://github.com/openvax/orfdata/issues/3)
106
- for upcoming RNA abundance, ribosome occupancy and protein data releases.
109
+ tracks RNA abundance, ribosome occupancy, yeast absolute quantification and
110
+ additional protein data releases.
@@ -68,12 +68,16 @@ RNA products. Reference evidence stays separate from evidence for a variant or
68
68
  fusion. See the [API and integration guide](docs/reference.md).
69
69
 
70
70
  The catalogue API supports other species, with explicit species and assembly
71
- checks. **Bundled experimental evidence is currently human-only**. Offline tests
71
+ checks. **The bundled experimental ORF catalogue is currently human-only**. Offline tests
72
72
  bind real human, mouse, dog and yeast reference slices; those fixtures are not
73
73
  new experimental ORF catalogues. [Species and reference identity](docs/species.md).
74
74
 
75
75
  Install with `pip install orfdata[pyensembl]`. See the
76
76
  [measurement API](docs/measurements.md) for native units, explicit samples and
77
- assays, and DataCache-managed downloads, and the
77
+ assays, and DataCache-managed downloads. Downloadable
78
+ [human, mouse and dog protein abundance](docs/pfizer-protein.md) uses the same
79
+ species-scoped API. These canonical-search protein groups do not establish
80
+ noncanonical ORF abundance. The
78
81
  [quantitative, multispecies data roadmap](https://github.com/openvax/orfdata/issues/3)
79
- for upcoming RNA abundance, ribosome occupancy and protein data releases.
82
+ tracks RNA abundance, ribosome occupancy, yeast absolute quantification and
83
+ additional protein data releases.
@@ -6,8 +6,9 @@ proteins, protein groups and peptides. A measurement stays at the resolution
6
6
  the experiment supports. Parent-gene RNA abundance is useful context for an ORF;
7
7
  it is not a separate measurement of each ORF in that gene.
8
8
 
9
- Install `orfdata[data]` to manage datasets. The initial 0.3 registry is empty;
10
- the [data roadmap](https://github.com/openvax/orfdata/issues/3) tracks source
9
+ Install `orfdata[data]` to manage datasets. The registry includes downloadable
10
+ [Pfizer/Oziolor human, mouse and dog protein summaries](pfizer-protein.md);
11
+ the [data roadmap](https://github.com/openvax/orfdata/issues/3) tracks further
11
12
  imports. The bundled human ORF evidence catalogue remains available offline.
12
13
  Its pooled PSM counts describe spectra, not sample-level protein abundance.
13
14
 
@@ -130,6 +131,12 @@ definitions = {
130
131
  ```
131
132
 
132
133
  CLI users can supply this JSON with `orfdata datasets --registry FILE ...`.
134
+
135
+ Rebuild supported releases from their pinned original inputs with
136
+ `registry.build(name, version, source_paths={"asset_id": "/local/file"})` or
137
+ `orfdata datasets build NAME --source-path ASSET=PATH`. Local overrides still
138
+ require the published hashes. Rebuilds use a separate import cache and preserve
139
+ installed releases. Unsupported source importers fail explicitly.
133
140
  `ORFDATA_CACHE`, then `OPENVAX_DATA_CACHE`, then the platform's OpenVax cache
134
141
  select the root. ORFdata owns its `orfdata/` child. Release cache identities
135
142
  include manifest/reference and content hashes. SQLite partitions every table
@@ -0,0 +1,71 @@
1
+ # Human, mouse and dog protein abundance
2
+
3
+ The [Oziolor et al. atlas](https://doi.org/10.1038/s41597-026-07512-9) provides
4
+ parallel TMT protein measurements. ORFdata keeps each species in a separate
5
+ dataset, using the same samples, assays, measurements and query API.
6
+
7
+ | Dataset | Reported protein groups | Source channels | Source rows |
8
+ |---|---:|---:|---:|
9
+ | `pfizer-atlas-human-protein` | 10,352 | 37 | 325,702 |
10
+ | `pfizer-atlas-mouse-protein` | 12,124 | 63 | 615,991 |
11
+ | `pfizer-atlas-dog-protein` | 9,929 | 38 | 313,263 |
12
+
13
+ Release `2026-10-12.1` contains the complete March 23, 2026 summary tables from
14
+ MassIVE MSV000099729, MSV000099754 and MSV000099744, respectively. Each source
15
+ row contributes two observations: native `iBAQ` and `rIBAQ`. Neither is calibrated
16
+ copies per cell. These are pooled tissue samples; rodent condition labels also
17
+ include sex. Channels and technical runs do not count as independent donors.
18
+
19
+ ```sh
20
+ pip install 'orfdata[data]'
21
+ orfdata datasets list --species dog
22
+ orfdata datasets download pfizer-atlas-dog-protein
23
+ orfdata datasets query pfizer-atlas-dog-protein --quantity protein_abundance
24
+ ```
25
+
26
+ ```python
27
+ from orfdata import DatasetRegistry, ScopedTarget
28
+
29
+ registry = DatasetRegistry()
30
+ dataset = registry.open("pfizer-atlas-dog-protein") # After explicit download.
31
+ reference, = dataset.manifest.references
32
+ group = ScopedTarget(reference, "protein_group", "A0A0A0MPB0", "MSV000099744:ProteinGroup")
33
+ for value in dataset.measurements(target=group):
34
+ print(value.sample_id, value.unit, value.value, value.status)
35
+ ```
36
+
37
+ Every target retains its species and the checksum of the deposited UniProt
38
+ search FASTA. The original genomic assembly and UniProt release are unknown.
39
+ They stay unknown; a future annotation mapping must be explicit and validated.
40
+ Group representatives can be inspected through `reference_mappings()`, but their
41
+ lookup does not establish all group members. Opting into unresolved mapped
42
+ views keeps the original group measurement visible, without assigning its value
43
+ to an individual protein. No RNA pairings are inferred in this release.
44
+
45
+ Source `NA` values remain missing and numeric zeros remain measured zeros.
46
+ Absent group/channel combinations have no observation. For dog, 64,039 combinations
47
+ are absent and eight reported rows contain `NA`, reproducing the existing
48
+ 64,047 missing iBAQ matrix cells. Each value retains its source line, column,
49
+ original numeric text, representative, normalization sum and native `Abundance`
50
+ field. Nonfinite transformed strings such as `-Inf` are kept as provenance only.
51
+
52
+ These searches used UniProt sequences without spliced isoforms. Coverage does
53
+ not establish that an unreported ncORF was searched or absent, nor does bulk
54
+ tissue MS establish MHC presentation. The article and deposit disagree on the
55
+ instrument name; that discrepancy remains explicit in assay metadata.
56
+
57
+ Downloads are 87.3 MB (human), 154.8 MB (mouse) and 84.4 MB (dog). Installed
58
+ SQLite files occupy 1.46 GB, 2.72 GB and 1.40 GB, respectively. Queries stream
59
+ observations; they do not load the entire file or a dense matrix into memory.
60
+
61
+ Source tables are CC0 according to the MassIVE deposits; UniProt search records
62
+ retain UniProt Consortium attribution and CC-BY-4.0 terms. Both sources have
63
+ pinned hashes and sizes. The data artifact is separate from the Python package.
64
+ Discovery and installed queries work offline. `download` verifies and installs
65
+ the compressed artifact; it does not fetch the large vendor search database.
66
+
67
+ To reproduce a source import, use `registry.build(name, source_paths=...)`,
68
+ `orfdata datasets build NAME`, or `orfdata.sources.pfizer.build_protein("dog")`.
69
+ The source overrides are `protein.tsv` and `search.fasta`; DataCache verifies
70
+ their original checksums before running the importer. Source slices with actual
71
+ positive, zero and missing values test the same importer for all three species.
@@ -0,0 +1,388 @@
1
+ {
2
+ "pfizer-atlas-human-protein": {
3
+ "default_version": "2026-10-12.1",
4
+ "versions": {
5
+ "2026-10-12.1": {
6
+ "manifest": {
7
+ "dataset_id": "pfizer-atlas-human-protein",
8
+ "version": "2026-10-12.1",
9
+ "title": "Pfizer/Oziolor human native protein-group abundance",
10
+ "references": [
11
+ {
12
+ "taxon_id": 9606,
13
+ "species": "human",
14
+ "genome_build": null,
15
+ "annotation_name": "uniprot",
16
+ "annotation_version": null,
17
+ "assembly_accession": null,
18
+ "strain": null,
19
+ "strain_taxon_id": null,
20
+ "sequence_sha256": "3793b9bfcc956a278494734bb775a010513f5764d8047fcdb283d2aeaa7fefb8",
21
+ "taxonomy_version": "ncbi-2026-10-12",
22
+ "source_sha256": null
23
+ }
24
+ ],
25
+ "sources": [
26
+ {
27
+ "asset_id": "protein.tsv",
28
+ "url": "https://massive.ucsd.edu/ProteoSAFe/DownloadResultFile?file=f.MSV000099729/updates/2026-03-23_jfederspiel_ca08c7ac/other/t04_protein_postbridge_ibaq_pd.txt",
29
+ "sha256": "ca4dc37b764a352d12820e82c4e2e25099feeee3e70d24d12685a34fbe24e8e8",
30
+ "size": 49345047,
31
+ "access_terms": "MassIVE dataset CC0-1.0; source numeric table",
32
+ "license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
33
+ "redistributable": true,
34
+ "metadata": {
35
+ "attribution": "Oziolor et al. and Joel D. Federspiel, Pfizer",
36
+ "deposit": "https://massive.ucsd.edu/ProteoSAFe/dataset.jsp?task=bd0ccc49e0924d14ba14e9ed6ceffe0e",
37
+ "source_update": "2026-03-23",
38
+ "terms_verified": "2026-10-12"
39
+ }
40
+ },
41
+ {
42
+ "asset_id": "search.fasta",
43
+ "url": "https://massive.ucsd.edu/ProteoSAFe/DownloadResultFile?file=f.MSV000099729/sequence/Human_UP000005640_9606_noisoform.fasta",
44
+ "sha256": "3793b9bfcc956a278494734bb775a010513f5764d8047fcdb283d2aeaa7fefb8",
45
+ "size": 13831073,
46
+ "access_terms": "UniProt Consortium CC-BY-4.0; deposited search FASTA",
47
+ "license_url": "https://creativecommons.org/licenses/by/4.0/",
48
+ "redistributable": true,
49
+ "metadata": {
50
+ "attribution": "UniProt Consortium",
51
+ "deposit": "https://massive.ucsd.edu/ProteoSAFe/dataset.jsp?task=bd0ccc49e0924d14ba14e9ed6ceffe0e",
52
+ "source_update": "deposited original FASTA; UniProt release unspecified",
53
+ "terms_verified": "2026-10-12"
54
+ }
55
+ }
56
+ ],
57
+ "citations": [
58
+ "https://doi.org/10.1038/s41597-026-07512-9",
59
+ "https://massive.ucsd.edu/ProteoSAFe/dataset.jsp?task=bd0ccc49e0924d14ba14e9ed6ceffe0e",
60
+ "https://www.uniprot.org/help/license"
61
+ ],
62
+ "assay_kinds": [
63
+ "digest_ms"
64
+ ],
65
+ "coverage": {
66
+ "accession": "MSV000099729",
67
+ "family": "pfizer-nonclinical-atlas-2026",
68
+ "measurement_limits": "Intensity quantities; no calibrated copies per cell; no implicit cross-species absolute comparison",
69
+ "missingness": "NA is missing; zero is measured zero; absent group/sample combinations have no observation",
70
+ "nc_orf_search": "not established; missing groups do not establish ORF absence",
71
+ "pooling": "tissue by sex for rodents; tissue for human/dog; individual member IDs unresolved",
72
+ "reference_limits": "No genomic assembly or UniProt release declared; exact deposited FASTA pinned",
73
+ "sample_pairing": "RNA and peptide imports pending; no same-material pairing inferred",
74
+ "search_sequences": 20600,
75
+ "search_space": "deposited UniProt FASTA without spliced isoforms",
76
+ "source_counts": {
77
+ "IBAQ:missing": 9,
78
+ "IBAQ:positive": 325061,
79
+ "IBAQ:zero": 632,
80
+ "absent_matrix_cells": 57322,
81
+ "assays": 37,
82
+ "groups": 10352,
83
+ "rIBAQ:missing": 9,
84
+ "rIBAQ:positive": 325061,
85
+ "rIBAQ:zero": 632,
86
+ "rows": 325702
87
+ },
88
+ "source_table": "t04_protein_postbridge_ibaq_pd.txt",
89
+ "strain_or_breed_reported": null,
90
+ "target_resolution": "protein_group"
91
+ },
92
+ "processing": {
93
+ "importer": "pfizer-protein-v1",
94
+ "operations": [
95
+ "retain native IBAQ and rIBAQ",
96
+ "preserve NA, zeros and source row/column",
97
+ "retain transformed Abundance and sumIBAQ as source text",
98
+ "resolve reported representative in pinned FASTA without assigning group abundance"
99
+ ],
100
+ "parameters": {
101
+ "aggregate_replicates": false,
102
+ "infer_group_members": false
103
+ },
104
+ "software": "orfdata",
105
+ "source_update": "2026-03-23",
106
+ "version": "0.6.0"
107
+ },
108
+ "schema": "orfdata.measurements.v1"
109
+ },
110
+ "distribution": {
111
+ "access_terms": "Numeric source tables: MassIVE CC0-1.0. UniProt search-record annotations: CC-BY-4.0, attribution to UniProt Consortium. ORFdata transformation code: Apache-2.0.",
112
+ "redistributable": true,
113
+ "download_size": 87293488,
114
+ "download_sha256": "51c48a28f3db7d02154715f07cb8d908cc2898577b526e1275af33f52dda766d",
115
+ "installed_size": 1464070144,
116
+ "data_release": "data-pfizer-protein-2026-10-12.1"
117
+ },
118
+ "assets": {
119
+ "dataset.sqlite": {
120
+ "url": "https://github.com/openvax/orfdata/releases/download/data-pfizer-protein-2026-10-12.1/pfizer-atlas-human-protein-2026-10-12.1.sqlite.gz",
121
+ "sha256": "e5fc22a9214732a2626c2269ca99c2a576a9ee31d9f94c4b29e430657ddaef04",
122
+ "size": 1464070144,
123
+ "decompress": true
124
+ }
125
+ }
126
+ }
127
+ }
128
+ },
129
+ "pfizer-atlas-mouse-protein": {
130
+ "default_version": "2026-10-12.1",
131
+ "versions": {
132
+ "2026-10-12.1": {
133
+ "manifest": {
134
+ "dataset_id": "pfizer-atlas-mouse-protein",
135
+ "version": "2026-10-12.1",
136
+ "title": "Pfizer/Oziolor mouse native protein-group abundance",
137
+ "references": [
138
+ {
139
+ "taxon_id": 10090,
140
+ "species": "mouse",
141
+ "genome_build": null,
142
+ "annotation_name": "uniprot",
143
+ "annotation_version": null,
144
+ "assembly_accession": null,
145
+ "strain": null,
146
+ "strain_taxon_id": null,
147
+ "sequence_sha256": "f6e080958003abfa54718f9465127a8225661fab1ad0738cc9301ad0d0a5c49f",
148
+ "taxonomy_version": "ncbi-2026-10-12",
149
+ "source_sha256": null
150
+ }
151
+ ],
152
+ "sources": [
153
+ {
154
+ "asset_id": "protein.tsv",
155
+ "url": "https://massive.ucsd.edu/ProteoSAFe/DownloadResultFile?file=f.MSV000099754/updates/2026-03-23_jfederspiel_6db4ede2/other/t04_protein_postbridge_ibaq_pd.txt",
156
+ "sha256": "b627bec35d1f3011e68f3083a9b0fbfac4beec9fd4da975c15bfb590eb9e9659",
157
+ "size": 94851860,
158
+ "access_terms": "MassIVE dataset CC0-1.0; source numeric table",
159
+ "license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
160
+ "redistributable": true,
161
+ "metadata": {
162
+ "attribution": "Oziolor et al. and Joel D. Federspiel, Pfizer",
163
+ "deposit": "https://massive.ucsd.edu/ProteoSAFe/dataset.jsp?task=068ade8643b2433c99b243fd29d5be78",
164
+ "source_update": "2026-03-23",
165
+ "terms_verified": "2026-10-12"
166
+ }
167
+ },
168
+ {
169
+ "asset_id": "search.fasta",
170
+ "url": "https://massive.ucsd.edu/ProteoSAFe/DownloadResultFile?file=f.MSV000099754/sequence/Mouse_UP000000589_10090_noisoform.fasta",
171
+ "sha256": "f6e080958003abfa54718f9465127a8225661fab1ad0738cc9301ad0d0a5c49f",
172
+ "size": 14325720,
173
+ "access_terms": "UniProt Consortium CC-BY-4.0; deposited search FASTA",
174
+ "license_url": "https://creativecommons.org/licenses/by/4.0/",
175
+ "redistributable": true,
176
+ "metadata": {
177
+ "attribution": "UniProt Consortium",
178
+ "deposit": "https://massive.ucsd.edu/ProteoSAFe/dataset.jsp?task=068ade8643b2433c99b243fd29d5be78",
179
+ "source_update": "deposited original FASTA; UniProt release unspecified",
180
+ "terms_verified": "2026-10-12"
181
+ }
182
+ }
183
+ ],
184
+ "citations": [
185
+ "https://doi.org/10.1038/s41597-026-07512-9",
186
+ "https://massive.ucsd.edu/ProteoSAFe/dataset.jsp?task=068ade8643b2433c99b243fd29d5be78",
187
+ "https://www.uniprot.org/help/license"
188
+ ],
189
+ "assay_kinds": [
190
+ "digest_ms"
191
+ ],
192
+ "coverage": {
193
+ "accession": "MSV000099754",
194
+ "family": "pfizer-nonclinical-atlas-2026",
195
+ "measurement_limits": "Intensity quantities; no calibrated copies per cell; no implicit cross-species absolute comparison",
196
+ "missingness": "NA is missing; zero is measured zero; absent group/sample combinations have no observation",
197
+ "nc_orf_search": "not established; missing groups do not establish ORF absence",
198
+ "pooling": "tissue by sex for rodents; tissue for human/dog; individual member IDs unresolved",
199
+ "reference_limits": "No genomic assembly or UniProt release declared; exact deposited FASTA pinned",
200
+ "sample_pairing": "RNA and peptide imports pending; no same-material pairing inferred",
201
+ "search_sequences": 21989,
202
+ "search_space": "deposited UniProt FASTA without spliced isoforms",
203
+ "source_counts": {
204
+ "IBAQ:missing": 102,
205
+ "IBAQ:positive": 615056,
206
+ "IBAQ:zero": 833,
207
+ "absent_matrix_cells": 147821,
208
+ "assays": 63,
209
+ "groups": 12124,
210
+ "rIBAQ:missing": 102,
211
+ "rIBAQ:positive": 615056,
212
+ "rIBAQ:zero": 833,
213
+ "rows": 615991
214
+ },
215
+ "source_table": "t04_protein_postbridge_ibaq_pd.txt",
216
+ "strain_or_breed_reported": [
217
+ "CD1",
218
+ "C57BL6"
219
+ ],
220
+ "target_resolution": "protein_group"
221
+ },
222
+ "processing": {
223
+ "importer": "pfizer-protein-v1",
224
+ "operations": [
225
+ "retain native IBAQ and rIBAQ",
226
+ "preserve NA, zeros and source row/column",
227
+ "retain transformed Abundance and sumIBAQ as source text",
228
+ "resolve reported representative in pinned FASTA without assigning group abundance"
229
+ ],
230
+ "parameters": {
231
+ "aggregate_replicates": false,
232
+ "infer_group_members": false
233
+ },
234
+ "software": "orfdata",
235
+ "source_update": "2026-03-23",
236
+ "version": "0.6.0"
237
+ },
238
+ "schema": "orfdata.measurements.v1"
239
+ },
240
+ "distribution": {
241
+ "access_terms": "Numeric source tables: MassIVE CC0-1.0. UniProt search-record annotations: CC-BY-4.0, attribution to UniProt Consortium. ORFdata transformation code: Apache-2.0.",
242
+ "redistributable": true,
243
+ "download_size": 154779449,
244
+ "download_sha256": "71e0a340b3102a73f2e0e63d0c69258642bcb29386018f4cb8fcc4a9c37be377",
245
+ "installed_size": 2717151232,
246
+ "data_release": "data-pfizer-protein-2026-10-12.1"
247
+ },
248
+ "assets": {
249
+ "dataset.sqlite": {
250
+ "url": "https://github.com/openvax/orfdata/releases/download/data-pfizer-protein-2026-10-12.1/pfizer-atlas-mouse-protein-2026-10-12.1.sqlite.gz",
251
+ "sha256": "0e1dec8f1ff3bfe1b557816e0360b720cd8106a06cc9573b5a2e9ab1334b1f97",
252
+ "size": 2717151232,
253
+ "decompress": true
254
+ }
255
+ }
256
+ }
257
+ }
258
+ },
259
+ "pfizer-atlas-dog-protein": {
260
+ "default_version": "2026-10-12.1",
261
+ "versions": {
262
+ "2026-10-12.1": {
263
+ "manifest": {
264
+ "dataset_id": "pfizer-atlas-dog-protein",
265
+ "version": "2026-10-12.1",
266
+ "title": "Pfizer/Oziolor dog native protein-group abundance",
267
+ "references": [
268
+ {
269
+ "taxon_id": 9615,
270
+ "species": "dog",
271
+ "genome_build": null,
272
+ "annotation_name": "uniprot",
273
+ "annotation_version": null,
274
+ "assembly_accession": null,
275
+ "strain": null,
276
+ "strain_taxon_id": null,
277
+ "sequence_sha256": "d8488bf283de653efcff2e5de6d413b116e1ba4a2eb89298bd31205e72fef682",
278
+ "taxonomy_version": "ncbi-2026-10-12",
279
+ "source_sha256": null
280
+ }
281
+ ],
282
+ "sources": [
283
+ {
284
+ "asset_id": "protein.tsv",
285
+ "url": "https://massive.ucsd.edu/ProteoSAFe/DownloadResultFile?file=f.MSV000099744/updates/2026-03-23_jfederspiel_6c91304a/other/t04_protein_postbridge_ibaq_pd.txt",
286
+ "sha256": "ae2953c3fe3c31bc5fa06a9a0b222815376faea25489e6626af3736b7f4cbef2",
287
+ "size": 48196601,
288
+ "access_terms": "MassIVE dataset CC0-1.0; source numeric table",
289
+ "license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
290
+ "redistributable": true,
291
+ "metadata": {
292
+ "attribution": "Oziolor et al. and Joel D. Federspiel, Pfizer",
293
+ "deposit": "https://massive.ucsd.edu/ProteoSAFe/dataset.jsp?task=062b109e9adf461ba619369dd0d85aa9",
294
+ "source_update": "2026-03-23",
295
+ "terms_verified": "2026-10-12"
296
+ }
297
+ },
298
+ {
299
+ "asset_id": "search.fasta",
300
+ "url": "https://massive.ucsd.edu/ProteoSAFe/DownloadResultFile?file=f.MSV000099744/sequence/Dog_UP000002254_9615_noisoform.fasta",
301
+ "sha256": "d8488bf283de653efcff2e5de6d413b116e1ba4a2eb89298bd31205e72fef682",
302
+ "size": 14659832,
303
+ "access_terms": "UniProt Consortium CC-BY-4.0; deposited search FASTA",
304
+ "license_url": "https://creativecommons.org/licenses/by/4.0/",
305
+ "redistributable": true,
306
+ "metadata": {
307
+ "attribution": "UniProt Consortium",
308
+ "deposit": "https://massive.ucsd.edu/ProteoSAFe/dataset.jsp?task=062b109e9adf461ba619369dd0d85aa9",
309
+ "source_update": "deposited original FASTA; UniProt release unspecified",
310
+ "terms_verified": "2026-10-12"
311
+ }
312
+ }
313
+ ],
314
+ "citations": [
315
+ "https://doi.org/10.1038/s41597-026-07512-9",
316
+ "https://massive.ucsd.edu/ProteoSAFe/dataset.jsp?task=062b109e9adf461ba619369dd0d85aa9",
317
+ "https://www.uniprot.org/help/license"
318
+ ],
319
+ "assay_kinds": [
320
+ "digest_ms"
321
+ ],
322
+ "coverage": {
323
+ "accession": "MSV000099744",
324
+ "family": "pfizer-nonclinical-atlas-2026",
325
+ "measurement_limits": "Intensity quantities; no calibrated copies per cell; no implicit cross-species absolute comparison",
326
+ "missingness": "NA is missing; zero is measured zero; absent group/sample combinations have no observation",
327
+ "nc_orf_search": "not established; missing groups do not establish ORF absence",
328
+ "pooling": "tissue by sex for rodents; tissue for human/dog; individual member IDs unresolved",
329
+ "reference_limits": "No genomic assembly or UniProt release declared; exact deposited FASTA pinned",
330
+ "sample_pairing": "RNA and peptide imports pending; no same-material pairing inferred",
331
+ "search_sequences": 20649,
332
+ "search_space": "deposited UniProt FASTA without spliced isoforms",
333
+ "source_counts": {
334
+ "IBAQ:missing": 8,
335
+ "IBAQ:positive": 312143,
336
+ "IBAQ:zero": 1112,
337
+ "absent_matrix_cells": 64039,
338
+ "assays": 38,
339
+ "groups": 9929,
340
+ "rIBAQ:missing": 8,
341
+ "rIBAQ:positive": 312143,
342
+ "rIBAQ:zero": 1112,
343
+ "rows": 313263
344
+ },
345
+ "source_table": "t04_protein_postbridge_ibaq_pd.txt",
346
+ "strain_or_breed_reported": [
347
+ "beagle"
348
+ ],
349
+ "target_resolution": "protein_group"
350
+ },
351
+ "processing": {
352
+ "importer": "pfizer-protein-v1",
353
+ "operations": [
354
+ "retain native IBAQ and rIBAQ",
355
+ "preserve NA, zeros and source row/column",
356
+ "retain transformed Abundance and sumIBAQ as source text",
357
+ "resolve reported representative in pinned FASTA without assigning group abundance"
358
+ ],
359
+ "parameters": {
360
+ "aggregate_replicates": false,
361
+ "infer_group_members": false
362
+ },
363
+ "software": "orfdata",
364
+ "source_update": "2026-03-23",
365
+ "version": "0.6.0"
366
+ },
367
+ "schema": "orfdata.measurements.v1"
368
+ },
369
+ "distribution": {
370
+ "access_terms": "Numeric source tables: MassIVE CC0-1.0. UniProt search-record annotations: CC-BY-4.0, attribution to UniProt Consortium. ORFdata transformation code: Apache-2.0.",
371
+ "redistributable": true,
372
+ "download_size": 84379381,
373
+ "download_sha256": "5f0c319e8a0584000a68f28099ee685d323bd38ab8ac0c7539907dd82ea44fb4",
374
+ "installed_size": 1404428288,
375
+ "data_release": "data-pfizer-protein-2026-10-12.1"
376
+ },
377
+ "assets": {
378
+ "dataset.sqlite": {
379
+ "url": "https://github.com/openvax/orfdata/releases/download/data-pfizer-protein-2026-10-12.1/pfizer-atlas-dog-protein-2026-10-12.1.sqlite.gz",
380
+ "sha256": "33d5506874eb32b5426aee7e5d528bb4f754ecf3ac5bc00f5e3fb16fd3ee0694",
381
+ "size": 1404428288,
382
+ "decompress": true
383
+ }
384
+ }
385
+ }
386
+ }
387
+ }
388
+ }
@@ -18,7 +18,7 @@ def run(argv=None, prog=None):
18
18
  listing.add_argument("--species")
19
19
  listing.add_argument("--taxon-id", type=int)
20
20
  listing.add_argument("--assay")
21
- for command in ("info", "download", "inspect", "query", "pairs"):
21
+ for command in ("info", "download", "build", "inspect", "query", "pairs"):
22
22
  subparser = commands.add_parser(command)
23
23
  subparser.add_argument("name")
24
24
  subparser.add_argument("--version")
@@ -26,7 +26,13 @@ def run(argv=None, prog=None):
26
26
  subparser.add_argument("--force", action="store_true")
27
27
  subparser.add_argument("--timeout", type=float)
28
28
  subparser.add_argument("--quiet", action="store_true")
29
- subparser.add_argument("--source-path", help="Use a local dataset.sqlite with the registered hash")
29
+ subparser.add_argument("--source-path", help="Use a local registered artifact (compressed when declared)")
30
+ if command == "build":
31
+ subparser.add_argument("--force", action="store_true")
32
+ subparser.add_argument("--timeout", type=float)
33
+ subparser.add_argument("--quiet", action="store_true")
34
+ subparser.add_argument("--source-path", action="append", default=[], metavar="ASSET=PATH",
35
+ help="Use a local pinned source; repeat for each input asset")
30
36
  if command == "query":
31
37
  subparser.add_argument("--reference", help="Exact ref:SHA256 context key")
32
38
  subparser.add_argument("--sample")
@@ -74,6 +80,20 @@ def run(argv=None, prog=None):
74
80
  sources = {"dataset.sqlite": args.source_path} if args.source_path else None
75
81
  result = registry.download(args.name, args.version, force=args.force,
76
82
  source_paths=sources, **options)
83
+ elif args.command == "build":
84
+ sources = {}
85
+ for value in args.source_path:
86
+ asset, separator, path = value.partition("=")
87
+ if not separator or not asset or not path or asset in sources:
88
+ parser.error("Source overrides require unique ASSET=PATH entries")
89
+ sources[asset] = path
90
+ options = dict(show_progress=not args.quiet)
91
+ if args.timeout is not None:
92
+ options["timeout"] = args.timeout
93
+ dataset = registry.build(args.name, args.version, force=args.force,
94
+ source_paths=sources, download_options=options)
95
+ result = dict(path=str(dataset.path), counts=dataset.counts,
96
+ dataset_id=dataset.manifest.dataset_id, version=dataset.manifest.version)
77
97
  elif args.command == "pairs":
78
98
  dataset = registry.open(args.name, args.version)
79
99
  for match in dataset.matched_measurements(
@@ -122,6 +122,16 @@ class DatasetRegistry:
122
122
  return self._data_registry().download(name, version, force=force,
123
123
  source_paths=source_paths, **options)
124
124
 
125
+ def build(self, name, version=None, *, force=False, source_paths=None, download_options=None):
126
+ """Rebuild a registered release from pinned source files, explicitly."""
127
+ from .sources import importer
128
+
129
+ manifest = self.info(name, version)
130
+ transform = importer(manifest.processing.get("importer"))
131
+ return build_dataset(manifest, lambda inputs, output: transform(inputs, output, manifest),
132
+ cache_root=self._cache_root, source_paths=source_paths, force=force,
133
+ download_options=download_options)
134
+
125
135
  def open(self, name, version=None, *, verify_files=True):
126
136
  """Open an installed dataset after integrity and identity checks, offline."""
127
137
  version = self._version(name, version)
@@ -0,0 +1,10 @@
1
+ """Source-specific importers; source measurements retain their native semantics."""
2
+
3
+
4
+ def importer(name):
5
+ """Resolve a packaged importer, never execute an import path from metadata."""
6
+ if name == "pfizer-protein-v1":
7
+ from .pfizer import import_protein
8
+
9
+ return import_protein
10
+ raise ValueError(f"No packaged importer for {name!r}")