torchcell.datamodels.schema.CrisprConstruct

class CrisprConstruct(*, effector: str, guide_sequence: str | None = None, n_guides: int | None = None, library_pool: str | None = None, effector_plasmid_ref: ArtifactRef | None = None)[source]

Bases: ModelStrict

The engineered CRISPR machinery introduced to perturb a gene – a first-class MATERIAL ENTITY (the guide RNA + Cas effector we actually put in the cell).

Composed (field crispr) onto every CRISPR perturbation leaf so the guide payload is defined ONCE and shared across two axes: an ACTIVE-Cas cut that deletes a gene (CrisprDeletionPerturbation on the presence/absence axis) and a DEAD-Cas guide-directed effector that modulates expression (CrisprActivationPerturbation / CrisprInterferencePerturbation on the expression axis). The CRISPR tool is thus orthogonal to the outcome axis – same guide-directed machinery, different consequence set by the effector.

effector is the Cas fusion (sourced, never guessed; e.g. SaCas9, dSpCas9-RD1152, dLbCas12a-VP, dCas9-Mxi1). guide_sequence is the short spacer INLINED as the perturbation identity; it is nullable so a screen that identifies only target genes (Mormino: spacers live upstream in the source library) can scaffold-and-defer. effector_plasmid_ref is an off-graph ArtifactRef left None today (“field now, plasmid later”) so upgrading to full-plasmid / SBOL capture is a NON-breaking extension – the record shape does not change when fidelity is upgraded. Design: [[plan.torchcell-crispr-expression-perturbation.2026.07.12]].

model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'frozen': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].