Edit on GitHub

starplast.resistance

Resistance-conferring mutations: the one table in this map that is curated rather than parsed.

Every other column here is read out of a file somebody deposited. This one cannot be. Toxoplasma has no resistome the way Plasmodium has one -- no study has selected resistance across a compound panel and deposited the calls -- so the answer to "which genes carry a mutation that confers drug resistance" exists only as sentences in individual papers. A curated table is the honest shape for that, and it is only worth having if every row can be checked, so every row carries the paper, the substitution, the compound and how causality was established.

The bar, which is what makes this short

An allele is in here only if the mutation was put back -- introduced into a clean background and shown to produce the resistance. That is a deliberately higher bar than the literature's usual output, and the reason is a specific failure found while building this: the Toxoplasma in-vitro evolution studies produce candidate loci, and in the one case where causality was actually tested the candidate failed. The auranofin study (PMID 33816332) ranks its variants, names SOD2 as most likely resistance-conferring, and then reports that SOD2 L201P "was not sufficient to confer resistance when introduced into wild-type parasites". The artemisinin study's own table (PMID 31806760) is titled "Mutations found in candidate genes". Selection under a drug is evidence of selection; it is not a demonstration that the mutation does the work. Nine genes were curated from those two studies and then dropped, which is why this file has one gene in it and not ten.

What is documented but deliberately absent

The field's other well-known resistance alleles are real and are not here, each for a stated reason:

  • DHFR-TS (TGME49_249180) pyrimethamine alleles -- T83N and others. Established well enough that the mutant allele is the field's standard selectable marker, but the primary text (Donald and Roos 1993) is pre-PMC and unreachable from here, and a review's paraphrase is not the measurement.
  • DHODH (TGME49_210790) N302S for 1-hydroxyquinolones -- primary paper not open access.
  • Cytochrome b M129L and I254L for atovaquone -- excluded for a structural reason rather than an access one: Toxoplasma cytochrome b is mitochondrially encoded and has no row in a table of the 8,140 nuclear genes. The eighteen nuclear "cytochrome b" hits are b-c1 complex subunits and b5 domain proteins, and putting the allele on one of those would be a straightforward error.

They are listed here rather than omitted so that the next person adds them when the sources open, instead of rediscovering the same three dead ends.

Missingness

A gene with no row has not been shown to be resistance-free; nobody selected resistance in it. So only genes with an allele carry a value and every other gene stays missing -- the opposite of the screen columns, where absence inside the screened set is a real negative result.

@dataclass(frozen=True)
class Allele:

One mutation, and everything needed to check it without trusting this file.

Allele( gene: str, product: str, substitution: str, compound: str, pmid: str, validation: str)
gene: str
product: str
substitution: str
compound: str
pmid: str
validation: str
ALLELES = (Allele(gene='TGME49_312570', product='CMGC kinase, MAPK family (ERK) MAPK-1', substitution='L162Q', compound='1NM-PP1', pmid='24533298', validation='the mutant sequence replaced the native locus under 1000 nM 1NM-PP1, and overexpression conferred higher resistance than wild type'), Allele(gene='TGME49_312570', product='CMGC kinase, MAPK family (ERK) MAPK-1', substitution='I171N', compound='1NM-PP1', pmid='24533298', validation='recovered with L162Q and tested for cross resistance to other BKIs'), Allele(gene='TGME49_312570', product='CMGC kinase, MAPK family (ERK) MAPK-1', substitution='L162Q', compound='3BrB-PP1', pmid='24533298', validation='cross resistance measured for the same clones'), Allele(gene='TGME49_312570', product='CMGC kinase, MAPK family (ERK) MAPK-1', substitution='L162Q', compound='3MB-PP1', pmid='24533298', validation='cross resistance measured for the same clones'), Allele(gene='TGME49_312570', product='CMGC kinase, MAPK family (ERK) MAPK-1', substitution='S191Y', compound='1NM-PP1', pmid='25941623', validation='engineered gatekeeper clones in one background: S191Y resistant, S191A sensitive'))
DOCUMENTED_ELSEWHERE = {'TGME49_249180': 'DHFR-TS pyrimethamine alleles; primary text (Donald and Roos 1993) unreachable', 'TGME49_210790': 'DHODH N302S for 1-hydroxyquinolones; primary paper not open access'}
def table() -> pandas.DataFrame:

One row per gene carrying at least one validated resistance allele.

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

The curated table, resolved to current accessions. base is unused and kept for symmetry.

Every other loader in the build takes a dataset root because it opens a file. This one takes it and ignores it, so the build loop does not need a special case for the one source that is a literature curation rather than a download.