Skip to content

Multiple Events

Create one DepositionEvent per canonical nuclide ID, such as cs_137 and sr_90, and keep each event's integrated air activity and wet deposition as unit-bearing quantities. The public engine runs every event independently, aligns each trajectory to the absolute output dates, superposes compatible trajectories, and preserves per-event detail in event_contributions:

from datetime import date

import astropy.units as u
import numpy as np

from ecosys import EcosysEngine
from ecosys.domain.events import DepositionEvent
from ecosys.domain.populations import PopulationCohorts
from ecosys.domain.request import SimulationRequest

events = tuple(
    DepositionEvent(
        nuclide_id=nuclide_id,
        date=np.datetime64(event_date),
        integrated_air_activity=1 * u.Bq * u.s / u.m**3,
        wet_ground_deposition=1 * u.Bq / u.m**2,
        rainfall=0 * u.mm,
    )
    for nuclide_id, event_date in (("cs_137", "2001-06-01"), ("sr_90", "2001-07-01"))
)
population = PopulationCohorts(
    initial_age=np.array([30]) * u.year,
    population=np.array([1]) * u.dimensionless_unscaled,
)
request = SimulationRequest(
    events,
    np.array([0, 30, 365]) * u.day,
    population,
    output_start_date=date(2001, 6, 1),
)
result = EcosysEngine().run(request)

len(result.event_contributions)      # one aligned contribution per event
result.per_capita.interval           # superposed batch + time + cohort dose