SwissTPH / openmalaria

A simulator of malaria epidemiology and control
GNU General Public License v2.0
75 stars 30 forks source link

Add elimination model: track imported, introduced and indigenous infections and corresponding new outputs #384

Closed acavelan closed 2 months ago

acavelan commented 4 months ago

This pull request adds work on elimination.

Infections now have an origin type which can be either imported, introduced or indigenous.

The code has been updated to track introduced and indigenous infections separately in the Host, WithinHost and InfectionIncidence model.

The VectorModel has also been updated to track the population of mosquitoes infected from an imported infection and mosquitoes infected from an introduced or indigenous infection separetly.

The new equations are detailed in the attached document:OpenMalariaElimination.pdf

This pull request adds Imported, Introduced and Indigenous for the following output measures:

The corresponding new output numbers are defined as follows: Imported: +1000, Introduced: +2000 and Indigenous: +3000

For example nPatent (output measure number 3) can now be tracked as four separate values:

Tracking is done by adding the corresponding monitoring options:

            <option name="nHost"/>          <!-- id 0 -->
            <option name="nInfect"/>        <!-- id 1 -->
            <option name="nInfect_Imported"/>        <!-- id 1001 -->
            <option name="nInfect_Introduced"/>        <!-- id 2001 -->
            <option name="nInfect_Indigenous"/>        <!-- id 3001 -->
            <option name="nPatent"/>        <!-- id 3 -->
            <option name="nPatent_Imported"/>        <!-- id 1003 -->
            <option name="nPatent_Introduced"/>        <!-- id 2003 -->
            <option name="nPatent_Indigenous"/>        <!-- id 3003 -->
            <option name="totalInfs"/>      <!-- id 6 -->
            <option name="totalInfs_Imported"/>      <!-- id 1006 -->
            <option name="totalInfs_Introduced"/>      <!-- id 2006 -->
            <option name="totalInfs_Indigenous"/>      <!-- id 3006 -->
            <option name="totalPatentInf"/> <!-- id 8 -->
            <option name="totalPatentInf_Imported"/> <!-- id 1008 -->
            <option name="totalPatentInf_Introduced"/> <!-- id 2008 -->
            <option name="totalPatentInf_Indigenous"/> <!-- id 3008 -->
            <option name="nUncomp"/>        <!-- id 14 -->
            <option name="nUncomp_Imported"/>        <!-- id 1014 -->
            <option name="nUncomp_Introduced"/>        <!-- id 2014 -->
            <option name="nUncomp_Indigenous"/>        <!-- id 3014 -->

Example: Prevalence Clinical Incidence

The simulation in this example lasts 20 years, with a constant importation rate of 1 infection per person per year and a GVI intervention is deployed after 5 years.

Regarding nPatent (and therefore nUncomp), the rule is he following: if a human has an indigenous infection, the human is classified as an indigenous case. If a human does have an indigenous infection but has an introduced infection, the human is classified as an introduced case. If a human only has imported infections, the human is classified as an imported case.

Note that these changes have no impact and predictions will be identical to previous versions as long as there is no imported infection. If imported infections are in place then the model will output slightly different results because of an additional rng call in the code.

The expected results of three tests (which use imported infections) had to be updated because of this.