Edit on GitHub

starplast.interactions

Physical binding and structural similarity — and the models that show how the binding happens.

Three edge types come from work already done elsewhere in this tree, all of it already keyed by TGME49_ gene id, so none of it needs the identity layer:

  • xlms — StarPath DSS crosslinking mass-spectrometry. This is the only edge type in starplast that is measured physical proximity: two residues were covalently joined in a living-cell lysate, so the two proteins were within the crosslinker's reach. Weight is the number of crosslinks supporting the pair.
  • ip_ms — immunoprecipitation of a tagged bait, replicated, with an untagged control. Few, but the most direct binding evidence in the map.
  • struct — Foldseek TM-align over 6,900 Toxoplasma AlphaFold models, TM >= 0.7. Structural similarity needs no orthology, so it reaches lineage-specific effectors that homology edges cannot see.

None of these is a co-mention, so none is attention-biased. That matters: xlms and struct are the first edge types here that can connect a gene nobody has written about to one everybody has.

The models. StarPath ships four Chai-1 predicted complexes per interaction — 12,265 CIF files on local disk — and starpath_crosslink_mining scored 2,411 of them for whether the predicted complex actually places the crosslinked residues within reach. crosslink_models() assembles that into one table per gene pair: residue positions, paths to the model files, the fraction of crosslinks the model satisfies, and Chai-1's own confidence. A low frac_satisfied is informative rather than fatal -- it says the model does not explain the measurement, not that the measurement is wrong.

TOXONET_EDGES = {'xlms': 'number of DSS crosslinks supporting the pair', 'ip_ms': 'replicated IP-MS of a tagged bait', 'struct': 'Foldseek TM-score (>= 0.7)'}
def load_toxonet(path: str, node_ids, log=<built-in function print>):

Lift the physical-interaction and structural-similarity edges out of the toxonet edge table.

def gene_attributes(edges: dict, models: pandas.DataFrame, nodes: pandas.DataFrame) -> None:

Per-gene counts the evidence panel can show, added in place.