torchcell.datamodels.schema.CultureEnvironment

class CultureEnvironment(*, provenance_gaps: list[~torchcell.verification.sourced.ProvenanceGap] = <factory>, media: ~torchcell.datamodels.schema.Media, temperature: ~torchcell.datamodels.schema.Temperature | None = None, perturbations: list[~torchcell.datamodels.schema.SmallMoleculePerturbation | ~torchcell.datamodels.schema.EnvironmentPhysicalPerturbation | ~torchcell.datamodels.schema.BiologicPerturbation | ~torchcell.datamodels.schema.PhagePerturbation | ~torchcell.datamodels.schema.PhysicalExposurePerturbation] = <factory>, aerobicity: str | None = 'aerobic', duration_hours: float | None = None, duration_generations: float | None = None, dilution_rate_per_hour: float | None = None, growth_phase: ~torchcell.datamodels.schema.CultureGrowthPhase | None = None, culture_format: ~torchcell.datamodels.schema.CultureFormat | None = None, pre_culture: ~torchcell.datamodels.schema.PreCulture | None = None, auxotroph_supplements: list[~torchcell.datamodels.schema.MediaComponent] | None = None)[source]

Bases: Environment

An Environment that also states its culture protocol (#507 point 8).

Same medium, temperature, perturbations, oxygen regime and duration as the base class (so the medium-level cross-dataset aggregate is unchanged: media is the same field holding the same Media), plus three optional, gappable slots:

  • culture_format: vessel, working volume, shaking, inoculum, endpoint rule.

  • pre_culture: the step before treatment, including what a SIGNED generation count means (Hillenmeyer -5gen: from the freezer; 5gen: after a YPD log-phase pre-culture). duration_generations always holds the magnitude.

  • auxotroph_supplements: nutrients added to the base medium to complement the strain background’s auxotrophies (His/Leu/Ura/Met for a BY strain on a minimal medium). They sit beside media rather than inside it, so the base medium stays the shared, joinable entity and the strain-specific addition is explicit.

None means not stated; a ProvenanceGap on the field says why. A separate class (not fields on Environment) because Environment is in the schema closure of every served dataset and a new field there would mark every built store stale; the chemogenomic experiment classes declare this type explicitly, so pydantic serializes these fields.

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

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