torchcell.datamodels.schema.CrisprDeletionPerturbation
- class CrisprDeletionPerturbation(*, systematic_gene_name: str, perturbed_gene_name: str, gene_namespace: Literal['scerevisiae_s288c_sgd_systematic', 'scerevisiae_cenpk113_7d_locus_tag', 'scerevisiae_peter2018_pangenome_orf', 'ecoli_k12_mg1655_bnumber', 'ecoli_k12_bw25113_locus_tag', 'pputida_kt2440_locus_tag', 'ecoli_b_rel606_locus_tag', 'ecoli_k12_w3110_refseq_locus_tag'] = 'scerevisiae_s288c_sgd_systematic', identifier_mapping: DerivedIdentifierMapping | None = None, provenance: str = 'engineered', state: str = 'absent', mechanism_so_id: str = 'SO:0000159', mechanism_so_name: str = 'deletion', description: str = 'Gene deletion via an active Cas nuclease cut + homology-donor repair', perturbation_type: Literal['crispr_deletion'] = 'crispr_deletion', deletion_type: str = 'crispr', crispr: CrisprConstruct, donor_sequence: str | None = None)[source]
Bases:
DeletionPerturbation,ModelStrictGene deletion via an ACTIVE Cas nuclease cut repaired from a homology donor.
Model-by-state: the OUTCOME is an absent gene, so this is a THIRD deletion MECHANISM beside
KanMxDeletion/NatMxDeletion(which differ from each other on exactly this mechanism axis), NOT a new kind of perturbation. It inherits the AXIS-1state="absent"and SOdeletionmechanism, soissubclass(_, DeletionPerturbation)still catches every knockout; it additionally CARRIES the guide (the known material we introduced) via the sharedcrisprconstruct – unlike a plain deletion, which would discard it.Motivating case – Lian 2019 MAGIC CRISPRd (
SaCas9): the releasedSequencecolumn is the guide spacer + HR donor concatenated; a loader splits it intocrispr.guide_sequenceanddonor_sequence. NOTE on epistemics: a pooled-library screen DESIGNS the deletion but does not per-strain verify it – that designed<->realized uncertainty is orthogonal to this leaf and handled downstream (conversion / a future certainty axis), not asserted here.- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'frozen': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].