Edit on GitHub

starplast.small_tables

Small per-gene tables: one file, two columns, one column of the map.

The shape is the point. A ToxoDB search report, a paper's supplementary table and a list extracted from a spreadsheet all reduce to gene-and-number, and once they do there is no reason for each to have its own loader. SOURCES is the list, and the fourth field of each entry records what was asked for -- which query, which sheet -- because a search that can be asked five ways produces five different columns and the note beside the data has to say which one this is.

Named toxodb_evidence until it held eLife supplements too, at which point the name was a claim about provenance that half its rows did not meet.

Every column is the value the source gives, unmodified except for the sign convention below.

Which way round a fold change points

fold_change_avg is comp/ref, not ref/comp, and nothing in the API says so. It was established against a case with only one possible answer: asking the enteroepithelial dataset for tachyzoites as reference and tissue cysts as comparison puts BAG1 at +21.6 and LDH2 at +16.1 -- both bradyzoite-specific -- and SRS29B, which is SAG1, at -14.3. Positive is therefore higher in the comparison group.

That check is worth repeating whenever a new fold-change search is added here. Getting it backwards does not raise anything; it silently inverts a column.

The sign convention, again

Like the palmitome, the RNA-seq searches report a signed fold DIFFERENCE: -1257.4 means 1257-fold down, not a negative expression. It is converted with the same signed_log2, for the same reason -- passing it to a logarithm would turn every down-regulated gene into NaN.

SOURCES = (('toxodb_epitopes.tsv', 'iedb_epitope_count', False, 'GenesWithEpitopes, organism=Toxoplasma gondii ME49, confidence High+Medium+Low'), ('toxodb_h4_acetylation.tsv', 'h4_acetylation_chip_score', False, 'GenesByChIPchip Hakimi/Ali genome-wide H4 K5-K8-K12-K16 acetylation, within 1 kb, no floor'), ('toxodb_macrophage.tsv', 'macrophage_expression_percentile', False, 'GenesByRNASeq Saeij 29 strains, ME49-infected murine macrophages, percentile, channel 1'), ('escrt_recruitment_xgboost.tsv', 'escrt_recruitment_xgboost', False, 'spaCR screen supplementary data 4, XGBoost gene-level regression coefficient'), ('escrt_recruitment_maxvit.tsv', 'escrt_recruitment_maxvit', False, 'spaCR screen supplementary data 5, MaxViT gene-level regression coefficient'), ('m6a_peaks.tsv', 'n_m6a_peaks', False, 'PLoS Pathogens 1009335 supplementary Table S3A, m6A peaks in the tachyzoite dataset'), ('sexual_stages.tsv', 'sexual_stage_8dpi_log2fc', False, 'PMC13042011 supplementary media-2, sheet Fig2D, avg_log2FC at 8 days post-infection in the cat'), ('secretome_partition.tsv', 'secretome_soluble_over_vesicle_log2', False, 'GenesByProteomics Ramirez-Flores vesicles, exosome+ectosome against supernatant, sign flipped so positive is the soluble secreted fraction'), ('antisense_level.tsv', 'antisense_expression_percentile', False, 'GenesByRNASeq full life-cycle, Antisense profileset, percentile across tachyzoite, cyst and sporulated'), ('melting_temperature.tsv', 'melting_temperature_tm', False, 'eLife 80336 supplementary file 3, sheet 4.5_mineCETSA_curve_fits, median Tm where R2 > 0.8'), ('crosslink_partners.tsv', 'n_crosslink_partners', False, 'mBio 02159-25 supplementary file s0004, the high-confidence PPI table, partners per protein'), ('pvm_proximity.tsv', 'pvm_proximity_positive', False, "mBio 00260-21 Data Set S1, the authors' likely-positive and likely-negative PVM lists"), ('cdpk1_substrates.tsv', 'cdpk1_thiophospho_peptides', False, 'eLife 85654 supplementary file 6, sheet 6.2_ThioP_enriched, master accession per peptide'), ('mrna_stability.tsv', 'mrna_remaining_5h_actinomycin', False, 'PLoS Pathogens 1012857 supplementary Table S12, untreated parasites at 5 hours'), ('myristoylome.tsv', 'myristoylation_confidence', False, 'eLife 57861 supplementary file 4, Substrate List, confidence High=3 Medium=2 Low=1'), ('toxodb_arginine_methylation.tsv', 'n_arginine_methylation_sites', False, 'GenesByPTM monomethylarginine, Yakubu et al. RH proteomics, at least one site'), ('toxodb_nanopore_isoforms.tsv', 'novel_transcript_models', False, 'GenesByLongReadEvidence Stuart/Ralph nanopore, ISM + NIC + NNC novelty, >=5 reads'), ('toxodb_enteroepithelial.tsv', 'ees_vs_tachyzoite_log2', True, 'GenesByRNASeq Ramakrishnan enteroepithelial, EES1-5 against tachyzoites, sense strand'))
def enzyme_classification( base: str, resolve=None, log=<built-in function print>) -> pandas.DataFrame:

EC number per gene, and whether it has one at all.

An annotation rather than a measurement, and treated as one -- the same standing as InterPro domains, which fill domain content on the sequence axis. What makes it worth a metabolism slot is that 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. See slots.py on why those three slots are unit=metabolite.

has_ec is 0 for genes ToxoDB reports without an EC number, not missing: the whole proteome was asked, so "no EC assigned" is an answer about the gene.

def evidence( base: str, resolve=None, log=<built-in function print>) -> pandas.DataFrame:

Every downloaded ToxoDB search report as one column each.

The value column is taken by POSITION -- the second -- rather than by name. ToxoDB's tabular report ships display names as the header (Epitope Count, Score, Fold Change (Avg)), and those change with the site's release while the report's shape does not.