Skip to content

Parameters

Parameter classes.

AssayParams

Bases: BaseModel

Parameters for assay generation.

Parameters:

Name Type Description Default
baseline float

Baseline reading value

1.0
degrade float

Rate at which sample responses decrease per day after first day (0..1)

0.05
delay int

Maximum number of days between specimen collection and assay

5
mutant float

Mutant reading value (must be positive)

5.0
reading_noise float

Noise level for readings (must be positive)

0.2
plate_size int

Size of assay plate (must be positive)

4
image_noise int

Plate image noise (grayscale 0-255)

32
p_duplicate_assay float

Probably that an assay is repeated

0.05
Source code in src/snailz/parameters.py
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
class AssayParams(BaseModel):
    """Parameters for assay generation."""

    baseline: float = Field(default=1.0, ge=0.0, description="Baseline reading value")
    degrade: float = Field(
        default=0.05,
        ge=0.0,
        le=1.0,
        description="Rate at which sample responses decrease per day after first day (0..1)",
    )
    delay: int = Field(
        default=5,
        gt=0,
        description="Maximum number of days between specimen collection and assay",
    )
    mutant: float = Field(
        default=5.0, gt=0.0, description="Mutant reading value (must be positive)"
    )
    reading_noise: float = Field(
        default=0.2, ge=0.0, description="Noise level for readings (must be positive)"
    )
    plate_size: int = Field(
        default=DEFAULT_PLATE_SIZE,
        gt=0,
        description="Size of assay plate (must be positive)",
    )
    image_noise: int = Field(
        default=32,
        ge=0,
        le=255,
        description="Plate image noise (grayscale 0-255)",
    )
    p_duplicate_assay: float = Field(
        default=0.05, ge=0, description="Probably that an assay is repeated"
    )

    model_config = {"extra": "forbid"}

    @model_validator(mode="after")
    def validate_fields(self):
        """Validate requirements on fields."""
        if self.mutant < self.baseline:
            raise ValueError("mutant value must be greater than baseline")
        return self

validate_fields()

Validate requirements on fields.

Source code in src/snailz/parameters.py
59
60
61
62
63
64
@model_validator(mode="after")
def validate_fields(self):
    """Validate requirements on fields."""
    if self.mutant < self.baseline:
        raise ValueError("mutant value must be greater than baseline")
    return self

MachineParams

Bases: BaseModel

Parameters for machine generation.

Parameters:

Name Type Description Default
number int

Number of machines

5
variation float

Camera variation

0.15
Source code in src/snailz/parameters.py
67
68
69
70
71
72
73
class MachineParams(BaseModel):
    """Parameters for machine generation."""

    number: int = Field(default=5, gt=0, description="Number of machines")
    variation: float = Field(default=0.15, ge=0, description="Camera variation")

    model_config = {"extra": "forbid"}

PersonParams

Bases: BaseModel

Parameters for people generation.

Parameters:

Name Type Description Default
locale str

Locale for names

'et_EE'
number int

Number of people

5
Source code in src/snailz/parameters.py
76
77
78
79
80
81
82
83
84
85
86
87
88
89
class PersonParams(BaseModel):
    """Parameters for people generation."""

    locale: str = Field(default=DEFAULT_LOCALE, description="Locale for names")
    number: int = Field(default=5, gt=0, description="Number of people")

    model_config = {"extra": "forbid"}

    @field_validator("locale")
    def validate_fields(cls, v):
        """Validate that the locale is available in faker."""
        if v not in faker.config.AVAILABLE_LOCALES:
            raise ValueError(f"Unknown locale {v}")
        return v

validate_fields(v)

Validate that the locale is available in faker.

Source code in src/snailz/parameters.py
84
85
86
87
88
89
@field_validator("locale")
def validate_fields(cls, v):
    """Validate that the locale is available in faker."""
    if v not in faker.config.AVAILABLE_LOCALES:
        raise ValueError(f"Unknown locale {v}")
    return v

SpecimenParams

Bases: BaseModel

Parameters for specimen generation.

Parameters:

Name Type Description Default
length int

Length of specimen genomes (must be positive)

20
start_date date

Start date for specimen collection

datetime.date(2024, 3, 1)
max_mass float

Maximum mass for specimens (must be positive)

10.0
mut_mass_scale float

Scaling factor for mutant snail mass

2.0
num_mutations int

Number of mutations in specimens (must be between 0 and length)

5
spacing float

Inter-specimen spacing

3.75
daily_growth float

Mass increase per day

0.01
p_missing_location float

Probability that location is missing

0.05
Source code in src/snailz/parameters.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
class SpecimenParams(BaseModel):
    """Parameters for specimen generation."""

    length: int = Field(
        default=20, gt=0, description="Length of specimen genomes (must be positive)"
    )
    start_date: date = Field(
        default=DEFAULT_START_DATE,
        description="Start date for specimen collection",
    )
    max_mass: float = Field(
        default=10.0, gt=0, description="Maximum mass for specimens (must be positive)"
    )
    mut_mass_scale: float = Field(
        default=2.0, gt=0, description="Scaling factor for mutant snail mass"
    )
    num_mutations: int = Field(
        default=5,
        ge=0,
        description="Number of mutations in specimens (must be between 0 and length)",
    )
    spacing: float = Field(
        default=utils.DEFAULT_SURVEY_SIZE / 4.0,
        ge=0,
        description="Inter-specimen spacing",
    )
    daily_growth: float = Field(
        default=0.01,
        ge=0,
        description="Mass increase per day",
    )
    p_missing_location: float = Field(
        default=0.05, ge=0, description="Probability that location is missing"
    )

    model_config = {"extra": "forbid"}

SurveyParams

Bases: BaseModel

Parameters for survey generation.

Parameters:

Name Type Description Default
number int

Number of surveys

3
size int

Survey size

15
start_date date

Start date for specimen collection

datetime.date(2024, 3, 1)
max_interval int

Maximum interval between samples

7
Source code in src/snailz/parameters.py
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
class SurveyParams(BaseModel):
    """Parameters for survey generation."""

    number: int = Field(default=3, gt=0, description="Number of surveys")
    size: int = Field(
        default=utils.DEFAULT_SURVEY_SIZE, gt=0, description="Survey size"
    )
    start_date: date = Field(
        default=DEFAULT_START_DATE,
        description="Start date for specimen collection",
    )
    max_interval: int = Field(
        gt=0, default=7, description="Maximum interval between samples"
    )

    model_config = {"extra": "forbid"}

ScenarioParams

Bases: BaseModel

Represent all parameters combined.

Parameters:

Name Type Description Default
seed int

RNG seed

7493418
assay AssayParams

parameters for assay generation

AssayParams(baseline=1.0, degrade=0.05, delay=5, mutant=5.0, reading_noise=0.2, plate_size=4, image_noise=32, p_duplicate_assay=0.05)
machine MachineParams

parameters for machine generation

MachineParams(number=5, variation=0.15)
person PersonParams

parameters for people generation

PersonParams(locale='et_EE', number=5)
specimen SpecimenParams

parameters for specimen generation

SpecimenParams(length=20, start_date=datetime.date(2024, 3, 1), max_mass=10.0, mut_mass_scale=2.0, num_mutations=5, spacing=3.75, daily_growth=0.01, p_missing_location=0.05)
survey SurveyParams

parameters for survey generation

SurveyParams(number=3, size=15, start_date=datetime.date(2024, 3, 1), max_interval=7)
Source code in src/snailz/parameters.py
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
class ScenarioParams(BaseModel):
    """Represent all parameters combined."""

    seed: int = Field(default=7493418, ge=0, description="RNG seed")
    assay: AssayParams = Field(
        default=AssayParams(), description="parameters for assay generation"
    )
    machine: MachineParams = Field(
        default=MachineParams(), description="parameters for machine generation"
    )
    person: PersonParams = Field(
        default=PersonParams(), description="parameters for people generation"
    )
    specimen: SpecimenParams = Field(
        default=SpecimenParams(),
        description="parameters for specimen generation",
    )
    survey: SurveyParams = Field(
        default=SurveyParams(), description="parameters for survey generation"
    )

    model_config = {"extra": "forbid"}