orfdata 0.5.0__tar.gz → 0.7.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 (100) hide show
  1. orfdata-0.7.0/MANIFEST.in +4 -0
  2. {orfdata-0.5.0/orfdata.egg-info → orfdata-0.7.0}/PKG-INFO +9 -4
  3. {orfdata-0.5.0 → orfdata-0.7.0}/README.md +8 -3
  4. orfdata-0.7.0/docs/copy-yeast.md +109 -0
  5. {orfdata-0.5.0 → orfdata-0.7.0}/docs/measurements.md +9 -2
  6. orfdata-0.7.0/docs/pfizer-protein.md +71 -0
  7. orfdata-0.7.0/orfdata/data/datasets.json +747 -0
  8. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/dataset_cli.py +22 -2
  9. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/datasets.py +10 -0
  10. orfdata-0.7.0/orfdata/sources/__init__.py +14 -0
  11. orfdata-0.7.0/orfdata/sources/copy.py +315 -0
  12. orfdata-0.7.0/orfdata/sources/pfizer.py +213 -0
  13. orfdata-0.7.0/orfdata/version.py +1 -0
  14. {orfdata-0.5.0 → orfdata-0.7.0/orfdata.egg-info}/PKG-INFO +9 -4
  15. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata.egg-info/SOURCES.txt +37 -0
  16. orfdata-0.7.0/tests/data/copy/GSM1905474.soft +1 -0
  17. orfdata-0.7.0/tests/data/copy/GSM1905474_KL9_fpkm.txt.gz +0 -0
  18. orfdata-0.7.0/tests/data/copy/GSM1905476.soft +1 -0
  19. orfdata-0.7.0/tests/data/copy/GSM1905476_KL10_fpkm.txt.gz +0 -0
  20. orfdata-0.7.0/tests/data/copy/GSM1905478.soft +1 -0
  21. orfdata-0.7.0/tests/data/copy/GSM1905478_KL11_fpkm.txt.gz +0 -0
  22. orfdata-0.7.0/tests/data/copy/GSM1905479.soft +1 -0
  23. orfdata-0.7.0/tests/data/copy/GSM1905479_KL12_fpkm.txt.gz +0 -0
  24. orfdata-0.7.0/tests/data/copy/NOTICE.md +13 -0
  25. orfdata-0.7.0/tests/data/copy/expected.json +630 -0
  26. orfdata-0.7.0/tests/data/copy/geo-series.soft +1 -0
  27. orfdata-0.7.0/tests/data/copy/manifest.json +379 -0
  28. orfdata-0.7.0/tests/data/copy/methods.pdf +1 -0
  29. orfdata-0.7.0/tests/data/copy/paper.xml +1 -0
  30. orfdata-0.7.0/tests/data/copy/pmc-metadata.json +1 -0
  31. orfdata-0.7.0/tests/data/copy/qconcat.fasta +1369 -0
  32. orfdata-0.7.0/tests/data/copy/workbook.xlsx +0 -0
  33. orfdata-0.7.0/tests/data/pfizer/NOTICE.md +14 -0
  34. orfdata-0.7.0/tests/data/pfizer/dog/expected.json +192 -0
  35. orfdata-0.7.0/tests/data/pfizer/dog/manifest.json +117 -0
  36. orfdata-0.7.0/tests/data/pfizer/dog/protein.tsv +6 -0
  37. orfdata-0.7.0/tests/data/pfizer/dog/search.fasta +6 -0
  38. orfdata-0.7.0/tests/data/pfizer/human/expected.json +190 -0
  39. orfdata-0.7.0/tests/data/pfizer/human/manifest.json +115 -0
  40. orfdata-0.7.0/tests/data/pfizer/human/protein.tsv +6 -0
  41. orfdata-0.7.0/tests/data/pfizer/human/search.fasta +6 -0
  42. orfdata-0.7.0/tests/data/pfizer/mouse/expected.json +193 -0
  43. orfdata-0.7.0/tests/data/pfizer/mouse/manifest.json +118 -0
  44. orfdata-0.7.0/tests/data/pfizer/mouse/protein.tsv +6 -0
  45. orfdata-0.7.0/tests/data/pfizer/mouse/search.fasta +6 -0
  46. orfdata-0.7.0/tests/test_copy.py +192 -0
  47. orfdata-0.7.0/tests/test_pfizer.py +199 -0
  48. orfdata-0.5.0/MANIFEST.in +0 -3
  49. orfdata-0.5.0/orfdata/data/datasets.json +0 -1
  50. orfdata-0.5.0/orfdata/version.py +0 -1
  51. {orfdata-0.5.0 → orfdata-0.7.0}/LICENSE +0 -0
  52. {orfdata-0.5.0 → orfdata-0.7.0}/deploy.sh +0 -0
  53. {orfdata-0.5.0 → orfdata-0.7.0}/docs/design.md +0 -0
  54. {orfdata-0.5.0 → orfdata-0.7.0}/docs/pairing.md +0 -0
  55. {orfdata-0.5.0 → orfdata-0.7.0}/docs/reference.md +0 -0
  56. {orfdata-0.5.0 → orfdata-0.7.0}/docs/source-references.md +0 -0
  57. {orfdata-0.5.0 → orfdata-0.7.0}/docs/species.md +0 -0
  58. {orfdata-0.5.0 → orfdata-0.7.0}/lint.sh +0 -0
  59. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/__init__.py +0 -0
  60. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/build.py +0 -0
  61. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/catalog.py +0 -0
  62. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/cli.py +0 -0
  63. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/data/orf-evidence/AUTHOR-LICENSE.txt +0 -0
  64. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/data/orf-evidence/NOTICE.txt +0 -0
  65. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/data/orf-evidence/catalog.json.gz +0 -0
  66. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/data/orf-evidence/manifest.json +0 -0
  67. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/data/uorf-evidence/AUTHOR-LICENSE.txt +0 -0
  68. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/data/uorf-evidence/NOTICE.txt +0 -0
  69. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/data/uorf-evidence/catalog.json.gz +0 -0
  70. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/data/uorf-evidence/manifest.json +0 -0
  71. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/dataset.py +0 -0
  72. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/initiation_context.py +0 -0
  73. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/measurements.py +0 -0
  74. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/model.py +0 -0
  75. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/pairing.py +0 -0
  76. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/reference.py +0 -0
  77. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/reference_mapping.py +0 -0
  78. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata/sequence.py +0 -0
  79. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata.egg-info/dependency_links.txt +0 -0
  80. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata.egg-info/entry_points.txt +0 -0
  81. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata.egg-info/requires.txt +0 -0
  82. {orfdata-0.5.0 → orfdata-0.7.0}/orfdata.egg-info/top_level.txt +0 -0
  83. {orfdata-0.5.0 → orfdata-0.7.0}/pyproject.toml +0 -0
  84. {orfdata-0.5.0 → orfdata-0.7.0}/setup.cfg +0 -0
  85. {orfdata-0.5.0 → orfdata-0.7.0}/test.sh +0 -0
  86. {orfdata-0.5.0 → orfdata-0.7.0}/tests/conftest.py +0 -0
  87. {orfdata-0.5.0 → orfdata-0.7.0}/tests/data/references/README.md +0 -0
  88. {orfdata-0.5.0 → orfdata-0.7.0}/tests/data/references/canis_lupus_familiaris.json +0 -0
  89. {orfdata-0.5.0 → orfdata-0.7.0}/tests/data/references/context-keys-v0.4.json +0 -0
  90. {orfdata-0.5.0 → orfdata-0.7.0}/tests/data/references/homo_sapiens.json +0 -0
  91. {orfdata-0.5.0 → orfdata-0.7.0}/tests/data/references/mus_musculus.json +0 -0
  92. {orfdata-0.5.0 → orfdata-0.7.0}/tests/data/references/saccharomyces_cerevisiae.json +0 -0
  93. {orfdata-0.5.0 → orfdata-0.7.0}/tests/test_cross_reference_pairing.py +0 -0
  94. {orfdata-0.5.0 → orfdata-0.7.0}/tests/test_initiation_context.py +0 -0
  95. {orfdata-0.5.0 → orfdata-0.7.0}/tests/test_measurements.py +0 -0
  96. {orfdata-0.5.0 → orfdata-0.7.0}/tests/test_pairing.py +0 -0
  97. {orfdata-0.5.0 → orfdata-0.7.0}/tests/test_reference_context.py +0 -0
  98. {orfdata-0.5.0 → orfdata-0.7.0}/tests/test_reference_mapping.py +0 -0
  99. {orfdata-0.5.0 → orfdata-0.7.0}/tests/test_reference_orf.py +0 -0
  100. {orfdata-0.5.0 → orfdata-0.7.0}/tests/test_uorf_catalog.py +0 -0
@@ -0,0 +1,4 @@
1
+ include lint.sh test.sh deploy.sh
2
+ recursive-include docs *.md
3
+ recursive-include tests *.py *.json *.md *.tsv *.fasta
4
+ recursive-include tests/data/copy *.xlsx *.gz *.soft *.xml *.pdf
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orfdata
3
- Version: 0.5.0
3
+ Version: 0.7.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,17 @@ 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) and
106
+ [yeast calibrated protein/RNA abundance](docs/copy-yeast.md) use the same
107
+ species-scoped API. These canonical-search measurements do not establish
108
+ noncanonical ORF abundance. The
105
109
  [quantitative, multispecies data roadmap](https://github.com/openvax/orfdata/issues/3)
106
- for upcoming RNA abundance, ribosome occupancy and protein data releases.
110
+ tracks further RNA abundance, ribosome occupancy, absolute quantification and
111
+ additional protein data releases.
@@ -68,12 +68,17 @@ 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) and
79
+ [yeast calibrated protein/RNA abundance](docs/copy-yeast.md) use the same
80
+ species-scoped API. These canonical-search measurements do not establish
81
+ noncanonical ORF abundance. The
78
82
  [quantitative, multispecies data roadmap](https://github.com/openvax/orfdata/issues/3)
79
- for upcoming RNA abundance, ribosome occupancy and protein data releases.
83
+ tracks further RNA abundance, ribosome occupancy, absolute quantification and
84
+ additional protein data releases.
@@ -0,0 +1,109 @@
1
+ # Yeast protein and RNA abundance
2
+
3
+ `copy-yeast-abundance` imports [Lawless et al., CoPY (2016)](https://doi.org/10.1074/mcp.M115.054288)
4
+ through the same dataset API as human, mouse and dog. It includes calibrated
5
+ protein and peptide quantities, label-free estimates and RNA from budding yeast
6
+ grown in glucose-limited chemostats. The strain is EUROSCARF Y11335 BY4742,
7
+ with the reported genotype retained on each sample.
8
+
9
+ ```sh
10
+ pip install 'orfdata[data]'
11
+ orfdata datasets info copy-yeast-abundance
12
+ orfdata datasets download copy-yeast-abundance
13
+ orfdata datasets pairs copy-yeast-abundance --basis condition_aggregate
14
+ ```
15
+
16
+ The release contains 69,125 observations in a roughly 14 MB compressed download
17
+ (168 MB installed). Downloads are explicit and checksum-verified through
18
+ DataCache. Queries work offline after installation.
19
+
20
+ | Source measurements | Coverage | Interpretation |
21
+ |---|---:|---|
22
+ | QconCAT SRM protein summaries | 1,903 rows | 1,167 quantified; 668 upper bounds; 68 unquantifiable |
23
+ | SRM peptide observations | 3,836 rows × four cultures and author median | Protein-specific isotope standards; copies/cell, classification and uncertainty |
24
+ | Aggregate RNA | 6,581 labels × FPKM and estimated copies/cell | Counts aggregated before FPKM; copies assume 60,000 total mRNAs/cell |
25
+ | Individual RNA libraries | Four × 7,137 tracking IDs | Native FPKM, 95% confidence interval and Cufflinks status |
26
+ | Label-free estimates | 3,166 rows × two methods | Q-Exactive internal-standard Top3 and SAX total-protein scaling remain separate |
27
+
28
+ The 55 joined SRM protein groups retain their combined attribution. Label-free
29
+ identities also remain groups because full membership is unresolved. Two rows
30
+ share the label YNL239W; both survive unchanged. Upper bounds have
31
+ `status="below_detection"`, `value=None` and a `detection_limit`; missing and
32
+ unquantifiable values never become zeros. Author-calibrated SRM estimates have
33
+ `origin="observed"`; the RNA copies/cell conversion has `origin="derived"`
34
+ with its original FPKM input and calibration assumption.
35
+
36
+ The QconCAT FASTA contains 93 synthetic calibration standards, not native yeast
37
+ proteins. Four reported peptides do not match their assigned standard; their
38
+ measurements retain an explicit validation flag. See [source reconciliation #34](https://github.com/openvax/orfdata/issues/34).
39
+ Raw transitions and light/heavy ratios are not supplied in the processed
40
+ workbook. SRM raw data are identified by PASS00717; PXD002694 is the label-free
41
+ deposit. RNA is from GSE73898. Cufflinks LOWDATA rows retain their original
42
+ positive/zero estimates and confidence bounds in provenance, while the query
43
+ value remains `not_measured` because reliable quantification is unresolved.
44
+
45
+ ## Comparing RNA and protein
46
+
47
+ The paper supports same-cell measurements at the source-cohort level. The
48
+ individual MS-to-RNA replicate crosswalk is unresolved, so comparisons require
49
+ explicit `condition_aggregate` selection. Replicate numbers alone never join
50
+ samples. Label-free methods have different calibrations and no inferred RNA pair.
51
+
52
+ ```python
53
+ from orfdata import DatasetRegistry
54
+
55
+ dataset = DatasetRegistry().open("copy-yeast-abundance")
56
+ match = next(
57
+ m for m in dataset.matched_measurements(allowed_bases=["condition_aggregate"])
58
+ if m.relation.left.identifier == "YML035C" # AMD1, yeast source context
59
+ )
60
+ protein = match.right[0] # 3203.943997 copies/cell; author SRM estimate
61
+ rna = next(m for m in match.left if m.unit == "copies/cell") # ~2.11665
62
+ ratio = match.ratio(
63
+ protein, rna, measurement_id="AMD1:protein-per-RNA",
64
+ method="native calibrated protein / estimated RNA",
65
+ normalization={"assumed_total_mrna_per_cell": 60000, "level": "source cohort"},
66
+ )
67
+ print(ratio.value, ratio.unit, ratio.derivation)
68
+ ```
69
+
70
+ The ratio is conditional on the RNA calibration. It is neither a translation
71
+ rate nor ribosome occupancy. Group relationships cannot yield an individual
72
+ protein ratio. All quantities keep their source units and assumptions.
73
+
74
+ ## References and other species
75
+
76
+ Both yeast contexts carry taxon 4932 and pinned source hashes. The historical
77
+ SGD/Bowtie genome and annotation releases are unspecified; assembly, annotation
78
+ version and reference strain remain null. These source labels support canonical
79
+ gene/protein relationships but cannot bind a current PyEnsembl transcript until
80
+ a reference mapping is validated. Sample BY4742 strain is separate from the
81
+ unknown reference-genome strain. This dataset does not establish which yeast
82
+ noncanonical ORFs were searched, expressed or absent.
83
+
84
+ For cross-species comparisons, supply independently validated, pinned orthology
85
+ records rather than joining gene names. For example, with an installed mammal
86
+ RNA dataset and a curated JSON list of `OrthologyMapping` records:
87
+
88
+ ```python
89
+ import json
90
+ from orfdata import OrthologyMapping, compare_orthologs
91
+
92
+ with open("curated-yeast-mammal-orthology.json") as handle:
93
+ mappings = [OrthologyMapping.from_dict(row) for row in json.load(handle)]
94
+ for comparison in compare_orthologs(dataset, mammal_rna_dataset, mappings):
95
+ print(comparison.left, comparison.right) # Separate original measurements
96
+ ```
97
+
98
+ The mapping must name both exact references, its release, source checksum,
99
+ cardinality and confidence. No expression or protein-existence evidence transfers
100
+ between species, and different cultures/calibrations remain different experiments.
101
+ See [pairing and orthology](pairing.md).
102
+
103
+ To rebuild the release from the pinned public workbook, standards, metadata and
104
+ four RNA files, install `orfdata[data,build-data]` and run
105
+ `orfdata datasets build copy-yeast-abundance`. Python uses
106
+ `DatasetRegistry().build("copy-yeast-abundance")`. Local verified inputs can be
107
+ supplied with repeated `--source-path ASSET=PATH` or `source_paths={...}`.
108
+ The workbook and standards use stable versioned PMC objects; the dynamically
109
+ generated EuropePMC ZIP is not used as a content identity.
@@ -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.