brainbeacon.pipeline.perturbation.apply_gene_perturbation

brainbeacon.pipeline.perturbation.apply_gene_perturbation#

brainbeacon.pipeline.perturbation.apply_gene_perturbation(adata, gene_list, mode='knockout', value=None, multiplier=2, target_obs_names=None, filter_by=None)#

Apply gene perturbation (knockout or overexpress) to selected cells in an AnnData.

Parameters:
  • adata (AnnData) – Input AnnData.

  • gene_list (list[str]) – Genes to perturb. Prefer Ensembl IDs in adata.var_names. If a gene is not found and adata.var['gene_symbol'] exists, it will be mapped from gene symbol to a unique Ensembl ID.

  • mode ({"knockout", "overexpress"}, default "knockout") – Perturbation mode. "knockout" sets expression to 0; "overexpress" sets expression to either value or max(gene)*multiplier.

  • value (float or None, default None) – Fixed value for mode="overexpress". If provided, overrides multiplier.

  • multiplier (float or None, default 2) – Used for mode="overexpress" when value is None.

  • target_obs_names (list[str] or None, default None) – Cells to perturb by adata.obs_names. Takes precedence over filter_by.

  • filter_by (dict[str, str] or None, default None) – Select cells by matching adata.obs fields (AND logic), e.g. {"slice": "A", "cell_type": "B"}.

Returns:

-perturbed_adata (AnnData)

A copy of adata with modified .X.

-perturbed_cells (Index)

The obs_names of perturbed cells.

Raises:

ValueError – If no cells are selected, a gene cannot be found/mapped, or overexpression has neither value nor multiplier.