Skip to content

Quick start

1. Define a field

import cropmix as cm

field = cm.Field.rectangular(10, 10, spacing=1.0)

The field does not have to be rectangular; arbitrary coordinates are the canonical representation.

2. Define varieties

susc = cm.Variety(
    name="SUSC",
    transmission=cm.HostTransmission(15.31, 1.34),
    plant=cm.PlantParameters(1/30),
    yield_model=cm.YieldParameters(31, 3.1),
)

res = cm.Variety(
    name="RES",
    transmission=cm.HostTransmission(4.84, 0.42),
    plant=cm.PlantParameters(1/30),
    yield_model=cm.YieldParameters(25, 2.1),
)

3. Define vector and pathogen biology

system = cm.CropMixSystem(
    varieties=(susc, res),
    vector=cm.VectorParameters(
        mortality_rate=0.19,
        dispersal_rate=0.45,
    ),
    pathogen=cm.PathogenParameters(
        vector_clearance_rate=19.37,
        transmission_mode="SPT",
    ),
    kernel=cm.ExponentialKernel(scale=1.0),
)

4. Give Cropmix a planting design

design = cm.MixtureDesign.random(
    field,
    {"SUSC": 50, "RES": 50},
    seed=1,
)

A MixtureDesign is simply one variety label per planting coordinate. The same object is used for user-supplied and optimizer-generated designs.

5. Define the epidemic scenario

scenario = cm.Scenario(
    duration=360,
    vectors_per_plant=10,
    inoculum=cm.Inoculum.random(1),
)

6. Simulate

result = cm.simulate_mixture(
    design,
    system,
    scenario,
    n_runs=100,
    seed=42,
)

print(result.summary())

With cropmix[viz] installed:

result.plot_incidence(by_variety=True)
result.plot_final_infection_probability()