The dataset registry — one machine-readable record of what starplast is built from.
This is the single source of truth for provenance. The download notebook fetches from it, the methods
documentation is generated from it, and the application shows it when asked where a number came from.
Previously that information lived in three prose documents that could drift apart; here a dataset is
described once.
from starplast import datasets
datasets.registry() # every entry
datasets.registry(level="DNA") # filter
datasets.provenance("fit_ifng") # which dataset produced a node column
datasets.unresolved() # entries whose citation still needs confirming
level follows the on-disk layout (datasets/<level>/<type>/<PMID>/):
DNA genetic perturbation or DNA-level readout CRISPR screens, ChIP-seq
transcription RNA abundance RNAseq, scRNAseq
translation protein abundance LFQ / iBAQ / iTRAQ, Ribo-seq
post_translation properties of the folded protein IPMS, BioID, XLMS, phospho, LOPIT
reference not a study result orthology, domains, identity tables
citation is None where the originating publication is not recorded in the pipeline. That is a real gap,
not an oversight to paper over: the data is verified on disk, the citation is not, and unresolved()
lists exactly those so they cannot reach a manuscript unchecked.
@dataclass(frozen=True)
classDataset:
One dataset the map is built from, and everything known about where it came from.
The unit of provenance for the whole project: the README table, the methods document and the
per-dataset scripts are all generated from these, so a source is described once and cannot drift
between three prose documents. citation is None where the originating publication has not been
confirmed -- a real gap, listed by unresolved(), rather than a guess that could reach a paper.
REGISTRY =
[Dataset(key='esm2_protein', name='Frozen ESM-2 protein representations', level='reference', kind='computed sequence features', provides='320 sequence representation coordinates in a separate gene-keyed feature table', organism='Tg', columns=(), coverage='8,064 T. gondii genes with valid bundled CDS translations', pmid=None, accession=None, citation='Lin et al., Science (2023); frozen ESM-2 8M model, local sequence encoding', url='https://huggingface.co/facebook/esm2_t6_8M_UR50D', path='starplast/data/esm_features.parquet', derived_from=(), note='Computed representation, not an experimentally measured trait. Model revision and sequence hashes are in esm_manifest.parquet. Long proteins use overlapping windows with residue-complete pooling. Features are loaded for prediction rather than adding 320 uninterpretable colour controls to the display map.', geo_file_suffix=None), Dataset(key='local_af3', name='Local AlphaFold 3 protein models', level='post_translation', kind='computed structure', provides='sequence-verified AF3 confidence, coverage and confident-region geometry', organism='Tg', columns=('af3_sequence_coverage', 'af3_mean_plddt', 'af3_plddt_q25', 'af3_confident_sequence_fraction', 'af3_very_confident_sequence_fraction', 'af3_low_confidence_modelled_fraction', 'af3_confident_rg_angstrom', 'af3_confident_contacts_per_residue', 'af3_ptm'), coverage='1,210 T. gondii genes with exactly matched local AF3 sequences', pmid=None, accession=None, citation='Einar Olafsson, unpublished local AF3 model collection (2026)', url='https://github.com/EinarOlafsson/starplast/blob/main/docs/structures.md', path='starplast/data/af3_features.parquet', derived_from=(), note='Computed predictions, not experimental measurements. Fragments retain residue ranges; confidence summaries combine overlapping fragments per residue. Geometry only from complete models. Coordinates remain on the local shared drive; see source manifest.', geo_file_suffix=None), Dataset(key='xue_singlecell', name='Single-parasite transcriptional atlas (cell cycle)', level='transcription', kind='scRNAseq', provides='Measured cell-cycle phase per gene, and pseudotime cluster', organism='Tg', columns=('cellcycle_phase', 'cellcycle_pseudotime'), coverage='873 genes phased, 7,499 clustered', pmid='32065584', accession=None, citation='Xue Y et al. eLife 2020;9:e54129', url='https://cdn.elifesciences.org/articles/54129/elife-54129-supp3-v2.csv', path='datasets/transcription/scRNAseq/32065584/cellcycle_phase_RH.csv', derived_from=(), note='Tab-separated despite the .csv extension. RH files use TGGT1_ accessions and the Pru files in the same supplement use TGME49_; the prefix is the only thing that distinguishes them. The only MEASURED discrete cell-cycle label in the project.', geo_file_suffix=None), Dataset(key='stage_enriched', name='Life-cycle stage enrichment (DERIVED)', level='transcription', kind='RNAseq', provides="Which stage a gene's own expression is highest in", organism='Tg', columns=('stage_enriched_derived', 'stage_margin_derived'), coverage='1,911 of 8,140 genes called', pmid=None, accession=None, citation=None, url=None, path=None, derived_from=('expr_tachy', 'expr_cyst', 'expr_sporulated'), note='DERIVED, not measured: computed here from expr_tachy / expr_cyst / expr_sporulated by z-scoring each and taking the argmax where it leads by 0.5 z. It is a restatement of those columns, so holding it out against an embedding built on them is circular by construction. Left unlabeled where no stage leads clearly.', geo_file_suffix=None), Dataset(key='toxodb_identity', name='ToxoDB gene identity', level='reference', kind='identity', provides='Symbols, previous IDs, product descriptions', organism='Tg', columns=('gene_id', 'product'), coverage='8,843 ME49 genes', pmid=None, accession='ToxoDB ME49', citation=None, url='https://toxodb.org/toxo/service/record-types/transcript/searches/GenesByTaxon/reports/attributesTabular', path='starplast/data/toxodb_identity.tsv', derived_from=(), note='Retrieved 2026-08-11 via the REST API; strain tables for GT1 and VEG alongside.', geo_file_suffix=None), Dataset(key='toxodb_strain_snps', name='Strain variation (ToxoDB HTS SNPs)', level='reference', kind='variation', provides='SNPs per gene across every sequenced strain, split by effect', organism='Tg', columns=('snp_total_all_strains', 'snp_nonsynonymous', 'snp_synonymous', 'snp_noncoding', 'snp_stop_codon'), coverage='8,140 genes (100%)', pmid=None, accession='ToxoDB ME49', citation=None, url='https://toxodb.org/toxo/service/record-types/transcript/searches/GenesByTaxon/reports/attributesTabular', path='starplast/data/toxodb_strain_snps.tsv', derived_from=(), note='Retrieved 2026-08-16 through the same REST report as the identity table, asking for the five gene_hts_*_snps attributes. Verified against known biology rather than against a metadata field: nonsynonymous SNPs per kb come out at 112 for the SRS surface antigens, 55 for the ROP5/ROP18/GRA15 virulence loci, 30 across all genes and 2.9 for ribosomal proteins. That ordering -- what immunity sees, then the strain-typing markers, then the conserved core -- is the check. Zero is a measurement here, not a gap: 690 genes carry no SNP in any sequenced strain.', geo_file_suffix=None), Dataset(key='toxodb_codon_usage', name='Codon usage bias (COMPUTED)', level='reference', kind='sequence', provides='Effective number of codons, GC3, and codon adaptation index', organism='Tg', columns=('codon_enc', 'codon_gc3', 'codon_cai_ribosomal'), coverage='8,140 genes (100%)', pmid=None, accession='ToxoDB ME49', citation=None, url='https://toxodb.org/toxo/service/record-types/transcript/searches/GenesByTaxon/reports/attributesTabular', path='starplast/data/toxodb_cds.tsv.gz', derived_from=(), note="COMPUTED here from the coding sequences fetched 2026-08-16. ENC is Wright's effective number of codons and GC3 the synonymous third-position GC, both reference-free. CAI's reference set is the 158 ribosomal proteins, chosen by product annotation and NOT by this map's expression columns -- the usual choice, 'the most highly expressed genes', would have built a sequence column out of an expression column and then found them correlated. Verified by the signs translational selection predicts: ribosomal proteins are more biased than the rest (ENC 46.5 against 54.0), and CAI rises with transcription (rho +0.37) and with protein abundance (rho +0.24) while ENC falls with both. Those correlations are a finding here rather than a construction.", geo_file_suffix=None), Dataset(key='orthomcl', name='OrthoMCL orthogroups', level='reference', kind='orthology', provides='Orthogroup assignment and cross-species bridge', organism='Tg', columns=('orthogroup',), coverage='16,793 groups', pmid=None, accession='OrthoMCL release 6.21', citation=None, url='https://orthomcl.org/common/downloads/release-6.21/groups_OrthoMCL-6.21.txt.gz', path='datasets/MASTER_parasite_wide_by_orthogroup.csv', derived_from=(), note='The RELEASE is load-bearing, not decoration: all 16,793 groups reproduce exactly from 6.21, while 6.20 differs in 180 cells and Current_Release (v7) renumbers every group into an OG7_ namespace that matches nothing here. The shipped CSV is derived from this file -- filter to tgon/pfal/cpar/tbrt, then pivot wide. Note the T. brucei taxon code is tbrt, though the CSV column is tbru.', geo_file_suffix=None), Dataset(key='interpro', name='InterPro domains', level='reference', kind='domains', provides='Domain identity and count', organism='Tg', columns=('n_interpro', 'interpro_id', 'interpro_desc', 'pfam_id'), coverage='8,140', pmid=None, accession=None, citation=None, url='https://toxodb.org/toxo/service/record-types/transcript/searches/GenesByTaxon/reports/attributesTabular?organism=%5B%22Toxoplasma%20gondii%20ME49%22%5D&reportConfig=%7B%22attributes%22%3A%5B%22gene_source_id%22%2C%22interpro_id%22%2C%22interpro_description%22%2C%22pfam_id%22%2C%22pfam_description%22%5D%2C%22includeHeader%22%3Atrue%2C%22attachmentType%22%3A%22plain%22%7D', path='datasets/interpro_tgon.csv', derived_from=(), note='Domain annotation partly records study effort, not conserved architecture.', geo_file_suffix=None), Dataset(key='alphafold', name='AlphaFold DB', level='reference', kind='structure', provides='Per-gene mean pLDDT; coordinates fetched on demand', organism='Tg', columns=('mean_plddt',), coverage='6,480 (79.6%)', pmid=None, accession='UP000001529 (taxid 508771), AlphaFold DB', citation='Varadi et al. 2024 NAR (database); Jumper et al. 2021 Nature (method)', url='https://alphafold.ebi.ac.uk/api/prediction/{acc}', path=None, derived_from=(), note='Missing for the largest proteins, which here are disproportionately secreted effectors. NO ANONYMOUS BULK DOWNLOAD: the per-proteome tar exists at gs://public-datasets-deepmind-alphafold-v4/proteomes/proteome-tax_id-508771-0_v4.tar but plain HTTPS returns 403, so it needs `gcloud storage cp` and a Google account. The per-accession API above is the credential-free route and is what structures.py uses. The database paper is Varadi et al., not Jumper et al. -- Jumper is the method, and there is no paper by Jumper titled after the database.', geo_file_suffix=None), Dataset(key='lopit_tgon', name='T. gondii hyperLOPIT', level='post_translation', kind='LOPIT', provides='Subcellular compartment, MAP and MCMC, with posteriors', organism='Tg', columns=('compartment', 'compartment_best', 'compartment_source', 'lopit_map', 'lopit_mcmc', 'lopit_prob_map', 'lopit_prob_mcmc', 'lopit_methods_agree', 'lopit_confident', 'lopit_unified'), coverage='3,827 (47.0%)', pmid='33053376', accession=None, citation='A Comprehensive Subcellular Atlas of the Toxoplasma Proteome via hyperLOPIT (Barylyuk et al. 2020)', url='https://ars.els-cdn.com/content/image/1-s2.0-S193131282030514X-mmc5.xls', path='datasets/lopit_toxoplasma_gondii_ME49.csv', derived_from=(), note='MAP and MCMC disagree for 980 of 3,827 (26%). Assignment tracks abundance, so the unassigned half is biased toward low-abundance proteins.', geo_file_suffix=None), Dataset(key='lopit_pfal', name='P. falciparum LOPIT', level='post_translation', kind='LOPIT', provides='Donor labels for orthoLOPIT transfer', organism='Tg', columns=(), coverage='1,646 usable', pmid='42218142', accession=None, citation='Chisholm SA et al., The spatial proteome of the Plasmodium falciparum schizont. Nat Commun 2026;17:6192 -- CONFIRM against the file on disk', url='https://media.springernature.com/original/springer-static/esm/art%3A10.1038%2Fs41467-026-73664-2/MediaObjects/41467_2026_73664_MOESM3_ESM.xlsx', path='datasets/lopit_plasmodium_falciparum_3D7.csv', derived_from=(), note='The URL downloads and is the right kind of data, but this file predates the registry entry, so that this paper is the source of THIS csv is inference, not verification. Confirm against the file before citing.', geo_file_suffix=None), Dataset(key='lopit_cpar', name='C. parvum hyperLOPIT', level='post_translation', kind='LOPIT', provides='Donor labels for orthoLOPIT transfer', organism='Tg', columns=(), coverage='1,107 usable', pmid=None, accession=None, citation='Guerin et al. 2023', url='https://ars.els-cdn.com/content/image/1-s2.0-S1931312823001051-mmc4.xlsx', path='datasets/lopit_cryptosporidium_parvum_MEASURED_Guerin2023.csv', derived_from=(), note='MASTER_parasite_wide_by_orthogroup.csv has an empty cpar_lopit_native column; this data is joined from source instead.', geo_file_suffix=None), Dataset(key='gse108740', name='Stage transcriptome', level='transcription', kind='RNAseq', provides='Tachyzoite, day 3/5/7, in vivo tissue cyst (12 columns)', organism='Tg', columns=('expr_tachy', 'expr_cyst', 'expr_max', 'rna108740_Tachyzoites_T2_FPKM', 'rna108740_Tachyzoites_T4_FPKM', 'rna108740_Tissue_cysts_A_FPKM', 'rna108740_Tissue_cysts_B_FPKM', 'rna108740_Day3_CS4_FPKM', 'rna108740_Day3_CS5_FPKM', 'rna108740_Day3_CS6_FPKM', 'rna108740_Day5_CS2_FPKM', 'rna108740_Day5_K4_14_FPKM', 'rna108740_Day7_CS7_FPKM', 'rna108740_Day7_CS8_FPKM', 'rna108740_Day7_CS9_FPKM'), coverage='7,739 (95.1%)', pmid=None, accession='GSE108740', citation=None, url='https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE108740', path=None, derived_from=(), note='', geo_file_suffix=None), Dataset(key='gse206344', name='Oocyst sporulation series', level='transcription', kind='RNAseq', provides='Unsporulated / sporulating / sporulated, 2 replicates (6 columns)', organism='Tg', columns=('expr_sporulated', 'rna206344_Unsporulated_R1', 'rna206344_Unsporulated_R2', 'rna206344_Sporulating_R1', 'rna206344_Sporulating_R2', 'rna206344_Sporulated_R1', 'rna206344_Sporulated_R2'), coverage='7,974 (98.0%)', pmid=None, accession='GSE206344', citation=None, url='https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE206344', path=None, derived_from=(), note='', geo_file_suffix=None), Dataset(key='gse22258', name='Pru tachyzoite / 72-hour bradyzoite stage array', level='transcription', kind='microarray', provides='Matched tachyzoite and alkaline-induced bradyzoite expression', organism='Tg', columns=('rna22258_tachyzoite', 'rna22258_bradyzoite'), coverage='7,253 genes', pmid=None, accession='GSE22258', citation=None, url='https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE22258', path='datasets/stagetranscriptome_GSE22258_series_matrix.txt.gz', derived_from=(), note='Already keyed by TGME49 accessions. Kept separate from the newer RNA-seq stage series; it is not averaged as though microarray intensity were FPKM.', geo_file_suffix=None), Dataset(key='gse168465', name='Primary brain-cell parasite differentiation time course', level='transcription', kind='RNAseq', provides='Parasite base mean and log2 fold-change at days 1, 2, 4, 7 and 14', organism='Tg', columns=('brain168465_1d_base_mean', 'brain168465_1d_lfc', 'brain168465_2d_base_mean', 'brain168465_2d_lfc', 'brain168465_4d_base_mean', 'brain168465_4d_lfc', 'brain168465_7d_base_mean', 'brain168465_7d_lfc', 'brain168465_14d_base_mean', 'brain168465_14d_lfc'), coverage='measured at build time', pmid='34610266', accession='GSE168465', citation='Mouveaux T et al., Primary brain cell infection by Toxoplasma gondii reveals spontaneous bradyzoite differentiation and modification of neuron biology', url='https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE168465', path='datasets/stagetranscriptome_GSE168465_DESeq2-Toxo-all-time-points.xlsx', derived_from=(), note='Dual host-parasite RNA-seq; only the workbook explicitly containing Toxoplasma gene results enters this map. p-values remain evidence metadata, not features.', geo_file_suffix=None), Dataset(key='gse99395', name='Intracellular/extracellular ribosome profiling', level='translation', kind='Ribo-seq', provides='Ribosome footprints, matched RNA and relative translation efficiency', organism='Tg', columns=('rpf99395_extracellular_r1', 'rpf99395_extracellular_r2', 'rpf99395_intracellular_r1', 'rpf99395_intracellular_r2', 'rna99395_extracellular_r1', 'rna99395_extracellular_r2', 'rna99395_intracellular_r1', 'rna99395_intracellular_r2', 'te99395_extracellular_r1', 'te99395_extracellular_r2', 'te99395_intracellular_r1', 'te99395_intracellular_r2'), coverage='measured at build time', pmid='29228904', accession='GSE99395', citation='Hassan MA et al., Comparative ribosome profiling uncovers a dominant role for translational control in Toxoplasma gondii. BMC Genomics 2017;18:961', url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE99nnn/GSE99395/suppl/GSE99395_Raw_counts.txt.gz', path='datasets/toxoplasma_acquisition_2026_08_14/GSE99395_Raw_counts.txt.gz', derived_from=(), note='', geo_file_suffix=None), Dataset(key='gse129869', name='Host-context parasite ribosome profiling', level='translation', kind='Ribo-seq', provides='Parasite ribosome footprints, RNA and translation efficiency in two HFF states', organism='Tg', columns=('rpf129869_confluent_r1', 'rpf129869_confluent_r2', 'rpf129869_confluent_r3', 'rpf129869_subconfluent_r1', 'rpf129869_subconfluent_r2', 'rpf129869_subconfluent_r3', 'rna129869_confluent_r1', 'rna129869_confluent_r2', 'rna129869_confluent_r3', 'rna129869_subconfluent_r1', 'rna129869_subconfluent_r2', 'rna129869_subconfluent_r3', 'te129869_confluent_r1', 'te129869_confluent_r2', 'te129869_confluent_r3', 'te129869_subconfluent_r1', 'te129869_subconfluent_r2', 'te129869_subconfluent_r3'), coverage='measured at build time', pmid='31167946', accession='GSE129869', citation='Holmes MJ et al., Simultaneous Ribosome Profiling of Human Host Cells Infected with Toxoplasma gondii. mSphere 2019;4:e00292-19', url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE129nnn/GSE129869/suppl/GSE129869_RAW.tar', path='datasets/toxoplasma_acquisition_2026_08_14/GSE129869_RAW.tar', derived_from=(), note='', geo_file_suffix=None), Dataset(key='gse19092', name='Synchronized tachyzoite cell-cycle transcriptome', level='transcription', kind='microarray', provides='Two replicates across blocked, asynchronous and hourly release states', organism='Tg', columns=('cellcycle19092_async_r1', 'cellcycle19092_async_r2', 'cellcycle19092_blocked_r1', 'cellcycle19092_blocked_r2', 'cellcycle19092_1h_r1', 'cellcycle19092_1h_r2', 'cellcycle19092_2h_r1', 'cellcycle19092_2h_r2', 'cellcycle19092_3h_r1', 'cellcycle19092_3h_r2', 'cellcycle19092_4h_r1', 'cellcycle19092_4h_r2', 'cellcycle19092_5h_r1', 'cellcycle19092_5h_r2', 'cellcycle19092_6h_r1', 'cellcycle19092_6h_r2', 'cellcycle19092_7h_r1', 'cellcycle19092_7h_r2', 'cellcycle19092_8h_r1', 'cellcycle19092_8h_r2', 'cellcycle19092_9h_r1', 'cellcycle19092_9h_r2', 'cellcycle19092_10h_r1', 'cellcycle19092_10h_r2', 'cellcycle19092_11h_r1', 'cellcycle19092_11h_r2', 'cellcycle19092_12h_r1', 'cellcycle19092_12h_r2'), coverage='measured at build time', pmid='20865045', accession='GSE19092', citation='Behnke MS et al., Coordinated progression through two subtranscriptomes underlies the tachyzoite cycle of Toxoplasma gondii. PLoS ONE 2010;5:e12354', url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE19nnn/GSE19092/matrix/GSE19092_series_matrix.txt.gz', path='datasets/toxoplasma_acquisition_2026_08_14/GSE19092_series_matrix.txt.gz', derived_from=(), note="Legacy GPL7186 probes are mapped through the platform ToxoDB field and the project's previous-ID resolver.", geo_file_suffix=None), Dataset(key='gse51780', name='Feline merozoite transcriptome', level='transcription', kind='microarray', provides='Merozoite expression with matched tachyzoite comparators', organism='Tg', columns=('rna51780_tachy_r1', 'rna51780_tachy_r2', 'rna51780_mero_r3', 'rna51780_mero_r4', 'rna51780_mero_r5', 'rna51780_mero_r6'), coverage='measured at build time', pmid='24885521', accession='GSE51780', citation='Behnke MS et al., Toxoplasma gondii merozoite gene expression analysis with comparison to the life cycle. BMC Genomics 2014;15:350', url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE51nnn/GSE51780/matrix/GSE51780_series_matrix.txt.gz', path='datasets/toxoplasma_acquisition_2026_08_14/GSE51780_series_matrix.txt.gz', derived_from=(), note='', geo_file_suffix=None), Dataset(key='gse168155', name='CPSF4 RNA-processing perturbation transcriptome', level='transcription', kind='RNAseq', provides='RNA response at 7, 24 and 48 hours after CPSF4 depletion', organism='Tg', columns=('cpsf4rna168155_ut_1', 'cpsf4rna168155_ut_2', 'cpsf4rna168155_iaa_7h_1', 'cpsf4rna168155_iaa_7h_2', 'cpsf4rna168155_iaa_24h_1', 'cpsf4rna168155_iaa_24h_2', 'cpsf4rna168155_iaa_48h_1', 'cpsf4rna168155_iaa_48h_2'), coverage='measured at build time', pmid='34263725', accession='GSE168155', citation='Farhat DC et al., A plant-like mechanism coupling m6A reading to polyadenylation safeguards transcriptome integrity. eLife 2021;10:e68312', url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE168nnn/GSE168155/suppl/GSE168155_Matrix_table_processed_data.xlsx', path='datasets/toxoplasma_acquisition_2026_08_14/GSE168155_Matrix_table_processed_data.xlsx', derived_from=(), note='This is a perturbation-response transcriptome, not a direct gene-wise m6A map.', geo_file_suffix=None), Dataset(key='gse200962', name='Bradyzoite restriction-checkpoint transcriptome', level='transcription', kind='RNAseq', provides='Cyclin perturbations in tachyzoite and bradyzoite conditions', organism='Tg', columns=('restriction200962_7th_gt_2_kk31_kim_s1_l001', 'restriction200962_7th_gt_20_kk27_kim_s14_l001', 'restriction200962_7th_gt_22_kk29_kim_s15_l001', 'restriction200962_7th_gt_4_kk32_kim_s2_l001', 'restriction200962_kk17_p2wo_ph8_2_s5', 'restriction200962_kk18_p2wo_ph8_2_s1', 'restriction200962_kk19_p2w_ph8_2_s22', 'restriction200962_kk20_p2w_ph8_2_s16', 'restriction200962_kk21_p5wo_ph8_2_s13', 'restriction200962_kk22_p5wo_ph8_2_s15', 'restriction200962_kk23_p5w_ph8_2_s12', 'restriction200962_kk24_p5w_ph8_2_s11', 'restriction200962_kk5_p2wo_ph7_4_s6', 'restriction200962_kk6_p2wo_ph7_4_s19', 'restriction200962_kk7_p2w_ph7_4_s14', 'restriction200962_kk8_p2w_ph7_4_s23'), coverage='measured at build time', pmid=None, accession='GSE200962', citation=None, url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE200nnn/GSE200962/suppl/GSE200962_gene_count_matrix_geo.csv.gz', path='datasets/toxoplasma_acquisition_2026_08_14/GSE200962_gene_count_matrix_geo.csv.gz', derived_from=(), note='No publication is linked from GEO; raw sample identifiers are retained verbatim in column names rather than assigned conditions by guesswork.', geo_file_suffix=None), Dataset(key='gse253884_5', name='In-vivo fitness of hyperLOPIT-unassigned proteins', level='DNA', kind='CRISPR_screen', provides='Two targeted libraries tested during mouse infection', organism='Tg', columns=('fit_hyperlopit_unassigned_invivo_lib1', 'fit_hyperlopit_unassigned_invivo_lib2'), coverage='measured at build time', pmid='39082802', accession='GSE253884;GSE253885', citation='Tachibana Y et al., CRISPR screens identify genes essential for in vivo virulence among proteins of hyperLOPIT-unassigned localization. mBio 2024', url='https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE253884', path='datasets/toxoplasma_acquisition_2026_08_14/', derived_from=(), note='Only the newly measured in-vivo fitness values enter; copied comparator columns in the summary workbook are not duplicated.', geo_file_suffix=None), Dataset(key='invivo_brain_transcriptome', name='In vivo brain-stage transcriptome', level='transcription', kind='RNAseq', provides='Tachyzoites, acute/chronic whole brain, and purified bradyzoites', organism='Tg', columns=('invivo_TZ_1', 'invivo_TZ_2', 'invivo_WholeBrain_Acute_1', 'invivo_WholeBrain_Acute_2', 'invivo_WholeBrain_Acute_3', 'invivo_WholeBrain_Chronic_1', 'invivo_WholeBrain_Chronic_2', 'invivo_WholeBrain_Chronic_3', 'invivo_BZ_28DPI_1', 'invivo_BZ_28DPI_3', 'invivo_BZ_90DPI_1', 'invivo_BZ_90DPI_2', 'invivo_BZ_120DPI_2', 'invivo_BZ_120DPI_3'), coverage='7,663 (94.1%)', pmid='31726967', accession=None, citation='Garfoot AL et al., Proteomic and transcriptomic analyses of early and late-chronic Toxoplasma gondii infection shows novel and stage specific transcripts. BMC Genomics 2019;20:859', url='https://static-content.springer.com/esm/art%3A10.1038%2Fs12864-019-6213-0/MediaObjects/12864_2019_6213_MOESM4_ESM.csv', path='datasets/translation/proteomics/31726967/12864_2019_6213_MOESM4_ESM.csv', derived_from=(), note='These columns are FPKM-derived transcript abundance, despite the mixed transcriptome/proteome paper and the legacy proteomics directory. They belong to transcription slots, never fitness.', geo_file_suffix=None), Dataset(key='gse132248_stress', name='Alkaline-stress differentiation transcriptome', level='transcription', kind='RNAseq', provides='Unstressed tachyzoites and alkaline-stressed bradyzoites', organism='Tg', columns=('stress_5-1_unstress_red_24', 'stress_5-2_unstress_red_24', 'stress_5-24_stress_green_48', 'stress_5-27_stress_green_48', 'stress_6-1_unstress_red_24', 'stress_6-4_unstress_red_24', 'stress_6-16_stress_green_48', 'stress_6-18_stress_green_48', 'stress_7-1_unstress_red_24', 'stress_7-18_stress_green_48'), coverage='7,880 (96.8%)', pmid='31955846', accession='GSE132248', citation='Waldman BS et al., Identification of a Master Regulator of Differentiation in Toxoplasma. Cell 2020;180:359-372.e16', url='https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE132248', path='toxo_stage_atlas/data/transcriptomics/GSE132248_STAR_counts_matrix.tsv', derived_from=(), note='', geo_file_suffix=None), Dataset(key='morc_depletion', name='MORC depletion and BFD1 perturbation transcriptome', level='transcription', kind='RNAseq', provides='MORC knockdown, BFD1 knockout and BFD1 stabilization series', organism='Tg', columns=('morc_MORC_UT1', 'morc_MORC_UT2', 'morc_MORC_UT3', 'morc_MORC_IAA1', 'morc_MORC_IAA2', 'morc_MORC_IAA3', 'morc_MORC-KD-BFD1-KO_UT1', 'morc_MORC-KD-BFD1-KO_UT2', 'morc_MORC-KD-BFD1-KO_UT3', 'morc_MORC-KD-BFD1-KO_IAA1', 'morc_MORC-KD-BFD1-KO_IAA2', 'morc_MORC-KD-BFD1-KO_IAA3', 'morc_DD-BFD1-Ty_UT1', 'morc_DD-BFD1-Ty_UT2', 'morc_DD-BFD1-Ty_UT3', 'morc_DD-BFD1-Ty_Shield1', 'morc_DD-BFD1-Ty_Shield2', 'morc_DD-BFD1-Ty_Shield3'), coverage='7,841 (96.3%)', pmid=None, accession='PXD058095', citation=None, url='https://www.ebi.ac.uk/pride/archive/projects/PXD058095', path='toxo_stage_atlas/data/proteomics/PXD058095_supp_DatasetEV1_MORC_RNAseq_counts_TPM.xlsx', derived_from=(), note='The accession and file location sit in a proteomics collection, but the shipped workbook is explicitly RNA-seq counts/TPM and is normalized as transcription. The originating publication still needs confirmation before citation.', geo_file_suffix=None), Dataset(key='crispr_invitro', name='In vitro CRISPR fitness (HFF)', level='DNA', kind='CRISPR_screen', provides='Competitive growth in fibroblasts', organism='Tg', columns=('fit_invitro_hff',), coverage='7,325 (90.0%)', pmid='27594426', accession=None, citation='A Genome-wide CRISPR Screen in Toxoplasma Identifies Essential Apicomplexan Genes (Sidik et al. 2016)', url='https://ars.els-cdn.com/content/image/1-s2.0-S0092867416310704-mmc3.xlsx', path=None, derived_from=(), note='Competitive growth, NOT essentiality. Predicted from protein features at R2 = 0.453, while the other screens are predicted at -0.105 to +0.102.', geo_file_suffix=None), Dataset(key='crispr_invivo_composite', name='In vivo CRISPR composite scores', level='DNA', kind='CRISPR_screen', provides='Differential fitness x significance in six mouse tissues after acute infection', organism='Tg', columns=('fit_invivo_PE', 'fit_invivo_lung', 'fit_invivo_liver', 'fit_invivo_spleen', 'fit_invivo_heart', 'fit_invivo_brain'), coverage='7,395 (90.8%)', pmid='38977907', accession='Nat Microbiol 2024 Supplementary Data 5, sheet Genome-Wide Differential', citation='Giuliano CJ et al., CRISPR-based functional profiling of the Toxoplasma gondii genome during acute murine infection. Nat Microbiol 2024;9:2323-2343', url='https://static-content.springer.com/esm/art%3A10.1038%2Fs41564-024-01754-2/MediaObjects/41564_2024_1754_MOESM3_ESM.zip', path='datasets/DNA/CRISPR_screen/38977907/Supplementary Data 5 (Genome-wide mouse screen scores).xlsx', derived_from=(), note="CITATION CORRECTED 2026-09-26. The four original tissues were fetched from ToxoDB's tgonGt1CrisprFunc* tracks and cited to the 2019 platform paper (PMID 31481656), whose own supplements are 36-620-gene libraries. They are this study's genome-wide composite scores: Spearman 0.9991-0.9993 and a maximum absolute difference of 5e-8 against the supplement, each tissue matching itself best among all 32 numeric columns. Heart and brain come from the same sheet (scripts/derive_deposits.py; starplast/deposits.py) and are the only in vivo heart and brain CRISPR fitness there is; both are bottleneck-limited (medians -7.9 and -7.1 raw), so most genes carry little information there. The ToxoDB attributes are gone from release 71, so the supplement is now the durable source. GT1 accessions; the 68 loci GT1 splits into A/B and ME49 does not are averaged onto the one ME49 gene.", geo_file_suffix=None), Dataset(key='crispr_serum_restriction', name='Serum-restriction CRISPR screens (10% vs 1% FBS)', level='DNA', kind='CRISPR_screen', provides='Fitness in lipid-rich and lipid-limited medium, and the lipid-dependence difference', organism='Tg', columns=('fit_lipid_rich_p8', 'fit_lipid_limited_p8', 'fit_lipid_rich_p4p5', 'fit_lipid_limited_p4p5', 'fit_serum_differential_p8', 'fit_serum_differential_p4p5'), coverage='7,395 (90.8%)', pmid='41407671', accession='Nat Commun 2025 Supplementary Data 2 (MOESM4)', citation='Bitew MA et al., A genome-wide CRISPR screen identifies GRA38 as a key regulator of lipid homeostasis during Toxoplasma gondii adaptation to lipid-rich conditions. Nat Commun 2025;16:11177', url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC12711892/supplementaryFiles', path='datasets/DNA/CRISPR_screen/41407671/41467_2025_66137_MOESM4_ESM.xlsx', derived_from=(), note="Two independent genome-wide screens in HFF (Exp1 at passage 8; Exp2 at passages 4, 5, 8), each in 10% and 1% serum. Replicate screens of one passage are averaged. Sign as published and verified on the data: negative fitness = depleted = needed (ribosomal proteins median -7.8 against -4.9, AUC 0.79-0.84); a NEGATIVE differential means needed in lipid-RICH medium -- GRA38 (TGGT1_312420), the paper's gene, is -6.66 in 10% and +0.33 in 1%. Fitness in either serum IS fibroblast fitness again (rho 0.79-0.85 with fit_invitro_hff) and is grouped with it for leakage; the differential is orthogonal to it (rho 0.06) and is the new axis. The workbook's lipidomics sheets are not gene-level and are not used.", geo_file_suffix=None), Dataset(key='crispr_glucose_limitation', name='CRISPR screen without glucose or glutamine', level='DNA', kind='CRISPR_screen', provides='Fitness on glucose alone, on glutamine alone, and which carbon source a gene needs', organism='Tg', columns=('fit_complete_medium_2025', 'fit_no_glutamine', 'fit_no_glucose', 'fit_glucose_dependence', 'fit_glucose_dependence_fdr'), coverage='7,393 (90.8%)', pmid=None, accession='bioRxiv 10.1101/2025.07.27.667068 Table S1', citation='Uboldi AD et al., Differentiation of Toxoplasma into latent forms is linked to central carbon metabolism and requires a GID/CTLH-type E3 ligase. bioRxiv 2025, doi:10.1101/2025.07.27.667068 (preprint)', url='https://www.biorxiv.org/content/10.1101/2025.07.27.667068v1.supplementary-material', path='datasets/DNA/CRISPR_screen/glucose_limitation_2025/TableS1.xlsx', derived_from=(), note="An eighth genome-wide knockout screen, and the first that changes the carbon source. Arms are measured against the post-selection library, so they are not directly comparable with the input-referenced screens; the dependence column is the authors' own contrast. Verified against the paper's biology: GDH1 ranks 1 of 8,155 and PEPCK 2 among genes needed without glucose, with BFD1 and all four GID subunits on the other side. The differential is NOISY -- replicates agree at rho 0.10-0.17 and only 175 genes reach FDR 0.05 -- so the FDR ships beside it and the column is a screen, not a measurement of one gene. A preprint: cite the journal version once it exists.", geo_file_suffix=None), Dataset(key='crispr_parasite_density', name='CRISPR screen at low and high parasite density', level='DNA', kind='CRISPR_screen', provides='Fitness at low and high infection density, and which genes high density needs', organism='Tg', columns=('fit_density_low', 'fit_density_high', 'fit_density_dependence', 'fit_density_dependence_log10padj', 'fit_density_dim'), coverage='7,461 (91.7%)', pmid='42580337', accession='Cell 2026 Supplementary Table 1 (mmc2)', citation='Giuliano CJ, Kalluraya CA, Kloehn J, Sloan MA, Bunkofske ME, Hunter CA, Soldati-Favre D, Harding CR, Lourido S. Convergent evolution of metabolic regulation governs redox adaptation in Toxoplasma. Cell 2026 Aug, doi:10.1016/j.cell.2026.07.029', url='https://ars.els-cdn.com/content/image/1-s2.0-S0092867426008275-mmc2.xlsx', path='datasets/DNA/CRISPR_screen/42580337/mmc2.xlsx', derived_from=(), note="A genome-wide knockout library selected for four passages at MOI 1, then split for four more at MOI 0.3 (low density) and MOI 3 (high). The arms are the authors' passage-8 gene scores (mean gRNA log2 fold change to input; negative = needed) and are fibroblast fitness again: r = 0.995 between them, as the paper states, and rho 0.70 with fit_invitro_hff, so they are held out with it. The dependence column is the authors' contrast on barcoded gRNA-UMI clones, log2(high / low): NEGATIVE = needed at high density. It is orthogonal to bulk fitness (rho -0.08) and is the new axis; -log10 of its Bonferroni-adjusted t-test p ships beside it, and fit_density_dim marks the paper's 31 density-inhibited mutants (NMNAT, NAD synthetase, NAD kinase, nicotinamidase, the glucose transporter, TgPRO) among the ~6,150 genes the contrast scored. Verified: r = 0.9951, 31 hits within the 32 genes at adj. p < 0.05, the 12 high-confidence hits exactly from the stated rule. The 266-gene targeted follow-up screen (with nicotinamide) is not shipped. GT1 accessions, resolved to ME49 through the identity layer. The article is not open access; PMC blocks scripted download, the publisher CDN serves the table.", geo_file_suffix=None), Dataset(key='crispr_macrophage', name='Macrophage CRISPR screens', level='DNA', kind='CRISPR_screen', provides='Naive BMDM and IFN-gamma survival', organism='Tg', columns=('fit_naive_bmdm', 'fit_ifng'), coverage='7,402 (90.9%)', pmid='33067458', accession=None, citation='Wang Y et al., Genome-wide screens identify Toxoplasma gondii determinants of parasite fitness in IFN-gamma-activated murine macrophages. Nat Commun 2020;11:5258', url='https://static-content.springer.com/esm/art%3A10.1038%2Fs41467-020-18991-8/MediaObjects/41467_2020_18991_MOESM5_ESM.xlsx', path=None, derived_from=(), note="Sign convention is INVERTED relative to the other screens. THE PREVIOUS CITATION WAS WRONG and its own 'CONFIRM this is the source' warning was justified: PMID 25867017 is a 2015 JoVE video protocol using CHEMICAL mutagenesis, verified against PubMed -- not a CRISPR screen, and it predates the first one. The entry had copied that protocol's title verbatim. A video protocol cannot be the source of 7,402 per-gene fitness scores; Wang 2020 is genome-wide in IFN-gamma-activated macrophages, which is exactly what these two columns are.", geo_file_suffix=None), Dataset(key='crispr_young2019', name='Young 2019 in vivo screen', level='DNA', kind='CRISPR_screen', provides='In vivo fitness', organism='Tg', columns=('fit_invivo_young2019',), coverage='115', pmid='31481656', accession=None, citation='Young J et al., A CRISPR platform for targeted in vivo screens identifies Toxoplasma gondii virulence factors in mice. Nat Commun 2019;10:3963', url='https://static-content.springer.com/esm/art%3A10.1038%2Fs41467-019-11855-w/MediaObjects/41467_2019_11855_MOESM6_ESM.xlsx', path=None, derived_from=(), note='Same paper as invivo_platform, a different supplementary table (MOESM6 vs MOESM5). TARGETED, not genome-wide: the libraries are 200, 800 and 3200 gRNAs, which is why this covers 115 genes rather than the proteome.', geo_file_suffix=None), Dataset(key='gra17_synthlethal', name='GRA17 synthetic-lethal screen', level='DNA', kind='CRISPR_screen', provides='RH and RH-delta-gra17 phenotype by passage; MAGeCK p-values', organism='Tg', columns=('crispr_gra17ko_phenotype', 'crispr_gra17_synthlethal_delta', 'crispr_gra17_candidate'), coverage='7,553 (genome-wide)', pmid='37498952', accession=None, citation='Genome-wide CRISPR screen identifies genes synthetically lethal with GRA17, a nutrient channel encoding gene in Toxoplasma', url='https://journals.plos.org/plospathogens/article/file?id=10.1371/journal.ppat.1011543.s001&type=supplementary', path='datasets/DNA/CRISPR_screen/37498952/', derived_from=(), note='', geo_file_suffix=None), Dataset(key='invivo_platform', name='In vivo CRISPR platform', level='DNA', kind='CRISPR_screen', provides='Mean log fold-change across replicates', organism='Tg', columns=('crispr_invivo_platform_lfc',), coverage='168', pmid='31481656', accession=None, citation='A CRISPR platform for targeted in vivo screens identifies Toxoplasma gondii virulence factors in mice', url='https://static-content.springer.com/esm/art%3A10.1038%2Fs41467-019-11855-w/MediaObjects/41467_2019_11855_MOESM5_ESM.xlsx', path='datasets/DNA/CRISPR_screen/31481656/', derived_from=(), note='Cites pre-2012 TGME49_0xxxxx accessions for every gene; must go through identity.py.', geo_file_suffix=None), Dataset(key='gra12', name='GRA12 strains and mouse subspecies', level='DNA', kind='CRISPR_screen', provides='Median L2FC in vitro and in vivo, DISCO score; two screens', organism='Tg', columns=('crispr_gra12s1_l2fc_invitro', 'crispr_gra12s1_l2fc_invivo', 'crispr_gra12s1_disco', 'crispr_gra12s2_l2fc_invitro', 'crispr_gra12s2_l2fc_invivo', 'crispr_gra12s2_disco'), coverage='236 / 232', pmid='40240328', accession=None, citation='GRA12 is a common virulence factor across Toxoplasma gondii strains and mouse subspecies', url='https://static-content.springer.com/esm/art%3A10.1038%2Fs41467-025-58876-2/MediaObjects/41467_2025_58876_MOESM5_ESM.xlsx', path='datasets/DNA/CRISPR_screen/40240328/', derived_from=(), note='The two screens are NOT replicates: in-vivo L2FC correlate at r = 0.41.', geo_file_suffix=None), Dataset(key='hosttx_effectors', name='Host-transcription effector screen', level='DNA', kind='CRISPR_screen', provides='Hotelling T2 plus full per-effector host-response signature', organism='Tg', columns=('hosttx_T2', 'hosttx_padj', 'hosttx_signature_pc01', 'hosttx_signature_pc02', 'hosttx_signature_pc03', 'hosttx_signature_pc04', 'hosttx_signature_pc05', 'hosttx_signature_pc06', 'hosttx_signature_pc07', 'hosttx_signature_pc08', 'hosttx_signature_pc09', 'hosttx_signature_pc10', 'hosttx_signature_pc11', 'hosttx_signature_pc12', 'hosttx_signature_pc13', 'hosttx_signature_pc14', 'hosttx_signature_pc15', 'hosttx_signature_pc16', 'hosttx_signature_pc17', 'hosttx_signature_pc18', 'hosttx_signature_pc19', 'hosttx_signature_pc20', 'hosttx_signature_norm', 'hosttx_signature_n_de'), coverage='252 screened / 22 full signatures', pmid='37827122', accession=None, citation='High-throughput identification of Toxoplasma gondii effector proteins that target host cell transcription', url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC12033024/supplementaryFiles', path='datasets/DNA/CRISPR_screen/37827122/', derived_from=(), note='The 737,726-row host differential-expression table is represented by 20 PCA coordinates, its L2 norm and substantial-DE count; PCA is a dimensional summary, not a host-gene measurement.', geo_file_suffix=None), Dataset(key='bioid_corpus_membership', name='BioID/TurboID supplement membership corpus', level='post_translation', kind='proximity_labelling', provides='Number of downloaded proximity-labeling studies whose supplement names each gene', organism='Tg', columns=('n_bioid_studies',), coverage='measured at build time', pmid=None, accession=None, citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/{pmcid}/supplementaryFiles', path='datasets/post_translation/BioID/', derived_from=(), note='Membership is not enrichment and is never converted to an interaction edge.', geo_file_suffix=None), Dataset(key='ipms_corpus_membership', name='IP-MS supplement membership corpus', level='post_translation', kind='IP-MS', provides='Number of downloaded pulldown studies whose supplement names each gene', organism='Tg', columns=('n_ipms_studies',), coverage='measured at build time', pmid=None, accession=None, citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/{pmcid}/supplementaryFiles', path='datasets/post_translation/IPMS/', derived_from=(), note='Membership is not enrichment and is never converted to an interaction edge.', geo_file_suffix=None), Dataset(key='proteome_pru', name='Pru proteome and IP abundance', level='translation', kind='proteomics', provides='Median log2 iBAQ across replicates', organism='Tg', columns=('protein_ibaq_log2',), coverage='748 (9.2%)', pmid=None, accession='PXD043808, PXD065585', citation=None, url='https://proteomecentral.proteomexchange.org/cgi/GetDataset?ID=PXD065585', path='toxo_stage_atlas/data/proteomics/', derived_from=(), note='Immunoprecipitation experiments of 424 and 594 proteins. Enrichment, NOT a deep proteome; do not report as proteome-wide.', geo_file_suffix=None), Dataset(key='proteome_total', name='AP2XII-1/AP2XI-2 perturbation total proteome', level='translation', kind='proteomics', provides='Replicate abundance and log2 fold-change during pre-sexual conversion', organism='Tg', columns=('proteome_log2_normalized_and_imputated_abundances_UT_R1', 'proteome_log2_normalized_and_imputated_abundances_UT_R2', 'proteome_log2_normalized_and_imputated_abundances_UT_R3', 'proteome_log2_normalized_and_imputated_abundances_T_24h_R1', 'proteome_log2_normalized_and_imputated_abundances_T_24h_R2', 'proteome_log2_normalized_and_imputated_abundances_T_24h_R3', 'proteome_log2_normalized_and_imputated_abundances_T_32h_R1', 'proteome_log2_normalized_and_imputated_abundances_T_32h_R2', 'proteome_log2_normalized_and_imputated_abundances_T_32h_R3', 'proteome_log2_normalized_and_imputated_abundances_T_48h_R1', 'proteome_log2_normalized_and_imputated_abundances_T_48h_R2', 'proteome_log2_normalized_and_imputated_abundances_T_48h_R3', 'proteome_lfc_UT_Vs_T_24h_log2_fold_change', 'proteome_lfc_UT_Vs_T_32h_log2_fold_change_1', 'proteome_lfc_UT_Vs_T_48h_log2_fold_change_2'), coverage='3,005 (36.9%)', pmid='38093015', accession='PXD039400, PXD042658', citation='Antunes AV et al., In vitro production of cat-restricted Toxoplasma pre-sexual stages. Nature 2024;625:366-376', url='https://www.ebi.ac.uk/pride/archive/projects/PXD039400', path='toxo_stage_atlas/data/proteomics/PXD039400_PXD042658_supp_SupplTable3_total_proteome.xlsx', derived_from=(), note='An actual total proteome, not IP enrichment. The abundance and fold-change columns are distinct quantification types and expression.total_proteome normalizes them separately before they enter the cache.', geo_file_suffix=None), Dataset(key='phosphosites', name='Phosphosite counts', level='post_translation', kind='phosphoproteomics', provides='Count of phosphosites per protein, no positions', organism='Tg', columns=('n_phosphosites', 'has_phospho'), coverage='1,175 (14.4%)', pmid=None, accession=None, citation='Treeck M et al. 2011 -- CONFIRM against the file on disk', url='https://ars.els-cdn.com/content/image/1-s2.0-S1931312811002885-mmc2.xls', path=None, derived_from=(), note='The URL downloads a real phosphoproteomics table, but that it is the source of THIS column is inference rather than verification; confirm before citing. Missing for 85.6% of genes; effectively an indicator of having been in a phosphoproteomics experiment.', geo_file_suffix=None), Dataset(key='phospho_quantitative', name='Oocyst-versus-tachyzoite phosphoproteome', level='post_translation', kind='phosphoproteomics', provides='Measured-site counts and strongest up/down phosphosite ratios', organism='Tg', columns=('phospho_up_sites', 'phospho_up_ratio', 'phospho_down_sites', 'phospho_down_ratio', 'phospho_sites_measured'), coverage='1,603 (19.7%)', pmid='35164288', accession='PXD017032', citation='Wang Z-X et al., Comparative Phosphoproteomic Analysis of Sporulated Oocysts and Tachyzoites of Toxoplasma gondii Reveals Stage-Specific Patterns. Molecules 2022;27:1109', url='https://www.ebi.ac.uk/pride/archive/projects/PXD017032', path='toxo_stage_atlas/data/proteomics/PXD017032_supp_TableS1_upregulated_phosphosites_oocyst_vs_tachy.xlsx', derived_from=(), note='A per-gene cache cannot retain residue positions. It carries how many sites were measured, how many moved each way and the median ratios; the source workbooks remain the residue-level record.', geo_file_suffix=None), Dataset(key='oocyst_itraq', name='Oocyst developmental-stage iTRAQ proteome', level='translation', kind='proteomics', provides='iTRAQ abundance ratios across oocyst developmental stages', organism='Tg', columns=('oocyst_itraq_115_113', 'oocyst_itraq_116_113', 'oocyst_itraq_115_114', 'oocyst_itraq_116_114', 'oocyst_itraq_115_113_1', 'oocyst_itraq_116_113_1', 'oocyst_itraq_115_114_1', 'oocyst_itraq_116_114_1'), coverage='2,079 (25.5%)', pmid='28626452', accession='PXD003765', citation='Possenti A et al., Proteomic Differences between Developmental Stages of Toxoplasma gondii Revealed by iTRAQ-Based Quantitative Proteomics. Front Microbiol 2017;8:1732', url='https://www.ebi.ac.uk/pride/archive/projects/PXD003765', path='toxo_stage_atlas/data/proteomics/PXD003765_supp_mmc2_iTRAQ_ratios_2095proteins.xls', derived_from=(), note='The legacy XLS needs conversion before pandas can read it. Ratios are retained as ratios rather than logged or centered, because moving their reference changes the measurement.', geo_file_suffix=None), Dataset(key='starpath_xlms', name='StarPath crosslink MS', level='post_translation', kind='XLMS', provides='Measured physical proximity; residue-level crosslinks and Chai-1 complexes', organism='Tg', columns=('n_xlink_partners', 'best_model_agreement'), coverage='2,842 pairs / 1,630 genes', pmid='40874616', accession=None, citation='Mapping a Toxoplasma gondii interactome by crosslinking mass spectrometry and machine learning (2025)', url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC12505969/supplementaryFiles', path='starpath_crosslinks.json, starpath_dump/cifs/', derived_from=(), note='RH88 accessions do NOT map to ME49 by suffix; use the alias column. 60% of predicted complexes place no crosslink within reach; only 162 pairs are trustworthy.', geo_file_suffix=None), Dataset(key='ipms_baits', name='IP-MS of tagged baits', level='post_translation', kind='IPMS', provides='Replicated pulldown vs untagged control', organism='Tg', columns=('n_ipms_partners',), coverage='64 pairs / 48 genes', pmid=None, accession='PXD043808, PXD065585', citation=None, url='https://www.ebi.ac.uk/pride/ws/archive/v3/projects/PXD043808/files', path=None, derived_from=(), note='The PRIDE API lists the files for one accession; swap the accession in the path for PXD065585. It returns JSON metadata, not the data -- follow the download links it gives.', geo_file_suffix=None), Dataset(key='foldseek_struct', name='Foldseek structural similarity', level='post_translation', kind='structure', provides='TM-align over Toxoplasma AlphaFold models, TM >= 0.7', organism='Tg', columns=('n_struct_similar',), coverage='11,684 pairs / 2,338 genes', pmid=None, accession=None, citation=None, url=None, path=None, derived_from=('mean_plddt',), note='COMPUTED HERE, so there is nothing to download: Foldseek all-vs-all over the Toxoplasma AlphaFold models (see the alphafold entry for how to obtain those), keeping pairs at TM >= 0.7. Needs no orthology, so it reaches lineage-specific effectors homology edges cannot.', geo_file_suffix=None), Dataset(key='bioid_corpus', name='Proximity-labeling corpus', level='post_translation', kind='BioID', provides='42 BioID/TurboID/APEX studies with a tagged Toxoplasma protein', organism='Tg', columns=(), coverage='28 studies with data, 127 files', pmid=None, accession=None, citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/{pmcid}/supplementaryFiles', path='datasets/post_translation/BioID/', derived_from=(), note='Downloaded and indexed; NOT yet parsed into edges. HOW TO REFETCH: this is a harvest of many papers, so there is no single URL -- but nothing is lost. Every one of the 97 studies has its PMCID and every file its filename recorded in interaction_studies.parquet and interaction_study_members.parquet, so the whole corpus reconstructs by substituting each PMCID into the URL above.', geo_file_suffix=None), Dataset(key='pulldown_corpus', name='Pulldown corpus', level='post_translation', kind='IPMS', provides='55 IP-MS / co-IP studies with a tagged Toxoplasma protein', organism='Tg', columns=(), coverage='29 studies with data, 140 files', pmid=None, accession=None, citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/{pmcid}/supplementaryFiles', path='datasets/post_translation/IPMS/', derived_from=(), note='Downloaded and indexed; NOT yet parsed into edges. Refetch as for bioid_corpus: substitute each recorded PMCID into the URL above.', geo_file_suffix=None), Dataset(key='pubmed', name='PubMed abstracts', level='reference', kind='literature', provides='Titles and abstracts for co-mention and attention', organism='Tg', columns=('n_publications', 'n_papers_focal', 'n_papers_substantive', 'n_papers_incidental', 'attention_depth'), coverage='33,924 records', pmid=None, accession=None, citation=None, url='https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=Toxoplasma&retmax=100000', path='.claude/skills/toxoplasma-scientist/corpus/pubmed_toxoplasma.jsonl', derived_from=('n_papers_focal', 'n_papers_substantive', 'n_papers_incidental'), note='ASSEMBLED HERE from an E-utilities query rather than downloaded as a file: the esearch above returns the PMID set, and efetch retrieves each record. The count grows over time, so a rebuild will not reproduce 33,924 exactly -- record the date. This corpus was built 2026.', geo_file_suffix=None), Dataset(key='pmc_oa', name='PubMed Central open-access full texts', level='reference', kind='literature', provides='Sectioned JATS XML', organism='Tg', columns=('n_fulltext',), coverage='6,667 articles', pmid=None, accession=None, citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/{pmcid}/fullTextXML', path='/mnt/wd4tb/skill_corpora/toxoplasma-scientist/', derived_from=(), note='A biased subset: only what publishers deposited open access. ASSEMBLED HERE: for each PMID in the pubmed corpus that has a PMCID, fetch the JATS from the URL above. Machine-local by size, which is why the built cache is what ships.', geo_file_suffix=None), Dataset(key='gse223620_bfd2_rip', name='BFD2-bound transcriptome (RIP-seq, COMPUTED)', level='transcription', kind='RIPseq', provides='Enrichment of each transcript in the BFD2 immunoprecipitation', organism='Tg', columns=('bfd2_rip_log2_ip_over_input',), coverage='7,463 genes (92%)', pmid=None, accession='GSE223620', citation=None, url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE223nnn/GSE223620/suppl/GSE223620_ProcessedDataFile_BFD2.RIPseq.xls.gz', path='datasets/quarantine/2026_08_16_unverified/Tg/rna_binding_protein_targets/', derived_from=(), note="COMPUTED: the deposit publishes read counts for the IP and the input, not the ratio. Both are scaled to a common library size and the log2 taken, at a floor of 20 reads across the pair -- deliberately low, because the point of a RIP is the enriched tail and a stricter floor would drop the genes the slot asks about. Verified against the published mechanism: BFD2 binds and stabilises the BFD1 transcript, and BFD1 comes out at +3.52, rank 32 of 8,090, the top 0.4%. BFD2's own transcript is unremarkable at +0.31, which is what says the enrichment is not an artefact of the tagged locus. One column and not a set: the slot holds one protein's targets, and a second RIP would sit beside this rather than be averaged into it.", geo_file_suffix=None), Dataset(key='gse245775', name='Differentiation ribosome profiling (eIF1.2)', level='translation', kind='RiboSeq', provides='RPF and RNA counts, and their ratio, in tachyzoites and pre-bradyzoites', organism='Tg', columns=('rpf245775_parent_tachy_r1', 'rpf245775_parent_tachy_r2', 'rpf245775_parent_tachy_r3', 'rpf245775_parent_prebrady_r1', 'rpf245775_parent_prebrady_r2', 'rpf245775_parent_prebrady_r3', 'rpf245775_eif12ko_tachy_r1', 'rpf245775_eif12ko_tachy_r2', 'rpf245775_eif12ko_tachy_r3', 'rpf245775_eif12ko_prebrady_r1', 'rpf245775_eif12ko_prebrady_r2', 'rpf245775_eif12ko_prebrady_r3', 'rna245775_parent_tachy_r1', 'rna245775_parent_tachy_r2', 'rna245775_parent_tachy_r3', 'rna245775_parent_prebrady_r1', 'rna245775_parent_prebrady_r2', 'rna245775_parent_prebrady_r3', 'rna245775_eif12ko_tachy_r1', 'rna245775_eif12ko_tachy_r2', 'rna245775_eif12ko_tachy_r3', 'rna245775_eif12ko_prebrady_r1', 'rna245775_eif12ko_prebrady_r2', 'rna245775_eif12ko_prebrady_r3', 'te245775_parent_tachy_r1', 'te245775_parent_tachy_r2', 'te245775_parent_tachy_r3', 'te245775_parent_prebrady_r1', 'te245775_parent_prebrady_r2', 'te245775_parent_prebrady_r3', 'te245775_eif12ko_tachy_r1', 'te245775_eif12ko_tachy_r2', 'te245775_eif12ko_tachy_r3', 'te245775_eif12ko_prebrady_r1', 'te245775_eif12ko_prebrady_r2', 'te245775_eif12ko_prebrady_r3'), coverage='7,880 genes (97%)', pmid='38782906', accession='GSE245775', citation=None, url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE245nnn/GSE245775/suppl/GSE245775_RAW.tar', path='datasets/quarantine/2026_08_16_unverified/Tg/stage_conversion_phenotype/', derived_from=(), note="The `prebrady` arms are 48 hours in RPMI pH 8.3 at ambient CO2, which the submitters label `cell type: pre-bradyzoites`. Named for that and not for `bradyzoite`: these are not tissue cysts. Verified by reproducing the paper's own result from the counts -- BFD1 rises 3.6 log2 on conversion in the parental line and 2.6 in the knockout, and BFD2 rises 1.4 and 0.1, so the knockout's failure to induce BFD2 is visible in the column itself. LDH2, BAG1 and SRS also rise on conversion, which is what confirms the arms are not swapped. Reached the map proposed for `stage-conversion phenotype`, which it is not.", geo_file_suffix=None), Dataset(key='gse313048_atac', name='Promoter accessibility (ATAC-seq, COMPUTED)', level='DNA', kind='ATACseq', provides='Mean ATAC coverage over the promoter, relative to the genome mean', organism='Tg', columns=('atac_promoter_ut',), coverage='7,988 genes (98%)', pmid=None, accession='GSE313048', citation=None, url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE313nnn/GSE313048/suppl/GSE313048_ATACseq_GCN5b-KD_UT.bw', path='datasets/quarantine/2026_08_16_unverified/Tg/acetylation/', derived_from=(), note='COMPUTED here: GEO serves this as a bigWig with no peak calls and no per-gene table, so the summary is the mean coverage 1 kb either side of the transcription start, over the genome mean. No peak calling and no thresholds -- those would be modelling choices invented here rather than taken from the authors. Only the UNTREATED arm is read; the deposit is a GCN5b knockdown and the depleted arm answers a different question. Verified against expression: rho +0.50, and the top decile of expressed genes carries 2.0 log2 more promoter signal than the bottom decile. Correlates with fitness at rho +0.02, so it is not merely tracking essentiality.', geo_file_suffix=None), Dataset(key='gse277553_cuttag', name='HDAC3 occupancy (CUT&TAG, COMPUTED)', level='DNA', kind='CUTandTAG', provides='Mean HDAC3 CUT&TAG coverage over the promoter, relative to the genome mean', organism='Tg', columns=('cuttag_hdac3_promoter_ut',), coverage='8,140 genes (100%)', pmid=None, accession='GSE277553', citation=None, url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE277nnn/GSE277553/suppl/GSE277553_RAW.tar', path='datasets/quarantine/2026_08_16_unverified/Tg/chromatin_accessibility/', derived_from=(), note="COMPUTED the same way as the ATAC column, from the untreated arm; the deposit's other arm is an AP2XII-5 knockout. Two replicates and not three: GSM8524430_UT_2.bw begins with eight 0xFF bytes and is not a bigWig, identically whether taken from the series tar or fetched from GEO as a sample file, so the corruption is in the deposit. It is skipped with a message rather than silently, because a replicate dropped without saying so makes the mean smaller than the note beside the column claims.", geo_file_suffix=None), Dataset(key='toxodb_palmitome', name='S-palmitoylome (Foe 2015, via ToxoDB)', level='post_translation', kind='proteomics', provides='17-ODYA enrichment per gene, against hydroxylamine and against palmitate', organism='Tg', columns=('palmitome_odya_vs_hydroxylamine_log2', 'palmitome_odya_vs_palmitate_log2'), coverage='470 and 488 genes', pmid='26468752', accession='ToxoDB Foe palmitome', citation=None, url='https://toxodb.org/toxo/service/record-types/transcript/searches/GenesByProteomicsDirecttgonGT1_quantitativeMassSpec_Foe_Lipidome_Palmitoylome_RSRC/reports/attributesTabular', path='starplast/data/toxodb_palmitome_hydroxylamine.tsv', derived_from=(), note="The paper is not open access and PMC serves its supplementary spreadsheets only through a download interstitial, so the numbers come from ToxoDB's own query service for the same dataset -- the authors' fold differences, not a re-analysis. Two comparisons and only one is palmitoylation: hydroxylamine cleaves thioester bonds, which is the bond an S-palmitoyl group makes, so that column is thioester-specific; the palmitate competition shows only that the label is fatty-acid-dependent and includes N-myristoylated proteins. Verified against known substrates: ROP5 +2.20, GAP45 +1.34, AMA1 +0.93, MLC1 +0.71, IMC proteins +0.34, against a measured-gene median of -0.17. ToxoDB reports a SIGNED fold difference and not a ratio -- -3.12 means three-fold down -- so reading it as a ratio would have made every depleted protein NaN and dropped half the table.", geo_file_suffix=None), Dataset(key='iedb_bcell', name='Antibody epitopes (IEDB)', level='reference', kind='immunity', provides='Distinct antibody epitope sequences per gene', organism='Tg', columns=('n_bcell_epitopes',), coverage='34 genes, 222 distinct epitopes', pmid=None, accession='IEDB bcell_search', citation=None, url='https://query-api.iedb.org/bcell_search?parent_source_antigen_source_org_name=ilike.*Toxoplasma*', path='starplast/data/iedb_bcell_epitopes.tsv', derived_from=(), note="From IEDB directly, NOT through ToxoDB, because ToxoDB's epitope integration is not split by type and antigenicity is a question about antibodies. 189 of the 221 genes in the ToxoDB epitope column have no antibody record at all, so the two are genuinely different measurements filling different slots. Distinct epitope SEQUENCES and not assay records: a protein studied by twenty groups accumulates twenty records for one peptide, and counting records would rank antigens by fashion. Verified by what tops it -- SRS29B (SAG1) 47, GRA6 29, GRA1 26, GRA4 20, GRA7 16, MIC3 11, which is the panel commercial Toxoplasma serodiagnostic kits are built from. Antigens are mapped by their product description, because IEDB names them verbatim from ToxoDB; the trailing-symbol route resolves ten fewer and loses SRS29B, the most studied antigen in the organism.", geo_file_suffix=None), Dataset(key='toxodb_epitopes', name='IEDB epitopes mapped to genes (via ToxoDB)', level='reference', kind='immunity', provides='How many IEDB epitopes ToxoDB maps to this gene', organism='Tg', columns=('iedb_epitope_count',), coverage='221 genes', pmid=None, accession='ToxoDB / IEDB', citation=None, url='https://toxodb.org/toxo/service/record-types/transcript/searches/GenesWithEpitopes/reports/attributesTabular', path='starplast/data/toxodb_epitopes.tsv', derived_from=(), note="ToxoDB's own join of IEDB against the ME49 proteome, at all three confidence levels. NOT split by epitope type -- the integration does not expose that -- so the count is T-cell and B-cell epitopes alike, which is why the column is named iedb_ and not t_cell_. Verified by what comes out on top: SRS29B (SAG1) with 45, then GRA6, GRA7, GRA2 and ROP18. Those are the canonical Toxoplasma serology antigens, in the order a serologist would put them.", geo_file_suffix=None), Dataset(key='toxodb_h4_acetylation', name='Histone H4 acetylation (ChIP-chip, via ToxoDB)', level='DNA', kind='ChIPchip', provides='Genome-wide H4 K5/K8/K12/K16 acetylation score within 1 kb of the gene', organism='Tg', columns=('h4_acetylation_chip_score',), coverage='7,515 genes (92%)', pmid=None, accession='ToxoDB Hakimi/Ali H4 acetylation', citation=None, url='https://toxodb.org/toxo/service/record-types/transcript/searches/GenesByChIPchiptgonME49_chipChipExper_Hakimi_Ali_RSRC/reports/attributesTabular', path='starplast/data/toxodb_h4_acetylation.tsv', derived_from=(), note='Verified as an ACTIVE mark must behave: rho +0.36 with transcription, +0.43 with promoter ATAC, -0.02 with fitness, and genes in its top decile are expressed four times as highly as those in its bottom. The Einstein H3K4me1 report from the same site, the same assay type and the same query shape does the opposite -- its marked genes have LESS accessible promoters -- and is in quarantine. This entry is the counter-example that says that refusal is about the data and not about the reader.', geo_file_suffix=None), Dataset(key='toxodb_macrophage', name='Expression in infected macrophages (via ToxoDB)', level='transcription', kind='RNAseq', provides='Expression percentile in ME49-infected murine macrophages', organism='Tg', columns=('macrophage_expression_percentile',), coverage='8,140 genes (100%)', pmid=None, accession='ToxoDB Saeij 29 strains', citation=None, url='https://toxodb.org/toxo/service/record-types/transcript/searches/GenesByRNASeqtgonME49_Saeij_Jeroen_strains_rnaSeq_RSRCPercentile/reports/attributesTabular', path='starplast/data/toxodb_macrophage.tsv', derived_from=(), note="The ME49 arm of a 29-strain panel, so the strain matches the rest of the map. Correlates at rho +0.89 with the fibroblast transcriptome (`expr_tachy`). That is a FINDING -- the parasite's transcriptional programme is largely independent of which host cell it is in -- and not a construction: it is an independent measurement in a different host context, with nothing to declare in derived_from. It is written down here so that nobody counts the two as independent evidence when they agree, which they mostly will.", geo_file_suffix=None), Dataset(key='toxodb_ec_numbers', name='Enzyme classification (ToxoDB)', level='reference', kind='annotation', provides='EC number per gene, and whether it has one', organism='Tg', columns=('ec_number', 'has_ec'), coverage='1,313 enzymes of 8,140 genes', pmid=None, accession='ToxoDB ME49', citation=None, url='https://toxodb.org/toxo/service/record-types/transcript/searches/GenesByTaxon/reports/attributesTabular', path='starplast/data/toxodb_ec_numbers.tsv', derived_from=(), note='An annotation rather than a measurement, with the same standing as the InterPro domains that fill `domain content`. It matters because it is the ONLY gene-indexed metabolic datum there is -- every other metabolism question in the catalog is about metabolites, and a metabolite is not a gene. Verified against conservation: enzymes have a Plasmodium ortholog 59.6% of the time against 30.4% for other genes (odds 3.39, p = 8e-88), are lineage-specific a third as often, and are more costly to lose in vitro. `has_ec` is 0 and not missing where ToxoDB reports no EC: the whole proteome was asked, so no assignment is an answer about the gene.', geo_file_suffix=None), Dataset(key='crosslink_interactome', name='Crosslinking MS interactome', level='post_translation', kind='XLMS', provides='How many proteins this one crosslinks to', organism='Tg', columns=('n_crosslink_partners',), coverage='494 proteins', pmid='40874616', accession='mBio 02159-25 supplementary file s0004', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC12505969/supplementaryFiles', path='starplast/data/crosslink_partners.tsv', derived_from=(), note='395 high-confidence protein pairs, counted per protein. Verified against the two largest obligate complexes any cell has: 21 of 32 proteasome subunits are in the interactome (odds 30.8, p = 1e-18) and 57 of 158 ribosomal proteins (odds 9.7, p = 4e-30). Crosslinking finds stable abundant complexes, and if it did not find those two it would not be finding complexes. Absent is absent: a protein with no partner here may be in no complex or may simply not have crosslinked.', geo_file_suffix=None), Dataset(key='pvm_proximity', name='PVM proximity labelling', level='post_translation', kind='proteomics', provides='Whether the study placed this protein at the parasitophorous vacuole membrane', organism='Tg', columns=('pvm_proximity_positive',), coverage='1,274 genes (73 positive)', pmid='34749525', accession='mBio 00260-21 Data Set S1', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC8576527/supplementaryFiles', path='starplast/data/pvm_proximity.tsv', derived_from=(), note='One of the few binaries in the map with REAL zeros: the study publishes a likely-negative list of 1,201 genes beside its 73 positives, so a zero here is a measurement and not a gap -- for those 1,201 and only for them. Everything else is NaN. Verified by what the positives are: 53 of 73 are dense granule proteins against 0 of 1,201 negatives (Fisher p = 2e-77), and dense granule proteins are exactly what Toxoplasma secretes into the vacuole and inserts into the membrane it shares with the host cytosol.', geo_file_suffix=None), Dataset(key='cdpk1_substrates', name='CDPK1 substrates (thiophosphate labelling)', level='post_translation', kind='proteomics', provides='Thiophosphorylated peptides per gene from analog-sensitive CDPK1', organism='Tg', columns=('cdpk1_thiophospho_peptides',), coverage='361 genes', pmid='37933960', accession='eLife 85654 supplementary file 6', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC10629828/supplementaryFiles', path='starplast/data/cdpk1_substrates.tsv', derived_from=(), note="The enriched fraction only, one gene per peptide from the master accession the search engine assigned -- counting every protein a shared peptide maps to would credit ambiguous peptides several times. The count tracks abundance, as every phosphoproteomic count does, and the top of it is HSP70, HSP90 and BiP. What says it is nonetheless CDPK1's substrate set is the enrichment: microneme proteins are 11-fold over-represented (Fisher p = 2e-05) and CDPK1 is the kinase that governs microneme secretion, myosin A is in it, and so is the HOOK protein that the paper exists to report.", geo_file_suffix=None), Dataset(key='mrna_stability', name='mRNA stability after actinomycin D', level='transcription', kind='RNAseq', provides='Proportion of transcript remaining after five hours of transcription block', organism='Tg', columns=('mrna_remaining_5h_actinomycin',), coverage='412 genes', pmid='39899594', accession='PLoS Pathogens 1012857 Table S12', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC11801735/supplementaryFiles', path='starplast/data/mrna_stability.tsv', derived_from=(), note='A direct measurement: block transcription, wait, see what is left. Untreated parasites at five hours, so the column is stability and not the iron response the paper is about. BIASED BY CONSTRUCTION and the bias is worth stating -- the table is the 426 transcripts that fell below 75% remaining, so it describes the unstable tail and a gene absent from it is stable OR was not measured, which the column cannot distinguish. Consistent with that: ribosomal-protein transcripts, which are classically stable, are under-represented among the responders at odds 0.37.', geo_file_suffix=None), Dataset(key='mrna_decay_gse329845', name='Genome-wide mRNA decay after actinomycin D', level='transcription', kind='RNAseq', provides='Wild-type mRNA remaining after 4 h of transcription block, relative to the median', organism='Tg', columns=('mrna_log2_remaining_4h_actinomycin',), coverage='5,944 (73%)', pmid='42580337', accession='GSE329845', citation='Giuliano CJ et al., Convergent evolution of metabolic regulation governs redox adaptation in Toxoplasma. Cell 2026', url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE329nnn/GSE329845/suppl/GSE329845_Processed_Data.csv.gz', path='datasets/transcription/RNAseq/GSE329845/GSE329845_Processed_Data.csv.gz', derived_from=(), note="Raw counts, one 4 h time point, three replicates of vehicle and actinomycin D in wild type (the TgPRO knockout arms are not used). Median-of-ratios size factors, a moderated linear model with replicate blocking (starplast/deposits.py). No spike-in, so a global loss of RNA is normalized away: 0 means as stable as the typical transcript, not fully stable, and this is a relative decay, never a half-life. Replicates agree at rho 0.96; ribosomal-protein mRNAs are stable (+1.4 against -0.15, p = 6e-14). Genome-wide where mrna_stability is the 412-gene unstable tail of another study; the two do not correlate (rho -0.03 on 286 shared genes), which that tail's selection explains, so they are kept as separate columns in different units.", geo_file_suffix=None), Dataset(key='gse302107_riboseq', name="High-resolution ribosome profiling (5'UTR study)", level='translation', kind='Ribo-seq', provides='Translation efficiency per replicate, footprints over matched RNA', organism='Tg', columns=('te302107_tachy_r1', 'te302107_tachy_r2'), coverage='5,992 (73.6%)', pmid=None, accession='GSE302107', citation="Peters ML et al., 5' untranslated regions tune Toxoplasma translation. bioRxiv 2025, doi:10.1101/2025.07.14.664749 (preprint)", url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE302nnn/GSE302107/suppl/GSE302107_RPKM_and_TE.xlsx', path='datasets/translation/riboseq/GSE302107/GSE302107_RPKM_and_TE.xlsx', derived_from=(), note="ME49 in HFF, two replicates of paired footprints and total RNA. The authors' TE is a LINEAR ratio (verified: footprint RPKM / RNA RPKM for every row); shipped as log2 to match the other TE columns, with a zero ratio -- no footprints counted -- as missing rather than minus infinity. The most reproducible TE in the organism (replicates rho 0.973, against 0.87 for GSE99395 and 0.67 for GSE245775) and concordant with both (rho 0.78-0.79). Ribosomal proteins are the high-TE class (median ratio 2.86 against 1.08). A preprint: cite the journal version once it exists. The host sheet (7,943 human genes) is not used yet.", geo_file_suffix=None), Dataset(key='gse302108_utr5', name="5' UTR architecture from reannotated transcripts", level='transcription', kind='RNAseq', provides="Length, upstream AUGs and ORFs, and start-context strength of each 5' UTR", organism='Tg', columns=('utr5_length', 'utr5_n_uaugs', 'utr5_n_uorfs', 'utr5_n_oorfs', 'utr5_n_inframe_ext', 'utr5_kozak_score'), coverage='5,992 (73.6%)', pmid=None, accession='GSE302108 / bioRxiv 10.1101/2025.07.14.664749 Supplementary Data 4', citation="Peters ML et al., 5' untranslated regions tune Toxoplasma translation. bioRxiv 2025, doi:10.1101/2025.07.14.664749 (preprint)", url='https://www.biorxiv.org/content/10.1101/2025.07.14.664749v1.supplementary-material', path='datasets/translation/riboseq/GSE302108/SupplementaryData4_TE_info_and_UTRfeatures.xlsx', derived_from=(), note="Sequence properties of the untranslated region, from a reannotation built on long reads and ribosome footprints -- not a measurement of the gene's behaviour, which is why they are their own slot rather than part of translation. They predict translation the way they should: upstream AUGs against efficiency at rho -0.47, Kozak strength with it at +0.22. The study's reporter assay is NOT here: its 30,235 scored sequences are variants of twelve endogenous UTRs, so it describes sequences, not genes.", geo_file_suffix=None), Dataset(key='brady_subtypes', name='Bradyzoite subtypes in the mouse brain (single-cell)', level='transcription', kind='scRNAseq', provides='Average expression in each of five subtypes of in vivo bradyzoite', organism='Tg', columns=('bzsub_A_expr', 'bzsub_B_expr', 'bzsub_C_expr', 'bzsub_D_expr', 'bzsub_E_expr'), coverage='7,739 (95%)', pmid='41580398', accession='GSE311669 / Supplementary Data 1', citation='Ulu A et al., Bradyzoite subtypes rule the crossroads of Toxoplasma development. Nat Commun 2026;17:1783', url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC12917143/supplementaryFiles', path='datasets/transcription/scRNAseq/41580398/41467_2026_68489_MOESM3_ESM.xlsx', derived_from=(), note="Five columns because a tissue cyst is not one transcriptional state, which is the paper's finding. All five are bradyzoites -- BAG1, LDH2, ENO1, SRS9 and CST1 above the 92nd percentile in every group, SAG1 below the 41st -- and Group B carries SRS22A at 3.27 against 0.34-0.66 elsewhere, the subtype signature. Mean expression agrees with the shipped in vivo bradyzoite column at rho 0.75.", geo_file_suffix=None), Dataset(key='iron_depletion_proteome', name='Proteome and transcriptome without iron', level='translation', kind='proteomics', provides='Change in each protein, and in each transcript, after 24 h of iron depletion', organism='Tg', columns=('iron_depletion_protein_log2fc', 'iron_depletion_protein_padj', 'iron_depletion_rna_log2fc'), coverage='5,047 protein / 3,113 RNA', pmid='41925342', accession='mBio Tables S1 and S2', citation='Hanna JC et al., Global translational and metabolic remodeling during iron deprivation in Toxoplasma gondii. mBio 2026;17:e0378825', url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC13170339/supplementaryFiles', path='datasets/translation/proteomics/41925342/mbio.03788-25-s0002.xlsx', derived_from=(), note="The same paper the metabolome_iron row cites, whose proteome and RNA-seq that row never took. Genome-scale on the protein side (5,052 groups, 3 + 3 replicates); the RNA side is only the 3,113 genes of the paper's joint analysis, a significance-filtered subset, so a missing RNA value is 'not reported' rather than 'unchanged'. The paper's 61 iron-sulfur proteins shift down on balance (median -0.04 against +0.02; 12 of the 16 that change significantly fall), a modest effect. Despite the title there is NO ribosome profiling in this paper -- translation is measured by microscopy -- so it fills protein abundance under stress, not translation, and the earlier reading of it as a translation dataset was wrong.", geo_file_suffix=None), Dataset(key='organelle_surface_turboid', name='Organelle-surface proximity proteomes', level='post_translation', kind='BioID', provides='Enrichment near the cytosolic face of the apicoplast, mitochondrion and ER', organism='Tg', columns=('surface_apicoplast_log2fc', 'surface_apicoplast_stringent', 'surface_mitochondrion_log2fc', 'surface_mitochondrion_stringent', 'surface_er_log2fc', 'surface_er_stringent'), coverage='742 proteins', pmid=None, accession='bioRxiv 10.64898/2026.08.05.743015 Table S1', citation='Parker KV, Huet D. A proximity biotinylation approach for the identification of membrane contact site proteins in Toxoplasma gondii. bioRxiv 2026, doi:10.64898/2026.08.05.743015 (preprint)', url='https://www.biorxiv.org/content/10.64898/2026.08.05.743015v1.supplementary-material', path='datasets/post_translation/BioID/organelle_surface_turboid_2026/media-1.xlsx', derived_from=(), note='Baits anchored in each outer membrane with their tail in the cytosol, so this is the OUTSIDE of an organelle -- a different question from hyperLOPIT, which says which organelle a protein is in. Checked against it anyway: stringent mitochondrial hits are mitochondrial at odds 13.8 and ER hits ER at 7.6, but the apicoplast bait shows no enrichment for apicoplast proteins (odds 1.2, p = 0.8), so that arm is recorded as proximity and not as a location. A protein a bait never detected keeps a MISSING flag, not a zero: that bait did not test it. One accession in the deposit is a backtick, repaired from its product text only because that text names exactly one gene. A preprint.', geo_file_suffix=None), Dataset(key='myristoylome', name='N-myristoylated proteome', level='post_translation', kind='proteomics', provides="The authors' confidence that this protein is myristoylated, 3 high to 1 low", organism='Tg', columns=('myristoylation_confidence',), coverage='65 substrates', pmid='32618271', accession='eLife 57861 supplementary file 4', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC7373427/supplementaryFiles', path='starplast/data/myristoylome.tsv', derived_from=(), note='A category the catalog did not have. N-myristoylation is co-translational and irreversible, has its own enzyme in NMT and its own drug programme, and its substrates are published. Verified against chemistry rather than against annotation: myristoylation happens on an N-terminal glycine, and all 65 of 65 substrates have glycine at position 2 against 5.8% of every other gene (Fisher p = 4e-79). No other column in the map can be checked that cleanly. Taken from the paper rather than from PXD019677, its PRIDE deposit, which ships MaxQuant archives of 250-340 MB apiece; the answer is a 65-row table in supplementary file 4.', geo_file_suffix=None), Dataset(key='toxodb_arginine_methylation', name='Monomethylarginine proteome (via ToxoDB)', level='post_translation', kind='proteomics', provides='Monomethylarginine sites reported per gene', organism='Tg', columns=('n_arginine_methylation_sites',), coverage='368 genes', pmid=None, accession='ToxoDB Yakubu monomethylarginine', citation=None, url='https://toxodb.org/toxo/service/record-types/transcript/searches/GenesByPTM/reports/attributesTabular', path='starplast/data/toxodb_arginine_methylation.tsv', derived_from=(), note="Yakubu et al.'s RH proteomics, through ToxoDB's PTM search. Verified by substrate class rather than by a metadata field: RNA-binding, RRM and helicase proteins are enriched 2.9-fold among the methylated (Fisher p = 0.002) and transporters and membrane proteins are depleted at odds 0.43. That is the PRMT substrate profile -- RG and RGG motifs sit in RNA-binding proteins. The slot it fills did not exist before: arginine methylation has its own writers, its own substrate class and its own deposit, and its absence from the catalog was a gap rather than a lack of data.", geo_file_suffix=None), Dataset(key='toxodb_nanopore_isoforms', name='Novel transcript models (Nanopore, via ToxoDB)', level='transcription', kind='LongRead', provides='How many novel TALON transcript models long reads support for this gene', organism='Tg', columns=('novel_transcript_models',), coverage='798 genes (10%)', pmid=None, accession='ToxoDB Stuart/Ralph nanopore', citation=None, url='https://toxodb.org/toxo/service/record-types/transcript/searches/GenesByLongReadEvidence_tgonME49_Stuart_Ralph_nanopore_rnaSeqNextflow_RSRC/reports/attributesTabular', path='starplast/data/toxodb_nanopore_isoforms.tsv', derived_from=(), note='Incomplete-splice-match, novel-in-collection and novel-not-in-collection models, at five supporting reads or more. `Known` is excluded because the annotated model says nothing about isoform use, and `Genomic` because it is unspliced. Its power is in PRESENCE rather than magnitude -- most genes that have a novel model have one. Verified on that basis: genes with a novel model have a median of 6 exons against 4 for genes without, Mann-Whitney p = 9e-43, which is the relationship alternative splicing has to produce. Absent is NOT zero: a gene with no novel model here may simply not have been sequenced deeply enough.', geo_file_suffix=None), Dataset(key='toxodb_enteroepithelial', name='Enteroepithelial stage transcriptome (via ToxoDB)', level='transcription', kind='RNAseq', provides='Expression in the feline enteroepithelial stages against tachyzoites', organism='Tg', columns=('ees_vs_tachyzoite_log2',), coverage='7,739 genes (95%)', pmid=None, accession='ToxoDB Ramakrishnan enteroepithelial', citation=None, url='https://toxodb.org/toxo/service/record-types/transcript/searches/GenesByRNASeqtgonME49_Ramakrishnan_enteroepithelial_stages_ebi_rnaSeq_RSRC/reports/attributesTabular', path='starplast/data/toxodb_enteroepithelial.tsv', derived_from=(), note='EES1-5 averaged against tachyzoites, sense strand, no fold-change floor. The only life stage in the map that happens inside a cat. Verified against stage markers: GRA11B, which is merozoite-specific, comes out at +8.99 log2 and the family A/B/C merozoite antigens at +2.66, against a genome median of -0.14. ToxoDB reports a SIGNED fold difference, so -1257.4 means 1257-fold down and is converted rather than logged.', geo_file_suffix=None), Dataset(key='pride_acetylation', name='Lysine acetylome (GCN5b)', level='post_translation', kind='proteomics', provides='Acetylation sites reported per gene', organism='Tg', columns=('n_acetylation_sites',), coverage='3,921 genes measured', pmid=None, accession='PXD079431', citation=None, url='https://www.ebi.ac.uk/pride/archive/projects/PXD079431', path='datasets/quarantine/2026_08_16_pride/Tg/acetylation/', derived_from=(), note="Read from the deposit's own MaxQuant Sites tables. Held in quarantine rather than the dataset archive: a deposit is promoted by being checked, not by being downloaded, and the check here was reading the files and finding both Toxoplasma genes and the modification named.", geo_file_suffix=None), Dataset(key='pride_proximity', name='Proximity labelling', level='post_translation', kind='proteomics', provides='Proximity partners reported per gene', organism='Tg', columns=('n_proximity_partners',), coverage='1,734 genes measured', pmid=None, accession='PXD059579', citation=None, url='https://www.ebi.ac.uk/pride/archive/projects/PXD059579', path='datasets/quarantine/2026_08_16_pride/Tg/interaction_proximity_labelling/', derived_from=(), note='mzIdentML rather than MaxQuant, and shipped as a lone .gz -- which is one compressed file and not an archive, a distinction that read as an empty deposit until it was handled.', geo_file_suffix=None), Dataset(key='pride_glycosylation', name='O-fucosylated glycoproteins (AAL pulldown)', level='post_translation', kind='proteomics', provides='Peptide identifications in the AAL lectin pulldown, per gene', organism='Tg', columns=('n_o_fucosyl_peptides',), coverage='394 genes', pmid=None, accession='PXD004426', citation=None, url='https://www.ebi.ac.uk/pride/archive/projects/PXD004426', path='datasets/quarantine/2026_08_16_pride/Tg/glycosylation/', derived_from=(), note='Aleuria aurantia lectin affinity purification, so the count is peptide IDENTIFICATIONS and not sites -- the same standing as the proximity-labelling column, which is also a claim about what came down rather than about a residue. Verified against compartment: the pulldown is enriched for nucleus-chromatin at odds 3.71 (p = 1.5e-22) and cytosol at 2.61, and not enriched for mitochondrion. O-fucosylation through SPY is a nucleocytoplasmic modification and the paper describes punctiform signal beside the nuclei, so that is the right answer. Keyed on TGGT1_ accessions throughout.', geo_file_suffix=None), Dataset(key='pride_nitrosylation', name='S-nitrosylation (iodoTMT)', level='post_translation', kind='proteomics', provides='S-nitrosylation sites reported per gene', organism='Tg', columns=('n_nitrosylation_sites',), coverage='660 genes measured', pmid=None, accession='PXD046083', citation=None, url='https://www.ebi.ac.uk/pride/archive/projects/PXD046083', path='datasets/quarantine/2026_08_16_pride/Tg/S_nitrosylation/', derived_from=(), note='Counted only from the iodoTMT tables. Counting the whole txt folder put 90% of the proteome in this slot, which is what a modification measured on nearly every gene should always look like: a bug.', geo_file_suffix=None), Dataset(key='pride_lactylation', name='Lysine lactylome', level='post_translation', kind='proteomics', provides='Lactylation sites reported per gene', organism='Tg', columns=('n_lactylation_sites',), coverage='515 genes measured', pmid=None, accession='PXD031526', citation=None, url='https://www.ebi.ac.uk/pride/archive/projects/PXD031526', path='datasets/quarantine/2026_08_16_pride/Tg/lactylation/', derived_from=(), note="The second lactylation deposit tried. PXD022700 ships a RAR that bsdtar cannot open, and the 0 genes that produced was a fact about the reader, not about a study that names 537 proteins. This one reads, and its `La (K)Sites` table is MaxQuant's lactylation search. Keyed entirely on TGGT1_ accessions -- 515 of its 524 genes reach the map through the identity layer and would reach none without it.", geo_file_suffix=None), Dataset(key='pride_ubiquitination', name='Ubiquitination / SUMOylation (GlyGly)', level='post_translation', kind='proteomics', provides='GlyGly sites reported per gene', organism='Tg', columns=('n_ubiquitination_sites',), coverage='128 genes measured', pmid=None, accession='PXD042937', citation=None, url='https://www.ebi.ac.uk/pride/archive/projects/PXD042937', path='datasets/quarantine/2026_08_16_pride/Tg/ubiquitination_SUMOylation/', derived_from=(), note='', geo_file_suffix=None), Dataset(key='oxidative_stress_screen', name='Oxidative-stress CRISPR screen', level='DNA', kind='CRISPR_screen', provides='Screening score per gene under oxidative challenge', organism='Tg', columns=('oxidative_stress_screen_score',), coverage='7,384 genes (91%)', pmid='34163449', accession='PMC8216390 Data Sheet 1', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC8216390/supplementaryFiles', path='datasets/quarantine/2026_08_16_unverified/Tg/fitness_oxidative_stress/', derived_from=(), note="The authors' own `Screening score` sheet, not a recomputation from the guide counts beside it in the same workbook -- they published the score, so it is theirs to define. Negative is required. Verified by the sign and the extreme: catalase comes out at -6.15, essentially the bottom of the whole screen, and it is the enzyme that disposes of hydrogen peroxide. Peroxiredoxin (-1.57), superoxide dismutase (-1.01), glutaredoxin (-0.71) and thioredoxin (-0.63) all sit below the genome median of -0.38.", geo_file_suffix=None), Dataset(key='spacr_escrt_screen', name='Host ESCRT recruitment screen (UNPUBLISHED)', level='DNA', kind='CRISPR_screen', provides='Per-gene effect on host TSG101 recruitment to the vacuole, by two models', organism='Tg', columns=('escrt_recruitment_xgboost', 'escrt_recruitment_maxvit'), coverage='13 and 8 genes', pmid=None, accession='spaCR screen, bioRxiv 10.64898/2026.07.08.737057', citation='Olafsson EB et al., A pooled image-based CRISPR screen identifies EAF1 as a T. gondii modulator of ESCRT subversion. bioRxiv 2026 (under submission)', url='https://doi.org/10.64898/2026.07.08.737057', path='datasets/quarantine/2026_08_16_unverified/Tg/escrt_screen/', derived_from=(), note="A pooled image-based screen of secretory proteins, deconvolved to gene effects by regression. The phenotype is host ESCRT recruitment and NOT invasion or egress, so it fills a slot of its own rather than the invasion slot whose high-content-imaging context it matches -- a slot names a question, not a method. Both deconvolution models are shipped because their agreement is the verification, and the agreement is close: TGGT1_244480 is rank 1 in each, TGGT1_409250 and GRA14 fill out the top three of each, and EAF1 -- which the PRIDE deposit PXD080696 identifies as TGGT1_225160 -- is rank 7 in BOTH. Two independent deconvolutions landing the same gene at the same rank is a stronger statement than any single ordering. An earlier version of this note called TGGT1_244480 EAF1 and said EAF1 was rank 1; both were wrong, and the deposit's own abstract is what settled it. The MYR1 host bridge added the same day is verified by ESCRT machinery topping it, so two unrelated datasets in this map now point at the same biology.", geo_file_suffix=None), Dataset(key='myr1_host_ip', name='MYR1 host interactome (bridge)', level='post_translation', kind='IPMS', provides='Host proteins co-immunoprecipitating with the parasite protein MYR1', organism='Tg', columns=('bridge:host',), coverage='219 host proteins, 1 parasite gene', pmid='32075880', accession='PXD016383', citation=None, url='https://www.ebi.ac.uk/pride/archive/projects/PXD016383', path='starplast/data/host_bridges.parquet', derived_from=(), note='The first BRIDGE in the project: pairs whose two ends are in different tables, which `graph.npz` cannot hold because its edges are index pairs into the parasite table. Verified twice over. The parasite side: MYR1 is rank 1 of 325 in its own pulldown at +34.4, with MYR3 at 47 and GRA44, GRA7 and GRA9 in the top ten. The host side against independent literature: PDCD6, which is ALG-2, is rank 1 of 219, and a 2026 paper reports Toxoplasma GRA8 engaging host ALG-2 at the vacuole; its partner ALIX is rank 12 and VPS28 rank 62, so ESCRT as a class sits at p = 0.006 against the rest of the host proteins. Two filters do the work and both were got wrong first: a group is a contaminant group if ANY entry in it is one -- MaxQuant prefixes only on the leading entry, so keratin hides mid-group and is otherwise the four most enriched host proteins -- and two unique peptides are required in BOTH bait replicates, which takes 674 host groups to 219.', geo_file_suffix=None), Dataset(key='pv_host_uptake', name='Host proteins at the vacuole', level='post_translation', kind='proteomics', provides='How enriched a host protein is at the parasitophorous vacuole', organism='Hs', columns=('pv_enrichment_log2',), coverage='12 host proteins', pmid='34898650', accession='PLoS Pathogens 1010138 supplementary table', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC8700025/supplementaryFiles', path='starplast/data/hs_host_proteins.parquet', derived_from=(), note='A property OF a host protein rather than a bridge, because the bait is the compartment and not a named parasite gene -- a bridge needs a parasite gene at one end. Averaged over three infection contexts: tachyzoite-infected fibroblast, bradyzoite-infected fibroblast and neuron. The sheet lists parasite and host proteins together, which is how the authors show the experiment worked -- the dense granule proteins top it -- and only the host rows are kept. Top of those: PDCD6/ALG-2 at +5.90, VPS37C at +4.47, then CHMP4B, PEF1 and VPS28. That is the FOURTH independent dataset in this map to put ALG-2 at the host-parasite interface, after the MYR1, EAF1 and GRA35 pulldowns.', geo_file_suffix=None), Dataset(key='metabolome_iron', name='Metabolome and isotope labelling under iron deprivation', level='reference', kind='metabolomics', provides='Steady-state metabolite levels and the fraction labelled from glucose or glutamine', organism='Tg', columns=('metabolite_level_log2fc_iron_depleted', 'metabolite_level_padj', 'labelled_fraction_glucose', 'labelled_fraction_glutamine'), coverage='1,102 metabolites', pmid='41925342', accession='mBio 03788-25 Tables S3 and S5', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC13170339/supplementaryFiles', path='starplast/data/metabolites.parquet', derived_from=(), note="Rows are COMPOUNDS, not genes -- the first table in the project that is not the node table, and the shape instruction 39 describes for host tables. The flux column is one minus the unlabelled isotopologue, which is the only labelling readout comparable between molecules of different carbon number. The archive's two labelling sheets differ in whether they carry a title row, and assuming they did not silently dropped the glucose arm: the sheet read fine and had no column called `Metabolite`. Joining a second study means matching compound NAMES, which is lossy; that cost is unpaid with one study and is the first thing to fix when a second arrives.", geo_file_suffix=None), Dataset(key='lipidome_vesicles', name='Membrane lipid composition of parasite vesicles', level='reference', kind='lipidomics', provides='Lipid species abundance, and its proportion against the host cell', organism='Tg', columns=('lipid_ev_level_log2', 'lipid_ev_vs_host_clr'), coverage='194 lipid species', pmid='41716462', accession='Front Cell Infect Microbiol 1745625 Tables 1-3', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC12913473/supplementaryFiles', path='starplast/data/metabolites.parquet', derived_from=(), note="The SECOND study in the metabolite table, and the name-matching cost the entry above warns about is not paid here: lipid shorthand and polar compound names are different naming systems and none of the 194 species collides with the 1,102 compounds. Rows are appended, not joined. These are read as PARASITE lipids because the vesicles came from post-egress tachyzoites in host-cell-free medium, and because the composition does not move when the host does: across four host backgrounds the host cells differ in 1,018-1,362 species and the vesicles the same parasite released in them differ in 0-4. A lipidome of an infected culture would not have supported this slot at all -- most of that lipid is host. The `vs_host` column is COMPUTED here, sample-centred so it compares proportion rather than amount; the archive's own EV-minus-cell column is not used because its transform could not be reproduced to better than 3 log units.", geo_file_suffix=None), Dataset(key='curated_enteric_fitness', name='Enteric / sexual-cycle fitness per gene (CURATED)', level='reference', kind='literature', provides='Gene disruptions carried through the feline stage with oocyst output measured', organism='Tg', columns=('enteric_oocyst_yield', 'enteric_sporulation', 'enteric_measurements'), coverage='8 genes, 4 studies', pmid='28288194', accession='PMIDs 28288194, 30728393, 36809045 and PMC12942651', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC5363998/fullTextXML', path=None, derived_from=(), note="THIRD curated source, and it exists because the sweeps that closed this slot looked for a POOLED SCREEN through the enteroepithelial stages and correctly found none -- nobody has put a barcoded library through a cat. But the slot asks whether disrupting a gene costs the parasite oocysts, and feeding one knockout to a cat answers that one gene at a time. Two papers were found and REFUSED for failing the bar: one says the cat experiment 'should be carried out', one says oocysts were seen but the numbers were 'not quantified'. Four of the ten rows are unchanged, and they are the strongest rows here -- deleting all four LEA genes at once left oocyst yield alone (30 against 34 million from paired kittens), which a single knockout could not have established because redundancy could have hidden it. Yield and sporulation are separate columns because HAP2 sheds a few oocysts that never sporulate while Grx5 sheds fewer that sporulate poorly, and those are different events. Magnitudes stay in the evidence text: they are not comparable across cats, strains and inocula, and one numeric column would invent a precision the experiments do not have.", geo_file_suffix=None), Dataset(key='curated_drug_sensitivity', name='Drug sensitivity per gene (CURATED)', level='reference', kind='literature', provides='Knockouts with a measured shift in sensitivity to a named compound', organism='Tg', columns=('drug_compounds_tested', 'drug_sensitivity_shifts', 'drug_sensitivity_directions'), coverage='3 genes, 2 compounds', pmid='41025776', accession='mBio, PMID 41025776', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC12607627/fullTextXML', path=None, derived_from=(), note="SECOND curated source, and it exists because six catalogue sweeps looked for a genome-wide chemogenomic screen and correctly found none -- while the sentence they tested, 'no screen exists', is not the same statement as 'the question cannot be answered'. That is the same error the lipid slot took three passes to notice. The bar is a MEASURED shift under a NAMED compound, not 'an inhibitor of this protein kills the parasite', which is target engagement and has its own slot; a test asserts no row's evidence reads that way. `unchanged` rows are KEPT -- a transporter deleted with no effect on analog sensitivity is a result, and dropping those would leave the column looking like a list of hits. TgENT3's two rows were measured in a ΔTgAT1 background and say so, because reading a double mutant's phenotype off one of its genes is its own error. The per-row product check earned its keep immediately: the annotation calls TGME49_244440 'adenosine transporter AT1', which is independent confirmation the accession is TgAT1.", geo_file_suffix=None), Dataset(key='curated_resistance_alleles', name='Validated resistance-conferring mutations (CURATED)', level='reference', kind='literature', provides='Mutations shown to CAUSE drug resistance by putting them back into a clean background', organism='Tg', columns=('resistance_allele_count', 'resistance_compound_count', 'resistance_substitutions', 'resistance_compounds'), coverage='1 gene, 3 substitutions, 3 compounds', pmid='24533298', accession='Int J Parasitol Drugs Drug Resist, PMIDs 24533298 and 25941623', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC3862444/fullTextXML', path=None, derived_from=(), note="The ONLY curated source in the map: Toxoplasma has no resistome to parse, so this is read out of papers one allele at a time and every row carries its paper, substitution, compound and how causality was shown. The bar is that the mutation was put BACK -- introduced into a clean background and shown to produce the resistance -- and that bar is why this holds one gene rather than ten. Nine genes were curated from the artemisinin and auranofin in-vitro-evolution studies and then DROPPED: the artemisinin table is titled 'Mutations found in candidate genes', and the auranofin paper names SOD2 as its likeliest locus and then reports that SOD2 L201P was not sufficient to confer resistance when introduced into wild-type parasites. Three well-known alleles are deliberately absent and the module says why: DHFR-TS pyrimethamine alleles (primary text pre-PMC and unreachable), DHODH N302S (primary not open access), and cytochrome b atovaquone alleles (mitochondrially encoded, so no row exists in a table of nuclear genes -- the eighteen nuclear cytochrome b hits are b-c1 subunits and would be the wrong gene). Absence here is ignorance rather than a negative result: nobody selected resistance in most genes, so only curated genes carry a value.", geo_file_suffix=None), Dataset(key='splitcas9_imaging_screen', name='Arrayed splitCas9 imaging screen', level='DNA', kind='imaging_screen', provides='What a parasite looks like when a gene is off: egress, actin, apicoplast, replication', organism='Tg', columns=('screen_egress_phenotype', 'screen_actin_phenotype', 'screen_apicoplast_phenotype', 'screen_replication_phenotype', 'screen_any_phenotype', 'screen_scorers_agree'), coverage='319 genes screened, 99 with a phenotype, 35 at egress', pmid='35538310', accession='Nat Microbiol 41564-2022-01114 Supplementary Tables 2 and 3B', citation=None, url='https://static-content.springer.com/esm/art%3A10.1038%2Fs41564-022-01114-y/MediaObjects/41564_2022_1114_MOESM4_ESM.xlsx', path='datasets/DNA/imaging_screen/35538310/41564_2022_1114_MOESM4_ESM.xlsx', derived_from=(), note="The only per-gene invasion-or-egress phenotype table published for Toxoplasma, and it covers the EGRESS half: the screen's own figure legend calls it a screen for actin dynamics, apicoplast segregation and egress, and invasion is a property its hits were shown to have afterwards rather than a category anything was scored into. Two earlier passes read this slot as blocked because the other candidates promise invasion and egress in their titles and deliver it by characterising one gene. The category codes had to be EARNED: the workbook ships no legend, it lives in a figure that is an image, so `E` is read as egress because the paper names exactly four categories in three places and because the two genes it names as its egress mutants, CGP TGGT1_240380 and SLF TGGT1_208420, both carry an E -- which the test asserts, so the mapping can fail. The SUBSCRIPT is deliberately not read: E3 and E4 differ in something no accessible text defines, and a severity invented from a digit is a number with no measurement behind it. Missingness carries the other half of the meaning -- a screened gene with no egress call was looked at and was normal, and the 7,800 unscreened genes stay missing, because collapsing those would tell the map that nearly every gene has been checked.", geo_file_suffix=None), Dataset(key='plasmodb_pf3d7_attributes', name='Plasmodium falciparum 3D7 gene attributes', level='reference', kind='annotation', provides="The second species: gene structure and the protein's sequence properties", organism='Pf', columns=('length', 'molecular_weight', 'isoelectric_point', 'transcript_length', 'exon_count', 'n_tm', 'is_tm', 'has_signal_peptide'), coverage='5,720 P. falciparum genes', pmid=None, accession='PlasmoDB GenesByTaxon attributesTabular', citation=None, url='https://plasmodb.org/plasmo/service/record-types/transcript/searches/GenesByTaxon/reports/attributesTabular', path='starplast/data/pf_nodes.parquet', derived_from=(), note="The FIRST parasite table beyond Toxoplasma, and it is its own table -- nothing is merged, because PF3D7 and TGME49 identifiers do not align and neither does the data behind them, so a merged frame would encode which species was convenient to work on as though it were biology. Column names deliberately match the Toxoplasma table where the quantity is the same, so a slot pattern reads the same on both arms, but the Pf slots name their own patterns rather than inheriting Toxoplasma's -- inheriting them would have claimed falciparum slots with gondii numbers. The report is served by the TRANSCRIPT record type, so 5,791 rows describe 5,720 genes and the rows are collapsed on the longest transcript; taking the row count at face value double-weights 71 genes. One download carries five unrelated sources, which were one registry entry until 2026-09-25: its columns' median association with each other was 0.13, with 70% of pairs under 0.2 -- the loosest 'experiment' in either table -- so holding out the piggyBac screen also removed codon usage, orthology and SNPs. They are five entries now, and the closure's 'shared experiment' rule means what it says.", geo_file_suffix=None), Dataset(key='plasmodb_pf3d7_orthology', name='Plasmodium falciparum 3D7 orthology and paralogy', level='reference', kind='orthology', provides='OrthoMCL group, ortholog and paralog counts from the same PlasmoDB report', organism='Pf', columns=('ortholog_number', 'orthogroup', 'paralog_number', 'has_paralog'), coverage='5,720 P. falciparum genes', pmid=None, accession='PlasmoDB GenesByTaxon attributesTabular', citation=None, url='https://plasmodb.org/plasmo/service/record-types/transcript/searches/GenesByTaxon/reports/attributesTabular', path='starplast/data/pf_nodes.parquet', derived_from=(), note='Split from the attribute report on 2026-09-25 (see plasmodb_pf3d7_attributes): orthology is computed from sequence across species, not measured on this gene, and grouping it with the piggyBac screen closed one over the other for nothing.', geo_file_suffix=None), Dataset(key='plasmodb_pf3d7_domains', name='Plasmodium falciparum 3D7 InterPro domains', level='reference', kind='domains', provides='InterPro and Pfam domain content from the same PlasmoDB report', organism='Pf', columns=('n_interpro', 'has_domain', 'interpro_ids', 'pfam_ids'), coverage='5,720 P. falciparum genes', pmid=None, accession='PlasmoDB GenesByTaxon attributesTabular', citation=None, url='https://plasmodb.org/plasmo/service/record-types/transcript/searches/GenesByTaxon/reports/attributesTabular', path='starplast/data/pf_nodes.parquet', derived_from=(), note='Split from the attribute report on 2026-09-25 (see plasmodb_pf3d7_attributes).', geo_file_suffix=None), Dataset(key='plasmodb_pf3d7_snps', name='Plasmodium falciparum strain variation', level='reference', kind='variation', provides='SNP counts across sequenced strains, from the same PlasmoDB report', organism='Pf', columns=('snp_total_all_strains', 'snp_nonsynonymous', 'snp_synonymous', 'snp_noncoding', 'snp_stop_codon', 'snp_nonsyn_syn_ratio'), coverage='5,720 P. falciparum genes', pmid=None, accession='PlasmoDB GenesByTaxon attributesTabular', citation=None, url='https://plasmodb.org/plasmo/service/record-types/transcript/searches/GenesByTaxon/reports/attributesTabular', path='starplast/data/pf_nodes.parquet', derived_from=(), note='Split from the attribute report on 2026-09-25 (see plasmodb_pf3d7_attributes): population sequencing is its own experiment, and its columns are the only ones of the report that are associated with each other.', geo_file_suffix=None), Dataset(key='pf_latency_transcriptome', name='Transcription in a drug-tolerant latent state', level='transcription', kind='scRNAseq', provides="Change in each gene in latent parasites, and the paper's 200-gene latency classifier", organism='Pf', columns=('latency_log2fc', 'latency_classifier_member'), coverage='4,887 genes (85%)', pmid=None, accession='bioRxiv 10.64898/2026.09.13.751295 Supplementary Tables 7 and 24', citation='Aryal A et al., Environmental stress promotes entry into a pre-existing latent state in Plasmodium falciparum. bioRxiv 2026, doi:10.64898/2026.09.13.751295 (preprint)', url='https://www.biorxiv.org/content/10.64898/2026.09.13.751295v1.supplementary-material', path='datasets/transcription/scRNAseq/pf_latency_2026/ST07_media-4.xlsx', derived_from=(), note='Dormancy is how this parasite survives artemisinin, and the slot for it was empty. Two things the deposit offers are deliberately NOT shipped. Its FDR: cells were treated as replicates, so 87% of genes reach padj 0.05 and the column would call almost everything significant. And absence as evidence: ribosomal protein genes and most var and rifin genes are missing from the table entirely, so a gene with no value was not shown to be unchanged. No GEO or SRA accession is given in the preprint, which is why the accession field names the supplement.', geo_file_suffix=None), Dataset(key='pf_m6a_nanopore', name='m6A methylation per transcript', level='transcription', kind='RNAseq', provides='How many canonical methylation sites a transcript has, and how fully methylated', organism='Pf', columns=('m6a_n_canonical_sites', 'm6a_canonical_stoichiometry'), coverage='5,285 genes (92%)', pmid=None, accession='bioRxiv 10.64898/2026.05.19.726191 Supplementary Tables 6-8', citation='Levendis JM et al., m6A positions polyadenylation in Plasmodium falciparum. bioRxiv 2026, doi:10.64898/2026.05.19.726191 (preprint)', url='https://www.biorxiv.org/content/10.64898/2026.05.19.726191v1.supplementary-material', path='datasets/transcription/m6a/pf_m6a_2026/SupplementaryTables_media-2.xlsx', derived_from=(), note="Nanopore direct RNA sequencing, which reads the modification on the molecule rather than inferring it from an antibody pulldown -- so the numbers are per transcript and per site rather than per peak. Sites are the union over three time points; stoichiometry is averaged only over time points where the transcript was read at least 20 times, because below that a fraction is a coin-flip. Validated against an orthogonal chemistry: 67% of GLORI-seq sites fall within one nucleotide of a nanopore site. Only the control arm is used. The deposit's two groups are UNLABELLED; the second has about half the methylation, consistent with the paper's knock-sideways of the methyltransferase, which is enough to choose the control arm but not enough to ship a difference, so no difference is shipped.", geo_file_suffix=None), Dataset(key='pf_gametocyte_proteome', name='Mature gametocyte proteome and translatome', level='translation', kind='proteomics', provides='What a stage V gametocyte contains, and which proteins it is still making', organism='Pf', columns=('gametocyte_proteome_log2', 'gametocyte_newly_made'), coverage='2,544 proteins (44%)', pmid=None, accession='PXD075878 / bioRxiv 10.64898/2026.03.24.713170 Extended Data Tables 1, 3', citation='Alves E et al., The translatome of quiescent Plasmodium falciparum gametocytes reveals parasite pyridoxal kinase as a target. bioRxiv 2026, doi:10.64898/2026.03.24.713170 (preprint)', url='https://www.biorxiv.org/content/10.64898/2026.03.24.713170v1.supplementary-material', path='datasets/translation/proteomics/pf_gametocyte_2026/Extended Datasets.xlsx', derived_from=(), note="The transmission stage, and the first protein abundance in the map for any stage other than the blood stage. Newly made means found with the click-chemistry label and in no control -- the deposit's group 4, which is the paper's 705 proteins; taking the whole sheet would call 1,179 newly made, because the other groups also appear without the label or when synthesis is blocked. Shipped as MEMBERSHIP rather than an enrichment on purpose: there is one pooled sample per condition and most labelled proteins are absent from the controls, so a ratio would be a ratio to nothing. A protein the label found but the abundance run did not quantify keeps its flag and has no abundance.", geo_file_suffix=None), Dataset(key='pf_target_engagement', name='Antimalarial target engagement (thermal profiling)', level='post_translation', kind='proteomics', provides='How many of 25 antimalarials measurably engage each protein, and how many tested it', organism='Pf', columns=('engaged_n_compounds_tested', 'engaged_n_compounds_hit'), coverage='3,126 proteins (55%)', pmid=None, accession='PXD048737-PXD048772 / bioRxiv 10.64898/2026.01.30.702724 Table S3', citation='Pazicky S et al., Thermal proteome profiling identifies new drug targets in Plasmodium falciparum parasites. bioRxiv 2026, doi:10.64898/2026.01.30.702724 (preprint)', url='https://www.biorxiv.org/content/10.64898/2026.01.30.702724v1.supplementary-material', path='datasets/post_translation/thermal/pf_tpp_2026/SupplTable3_media-6.csv', derived_from=(), note='COUNTS, not the continuous response, and the reason is the reason: the continuous response agrees between replicates at r 0.0-0.55, so a per-compound number would be mostly noise, while the hit call reproduces the paper (99 stabilised hits; cladosporine-KRS, MMV665915-ACS10 and KAF156-prohibitin all in the top thirteen; PfATP4 with cipargamin; DHODH with the DSM compounds). The denominator ships with the count, because a protein hit twice out of five assays is not the evidence of one hit twice out of 25. NOT a melting temperature: this design holds temperature fixed and varies dose, so it cannot give one -- the melting points are the separate MAP-X meltome, a different experiment from the same laboratory.', geo_file_suffix=None), Dataset(key='pf_febrile_phospho', name='Phosphorylation under febrile heat stress', level='post_translation', kind='proteomics', provides="How far each protein's phosphorylation moves at 39 degrees, and at how many sites", organism='Pf', columns=('febrile_phospho_max_abs_log2fc', 'febrile_phospho_n_sites_up', 'febrile_phospho_n_sites_down'), coverage='1,874 proteins (33%)', pmid='42126964', accession='PXD073843 / eLife Supplementary File 1', citation='Jones D et al., Physiological febrile heat stress increases cytoadhesion through increased protein trafficking. Elife 2026;14:RP107860', url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC13171106/supplementaryFiles', path='datasets/post_translation/phosphosites/pf_febrile_2026/elife-107860-supp1-v1.xlsx', derived_from=(), note="A fever is a condition this parasite actually meets, which is what makes this a different question from the phosphoproteome already in the map. THIRTY-NINE degrees, not forty: the methods give the temperature the cultures were held at, and the preprint's abstract does not. The paper's 143 up and 53 down reproduce exactly, but those count ROWS, and a row is a site at one phosphorylation multiplicity; collapsed to unique sites, each taking its strongest change, it is 128 and 51, which is what these columns count. Specific rather than global: 60% of proteins with a rising site are exported to the host cell against 7% of all quantified proteins. A site whose peptide could belong to more than one gene is dropped rather than assigned to the first.", geo_file_suffix=None), Dataset(key='pf_chromatin_proxiome', name='Chromatin-state proximity proteomes', level='post_translation', kind='BioID', provides='How enriched each protein is near heterochromatin, active marks and the centromere', organism='Pf', columns=('chromprox_hp1_log2fc', 'chromprox_hp1_hit', 'chromprox_h3k27ac_log2fc', 'chromprox_h3k27ac_hit', 'chromprox_h3k4me3_log2fc', 'chromprox_h3k4me3_hit', 'chromprox_centromere_log2fc', 'chromprox_centromere_hit'), coverage='2,020 proteins (35%)', pmid=None, accession='bioRxiv 10.1101/2025.09.23.678001 Tables S1, S5, S7', citation='Ramon-Zamorano G et al., Protein landscape of the chromatin states in the malaria parasite Plasmodium falciparum. bioRxiv 2025, doi:10.1101/2025.09.23.678001 (preprint)', url='https://www.biorxiv.org/content/10.1101/2025.09.23.678001v1.supplementary-material', path='datasets/post_translation/BioID/pf_chromatin_proxiome_2026/TableS1_HP1_proximity_proteome_media-3.xlsx', derived_from=(), note="Two empty slots at once -- chromatin state, and proximity labelling -- for an organism whose gene regulation is largely chromatin. Four of the seven baits ship. The thresholds are the paper's own and differ per bait, because the baits differ in signal; one threshold for all of them would be tidier and wrong. The two euchromatin counts reproduce exactly (H3K27ac 99, H3K4me3 48); the HP1 column gives 91, which is NOT the paper's 61 -- that is its combined heterochromatin group over two HP1 baits and this is one of them, so they are not the same quantity. Controls land correctly: HP1, HDA2, GDV1 and AP2-HC in heterochromatin, CENH3 at the centromere, BDP1 and GCN5 in active chromatin. SIR2A is in none, because no bait detected it -- absence of evidence. A protein group spanning two genes is dropped, not assigned to the first.", geo_file_suffix=None), Dataset(key='pf_meltome', name='Protein melting temperature across the blood-stage cycle', level='translation', kind='proteomics', provides='The temperature at which each protein leaves solution in an intact cell', organism='Pf', columns=('melting_temperature_tm', 'melting_temperature_sd'), coverage='2,039 proteins (35.6%)', pmid='41315737', accession='PXD056075 / Nat Microbiol Supplementary Table 1', citation='Pazicky S et al., MAP-X reveals distinct protein complex dynamics across Plasmodium falciparum blood stages. Nat Microbiol 2025;10:3229-3244', url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC12615847/supplementaryFiles', path='datasets/translation/proteomics/41315737/41564_2025_2173_MOESM3_ESM.xlsx', derived_from=(), note="DERIVED, and it has to be: no melting temperature is published anywhere. PRIDE holds 281 GB of raw mass spectrometry and nothing else, the paper tabulates per-temperature abundances, and the authors' own package computes the melting point inside a fitting step without tabulating it. `scripts/fit_meltome.py` fits it with the acceptance the Toxoplasma column already uses (R-squared at least 0.8, 30-80 degrees), keeping 68.9% of 22,764 curves. Self-validating the way a melting point should be: replicates agree at rho 0.84 with a spread of 1.15 degrees; subunits of one complex melt together (0.19 degrees across the T-complex, 0.42 across the proteasome alpha ring, against 5.57 for size-matched random sets, p = 9e-5); glycolysis and the proteasome are stable near 62.5 degrees and HSP70/90 labile at 50.4; and it agrees with the independent Toxoplasma measurement through orthology at +0.28. ONE column, not seven: a protein's melting point varies 3.7 degrees across the cycle against 1.15 of replicate noise, so per-stage columns would claim a resolution the data lacks. The worst run by fit acceptance is the replicate the authors themselves excluded, found independently here and dropped.", geo_file_suffix=None), Dataset(key='pf_pb_fertility_transfer', name='Male and female fertility, transferred from P. berghei', level='DNA', kind='CRISPR_screen', provides='Whether a knockout loses male or female fertility, measured in the rodent parasite', organism='Pf', columns=('fertility_female', 'fertility_male'), coverage='1,121 orthologs (19.6%)', pmid='39541984', accession='Cell Systems Table S1 sheet A', citation='Sayers C et al., Systematic screens for fertility genes essential for malaria parasite transmission reveal conserved aspects of sex in a divergent eukaryote. Cell Syst 2024;15:1075-1091.e6', url='https://www.cell.com/cms/10.1016/j.cels.2024.10.008/attachment/mmc2.xlsx/mmc2.xlsx', path='datasets/DNA/transmission_screen/39541984/mmc2.xlsx', derived_from=(), note="Barcoded P. berghei knockouts crossed and scored through the mosquito, so the sexes are measured SEPARATELY on the same mutant -- which is the point, and which the controls confirm: HAP2, P48/45, P230, CDPK4 and MAPK2 fail in males only, P47, NEK4 and DMC1 in females only, and the redundant P25/P28 pair is correctly not called. The union of reduced mutants is 348, the paper's own number. The table names the falciparum ortholog itself, so no orthology call is made here; a gene named by two mutants, or a mutant covering two genes, is dropped rather than averaged. A TRANSFER, grouped with orthology for leakage: an ortholog's phenotype is not an independent measurement of this gene.", geo_file_suffix=None), Dataset(key='plasmodb_pf3d7_piggybac', name='Plasmodium falciparum piggyBac saturation mutagenesis', level='DNA', kind='insertion screen', provides='Mutagenesis index and fitness score from a genome-saturating transposon screen', organism='Pf', columns=('piggybac_mis', 'piggybac_mfs'), coverage='5,720 P. falciparum genes', pmid='29724925', accession='PlasmoDB GenesByTaxon attributesTabular', citation='Zhang M et al. Uncovering the essential genes of the human malaria parasite Plasmodium falciparum by saturation mutagenesis. Science 2018', url='https://plasmodb.org/plasmo/service/record-types/transcript/searches/GenesByTaxon/reports/attributesTabular', path='starplast/data/pf_nodes.parquet', derived_from=(), note="PMID resolved by E-utilities on 2026-09-25 (esearch 'Plasmodium falciparum saturation mutagenesis piggyBac essential genes 2018' returns only 29724925; esummary confirms the title and Zhang M as first author). Served through the PlasmoDB attribute report and split from it the same day. The direction is the trap: a LOW mutagenesis index means the gene resists disruption and is therefore essential, and inverting it would swap the essential and dispensable genomes without crashing, so the test checks it against biology -- ribosomal proteins come out at median MIS 0.15 and the var, rifin and stevor families at 0.94.", geo_file_suffix=None), Dataset(key='plasmodb_pf3d7_expression', name='Plasmodium falciparum life-stage and polysomal RNA', level='transcription', kind='RNAseq', provides='Transcript abundance across seven life stages, and what is on ribosomes', organism='Pf', columns=('expr_ring', 'expr_early_trophozoite', 'expr_late_trophozoite', 'expr_schizont', 'expr_gametocyte_ii', 'expr_gametocyte_v', 'expr_ookinete', 'expr_asexual_blood', 'expr_oocyst', 'expr_sporozoite', 'polysomal_ring', 'polysomal_trophozoite', 'polysomal_schizont', 'steady_state_ring', 'steady_state_trophozoite', 'steady_state_schizont', 'protein_stage_share_ring', 'protein_stage_share_trophozoite', 'protein_stage_share_schizont', 'antisense_asexual_blood', 'antisense_oocyst', 'antisense_sporozoite'), coverage='5,720 P. falciparum genes', pmid=None, accession='PlasmoDB: Su seven stages, Bunnik polysomal IDC, Gomez-Diaz mosquito stages', citation=None, url='https://plasmodb.org/plasmo/service/record-types/transcript/searches/GenesByTaxon/reports/attributesTabular', path='starplast/data/pf_nodes.parquet', derived_from=(), note="Three studies in one report, split across slots so that no column answers two questions: the seven-stage study answers the individual stages, and the polysomal study is an IDC time course at 0h, 18h and 36h whose steady-state arm answers cell-cycle phase while its polysomal arm answers translation. Polysome-associated RNA is what is ON ribosomes rather than a transcript level, and keeping its steady-state partner is what makes that distinction measurable instead of assumed. Stage labels are checked against marker genes rather than trusted, because the columns are matched by substring out of one wide report and a mislabelling would silently shift a stage: CSP peaks in sporozoite, MSP1 in schizont, Pfs16 in gametocyte II. Pfs25 is the informative one -- its TRANSCRIPT peaks in gametocyte V rather than in the ookinete where the protein acts, which is the textbook translational-repression stockpile and would look like an off-by-one error to anyone who checked the protein instead. The antisense columns sit beside their sense partners rather than being reduced to a ratio, because the denominator is what makes the ratio interpretable. Adding them exposed a silent matcher fault worth recording: `sense - asexual blood stages` is a SUBSTRING of `antisense - asexual blood stages`, so plain containment made each sense entry match two headers, fail its one-match test and vanish -- fetching antisense DELETED sense and the slot count fell by two while a slot was being added. The matcher now requires the label to start the header or follow a non-alphanumeric character, and a test asserts no declared sample goes missing. The TMT proteome in the same report is COMPOSITIONAL and is named for it: PlasmoDB serves the channels row-normalised, so a gene's three values sum to a constant and the columns anti-correlate by construction. They say which stage a protein sits in, not how much there is, so `protein abundance · asexual blood stage` is left EMPTY rather than filled with a share. The tell would have been well hidden: ring protein correlates -0.25 with ring mRNA, which reads as a biological puzzle and is only the normalisation showing through.", geo_file_suffix=None), Dataset(key='pf_alphafold_confidence', name='Plasmodium model confidence and disorder (AlphaFold DB)', level='reference', kind='structure', provides='Mean pLDDT per protein, and the fraction of it at each confidence band', organism='Pf', columns=('mean_plddt', 'plddt_fraction_very_low', 'plddt_fraction_low', 'plddt_fraction_confident', 'plddt_fraction_very_high', 'alphafold_accession'), coverage='5,098 of 5,720 genes', pmid=None, accession='AlphaFold DB API, per UniProt accession', citation=None, url='https://alphafold.ebi.ac.uk/api/prediction/', path='datasets/reference/plasmodb/plasmodb_pf3d7_alphafold.tsv', derived_from=(), note="Fetched per protein because the bulk proteome archive for this organism is not where the documented path says it is. The FRACTIONS matter as much as the mean: a protein half well-folded and half disordered has the same mean as one uniformly mediocre, and the slot asks about disorder as well as confidence. A gene can carry several UniProt accessions -- 876 do, mostly the variant surface families where each field isolate's allele has its own entry -- so the fetch tries them in order and `alphafold_accession` records which one supplied the model, or a number could not be traced back to a structure. Validated on an ordering rather than a total: proteins carrying a recognised InterPro domain model at median pLDDT 73.5 against 56.0 for those without (p = 2e-159), because a domain is a thing that folds. The correlation with protein length is NEGATIVE at -0.555, which is not a fault -- it is this proteome's low-complexity asparagine insertions, which are long and disordered.", geo_file_suffix=None), Dataset(key='pf_febrile_stress', name='Plasmodium transcription at febrile temperature', level='transcription', kind='RNAseq', provides='Wild type and two mutants at 37 C and at the 41 C of a malarial fever', organism='Pf', columns=('febrile_wt_37c', 'febrile_wt_41c', 'febrile_lrr5ko_37c', 'febrile_lrr5ko_41c', 'febrile_dhcko_37c', 'febrile_dhcko_41c'), coverage='5,791 genes', pmid=None, accession='PlasmoDB Pfal3D7 Febrile temps RNA-Seq', citation=None, url='https://plasmodb.org/plasmo/service/record-types/transcript/searches/GenesByTaxon/reports/attributesTabular', path='datasets/reference/plasmodb/plasmodb_pf3d7_febrile.tsv', derived_from=(), note="Shipped as CONDITIONS rather than as a 41-versus-37 contrast, the same restraint as the Sir2 entry and for a different reason. There the check on the contrast contradicted itself; here it came out NULL. Heat shock proteins move by a median log2 of +0.08 against -0.07 for everything else (p = 0.2), so a fever does not measurably induce them -- which is consistent with what is known, since this organism's chaperones are constitutively high rather than stress-induced, and the genes that do rise are Maurer's cleft two-TM proteins and stevor at four to five log2, matching published fever-driven surface remodelling. But a null result on the one available prediction is not a validation, and a derived column would imply it had passed one. A test asserts the arms are on a comparable scale, which is the precondition for the caller making the contrast themselves.", geo_file_suffix=None), Dataset(key='pf_sir2_perturbation', name='Plasmodium transcription under Sir2 knockout', level='transcription', kind='microarray', provides='Wild type and sir2a / sir2b knockout at ring, trophozoite and schizont', organism='Pf', columns=('sir2_wt_ring', 'sir2_wt_trophozoite', 'sir2_wt_schizont', 'sir2a_ko_ring', 'sir2a_ko_trophozoite', 'sir2a_ko_schizont', 'sir2b_ko_ring', 'sir2b_ko_trophozoite', 'sir2b_ko_schizont'), coverage='5,615 genes', pmid=None, accession='PlasmoDB Sir2 KO Marray', citation=None, url='https://plasmodb.org/plasmo/service/record-types/transcript/searches/GenesByTaxon/reports/attributesTabular', path='datasets/reference/plasmodb/plasmodb_pf3d7_sir2_perturbation.tsv', derived_from=(), note='Shipped as stated CONDITIONS and not as a knockout-minus-wild-type contrast, which is the quantity anyone will want. The independent check on that contrast came out ambiguous and the column would have stated more confidence than there is: Sir2a silences subtelomeric var genes, so var should rise in the sir2a knockout, and it does in ring (+0.135, p = 4e-12) and schizont (+0.130, p = 2e-38) but FALLS in trophozoite (-0.240, p = 3e-22), with effects small against a spread of 0.7. That fits the canonical result being subset-specific and var probes cross-hybridising across sixty paralogues, but it is not a clean confirmation. The conditions themselves are unambiguous -- PlasmoDB names them, the values are log intensities, and the medians align across arrays within 0.1, which a test asserts because it is the precondition that makes differencing them meaningful at all.', geo_file_suffix=None), Dataset(key='pf_iedb_bcell', name='Plasmodium antibody epitopes (IEDB)', level='reference', kind='immunity', provides='Distinct antibody epitope sequences per gene', organism='Pf', columns=('n_bcell_epitopes',), coverage='434 antigens, 7,366 distinct epitopes', pmid=None, accession='IEDB bcell_search', citation=None, url='https://query-api.iedb.org/bcell_search?parent_source_antigen_source_org_name=ilike.*Plasmodium%20falciparum*', path='datasets/reference/plasmodb/iedb_pf_bcell_epitopes.tsv', derived_from=(), note="DISTINCT sequences, not assay records. MSP1 alone carries 1,739 epitopes out of 14,610 records, so counting records would rank antigens by how many groups have studied them rather than by how much of the protein antibodies recognise. Reached through UniProt rather than through product descriptions -- the Toxoplasma arm has to match descriptions because IEDB's Toxoplasma antigen names are verbatim ToxoDB text, while the falciparum names carry the accession, which is a better key. The 209 PlasmoDB accessions naming more than one gene are dropped: an epitope belongs to a protein, and attaching it to whichever paralogue sorted first would be inventing the answer. 434 of 444 antigens resolve. Absent is absent and not zero, because IEDB records what somebody tested. Validated on the history of the field: MSP1 is the top antigen and CSP, the RTS,S vaccine antigen, is present.", geo_file_suffix=None), Dataset(key='pf_iedb_tcell', name='Plasmodium T-cell epitopes (IEDB)', level='reference', kind='immunity', provides='Distinct T-cell epitope sequences per gene', organism='Pf', columns=('n_tcell_epitopes',), coverage='44 antigens, 1,542 distinct epitopes', pmid=None, accession='IEDB tcell_search', citation=None, url='https://query-api.iedb.org/tcell_search?parent_source_antigen_source_org_name=ilike.*Plasmodium%20falciparum*', path='datasets/reference/plasmodb/iedb_pf_tcell_epitopes.tsv', derived_from=(), note="Kept apart from the antibody half on purpose, and the numbers show why they are not interchangeable: 434 antigens carry an antibody epitope and only 44 carry a T-cell one. Pooling them, or filling either slot with the other, would answer one question with the other's number. Same UniProt keying and same distinct-sequence counting as the antibody table, and the loader reads whichever halves are present so one fetch failing does not cost the other column.", geo_file_suffix=None), Dataset(key='pf_derived_stage_labels', name='Plasmodium peak expression and stage label (DERIVED)', level='transcription', kind='RNAseq', provides='Maximum expression across stages, and which stage a gene belongs to', organism='Pf', columns=('expr_max', 'stage_enriched_derived', 'stage_margin_derived'), coverage='5,720 genes for the maximum, 310 labelled', pmid=None, accession=None, citation=None, url=None, path='starplast/data/pf_nodes.parquet', derived_from=('expr_ring', 'expr_early_trophozoite', 'expr_late_trophozoite', 'expr_schizont', 'expr_gametocyte_ii', 'expr_gametocyte_v', 'expr_ookinete', 'expr_oocyst', 'expr_sporozoite'), note="COMPUTED from the stage columns and declaring it, so leakage closure excludes them together. The stage call reuses `cellcycle.stage_enrichment` rather than reimplementing it, which is deliberate: if the two arms' stage labels are ever compared, a difference should mean the biology differs and not that one z-scored and the other did not. Only 310 of 5,720 genes are labelled, because a gene is left unlabelled unless one stage leads the next by half a z-unit -- a label that is really a coin toss looks like a measurement in every table it reaches. Read the class counts with the same caveat the Toxoplasma arm carries: ookinete takes 181 of the 310 not because it uses more genes but because ring, trophozoite and schizont are highly correlated with one another and rarely win by a margin, while the mosquito stages are separable. The margin rule is working; the interpretation is what needs care.", geo_file_suffix=None), Dataset(key='plasmodb_identity', name='PlasmoDB gene identity', level='reference', kind='identity', provides='Symbols, previous IDs, product descriptions for the Plasmodium arm', organism='Pf', columns=('gene_id', 'product'), coverage='5,791 P. falciparum 3D7 transcripts', pmid=None, accession='PlasmoDB 3D7', citation=None, url='https://plasmodb.org/plasmo/service/record-types/transcript/searches/GenesByTaxon/reports/attributesTabular', path='starplast/data/plasmodb_identity.tsv', derived_from=(), note="The Plasmodium arm's identity layer, fetched 2026-08-18 through the same WDK report as the ToxoDB tables and kept in its own file -- two identifier spaces in one index is the merge this project refuses everywhere else. It exists because the first Pf source keyed on anything but current accessions joined ZERO rows: the 2014 ribosome-profiling deposit reports the pre-2012 chromosome-based ids (`PFE0630c`, `PF13_0222`), and a string join found none of its 3,629 genes. 9,106 previous ids resolve; 66 are claimed by two current genes each -- a gene model SPLIT, seen from the other side -- and those are withdrawn rather than assigned to whichever came first, the same rule the Toxoplasma layer applies to 153 strings.", geo_file_suffix=None), Dataset(key='pf_riboseq', name='Plasmodium ribosome profiling across the asexual cycle', level='translation', kind='riboseq', provides='Ribosome-footprint and mRNA density per gene at five points of the blood-stage cycle', organism='Pf', columns=('riboseq_rpf_ring', 'riboseq_rpf_early_trophozoite', 'riboseq_rpf_late_trophozoite', 'riboseq_rpf_schizont', 'riboseq_rpf_merozoite', 'riboseq_mrna_ring', 'riboseq_mrna_early_trophozoite', 'riboseq_mrna_late_trophozoite', 'riboseq_mrna_schizont', 'riboseq_mrna_merozoite'), coverage='3,501 genes (61%), 2,182 at the ring and 1,174 at the merozoite', pmid='25493618', accession='GSE58402', citation=None, url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE58nnn/GSE58402/suppl/', path='datasets/translation/riboseq/25493618/', derived_from=(), note="The first MEASURED translation on this arm: the slot was previously answerable only through polysome-associated RNA, which is what is on ribosomes rather than how much ribosome is on it. Both arms of the experiment ship as conditions and the ratio between them does NOT, which is the second time this project has computed a Plasmodium translation efficiency and refused it -- and this time on a different instrument, a different strain and a different decade. Ribosomal proteins carry far more footprint than the rest at every stage (median log1p 5.6 to 7.9 against 3.5 to 4.1, p <= 2e-18), which is the check that says the measurement behaves; but the ratio puts them BELOW the rest at the schizont, and correlates negatively with codon adaptation at every stage (rho -0.01 to -0.12), where the textbook expectation is positive. Two checks disagreeing is the contradictory case, whose answer is to ship the conditions. What the replication adds is where to look: `codon_cai_ribosomal` does not separate the very ribosomal proteins it is built from in this genome (0.710 against 0.717, p = 0.37) while it does in Toxoplasma (0.771 against 0.714, p = 4e-22), so the quantity that fails to behave is the codon index, not the footprints. Stage labels are the deposit's own and are CHECKED against the independent PlasmoDB stage series: ring, early trophozoite, late trophozoite and schizont each correlate highest with their own stage (rho 0.65 to 0.77). The merozoite arm has no counterpart there and lands on the ring, which is the neighbouring point of the cycle rather than a contradiction. Strain W2, not 3D7, so the surface-antigen families are the place to distrust it. Keyed on pre-2012 accessions and resolved through `plasmodb_identity`; the deposit's `-a`/`-b` split entries are dropped rather than summed, since RPKM is already length-normalised.", geo_file_suffix='_rpkm.txt.gz'), Dataset(key='pf_berghei_liver_transfer', name='P. berghei liver-stage fitness, transferred to falciparum', level='DNA', kind='CRISPR_screen', provides='How a berghei knockout fares through the liver, carried onto its falciparum ortholog', organism='Pf', columns=('pb_transferred_liver_log2fc', 'pb_transferred_liver_reduced'), coverage='754 falciparum genes; 180 reduced', pmid='31730853', accession='Cell 2019 Table S2 (PlasmoGEM liver stage)', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC6904910/supplementaryFiles', path='datasets/reference/plasmodb/pb_transfer/31730853/mmc2.xlsx', derived_from=(), note="Two borrowings, both deliberate. The falciparum id comes from the BLOOD-STAGE screen's table -- the same consortium pairing the same mutants -- rather than from an orthology this project derived. And the value is the authors' own blood-stage-CORRECTED figure for the salivary-gland-to-blood transition, because that transition ends in blood and the uncorrected column would call every blood-essential gene liver-essential. The sheet has two header rows and repeats `Log2-FC / SD / Power` per transition, so columns are read by position and the loader refuses the file if the transition is not where it expects it. 507 genes are dropped for `no power`: too few barcodes to say anything, which is not a measurement of no effect. Validated on the genes the field would name -- LISP1, the UIS/ETRAMP early transcribed membrane proteins and perforin-like protein 1 all come out reduced, which is the textbook set for liver development and hepatocyte egress. The same file's two MOSQUITO transitions are NOT shipped: the markers available to check them (P25, P28, SOAP, chitinase) are the redundant ones, so nothing in the data confirms the direction, and a transmission slot filled on an unchecked axis is what this campaign refuses.", geo_file_suffix=None), Dataset(key='host_erythrocyte_proteome', name='Human red blood cell proteome, by fraction', level='reference', kind='proteomics', provides='Which human proteins are present in the cell the blood stage lives in', organism='Hs', columns=('rbc_membrane_psms', 'rbc_cytoplasm_psms'), coverage='5,264 human proteins: 4,777 membrane, 2,350 cytoplasmic', pmid='41654503', accession='Sci Data 06792 Supplementary Table S1', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC12992542/supplementaryFiles', path='datasets/host/erythrocyte/41654503/41597_2026_6792_MOESM2_ESM.xlsx', derived_from=(), note="The first HOST TISSUE reference in this project, and the thing instruction 39's host slots have been waiting for: a proteome of the cell the parasite lives in answers a question no pulldown can, since a pulldown says what a bait touched and this says what was there to touch. The two fractions are kept apart because they are different measurements -- a protein in the membrane extract is at the surface the merozoite invades through, one in the cytoplasm is in the haemoglobin around it. Self-validating as a fractionation should be: spectrin beta heads the membrane list and haemoglobin alpha the cytoplasmic one. Rows are HUMAN proteins keyed by UniProt accession and live in the host table, never in a parasite one; a row can name several genes (`HBA1; HBA2`) and the string is kept as given rather than one of them chosen.", geo_file_suffix=None), Dataset(key='pf_foldseek_struct', name='Foldseek structural similarity (Plasmodium)', level='post_translation', kind='structure', provides='Which parasite proteins fold alike, without asking whether they are related', organism='Pf', columns=('n_struct_similar', 'edge:struct'), coverage='4,571 pairs / 1,620 genes at TM >= 0.7', pmid=None, accession=None, citation=None, url=None, path=None, derived_from=('mean_plddt',), note="COMPUTED HERE by `scripts/run_foldseek.py`, so there is nothing to download; the models come from the AlphaFold reference proteome UP000001450 (5,168 of them). TM-align rather than foldseek's faster 3Di+AA mode, and the same TM >= 0.7 cut as the Toxoplasma layer, because two arms whose `structural similarity` means two different numbers cannot be compared. The threshold is applied by the LOADER, not the search, so the shipped pair table keeps everything above the e-value cut and the cut can be revisited without re-running an hour of alignment.\n\nPREFILTERED, not exhaustive, and that is a caveat rather than a detail. The exhaustive search -- every one of the 26.7 million pairs TM-aligned -- was attempted twice and finished neither time, so no exhaustive result exists to compare this against and it CANNOT be claimed that no pair was missed. Two things argue the loss is small: at TM >= 0.7 the 3Di k-mer prefilter is retaining exactly what it was built to retain, and the per-query cap provably does not bind -- the busiest query returned 159 rows against a ceiling of 300. If a later run needs certainty, the tell that the cap has started to bind is queries returning exactly `--max-seqs` rows.\n\nValidated on what it should and should not say: structural neighbours share an orthogroup 13.9% of the time against 0.35% for random pairs, a 39-fold enrichment, which is the positive control; and 3,937 of the 4,571 pairs (86%) join genes in DIFFERENT orthogroups, which is the layer's whole reason to exist. The Toxoplasma claim that it `reaches genes homology cannot` does NOT transfer verbatim: PlasmoDB gives all 5,720 genes an orthogroup, so there are none without one to reach, and the cross-orthogroup share is the honest form of that statement here.", geo_file_suffix=None), Dataset(key='host_erythrocyte_surface', name='Human red blood cell SURFACE proteome, by population', level='reference', kind='proteomics', provides='Which host proteins are reachable from outside the cell the merozoite invades', organism='Hs', columns=('rbc_surface_copies_uk', 'rbc_surface_copies_senegal', 'rbc_surface_found_uk', 'rbc_surface_found_senegal'), coverage='267 plasma-membrane proteins, 230 in both populations', pmid='31552303', accession='Commun Biol 0596 Supplementary Data 2A', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC6754445/supplementaryFiles', path='datasets/host/erythrocyte/31552303/42003_2019_596_MOESM6_ESM.xlsx', derived_from=(), note="Plasma membrane profiling, so this is the OUTSIDE of an intact red cell rather than everything in it -- a different question from the fractionated proteome beside it, and the one an invasion receptor slot asks. The authors' stated aim is candidate Plasmodium receptors. The two donor populations, nine UK and nine Senegalese, ship as their own columns because the difference IS the result: averaging a Duffy-positive population with a Duffy-negative one would erase the best-known receptor polymorphism in malaria. A zero is the paper's own encoding for `not identified in this population`, which is why the found flags ship beside the counts -- for ACKR1 the zero is the West African Duffy-negative phenotype and not a detection failure, and only the flag separates those. Reconciles with the paper's own sheets: 230 proteins in both populations, 11 in UK donors only, 26 in Senegalese donors only. Self-validating against numbers measured long before mass spectrometry -- band 3 at 1.3 million copies per cell and glycophorin A at 3.3 million, with basigin present in both populations.", geo_file_suffix=None), Dataset(key='host_mouse_tissue_transcriptome', name='FANTOM5 mouse brain and skeletal muscle', level='reference', kind='transcription', provides='How much of each gene the mouse tissues a bradyzoite persists in transcribe', organism='Mm', columns=('brain_tpm', 'skeletal_muscle_tpm'), coverage='13,739 mouse genes; brain 9,763, skeletal muscle 8,635', pmid='24670764', accession='E-MTAB-3579', citation=None, url='https://www.ebi.ac.uk/gxa/experiments-content/E-MTAB-3579/download/zip?fileType=rnaseq-baseline-rpkms&accessKey=', path='datasets/host/fantom5/24670764/E-MTAB-3579-mouse-tissue-tpm.tsv', derived_from=(), note="Two caveats that must travel with these numbers.\n\nFirst, a BLANK here does not mean unmeasured. This is the Expression Atlas's protein-coding, above-cutoff export, and both columns bottom out at exactly 0.5 -- so a gene present in the table with no value was measured and fell below 0.5 TPM. It is still left as missing rather than written as zero, because the file does not say which of the two it is for genes absent from it entirely.\n\nSecond, SKELETAL MUSCLE is juvenile. It is the only skeletal-muscle sample in the atlas; biceps femoris is skeletal muscle so the tissue is right and the age is not, and it ships with the age said rather than quietly relabelled adult. Brain, by contrast, is the mean of the four ADULT regions -- cerebral cortex, cerebellum, hippocampal formation, olfactory brain -- an average across regions rather than replicates, which is what the slot wants because a cyst is not confined to one region.\n\nThese are CAGE tag values labelled TPM; they order genes within a tissue and across tissues, but are not interchangeable with RNA-seq TPM. Validated on markers that must separate and do, by four to five orders of magnitude in both directions: Acta1 is 102,086 in muscle against 1.0 in brain and Ckm 54,636 against 0.6, while Snap25 is 1,171 in brain and below cutoff in muscle, as is Gfap at 34.", geo_file_suffix=None), Dataset(key='host_gtex_transcriptome', name='GTEx median expression in two host cell types', level='reference', kind='transcription', provides='How much of each gene the host cell transcribes, in the cell each parasite lives in', organism='Hs', columns=('fibroblast_tpm', 'hepatocyte_tpm'), coverage='19,087 human genes over 2 tissues', pmid='32913098', accession='GTEx v10', citation=None, url='https://storage.googleapis.com/adult-gtex/bulk-gex/v10/rna-seq/GTEx_Analysis_v10_RNASeQCv2.4.2_gene_median_tpm.gct.gz', path='datasets/host/gtex/32913098/GTEx_Analysis_v10_RNASeQCv2.4.2_gene_median_tpm.gct.gz', derived_from=(), note="TWO of GTEx's sixty-eight tissues, and which two is the whole judgement. `Cells_Cultured_fibroblasts` IS the cell Toxoplasma is grown in, and v10's `Liver_Hepatocyte` is laser-captured hepatocyte rather than liver tissue -- the difference between answering a cell-type slot and substituting the organ around it. `Liver` and `Skin_*` are in the same file and are deliberately NOT taken: a liver is not a hepatocyte and skin is not dermis, which is the substitution this campaign already measured and refused when it looked at the Human Protein Atlas for cell-type slots.\n\nKeyed through `host.uniprot_index`, because GTEx is Ensembl and the host table is UniProt. Reviewed entries only: the raw mapping is 74% ambiguous since it lists every TrEMBL fragment beside the canonical entry, and restricting to Swiss-Prot takes that to 0.9%, of which the remainder is dropped rather than guessed. 39,808 of 59,033 GTEx rows have no reviewed accession at all -- non-coding RNA and pseudogenes -- and are left out rather than carried as blanks.\n\nValidated on markers that must separate: albumin is 12,448 TPM in hepatocyte against 0.24 in fibroblast, APOA1 3,330 against 0.40, and in the other direction COL1A1 is 4,009 in fibroblast against 3.4 in hepatocyte and fibronectin 21,268 against 200. Three to four orders of magnitude the right way round in both directions is the check that the Ensembl keying is correct.", geo_file_suffix=None), Dataset(key='host_k562_rhoptry_screen', name='Host genes required for rhoptry discharge', level='reference', kind='CRISPR_screen', provides='Whether knocking out a human gene stops Toxoplasma discharging its rhoptries', organism='Hs', columns=('rhoptry_discharge_score', 'rhoptry_discharge_beta', 'rhoptry_discharge_fdr'), coverage='18,739 human genes', pmid=None, accession='bioRxiv 10.1101/2025.10.16.682961 v2 Table S1', citation='Valleau D et al., Clustering of host N-glycans licenses Toxoplasma rhoptry discharge. bioRxiv 2025, doi:10.1101/2025.10.16.682961 (preprint)', url='https://www.biorxiv.org/content/10.1101/2025.10.16.682961v2.supplementary-material', path='datasets/host/k562_rhoptry_screen/v2_media-1.xlsx', derived_from=(), note='The first host-gene screen in the map, and it opens the host side of invasion: positive means the knockout blocks discharge, so the gene is required for it. Recovers its own biology -- SLC35A2, the transporter the paper is about, ranks 1 of 20,010, and a twenty-gene N-glycan panel has median rank 135 with 85% in the top tenth, while B4GALT1, FUT8 and ST6GAL1, which the paper argues are not involved, are not hits. The Wald FDR is shipped rather than the permutation one, which is quantised into a few values and would read as ties. Keyed by reviewed UniProt through gene symbol; 155 microRNA loci and other unresolvable symbols are dropped. A preprint.', geo_file_suffix=None), Dataset(key='host_hff_tg_infection', name='Human fibroblast response to Toxoplasma infection', level='reference', kind='transcription', provides='Infected against uninfected HFF, per host gene: moderated log2 change and FDR', organism='Hs', columns=('hff_tg_infection_log2fc', 'hff_tg_infection_padj'), coverage='10,631 human genes', pmid=None, accession='GSE335016', citation=None, url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE335nnn/GSE335016/suppl/GSE335016_245740-HOMO-gene_fpkm.txt.gz', path='datasets/host/fibroblast_infection/GSE335016/GSE335016_245740-HOMO-gene_fpkm.txt.gz', derived_from=(), note='No paper is attached to the series (Europe PMC and GEO searched 2026-09-26), so the citation is the accession. FPKM only; the contrast is computed here (starplast/deposits.py): moderated t on log2(FPKM + 1), three replicates per arm, genes at a mean FPKM of 1, wild-type infection against uninfected. The TGGT1_245740 knockout arm is not shipped -- it answers a question about one parasite gene. Textbook response: CXCL8 +5.4, IL6 +2.7, CXCL10 +2.3, ISG15 +2.1; GAPDH and ACTB flat. 315 genes at padj < 0.05.', geo_file_suffix=None), Dataset(key='host_bmdm_baseline', name='Baseline mouse bone-marrow macrophage transcriptome', level='reference', kind='transcription', provides='How much of each gene an unstimulated macrophage transcribes (TPM)', organism='Mm', columns=('bmdm_tpm',), coverage='15,437 mouse genes', pmid='40759751', accession='GSE267544', citation='John SV et al., Classically activated macrophages undergo functionally significant nucleotide metabolism remodelling driven by nitric oxide. Nat Metab 2025;7:1681-1702', url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE267nnn/GSE267544/suppl/GSE267544_fpkm_BMDM.txt.gz', path='datasets/host/bmdm/GSE267544/GSE267544_fpkm_BMDM.txt.gz', derived_from=(), note="The three unstimulated M0 samples only; the LPS + IFN-gamma arms are a stimulus, not infection, and do not answer any slot. Keyed on Ensembl through reviewed UniProt, never on the deposit's symbols, which are old (Emr1, Irg1). Markers behave: Lyz2 27,505 TPM, Cd68 2,791, Csf1r 1,276, Adgre1 903, Alb 0.", geo_file_suffix=None), Dataset(key='host_hepatocyte_pf_infection', name='Human hepatocyte response to P. falciparum', level='reference', kind='transcription', provides='Infected against uninfected primary hepatocytes, per host gene: log2 change and FDR', organism='Hs', columns=('hepatocyte_pf_infection_log2fc', 'hepatocyte_pf_infection_padj'), coverage='12,550 human genes', pmid='41428747', accession='GSE263643', citation='Kanyal A et al., Inhibition of Wnt signaling in primary human hepatocytes promotes Plasmodium falciparum liver stage development. PLoS Pathog 2025;21:e1013800', url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE263nnn/GSE263643/suppl/GSE263643_deseq2-normalized_counts.txt.gz', path='datasets/host/hepatocyte_infection/GSE263643/GSE263643_deseq2-normalized_counts.txt.gz', derived_from=(), note='The paper never compares infected with uninfected wells; the contrast is made here from its DESeq2-normalized counts, treatment and donor blocked, freshly isolated cells excluded. WEAK by construction -- bulk wells in which few cells are infected, two donors -- and only 25 genes reach padj < 0.05; what does is a type-I interferon response in both strains (IFI44L, CXCL10, CXCL11, RSAD2, IFIT1). Whether the uninfected wells received mock mosquito material is not described, so part of that signal may come from the sporozoite preparation.', geo_file_suffix=None), Dataset(key='host_macrophage_surfaceome', name='Mouse bone-marrow macrophage cell-surface repertoire', level='reference', kind='proteomics', provides='Which host proteins are EXPOSED on the surface of the macrophage a tachyzoite invades', organism='Mm', columns=('bmdm_surface_detected', 'bmdm_surface_intensity'), coverage='1,296 mouse surface proteins, 150 of them on primary BMDM', pmid='25894527', accession='PLoS ONE 0121314 S1 File', citation=None, url='https://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0121314.s002&type=supplementary', path='datasets/host/cspa/25894527/S1_File.xlsx', derived_from=(), note="Cell-surface capture, so this is a REPERTOIRE and not a proteome: a protein here is on the outside of an intact cell, which is the surface the parasite meets, rather than merely present somewhere in it. The row space is every protein the atlas saw on the surface of ANY mouse cell type, which makes a `False` a real negative -- the same capture ran on macrophages and did not find it -- and that is what instruction 39 means by a repertoire slot being FILLED rather than averaged. The shipped flag is a NULLABLE boolean: the host table also holds human red cell rows where the question was never asked, and a plain bool would turn those into `False`. Of the 41 human and 31 mouse cell types in the atlas, this is the only one either parasite lives in -- there is no erythrocyte, no hepatocyte and no primary fibroblast in it, so it fills one slot and not six. The lab's own copy of the file is a git-lfs pointer served as the spreadsheet (132 bytes that open as nothing); the journal's supplement is the same bytes and is what this fetches. The deposit's two matrices disagree for twelve proteins, nine with a macrophage intensity and no detection mark and three the other way; either sheet counts as the authors having measured it there, and the count of disagreements is logged rather than smoothed. Self-validating: the strongest signals are Emr1 (F4/80), Siglec1 (CD169), Itgb2, Cd47 and H2-K1.", geo_file_suffix=None), Dataset(key='pf_literature', name='Plasmodium falciparum abstract corpus (COMPUTED layer)', level='reference', kind='literature', provides='Who is named in the malaria literature, how deeply, and which genes appear together', organism='Pf', columns=('n_publications', 'n_papers_focal', 'n_papers_substantive', 'attention_depth', 'edge:comention'), coverage='43,482 abstracts; 732 genes named in the first 10,000', pmid=None, accession='PubMed', citation=None, url='https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi', path='.claude/skills/plasmodium-scientist/corpus/pubmed_plasmodium.jsonl', derived_from=(), note="Fetched by `scripts/fetch_pubmed_corpus.py`, which slices the query by YEAR because NCBI stops at ten thousand twice over: esearch will not page past it and efetch answers 400 for a retstart beyond it. Both limits are silent -- the first version of that script fetched 9,989 abstracts of 43,482 and reported success. The scan itself is the Toxoplasma arm's, unchanged: `identity` for who is named, `corpus` for what a document is, `literature` for the counting and the attention correction, so the two arms' attention numbers mean the same thing. What is organism-specific is the accession shapes -- this literature cites `PF3D7_`, `PFA0110w`, `PF13_0222` and `MAL1P4.01` in the same paragraph -- and the `Pf` symbol prefix, both of which are now arguments to `identity.build_index` rather than constants in it. Hard-coded to Toxoplasma they registered 9 of 9,106 previous accessions and the corpus read as one that never mentions a gene. Abstracts only: there is no `incidental` tier, since that means a mention in a body or a caption, and no full-text corpus is loaded for this arm.", geo_file_suffix=None), Dataset(key='pf_berghei_transfer', name='P. berghei knockout fitness, transferred to falciparum', level='DNA', kind='CRISPR_screen', provides='Relative growth of berghei knockouts, carried onto their falciparum orthologs', organism='Pf', columns=('pb_transferred_phenotype', 'pb_transferred_growth_rate', 'pb_transfer_confidence'), coverage='2,448 falciparum genes of 2,578 berghei mutants', pmid='28708996', accession='Cell 2017 Table S1 (PlasmoGEM)', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC5509546/supplementaryFiles', path='datasets/reference/plasmodb/pb_transfer/28708996/mmc1.xlsx', derived_from=(), note="A TRANSFER, and it says so in every column name, because instruction 39 requires one to be visible rather than folded into the measured slot -- transfer berghei fitness onto falciparum, hold out falciparum fitness and recover it, and you have measured orthology. What makes this one safe is that the orthology is not ours: the screen's own table names a falciparum gene per row, and no falciparum gene is named by two berghei ones, so nothing is dropped for ambiguity and nothing is derived. Forty rows name a transcript rather than a gene and are stripped, the same suffix the phosphosite loader handles; kept whole they would have vanished for not matching an accession. CHECKED AGAINST THE RECEIVING ARM'S OWN SCREEN, which is the check a transfer has to pass: berghei-essential genes have a median piggyBac mutagenesis index of 0.160, slow ones 0.394 and dispensable ones 0.996 -- monotonic across two species and two unrelated methods, barcoded knockouts in mice against saturation mutagenesis in culture, p = 7e-107 -- and 65 of 71 ribosomal proteins come out essential. The 12 mutants the screen calls `Insufficient data` keep their confidence and lose their phenotype and growth rate: that phrase is the absence of a measurement, not a middle value. The other 3,272 falciparum genes are UNSCREENED, not dispensable, and stay missing.", geo_file_suffix=None), Dataset(key='pf_idc_timing', name='Plasmodium intraerythrocytic cycle timing', level='transcription', kind='RNAseq', provides='When in the 48-hour cycle each transcript peaks, and how strongly it cycles', organism='Pf', columns=('idc_peak_hour', 'idc_cycling_amplitude'), coverage='5,038 genes timed of 5,499; 461 do not cycle strongly enough to place', pmid='34668757', accession='GSE163144', citation=None, url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE163nnn/GSE163144/suppl/', path='datasets/transcription/idc_timecourse/34668757/', derived_from=(), note="Sixteen timepoints three hours apart across 48 hours, two replicates, read from ONE cell of the deposit's square: the 3D7 line in normal (HbAA) red cells. The study's variable is sickle-trait haemoglobin and its second line is FUP, so the other three cells are perturbations rather than a reference -- and which sample is which comes from the deposit's own metadata file rather than from the sample titles, which encode the genotype and not the hour. Samples are TPM and sum to 1e6 exactly, checked rather than assumed. The peak is a PHASE, not the largest column: the axis wraps, since hour 48 is hour 0 of the next cycle, and an argmax splits the invasion peak between the last timepoint and the first -- it put AMA1 and PTRAMP, textbook invasion transcripts, at hour 3, where a culture synchronised at invasion is still carrying the merozoite's mRNA. Fitted through the first Fourier harmonic (`cellcycle.cyclic_phase`, shared rather than written here) the markers land where the biology says: MSP1 45.7 h, SERA5 42.9 h, RhopH2 36.2 h, KAHRP 25.1 h, SBP1 15.1 h -- and AMA1 at 2.5 h, which is five hours from MSP1 across the wrap and not the other way round. READ IT AS A CIRCLE. Genes whose first harmonic explains less than 40% of their variation are left missing, because a flat profile still has an angle.", geo_file_suffix='.csv.gz'), Dataset(key='pf_ip_ms', name='Plasmodium co-immunoprecipitation interactome (EPIC)', level='post_translation', kind='IP-MS', provides='Which parasite proteins came down with each tagged bait, against its own control', organism='Pf', columns=('n_ip_ms_partners',), coverage='98 edges over 65 partners and 3 baits', pmid='28691708', accession='Nat Commun 16044 Supplementary Tables 1-5', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC5508133/supplementaryFiles', path='datasets/reference/plasmodb/ip_ms/28691708/ncomms16044-s1.pdf', derived_from=(), note="Published as PAGES OF A PDF rather than as a table, and its captions are wrong: the table headed `parasite interacting proteins` holds human ones and the table headed `human` holds parasite ones. So no caption is read for what a table contains -- the bait comes from the column header, which names the pulldown and its control, and the organism from the identifier space. The check that licenses the assignment is that a BAIT MUST TOP ITS OWN TABLE: PV1 leads the PV1 pulldown at 97 and 120 spectra, PV2 leads PV2's, EXP3 leads EXP3's, and a page whose first row is not its bait is a continuation rather than a new table. Read two ways before it was trusted -- pypdf and poppler independently give 38, 44, 13, 11 and 37 rows on the five table pages. The count layout is the trap: eight numbers are TWO experiments of four (bait, bait, control, control), so splitting them down the middle compares experiment 1 with experiment 2 and reports an enriched partner with 145 spectra in the untagged line. Caught because that is impossible; read correctly, no pair has more spectra in its control than in its bait and the median control is 0. Two things are deliberately not carried: the 38 rows of the PfEMP1B pulldown, whose bait is a var-gene transgene with no accession in the table, and one PV2 row (PIESP2) that carries seven counts instead of eight, since the missing number could be either arm. Degree is missing outside the experiment -- four pulldowns are not a survey, and a zero would say `nothing binds this` about a protein nobody tested.", geo_file_suffix=None), Dataset(key='pf_cdpk1_dependent_sites', name='Plasmodium CDPK1-dependent phosphosites', level='post_translation', kind='phosphoproteomics', provides='Phosphosites per gene that are lost when PfCDPK1 is knocked down', organism='Pf', columns=('cdpk1_dependent_sites',), coverage='62 genes, 73 sites', pmid='28680058', accession='Nat Commun 00053 Supplementary Data 2a', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC5498596/supplementaryFiles', path='datasets/post_translation/kinase_substrate/28680058/41467_2017_53_MOESM3_ESM.xls', derived_from=(), note="Keyed by SEQUENCE, because nothing else in the file can be resolved: the sites are numbered in a 2017 annotation (`3885720(S422)`) that neither current accessions nor PlasmoDB's previous-id list carries. The 15-residue window around each site is an identifier when it occurs in exactly one protein -- 73 of 79 match one gene, 6 match none, none matches two -- and the translation comes from `codons.translate` over the CDS table this project already ships, so the genetic code is not written down twice. The mapping is then CHECKED against a field it did not use: 69 of 73 rows agree with the current product description, and the four that do not are re-annotations rather than wrong genes (a `conserved membrane protein` now named basal complex protein bleb, a `formin 2` now an Eps15-like protein, and two that my word matcher split on a digit). The set then reproduces the paper's own conclusion from the other side: 14.5% of the 62 genes are motor, IMC or invasion machinery against 1.6% of the proteome, and GAP45, myosin A, actin I and IMC1c/1g are all in it. Named for DEPENDENCE and not for substrate -- a site lost under knockdown may be phosphorylated by this kinase or by something downstream of it, and the file cannot tell them apart. The paper's PfPKA-R result is not in this sheet and is not claimed here.", geo_file_suffix=None), Dataset(key='pf_secretome', name='Plasmodium extracellular vesicle proteome', level='post_translation', kind='proteomics', provides='Parasite proteins found in extracellular vesicles, and how many preparations found them', organism='Pf', columns=('ev_studies',), coverage='184 proteins, 53 of them in both preparations', pmid='28944300', accession='Wellcome Open Res 11910 S2 (PRIDE PXD006925)', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC5583745/supplementaryFiles', path='datasets/post_translation/secretome/28944300/5c097a1c-efe5-4ed8-b97b-f9ba656268a6.xlsx', derived_from=(), note="The columns say `extracellular vesicle` and not `secreted`, because the second word would assert a route this measurement does not establish. The sheet read is the paper's own compilation: the union of two independent EV preparations with a membership column each, so 'how many studies saw this' is a fact in the file rather than a join. Its other columns are seroreactivity and antibody-array results from unrelated studies -- claims about immunity, not about vesicles -- and are deliberately not read. The deposit itself is raw-only (24 RAW files, no RESULT), which is the usual shape here: per-protein numbers come from the supplement. Checked in the direction a secretome should go -- 20.1% carry a signal peptide against 10.2% of the proteome (p = 8e-05), exported proteins run 6.0% against 3.3% (p = 0.06, same direction and not significant at 184 genes) -- and RESA, KAHRP, MSP1 and Ag332 are all present. The confound that must travel with the column is abundance: EV genes have a median blood-stage expression of 71.3 against 12.2 for the rest (p = 8e-31), so this is what mass spectrometry found in a vesicle preparation and not a list of what the parasite exports. Same caveat as hyperLOPIT assignment on the other arm, and for the same reason. Absence is unknown and stays missing. A companion boolean completed with False would have read as 5,720 genes tested and 5,536 negative, and graded the slot A at 100% for an experiment that identified 184 proteins -- so this one ships a single column whose presence is the evidence.", geo_file_suffix=None), Dataset(key='pf_isoforms', name='Plasmodium long-read transcript models', level='transcription', kind='nanopore', provides='Transcript models per gene, and how many the annotation does not contain', organism='Pf', columns=('n_transcript_models', 'novel_transcript_models'), coverage='1,857 genes, 2,498 models, 238 novel', pmid='40316999', accession='Malar J 05376 Supplementary Data 2', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC12046715/supplementaryFiles', path='datasets/transcription/isoforms/40316999/SupplementaryData2.xlsx', derived_from=(), note='SQANTI classifications of long-read models. `full-splice_match` is the reference transcript recovered and is NOT counted as novel -- only novel_in_catalog, novel_not_in_catalog and fusion are, which is what the Toxoplasma column of the same name counts. Absence is sequencing depth rather than a statement that a gene has one transcript, so unseen genes stay missing instead of reading as 1. Found while looking for something else: this paper was opened for its m6A data, whose Pf arm turned out to be a 43-gene intersection with P. vivax rather than a methylome, and was refused for that -- the isoform table beside it is the usable one. The obvious correlation holds: more expressed genes yield more models (rho +0.36), which is detection depth and is why the count is not read as isoform diversity.', geo_file_suffix=None), Dataset(key='pf_lactylome', name='Plasmodium lysine lactylome (resolved from NF54)', level='post_translation', kind='lactylation', provides='Lactylated lysines per gene, reported against NF54 and resolved to 3D7', organism='Pf', columns=('n_lactylsites', 'has_lactyl'), coverage='144 genes', pmid='41417877', accession='PLoS Genet 1011991 S1', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC12742760/supplementaryFiles', path='datasets/post_translation/lactylome/41417877/pgen.1011991.s014.xlsx', derived_from=(), note='Reported against the NF54 annotation, not 3D7, so joining on the accession string would have dropped all 186 genes without a word -- the exact failure the Toxoplasma identity layer exists to prevent, met here for the first time on this arm. `plasmodium.strain_map` resolves it through orthogroups holding exactly one gene on each side, which drops the paralogous surface families rather than guessing which member a measurement belongs to. Orthology is a claim about ancestry, so it is CHECKED against one about identity: 96.8% of the 4,310 pairs have exactly the same protein length and 99.2% are within 5%, which is what it should look like when one line was cloned from the other, and a test fails if a future release breaks it. 144 of 186 genes resolve; the rest are in multi-gene groups. Site counts use a 0.75 localisation cut and the flag does not, the same split as acetylation.', geo_file_suffix=None), Dataset(key='pf_acetylome', name='Plasmodium lysine acetylome', level='post_translation', kind='acetylation', provides='Acetylated lysines per gene, and whether the gene was seen acetylated at all', organism='Pf', columns=('n_acetylsites', 'has_acetyl'), coverage='1,145 genes, 2,163 localised sites', pmid='26813983', accession='Sci Rep 19722 S2', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC4728587/supplementaryFiles', path='datasets/post_translation/acetylome/26813983/srep19722-s2.xls', derived_from=(), note='Two columns built to two standards, because identifying an acetylated PEPTIDE and localising the acetyl group to a particular lysine are different claims. The FLAG uses every identification; the COUNT uses only sites with an Ascore of 0.75 or better, since a site count is meaningless if you do not know which lysine. The list is titled Final and is not pre-filtered on localisation -- Ascores run down to 0 -- so taking its length as a site count would have been wrong by about a quarter. Self-validating: fourteen histones appear, and the most heavily acetylated proteins are the PHD finger proteins, the MYST acetyltransferase and the coactivator ADA2, which is to say the acetylation machinery itself.', geo_file_suffix=None), Dataset(key='pf_myristoylome', name='Plasmodium N-myristoylome (NMT-inhibitor sensitive)', level='post_translation', kind='myristoylation', provides='Proteins whose click-chemistry capture drops when N-myristoyltransferase is blocked', organism='Pf', columns=('is_myristoylated',), coverage='16 substrates of 609 assayed', pmid='34695132', accession='PLoS Biol 3001408 S11', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC8544853/supplementaryFiles', path='datasets/post_translation/myristoylome/34695132/pbio.3001408.s011.xlsx', derived_from=(), note='The evidence for a substrate is not being pulled down -- background comes down too -- but coming down LESS when the transferase is inhibited, so the loader requires significance AND a negative difference. A positive difference under a blocked transferase would be a protein that came down MORE without it, which is not what a substrate does. THREE states, not two: 16 substrates, 593 assayed and not substrates, and 5,111 genes never in the pulldown, which stay missing -- collapsing the last two would claim the whole proteome had been tested for myristoylation by one experiment that saw 609 proteins. Sparse because the biology is: Plasmodium has roughly thirty predicted NMT substrates. The list validates itself -- GAP45, ARO, CDPK1, Rab-5B, ARF1 and ISP3 are the canonical N-myristoylated families in apicomplexans and all are present.', geo_file_suffix=None), Dataset(key='pf_palmitome', name='Plasmodium palmitome (observed only)', level='post_translation', kind='palmitoylation', provides='Proteins observed S-palmitoylated, with the motif prediction deliberately excluded', organism='Pf', columns=('is_palmitoylated',), coverage='503 proteins', pmid='36250062', accession='Front Cell Infect Microbiol Table 3', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC9556994/supplementaryFiles', path='datasets/post_translation/palmitome/36250062/Table_3.xlsx', derived_from=(), note='Read from the OBSERVED column and not from the sheet named for it. The same workbook carries `nrPalmitoylatedProteins`, whose name says palmitoylated and whose 3,105 rows are the union of palmitoyl-ABLE -- a motif prediction over 2,902 proteins -- and the 503 actually observed. Taking that sheet at its name would have called 54% of the proteome palmitoylated, against published palmitomes of 400 to 500, and the first rows being PfEMP1 and rifin is what gave it away. Validated on substrates and on mechanism rather than on a total: GAP45 and CDPK1, the canonical Plasmodium substrates, are both present, and membrane proteins are enriched 2.1-fold among the palmitoylated (44% against 27%, p = 7e-15), which is what a membrane-anchoring modification has to do. ARO is a known miss -- no palmitome is complete, and absence here means not observed.', geo_file_suffix=None), Dataset(key='pf_phosphoproteome_meta', name='Plasmodium phosphosites (re-analysis of all public data)', level='post_translation', kind='phosphoproteomics', provides='Distinct phosphorylated residues per gene, pooled across every public study', organism='Pf', columns=('n_phosphosites', 'has_phospho'), coverage='16,318 sites over 2,503 genes', pmid=None, accession='PXD046874', citation=None, url='https://ftp.pride.ebi.ac.uk/pride/data/archive/2023/11/PXD046874/', path='datasets/reference/plasmodb/phosphosites/', derived_from=(), note='A re-analysis of every public Plasmodium phosphoproteomics dataset through one pipeline, which is what makes a per-gene count meaningful: the same serine found by three groups is one site rather than three. Counted as distinct (gene, position) pairs and NOT as rows -- a site-centric table still carries one row per peptidoform and per source run, so summing rows would count how often a protein was looked at instead of how many sites it has, and the files hold millions of rows for 16,318 sites. Accessions are stripped of their transcript and product suffix (`PF3D7_1346300.1-p1`), or a gene with two products counts its sites twice. Where a source has a merged table the merged one is used and its per-run siblings are skipped. Missingness mirrors the Toxoplasma arm: the COUNT stays missing where nothing was detected, because how many sites a protein has is genuinely unknown if mass spectrometry never saw it, while the FLAG is False, because whether it was ever observed phosphorylated is a question about the evidence and the answer is no. Validated on orderings rather than totals: 67% of kinases carry a site against 44% of genes at large, and site count rises with protein length at rho +0.46.', geo_file_suffix=None), Dataset(key='plasmodb_pf3d7_exportpred', name='Plasmodium export prediction (ExportPred)', level='reference', kind='annotation', provides='Predicted export to the erythrocyte, as an ordinal confidence tier', organism='Pf', columns=('export_pred_tier', 'is_exported'), coverage='440 genes called at some threshold, 191 at the default', pmid=None, accession='PlasmoDB GenesByExportPrediction', citation=None, url='https://plasmodb.org/plasmo/service/record-types/transcript/searches/GenesByExportPrediction/reports/attributesTabular', path='datasets/reference/plasmodb/exportpred/', derived_from=(), note="PREDICTED, not measured, which is why it answers `export / PEXEL trafficking` and not `exposure to host cytosol` -- that slot wants a measured exportome and a sequence model filling it would be a model answering for an experiment. PlasmoDB serves ExportPred as a search with a score threshold rather than as a per-gene attribute, so the score is recovered by asking at several thresholds and keeping the highest a gene survives; the scale saturates, since asking for 20 returns nothing, so 10 is the algorithm's own default and the top tier rather than an arbitrary cut. It is a TIER and not a boolean because the default loses real biology: MESA and PfEMP3 are exported by any textbook and both fall below 10, while KAHRP and the FIKK kinases sit above it. Absence is a real negative here and not a gap -- a sequence model was evaluated on every protein, so its silence is a prediction of not-exported, which is the opposite of the screen columns.", geo_file_suffix=None), Dataset(key='pf_host_degree', name='Plasmodium host interaction degree (COMPUTED)', level='reference', kind='crosslink_MS', provides='How many host proteins a gene was crosslinked to, where it was looked at', organism='Pf', columns=('n_host_targets',), coverage='117 genes seen, 10 with a host partner', pmid=None, accession=None, citation=None, url=None, path='starplast/data/pf_nodes.parquet', derived_from=('bridge:host',), note='THREE states, and the middle one is why this is not a fillna(0). The Toxoplasma column of the same name is 0 everywhere without a curated host target, which is right there because its source is a curated table covering the literature. This source is ONE experiment: a gene it never detected has not been shown to lack host partners. So the 117 genes seen in the crosslink data carry a count -- zero included, because being crosslinked only to parasite proteins is a real observation -- and the other 5,603 stay missing. Classification is three-way for a reason a test found: a PF3D7 accession the node table does not carry is a PARASITE protein with no row, and reading it as host inflated this count. The shipped numbers were unaffected, because every accession in this file is in the table, but the fix is what stops the next file from being wrong.', geo_file_suffix=None), Dataset(key='pf_enzyme_classification', name='Plasmodium enzyme classification (PlasmoDB)', level='reference', kind='annotation', provides='EC number per gene, curated and orthology-derived kept apart', organism='Pf', columns=('ec_number', 'has_ec', 'ec_number_orthology'), coverage='1,220 curated, 335 more from orthology', pmid=None, accession='PlasmoDB ec_numbers and ec_numbers_derived', citation=None, url='https://plasmodb.org/plasmo/service/record-types/transcript/searches/GenesByTaxon/reports/attributesTabular', path='datasets/reference/plasmodb/plasmodb_pf3d7_ec.tsv', derived_from=(), note="PlasmoDB serves two EC fields and they are different KINDS of evidence -- one curated for this organism, one inferred from the gene's OrthoMCL group -- so they are separate columns and `has_ec` counts only the curated one. Merged they would be 1,584 genes with no way to tell which 335 were never annotated here at all, which is inference standing where annotation should. The slot lists the curated column first and its policy is `one`, so the leading candidate wins and the derived field is there to be chosen deliberately rather than by default.", geo_file_suffix=None), Dataset(key='pf_codon_usage', name='Plasmodium codon usage (COMPUTED)', level='reference', kind='annotation', provides='Effective number of codons, GC3, and CAI against the ribosomal proteins', organism='Pf', columns=('codon_enc', 'codon_gc3', 'codon_cai_ribosomal'), coverage='5,318 genes', pmid=None, accession='PlasmoDB-68 Pfalciparum3D7 AnnotatedCDSs', citation=None, url='https://plasmodb.org/common/downloads/Current_Release/Pfalciparum3D7/fasta/data/PlasmoDB-68_Pfalciparum3D7_AnnotatedCDSs.fasta', path='starplast/data/plasmodb_cds.tsv.gz', derived_from=('length',), note="COMPUTED through the SAME code as the Toxoplasma arm rather than reimplemented -- `codons.codon_usage` gained a table and node-table parameter for it. ENC and GC3 are definitions and the CAI reference set is 'the ribosomal proteins' in both arms, so two implementations could only differ by being wrong in one of them. Sharing it buys the first measurement the two arms can be COMPARED on, and the comparison is the validation: GC3 median 0.150 here against 0.583 in Toxoplasma, and ENC 37.6 against 53.9 -- P. falciparum has the most AT-rich genome of any eukaryote, so extreme codon bias is what has to appear, and a test fails if the two arms ever converge. The sequence report API returned 422, 400 and 500 to three different request shapes; the static release FASTA is what works.", geo_file_suffix=None), Dataset(key='pf_host_bridge_xlms', name='Plasmodium to human contacts (crosslinking MS)', level='reference', kind='crosslink_MS', provides='Parasite protein to erythrocyte protein, measured as a crosslink', organism='Pf', columns=('bridge:host',), coverage='10 pairs, 10 parasite genes, 7 human proteins', pmid='41966402', accession='Cell Rep mmc1 sheet D', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC13200099/supplementaryFiles', path='starplast/data/pf_host_bridges.parquet', derived_from=(), note="The half of the crosslink file the edge layer throws away, and it is a BRIDGE rather than an edge for the reason instruction 39 gives: the pair's two ends live in different tables and a human protein has no index in this one. Second bridge in the project after the Toxoplasma host IP-MS one, and the first thing it needed was a species-aware bridge lookup -- both arms key their bridge `host`, because both cross to a human protein, so the name cannot say whose contacts these are and only the parasite end can. Validated on an interaction that is in the textbooks: MESA (PF3D7_0500800) crosslinks to erythrocyte ankyrin, and the rest of the human side is stomatin, calpain, actin and spectrin beta -- the membrane skeleton, which is what an exported parasite protein should be touching.", geo_file_suffix=None), Dataset(key='pf_complexes', name='Plasmodium complexes from crosslinking MS', level='reference', kind='crosslink_MS', provides='Which crosslink-derived complex a gene belongs to, and whether it reaches the host', organism='Pf', columns=('complex_id', 'complex_size', 'complex_spans_host'), coverage='128 genes in 42 complexes', pmid='41966402', accession='Cell Rep mmc5 Clusters', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC13200099/supplementaryFiles', path='datasets/reference/plasmodb/complexes/41966402/mmc5.xlsx', derived_from=(), note='`complex_spans_host` is the informative column and is kept rather than dropped. Seven of the 47 clusters contain human proteins as well as parasite ones, which is not contamination -- the experiment crosslinked parasite inside erythrocyte, so a complex reaching into the host is a finding. But a parasite gene in one of those has partners this table cannot name, and a reader taking `complex_size` at face value would over-count its parasite neighbours. Only parasite members get a row; the host members belong to a bridge table. Same study as the crosslink edge layer and a different question: that one is which pairs touch, this one is which assembly a protein sits in.', geo_file_suffix=None), Dataset(key='pf_crosslink_ms', name='Plasmodium crosslinking MS contacts', level='reference', kind='crosslink_MS', provides='Protein pairs joined by a measured crosslink', organism='Pf', columns=('edge:xlms',), coverage='79 parasite-parasite pairs', pmid='41966402', accession='Cell Rep mmc1 sheet D', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC13200099/supplementaryFiles', path='datasets/reference/plasmodb/crosslink/41966402/mmc1.xlsx', derived_from=(), note='Two filters, neither optional. The experiment crosslinked PARASITE INSIDE ERYTHROCYTE, so a third of the 106 protein pairs have a human protein at one or both ends -- spectrin, band 3, protein 4.2. Those are real contacts and they are a HOST BRIDGE rather than a parasite-parasite edge, so they are dropped from this layer instead of being indexed against a table with no row for them. And a pair whose ends resolve to one gene is a homomeric crosslink: evidence the protein self-associates, not an edge, and drawing it would put a zero-length line in the graph. Validated on complexes that have to be there: EXP2, PTEX150 and HSP101 -- three subunits of the PTEX translocon -- crosslink to one another, prohibitin 1 to prohibitin 2, and RAP1 to RAP2. A contact map that missed those would not be measuring contacts. Which end is host and which is parasite goes through the ACCESSION INDEX and not through a pattern: the first version matched PF3D7_ in the mapping field and shipped 73 edges, but the source writes some rows with a UniProt symbol instead -- `sp|Q6ZMA7|Pfs16` is PF3D7_0406200, a parasite gene -- so six real contacts were dropped as host-at-one-end and a parasite protein was on its way into a host bridge. Resolving recovers all 79, and a test fails if the count ever drops back.', geo_file_suffix=None), Dataset(key='pf_relation_layers', name='Plasmodium relation layers (COMPUTED)', level='reference', kind='graph', provides='Gene pairs sharing an orthogroup or a domain, and pairs whose stages covary', organism='Pf', columns=('edge:orthogroup', 'edge:domain', 'edge:coexpression'), coverage='1,741 + 24,123 + 63,158 pairs', pmid=None, accession=None, citation=None, url=None, path='starplast/data/pf_graph.npz', derived_from=('orthogroup', 'interpro_ids', 'expr_ring', 'expr_schizont', 'expr_sporozoite'), note='A SECOND graph file, because an edge is a pair of indices into a table and a falciparum gene has no index in the Toxoplasma one. Constructions are copied from the Toxoplasma arm rather than re-invented, so that a difference between the arms means the biology differs and not that the edges were drawn by different rules. The one deliberate change is the domain weight. Two proteins can share more than one InterPro domain, and emitting the pair once per shared domain draws the same edge repeatedly, which reads as repeated evidence; the naive construction gave 10,764 duplicate emissions among 34,887 here, nearly all inside the var, rifin and stevor families that share whole multi-domain architectures. The count is now the weight, so a pair sharing eleven domains says so. The Toxoplasma arm emits no duplicates at all today -- checked rather than assumed -- and would acquire the same fault the moment its annotation gained a pair sharing two domains.', geo_file_suffix=None), Dataset(key='cotranslation_edges', name='Co-translation layer (COMPUTED)', level='translation', kind='RiboSeq', provides='Gene pairs whose ribosome footprints covary', organism='Tg', columns=('edge:cotranslation',), coverage='6,231 edges over 7,437 genes', pmid=None, accession=None, citation=None, url=None, path=None, derived_from=('rpf99395_intracellular_r1', 'rpf129869_confluent_r1', 'rpf245775_parent_tachy_r1'), note='COMPUTED here: the same construction co-expression uses over transcripts, applied to the 22 ribosome-footprint columns, at r >= 0.95 and the top 25 neighbours. DERIVED, so it is declared -- an embedding built on the RPF columns must not then be validated against this layer. It is not a copy of co-expression: 97% of its edges are not co-expression edges, Jaccard 0.003. What says it is co-TRANSLATION is that ribosomal proteins pair with each other 464 times where chance gives 3; they are made together stoichiometrically, which is the textbook case of co-translational regulation. 85 of its edges are also measured crosslink contacts.', geo_file_suffix=None), Dataset(key='m6a_peaks', name='m6A methylome (MeRIP peaks)', level='transcription', kind='MeRIP', provides='How many m6A peaks the authors called on this gene in tachyzoites', organism='Tg', columns=('n_m6a_peaks',), coverage='837 genes (10%)', pmid='34324585', accession='PLoS Pathogens 1009335 Table S3A', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC8354455/supplementaryFiles', path='starplast/data/m6a_peaks.tsv', derived_from=(), note="GEO carries no MeRIP for Toxoplasma -- its deposit for this study is depletion RNA-seq, which says which transcripts DEPEND on m6A and not which CARRY it. The peaks are in the paper. This slot had already been written up as unservable in instruction 41 when the supplement turned up, and that entry is now struck through rather than deleted. 866 of 8,922 genes carry a peak, which is the right order for m6A. Verified against the paper's own second dataset: marked genes are enriched among those responding to METTL3 depletion, odds 1.35, p = 2e-03 -- modest because removing a writer has broad indirect effects, but the direction a writer's own substrates have to take.", geo_file_suffix=None), Dataset(key='sexual_stages', name='Sexual development in the cat (single-cell atlas)', level='transcription', kind='scRNAseq', provides='Enrichment at 8 days post-infection, when gametogony happens', organism='Tg', columns=('sexual_stage_8dpi_log2fc',), coverage='4,463 genes (55%)', pmid='42020723', accession='PMC13042011 supplementary media-2', citation='Alrubaye HS et al., A single-cell atlas of Toxoplasma sexual development in the feline intestinal tract. Nat Microbiol 2026;11:1450-1462', url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC13042011/supplementaryFiles', path='starplast/data/sexual_stages.tsv', derived_from=(), note='The only stage in the map that is both inside a cat and sexual; the enteroepithelial column holds the asexual stages that precede it. Verified by what rises: oocyst wall protein sits at the 97th percentile, and the oocyst wall is built at the end of the sexual cycle, while ribosomal housekeeping genes sit at the 23rd. Accessions arrive as `DEAD/DEAHboxhelicase-TGME49-220860` -- product description glued to the accession with hyphens for underscores -- so they are extracted and normalised rather than matched.', geo_file_suffix=None), Dataset(key='secretome_partition', name='Secreted-fraction partition', level='post_translation', kind='proteomics', provides='How a secreted protein splits between the soluble and vesicular fractions', organism='Tg', columns=('secretome_soluble_over_vesicle_log2',), coverage='165 proteins', pmid='40874616', accession='ToxoDB Ramirez-Flores vesicles', citation=None, url='https://toxodb.org/toxo/service/record-types/transcript/searches/GenesByProteomicstgonGT1_quantitativeMassSpec_Ramirez_Flores_Vesicles_RSRC/reports/attributesTabular', path='starplast/data/secretome_partition.tsv', derived_from=(), note='REFUSED earlier in the same session and then accepted, which is worth stating rather than reversing quietly. It was first asked which proteins are enriched in secreted VESICLES, and the answer was incoherent -- dense granule proteins depleted, ribosomal proteins the most enriched thing in it. The two fractions it compares are BOTH secreted material, so the question it can answer is how a secreted protein partitions between them, and asked that way it behaves: micronemes, which dominate classical excretory-secretory antigen preparations, at +3.72, and the GPI-anchored surface antigens at -0.68. Its limit is that there is no negative list -- 171 proteins were seen in secreted material and nothing says what was looked for and missed, so absence is not evidence.', geo_file_suffix=None), Dataset(key='antisense_level', name='Antisense transcription (via ToxoDB)', level='transcription', kind='RNAseq', provides='Percentile of antisense signal at this gene, across the life cycle', organism='Tg', columns=('antisense_expression_percentile',), coverage='8,140 genes (100%)', pmid=None, accession='ToxoDB full life-cycle transcriptome, Antisense', citation=None, url='https://toxodb.org/toxo/service/record-types/transcript/searches/GenesByRNASeqtgonME49_tgme49_spor_ocyst_rnaseq_ebi_rnaSeq_RSRCPercentile/reports/attributesTabular', path='starplast/data/antisense_level.tsv', derived_from=(), note='The LEVEL of antisense transcription and not its change. An earlier attempt at this slot used the sense/antisense CHANGE across a tachyzoite time course and was refused because two strain time courses of it shared 12 of their top 200 genes where chance gives 28. The level reproduces: against the independent Gregory ME49 series it shares 197 of its top 500 where chance gives 31, a six-fold enrichment. How much antisense a gene has is a property of the gene; how much it changed was a property of the run. Correlates with sense transcription at only rho = +0.23, so it is not a restatement of expression.', geo_file_suffix=None), Dataset(key='melting_temperature', name='Protein melting temperature (mineCETSA)', level='post_translation', kind='proteomics', provides="Where this protein's melting curve sits, in degrees", organism='Tg', columns=('melting_temperature_tm',), coverage='3,120 proteins (38%)', pmid='35976251', accession='eLife 80336 supplementary file 3', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC9436416/supplementaryFiles', path='starplast/data/melting_temperature.tsv', derived_from=(), note='The same file as the thermal-shift column and a different question: that one asks how far the curve MOVES when calcium is added, this asks where it SITS. Median 55.1 C, which is where protein melting temperatures live. Curves with R2 below 0.8 or a Tm outside 30-80 C are dropped -- the fit reports values up to 8,563, which is a failed fit and not a thermophile. Verified by reproducing across independent replicates at rho = +0.78 over 1,623 proteins; a Tm that did not reproduce would be describing the run.', geo_file_suffix=None), Dataset(key='thermal_shift_cetsa', name='Calcium thermal-shift proteome (mineCETSA)', level='post_translation', kind='proteomics', provides="How far a protein's melting curve moves when calcium is added", organism='Tg', columns=('cetsa_calcium_ed_score',), coverage='2,348 proteins', pmid='35976251', accession='PMC9436416 Supplementary file 3', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC9436416/supplementaryFiles', path='datasets/quarantine/2026_08_16_unverified/Tg/thermal_shift/', derived_from=(), note="The authors' own Euclidean-distance score, not recomputed from the ten temperature points published beside it. Verified against the calcium sensors: CAM1 and CAM2 sit at the 98th percentile and CAM3 at the 83rd, and a protein whose melting curve does not move when calcium is added is not calcium-binding. One caveat for anyone comparing against the paper -- its headline conclusion is about PP1, and PP1 is unremarkable in THIS column. That claim comes from the zaprinast time course in the same paper, a different experiment; this is the calcium mineCETSA sheet. PXD033642, the deposit for the same study, publishes only identifications and could not have filled this slot.", geo_file_suffix=None), Dataset(key='cyst_wall_interactome', name='Cyst wall interactome', level='post_translation', kind='IPMS', provides='Strongest bait signal and how many baits saw the protein', organism='Tg', columns=('cyst_wall_max_spectral', 'cyst_wall_n_baits'), coverage='56 proteins', pmid='32019789', accession='PMC7002340 Data Set S1', citation=None, url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC7002340/supplementaryFiles', path='datasets/quarantine/2026_08_16_unverified/Tg/cyst_wall/', derived_from=(), note="Two numbers because the bait count is the more honest one: a protein found by thirteen independent pulldowns is in the cyst wall in a way a single strong hit is not. Verified by what comes out on top -- MAG1 and MAG2, the canonical cyst matrix proteins, with MCP3, MCP4 and SRS44 beside them. 57 of the table's 265 rows name a Toxoplasma accession; the rest are human, because the pulldowns were done on infected cultures and the table lists everything identified.", geo_file_suffix=None), Dataset(key='second_background_fitness', name='Fitness in the reporter strain (COMPUTED)', level='DNA', kind='CRISPR_screen', provides='Guide depletion over eight passages of ordinary growth', organism='Tg', columns=('crispr_reporter_strain_p8_log2',), coverage='262 genes', pmid=None, accession='GSE132237', citation=None, url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE132nnn/GSE132237/suppl/GSE132237_RAW.tar', path='datasets/quarantine/2026_08_16_pride/Tg/essentiality_in_a_second_background/', derived_from=(), note='The SAME archive as the differentiation screen, answering its other question. Its passage arms -- p8 against the input library -- are ordinary tachyzoite growth, and the reporter line is not the type I RH the genome-wide screens use, which is what makes this a second background rather than a repeat. A targeted library of nucleic-acid binding genes, so 262 genes and not the genome. Verified by agreeing with the RH screen where it should: rho = +0.62 against fit_invitro_hff over 130 shared genes, close enough that the direction and the join are right and far enough that it is not a copy. The deposit sat in a folder named for this slot all day while only its differentiation arms were read.', geo_file_suffix=None), Dataset(key='differentiation_screen', name='Differentiation reporter CRISPR screen (COMPUTED)', level='DNA', kind='CRISPR_screen', provides='Guide enrichment in reporter-positive parasites against the bulk population', organism='Tg', columns=('diff_reporter_log2_mNG_over_bulk',), coverage='235 genes', pmid=None, accession='GSE132237', citation=None, url='https://ftp.ncbi.nlm.nih.gov/geo/series/GSE132nnn/GSE132237/suppl/GSE132237_RAW.tar', path='datasets/quarantine/2026_08_16_pride/Tg/essentiality_in_a_second_background/GSE132237_RAW.tar', derived_from=(), note="COMPUTED here: the deposit publishes guide counts, not the ratio. Guides are summed per gene, scaled to a common library size, and log2((mNG+ + 1)/(bulk + 1)) is averaged over the two reporter lines at 10 days. It is the comparison the authors' design names, and the column says ratio rather than phenotype so nobody mistakes it for a number they reported. A targeted screen against nucleic-acid binding proteins, so 240 genes is its full extent and not a coverage failure. Which member is which sample comes from the series matrix, never from the file name.", geo_file_suffix=None), Dataset(key='pf_spatial_proteome', name='Spatial proteome of the schizont (hyperLOPIT)', level='post_translation', kind='LOPIT', provides="Which of 24 cellular niches each protein sits in, and the classifier's confidence", organism='Pf', columns=('lopit_pf_location', 'lopit_pf_svm_score'), coverage='1,646 classified of 3,000 (29%)', pmid='42218142', accession='PXD070842 / Nat Commun Supplementary Data 1', citation='Chisholm SA et al., The spatial proteome of the Plasmodium falciparum schizont illuminates the composition and evolutionary trajectories of its organelles. Nat Commun 2026;17:6192', url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC13369866/supplementaryFiles', path='datasets/post_translation/LOPIT/42218142/41467_2026_73664_MOESM3_ESM.xlsx', derived_from=(), note="The FIRST subcellular localization of any kind in the Plasmodium table, which had no compartment at all -- the question hyperLOPIT answers for Toxoplasma in this same map. Reproduces the paper exactly: 3,000 proteins mapped, 1,646 classified, 24 niches, and the markers where they must be (RAP1 rhoptries, MAHRP1 Maurer's cleft, ACP apicoplast, EXP2 and HSP101 at the PVM, GAPDH cytosol). `unknown` is shipped as a MISSING label, not a 25th niche. The two-experiment classifier (S1-S2) ships rather than the three-experiment one: it is the paper's headline and classifies more proteins, and shipping both would be one measurement twice.", geo_file_suffix=None), Dataset(key='pf_field_variation', name='Population and between-species variation per gene', level='reference', kind='sequence', provides='Non-synonymous variation in field isolates, and dN/dS against Plasmodium orthologs', organism='Pf', columns=('field_pnps_adj', 'field_variant_fraction', 'dnds_laverania', 'dnds_plasmodium'), coverage='4,282-5,232 genes', pmid='42218142', accession='Nat Commun Supplementary Data 3', citation='Chisholm SA et al., The spatial proteome of the Plasmodium falciparum schizont illuminates the composition and evolutionary trajectories of its organelles. Nat Commun 2026;17:6192', url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC13369866/supplementaryFiles', path='datasets/post_translation/LOPIT/42218142/41467_2026_73664_MOESM5_ESM.xlsx', derived_from=(), note='The second half of the spatial-proteome paper, and a different question from its first: pN/pS and variant fraction are computed over FIELD isolates, so they answer the field-variation slot that had nothing, while dN/dS over Laverania and over Plasmodium orthologs measures selection since the species split. They are not restatements of the PlasmoDB lab-strain SNP columns already shipped: pN/pS agrees with them at rho 0.29, which is a related quantity measured on a different population, not a copy. Registered as its own entry because the columns belong to different slots from the localization ones and provenance is a statement about which measurements a dataset produced.', geo_file_suffix=None), Dataset(key='pf_mrna_dynamics', name='mRNA synthesis and decay rates through the blood-stage cycle', level='transcription', kind='RNAseq', provides="Transcripts made per minute, and transcripts lost per minute, at each gene's peak", organism='Pf', columns=('transcription_rate_4tu', 'mrna_decay_rate_4tu'), coverage='4,373 / 4,420 genes', pmid='29985403', accession='GSE66669 / Nat Commun Supplementary Data 2', citation='Painter HJ, Chung NC, Sebastian A, Albert I, Storey JD, Llinas M. Genome-wide real-time in vivo transcriptional dynamics during Plasmodium falciparum blood-stage development. Nat Commun 2018;9:2656', url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC6037754/supplementaryFiles', path='datasets/transcription/RNAseq/29985403/41467_2018_4966_MOESM5_ESM.xlsx', derived_from=(), note="4-thiouracil labelling at every one of the 48 hours, which is why this is the only RNA-stability measurement for this organism. FLUXES, in transcripts per minute at the gene's own peak -- NOT half-lives, and not comparable with the Toxoplasma actinomycin columns, which are fractions remaining: an abundant transcript loses more transcripts per minute than a scarce stable one, and the decay column tracks abundance at rho 0.42 for exactly that reason. The paper's claim that transcription runs in every stage reproduces (616-962 genes peak in each of the six windows), and the timing agrees with a series this study had no part in: of the genes whose transcription peaks in a ring window, 87-92% also peak in the shipped ring expression column. The peak-stage labels in the deposit are NOT shipped -- they would restate the stage expression series the table already carries.", geo_file_suffix=None), Dataset(key='pf_hsp90_chemoproteome', name='Blood-stage proteome and Hsp90 dependence', level='translation', kind='proteomics', provides="Protein abundance in a DMSO control, what two Hsp90 inhibitors do to it, and the paper's chaperone-dependent call", organism='Pf', columns=('proteome_blood_log2', 'hsp90_inhibition_ga_log2fc', 'hsp90_inhibition_xl_log2fc', 'hsp90_dependent'), coverage='3,049 proteins (53%)', pmid=None, accession='PXD079493 / bioRxiv 10.64898/2026.08.28.747854 Tables S1-S2', citation='Ibrasheva N et al., Chemoproteomic profiling of Plasmodium falciparum Hsp90 inhibition reveals functional link to DNA replication pathways. bioRxiv 2026, doi:10.64898/2026.08.28.747854 (preprint)', url='https://www.biorxiv.org/content/10.64898/2026.08.28.747854v1.supplementary-material', path='datasets/translation/proteomics/pf_hsp90_2026/TableS1_media-2.xlsx', derived_from=(), note="Two empty slots and one new question. The DMSO arm is the first protein abundance in the map for the asexual blood stage -- the stage this parasite spends its life in, confirmed from the PRIDE record rather than assumed -- and the two inhibitors are the first abundance under stress. Chaperone dependence is the new question: which proteins need Hsp90 to stay folded, measured with two chemically unrelated inhibitors so the answer is the chaperone's and not one compound's -- and that conjunction is doing real work, because the two continuous responses agree only at rho 0.17. The paper's 131 hits reproduce EXACTLY from its own rule (down by at least 0.5 log2 at p < 0.05 under both), all 131 of them; 124 survive into the table, because seven protein groups name more than one gene and are dropped rather than assigned to the first. UniProt accessions are mapped to genes through the deposit's own Spectronaut report, not an external lookup. The PRIDE description says 133 hits where the table lists 131; the reproducible number ships and the discrepancy is recorded. A preprint.", geo_file_suffix=None), Dataset(key='pf_rna_dependence', name='RNA-dependent proteins (R-DeeP)', level='post_translation', kind='RDeeP', provides="Whether a protein's complex falls apart when the RNA is digested", organism='Pf', columns=('rna_dependent', 'rna_dependence_qvalue'), coverage='3,671 proteins (64%)', pmid='38355719', accession='MassIVE MSV000091565 / Nat Commun Supplementary Data 1', citation='Hollin T et al., Proteome-wide identification of RNA-dependent proteins and an emerging role for RNAs in Plasmodium falciparum protein complexes. Nat Commun 2024;15:1365', url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC10866993/supplementaryFiles', path='datasets/post_translation/RDeeP/38355719/41467_2024_45519_MOESM4_ESM.xlsx', derived_from=(), note="A question nothing in either table asked: not what a protein binds, but whether RNA is holding its complex together. One lysate down a sucrose gradient twice, with and without RNase, 25 fractions each; a protein that shifts towards the light fractions was being held by RNA. It is NOT RNA binding -- a protein can shift because its partner binds RNA, which is why the authors call them RNA-dependent. The 898 significant shifters at q < 0.05 are the paper's own number, reproduced from the deposit's q-values, and the flag is 0 rather than blank for the other 2,773 proteins the run quantified: that experiment did test them. The classes come out the right way round -- RNA helicases enriched (28 of 61, odds 2.7, p 2e-4), the proteasome 0 of 14 -- while ribosomal proteins are DEPLETED (23 of 137), which is the reminder that this is not a column about binding RNA.", geo_file_suffix=None), Dataset(key='pf_committed_proteome', name='Proteome of sexually committed parasites', level='translation', kind='proteomics', provides='How much more or less of each protein a committed parasite carries', organism='Pf', columns=('committed_vs_asexual_log2fc', 'committed_vs_asexual_fdr'), coverage='1,950 proteins (34%)', pmid='41482054', accession='PXD059080 / MCP Table S3', citation='Venugopal K et al., Defining the proteome of sexually committed parasites in Plasmodium falciparum. Mol Cell Proteomics 2026;25:101505', url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC12878696/supplementaryFiles', path='datasets/translation/proteomics/41482054/mmc4.xlsx', derived_from=(), note="Commitment, not the gametocyte: the decision a cycle before the stage V proteome already in the map, isolated by sorting on MSRP1, which this study establishes as the marker. The combined contrast over both reporter lines and both sorting directions ships, because the four arms are one comparison done four ways. MSRP1 itself is +1.68 at FDR 0 and that is a positive control and nothing more -- it is what the sort was done on. The check that means something is the paper's finding that merozoite surface proteins separate the populations: MSP1 +0.34 at FDR 0, MSP2 +0.67.", geo_file_suffix=None), Dataset(key='pf_resistome', name='In vitro evolution resistome and field variation', level='DNA', kind='in_vitro_evolution', provides='How often a gene mutated under compound selection, and whether the paper calls it a target', organism='Pf', columns=('resistance_selection_clones', 'resistance_selection_compounds', 'resistance_selection_variants', 'resistance_target_compounds', 'pf6_field_dnds', 'pf6_field_nonsyn_snvs'), coverage='735 selected / 4,941 field genes', pmid='39607932', accession='Science Supplementary Data 3, 5, 6', citation='Luth MR et al., Systematic in vitro evolution in Plasmodium falciparum reveals key determinants of drug resistance. Science 2024;386:eadk9893', url='https://www.ebi.ac.uk/europepmc/webservices/rest/PMC11809290/supplementaryFiles', path='datasets/DNA/in_vitro_evolution/39607932/SupplementaryData3_SNVs-INDELs.xlsx', derived_from=(), note="724 clones, each evolved against one of 118 compounds and sequenced whole-genome; both numbers reproduce from the deposit. Two kinds of column, and the difference is the point. The COUNTS are of coding variants per gene and their top is AP2-G (13 compounds) and PfEMP1, genes that mutate under prolonged culture whatever the drug, so a count is not a claim of resistance. `resistance_target_compounds` is the paper's own classification, restricted to the two classes its hypergeometric test supports, and its top is the canonical set: PfATP4 and PfMDR1 at 5 compounds each, the prodrug-activating esterase at 4, then cytochrome b, CARL, PI4K beta and the Niemann-Pick C1-related protein at 3, with DHODH, PfCRT, the tRNA ligases and DHFR-TS behind them. Cytochrome b is in the deposit under the pre-2010 name `mal_mito_3` and matches no accession pattern: it is mapped on the deposit's own description naming exactly one product in the shipped table, because dropping it would lose the atovaquone gene and its 32 selected clones. A gene with no selected mutation gets NO value rather than a zero -- 118 compounds are not a test of the other 4,600 genes -- which is the opposite of the choice made for the R-DeeP flag, where the run did quantify every protein it reports. The Pf6 columns are field variation over 5,970 isolates, with the deposit's -1 for 'not computable' read as missing.", geo_file_suffix=None)]
deforganism_of(dataset) -> str:
The explicitly declared organism; dataset names are not species identifiers.
The node columns a derived column was computed from, as DECLARED by whoever derived it.
Declaration is needed in addition to measurement, not instead of it. Measured association is
pairwise, and a label computed as the argmax of three columns is a JOINT function of them: each
source individually explains only about 0.6 of it, under any sensible exclusion threshold, so a
pairwise measure cannot see the derivation however good the statistic is. Measurement catches the
undeclared leak -- a renamed copy -- and declaration catches the joint one. Neither alone is enough,
and this project has already been burnt by trusting one of them.
Transitive derived outputs that depend on any supplied column.
Leakage travels both directions in the dependency graph: holding out a derived target removes its
raw inputs, while holding out a raw measurement must also remove every summary or label computed
from it. The registry is small, so an explicit fixed-point walk is clearer than a cached graph.
defunresolved() -> list:
Entries whose originating publication is not recorded. Confirm before citing.
defdownloadable() -> list:
Entries with a direct download URL, in the order the notebook should fetch them.
defas_table() -> object:
The registry as a DataFrame, for the methods table and the application's provenance view.
deflocal_path(key:str) -> str|None:
Where this dataset's file is on THIS machine, or None if it is not here.
The registry's path is recorded relative to the dataset root, which differs between a clone, the
historical layout and a download cache -- so it is resolved through paths.find rather than opened
directly. Opening it directly is what made the build work on exactly one machine.
deffetchable(key:str) -> tuple:
(can_fetch, how). Says which of the three situations a dataset is in, rather than guessing.
Return a local path for this dataset, downloading it if it is absent and can be fetched.
Returns None rather than raising when the data genuinely cannot be obtained automatically. Several
of these datasets exist only inside a paper's supplementary section and one exists only as raw
instrument files; pretending otherwise would produce a path to something that is not the dataset.
defmissing() -> list:
Registry entries whose data is not on this machine. The honest first-run report.
CHECKSUMS =
'checksums.json'
defdigest(path:str) -> str:
SHA-256 of a file, streamed -- some of these are gigabytes.
defrecorded_checksums() -> dict:
The SHA-256 recorded for each downloaded file, so a reissued supplement is caught.
True when the file matches what was pinned, or when nothing was pinned yet.
An unpinned file is not a failure -- most of this tree arrived before checksums existed -- so the
honest answer for it is "no claim", and the digest is recorded so the NEXT fetch has something to
check against.
LEVEL_TITLE =
{'DNA': 'DNA — genetic perturbation and DNA-level readouts', 'transcription': 'Transcription — RNA abundance', 'translation': 'Translation — protein abundance', 'post_translation': 'Post-translation — properties of the folded protein', 'reference': 'Reference — not a study result'}
defreadme_table() -> str:
The linked dataset catalogue, generated as Markdown from this registry.
Generated rather than written by hand because a hand-written table drifts the moment a dataset is
added, and a README that misstates which data is inside is worse than one that omits it. A test
asserts the committed README matches what this produces.