Skip to content

Partner Tracing

name: str

Name of feature in the params file. Also used to name the attribute in Agent

update_agent(self, model)

Update the agent for this feature for a time step. Called once per time step in TITAN.update_all_agents. Agent level updates are done after population level updates. Called on only features that are enabled per the params.

If the agent is was diagnosed last time step, trace their partners. If the agent is traced but not diagnosed, stochastically diagnose. If the agents tracking has expired, mark them as inactive.

Parameters:

Name Type Description Default
model model.TITAN

the instance of TITAN currently being run

required
Source code in titan/features/partner_tracing.py
def update_agent(self, model: "model.TITAN"):
    """
    Update the agent for this feature for a time step.  Called once per time step in `TITAN.update_all_agents`. Agent level updates are done after population level updates.   Called on only features that are enabled per the params.

    If the agent is was diagnosed last time step, trace their partners. If the agent is traced but not diagnosed, stochastically diagnose.  If the agents tracking has expired, mark them as inactive.

    args:
        model: the instance of TITAN currently being run
    """
    params = self.agent.location.params.partner_tracing

    if model.time < params.start_time or model.time > params.stop_time:
        return

    agent_exposure = getattr(self.agent, params.exposure)

    if agent_exposure.active:
        # was this agent diagnosed with the target exposure last time step
        if agent_exposure.dx and agent_exposure.dx_time == model.time - 1:
            for ptnr in self.agent.get_partners(params.bond_type):
                partner_exposure = getattr(ptnr, params.exposure)
                if (
                    not partner_exposure.dx
                    and model.run_random.random() < params.prob
                ):
                    ptnr.partner_tracing.active = True  # type: ignore[attr-defined]
                    ptnr.partner_tracing.time = model.time  # type: ignore[attr-defined]

        # second chance at diagnosis if traced
        if (
            self.active
            and self.time < model.time
            and not agent_exposure.dx
            and model.run_random.random() < params.dx_prob
        ):
            agent_exposure.diagnose(model)

    # stop tracing of this agent if time
    if self.active and model.time >= self.time + params.trace_duration:
        self.active = False
        self.time = None