diff --git a/.github/workflows/mkdocs_build.yml b/.github/workflows/mkdocs_build.yml index b1f01429..69ff7750 100644 --- a/.github/workflows/mkdocs_build.yml +++ b/.github/workflows/mkdocs_build.yml @@ -22,7 +22,7 @@ jobs: - name: Install packages run: | python3 -m pip install --upgrade pip - python3 -m pip install .[docs] --extra-index-url=https://packages.idmod.org/api/pypi/pypi-production/simple + python3 -m pip install .[docs] - name: Build static files run: | mkdocs build diff --git a/.github/workflows/mkdocs_deploy.yml b/.github/workflows/mkdocs_deploy.yml index a261cbcf..b3a699c8 100644 --- a/.github/workflows/mkdocs_deploy.yml +++ b/.github/workflows/mkdocs_deploy.yml @@ -22,7 +22,7 @@ jobs: - name: Install packages run: | python3 -m pip install --upgrade pip - python3 -m pip install .[docs] --extra-index-url=https://packages.idmod.org/api/pypi/pypi-production/simple + python3 -m pip install .[docs] - name: Build static files run: | mkdocs build -d site diff --git a/README.md b/README.md index 34ee11c1..04b1c7ef 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ See documentation at https://emod-hub.github.io/EMOD-Generic-Scripts/ for additi | Directory | Description | | --- | --- | -| env_Alma9
env_Amazon2023
env_Debian13
env_Fedora42
env_Rocky9
env_Ubuntu24 | Definition files for singularity containers with various operating systems. Produces the the EMOD executable, schema, and reporters; creates an environment for running EMOD on COMPS with the python packages available to the embedded python interpreter. All files remain on COMPS and are provided to the various workflows as Asset Collection IDs. | +| env_Alma10
env_Amazon2023
env_Debian13
env_Fedora42
env_Rocky10
env_Ubuntu24 | Definition files for Apptainer containers with various operating systems. Produces the the EMOD executable and schema file; creates an environment for running EMOD on COMPS with the python packages available to the embedded python interpreter. All files remain on COMPS and are provided to the various workflows as Asset Collection IDs. | | local_python | Contains additional python scripts with helper functions common to all of the workflows. | | model_covariance01 | [Demonstration simulations for heterogeneity in individual behavior.](https://docs.idmod.org/projects/emod-generic-scripts/en/latest/examples/model_covariance01.html) | | model_covid01 | Baseline simulations for SARS-CoV-2 in EMOD. Collab with MvG. | @@ -36,7 +36,7 @@ To get started: 2. Install requirements: ``` - pip install . --index-url=https://packages.idmod.org/api/pypi/pypi-production/simple + pip install . ``` 3. Run an experiment (requires COMPS credentials): @@ -62,7 +62,8 @@ To build the documentation locally, do the following: 2. Navigate to the root directory of the repo and enter the following ``` - pip install .[docs] --index-url=https://packages.idmod.org/api/pypi/pypi-production/simple + pip install .[docs] + mkdocs build ``` --------------------- diff --git a/docker/emod_env/Dockerfile b/docker/emod_env/Dockerfile index b902acb3..b2bb276a 100644 --- a/docker/emod_env/Dockerfile +++ b/docker/emod_env/Dockerfile @@ -1,19 +1,16 @@ FROM ubuntu:24.04 # RUN apt-get update -RUN apt-get -y install software-properties-common -RUN apt-get update -RUN add-apt-repository universe -RUN apt-get -y upgrade +RUN apt-get upgrade -y # -RUN apt-get -y install python3 -RUN apt-get -y install python3-pip -RUN apt-get -y install python3-venv -RUN apt-get -y install mpich +RUN apt-get install -y python3 +RUN apt-get install -y python3-pip +RUN apt-get install -y python3-venv +RUN apt-get install -y mpich # RUN apt-get clean # RUN python3 -m venv py_env # -RUN py_env/bin/pip3 install pip --upgrade -RUN py_env/bin/pip3 install emod-api==2.0.1 --extra-index-url https://packages.idmod.org/api/pypi/pypi-production/simple +RUN py_env/bin/pip3 install pip --upgrade +RUN py_env/bin/pip3 install emod-api~=3.1 diff --git a/docker/emod_exe/Dockerfile b/docker/emod_exe/Dockerfile index fcfe85ed..a08c43a0 100644 --- a/docker/emod_exe/Dockerfile +++ b/docker/emod_exe/Dockerfile @@ -1,19 +1,16 @@ FROM ubuntu:24.04 # RUN apt-get update -RUN apt-get -y install software-properties-common -RUN apt-get update -RUN add-apt-repository universe -RUN apt-get -y upgrade +RUN apt-get upgrade -y # -RUN apt-get -y install python3-dev -RUN apt-get -y install libmpich-dev -RUN apt-get -y install libsqlite3-dev -RUN apt-get -y install git -RUN apt-get -y install libc-dev -RUN apt-get -y install g++ +RUN apt-get install -y python3-dev +RUN apt-get install -y libmpich-dev +RUN apt-get install -y libsqlite3-dev +RUN apt-get install -y git +RUN apt-get install -y libc-dev +RUN apt-get install -y g++ # -RUN apt-get -y install scons +RUN apt-get install -y scons # RUN apt-get clean # diff --git a/docker/emodpy/Dockerfile b/docker/emodpy/Dockerfile index 6b866c78..1ba0899b 100644 --- a/docker/emodpy/Dockerfile +++ b/docker/emodpy/Dockerfile @@ -13,5 +13,5 @@ ENV PY_VENV=/py_env RUN python3 -m venv $PY_VENV ENV PATH="$PY_VENV/bin:$PATH" # -RUN pip3 install pip --upgrade -RUN pip3 install emodpy==2.1.13 --extra-index-url https://packages.idmod.org/api/pypi/pypi-production/simple +RUN pip3 install pip --upgrade +RUN pip3 install emodpy~=3.1 diff --git a/docs/bib.md b/docs/bib.md index b3a7df4c..75325248 100644 --- a/docs/bib.md +++ b/docs/bib.md @@ -1,8 +1,8 @@ [emod-api]: https://emod-hub.github.io/emod-api/ -[emod-generic]: https://docs.idmod.org/projects/emod-generic/en/latest/parameter-overview.html +[emod-generic]: https://emod-hub.github.io/EMOD-Generic/ [emodpy]: https://emod-hub.github.io/emodpy/ -[emodpy-hiv]: https://docs.idmod.org/projects/emodpy-hiv/ -[emodpy-malaria]: https://docs.idmod.org/projects/emodpy-malaria/ +[emodpy-hiv]: https://emod-hub.github.io/emodpy-hiv/ +[emodpy-malaria]: https://emod-hub.github.io/emodpy-malaria/ [idmod]: https://www.idmod.org/ [idmtools]: https://docs.idmod.org/projects/idmtools/ [idmtools_cli]: https://docs.idmod.org/projects/idmtools/en/latest/cli/cli_index.html diff --git a/docs/getting_started.md b/docs/getting_started.md index df1494a9..5c04fab7 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -4,7 +4,7 @@ 2. Install requirements via `pip` using the IDM artifactory: - `pip install . --extra-index-url=https://packages.idmod.org/api/pypi/pypi-production/simple` + `pip install .` 3. Run an experiment: diff --git a/docs/version.py b/docs/version.py deleted file mode 100644 index 6a9e463b..00000000 --- a/docs/version.py +++ /dev/null @@ -1,7 +0,0 @@ -""" -Version information. -""" - -__all__ = ["__version__"] - -__version__ = "0.1.1" diff --git a/environments/Alma10/EMOD_ENV.id b/environments/Alma10/EMOD_ENV.id new file mode 100644 index 00000000..f4d16602 --- /dev/null +++ b/environments/Alma10/EMOD_ENV.id @@ -0,0 +1 @@ +192c46ea-a824-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Alma10/EMOD_ENV_Alma10.def b/environments/Alma10/EMOD_ENV_Alma10.def new file mode 100644 index 00000000..b61c1021 --- /dev/null +++ b/environments/Alma10/EMOD_ENV_Alma10.def @@ -0,0 +1,32 @@ +Bootstrap: localimage +From: Assets/EMOD_OS_Alma10.sif + +%post + dnf upgrade -y + + dnf install -y python + dnf install -y python-pip + dnf install -y mpich + + dnf clean all + + python3 -m venv py_env + . py_env/bin/activate + + pip install pip --upgrade + pip install emod-api~=3.1 + +%runscript + + +%environment + + +%test + + +%labels + Author kfrey@idmod.org + +%help + Minimal container for running EMOD using emod-api for file support. diff --git a/environments/Alma10/EMOD_EXE.id b/environments/Alma10/EMOD_EXE.id new file mode 100644 index 00000000..24a06fbc --- /dev/null +++ b/environments/Alma10/EMOD_EXE.id @@ -0,0 +1 @@ +b6f4307b-a824-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Alma9/EMOD_EXE_Alma9.def b/environments/Alma10/EMOD_EXE_Alma10.def similarity index 72% rename from environments/Alma9/EMOD_EXE_Alma9.def rename to environments/Alma10/EMOD_EXE_Alma10.def index 6ffd56a6..98953a38 100644 --- a/environments/Alma9/EMOD_EXE_Alma9.def +++ b/environments/Alma10/EMOD_EXE_Alma10.def @@ -1,15 +1,14 @@ Bootstrap: localimage -From: Assets/EMOD_OS_Alma9.sif +From: Assets/EMOD_OS_Alma10.sif %post dnf upgrade -y - dnf install python-devel -y - dnf install mpich-devel -y - dnf install sqlite-devel -y - dnf install git -y - dnf install glibc-devel -y - dnf install gcc-c++ -y + dnf install -y python-devel + dnf install -y mpich-devel + dnf install -y git + dnf install -y glibc-devel + dnf install -y gcc-c++ dnf clean all @@ -50,4 +49,4 @@ From: Assets/EMOD_OS_Alma9.sif Author kfrey@idmod.org %help - Minimal container for building EMOD. \ No newline at end of file + Minimal container for building EMOD. diff --git a/environments/Alma10/EMOD_OS.id b/environments/Alma10/EMOD_OS.id new file mode 100644 index 00000000..ac3089ee --- /dev/null +++ b/environments/Alma10/EMOD_OS.id @@ -0,0 +1 @@ +ef5416f0-a724-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Alma9/EMOD_OS_Alma9.def b/environments/Alma10/EMOD_OS_Alma10.def similarity index 81% rename from environments/Alma9/EMOD_OS_Alma9.def rename to environments/Alma10/EMOD_OS_Alma10.def index b5627f1c..21531d47 100644 --- a/environments/Alma9/EMOD_OS_Alma9.def +++ b/environments/Alma10/EMOD_OS_Alma10.def @@ -1,5 +1,5 @@ Bootstrap: docker -From: almalinux:9.6 +From: almalinux:10.1 %post dnf clean all @@ -17,4 +17,4 @@ From: almalinux:9.6 Author kfrey@idmod.org %help - Minimal container. Creates an Asset on COMPS; avoids repeated pull from docker. \ No newline at end of file + Minimal container. Creates an Asset on COMPS; avoids repeated pull from docker. diff --git a/environments/Alma10/EMOD_SCHEMA.id b/environments/Alma10/EMOD_SCHEMA.id new file mode 100644 index 00000000..90bc75ef --- /dev/null +++ b/environments/Alma10/EMOD_SCHEMA.id @@ -0,0 +1 @@ +d2d30190-a824-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Alma9/make01_EMOD_OS.py b/environments/Alma10/make01_EMOD_OS.py similarity index 100% rename from environments/Alma9/make01_EMOD_OS.py rename to environments/Alma10/make01_EMOD_OS.py diff --git a/environments/Alma9/make02_EMOD_EXE.py b/environments/Alma10/make02_EMOD_EXE.py similarity index 100% rename from environments/Alma9/make02_EMOD_EXE.py rename to environments/Alma10/make02_EMOD_EXE.py diff --git a/environments/Alma9/make03_EMOD_ENV.py b/environments/Alma10/make03_EMOD_ENV.py similarity index 100% rename from environments/Alma9/make03_EMOD_ENV.py rename to environments/Alma10/make03_EMOD_ENV.py diff --git a/environments/Alma9/EMOD_ENV.id b/environments/Alma9/EMOD_ENV.id deleted file mode 100644 index 28d77a7e..00000000 --- a/environments/Alma9/EMOD_ENV.id +++ /dev/null @@ -1 +0,0 @@ -ab05547e-89a0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file diff --git a/environments/Alma9/EMOD_ENV_Alma9.def b/environments/Alma9/EMOD_ENV_Alma9.def deleted file mode 100644 index 9ac578b7..00000000 --- a/environments/Alma9/EMOD_ENV_Alma9.def +++ /dev/null @@ -1,32 +0,0 @@ -Bootstrap: localimage -From: Assets/EMOD_OS_Alma9.sif - -%post - dnf upgrade -y - - dnf -y install python - dnf -y install python-pip - dnf -y install mpich - - dnf clean all - - python3 -m venv py_env - . py_env/bin/activate - - pip install pip --upgrade - pip install emod-api==2.0.26 --extra-index-url https://packages.idmod.org/api/pypi/pypi-production/simple - -%runscript - - -%environment - - -%test - - -%labels - Author kfrey@idmod.org - -%help - Minimal container for running EMOD using emod-api for file support. \ No newline at end of file diff --git a/environments/Alma9/EMOD_EXE.id b/environments/Alma9/EMOD_EXE.id deleted file mode 100644 index 27120e83..00000000 --- a/environments/Alma9/EMOD_EXE.id +++ /dev/null @@ -1 +0,0 @@ -4a089def-82a0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file diff --git a/environments/Alma9/EMOD_OS.id b/environments/Alma9/EMOD_OS.id deleted file mode 100644 index 5b2d9e54..00000000 --- a/environments/Alma9/EMOD_OS.id +++ /dev/null @@ -1 +0,0 @@ -b473f12f-82a0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file diff --git a/environments/Alma9/EMOD_SCHEMA.id b/environments/Alma9/EMOD_SCHEMA.id deleted file mode 100644 index 17f64985..00000000 --- a/environments/Alma9/EMOD_SCHEMA.id +++ /dev/null @@ -1 +0,0 @@ -280b3204-83a0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file diff --git a/environments/Amazon2023/EMOD_ENV.id b/environments/Amazon2023/EMOD_ENV.id index f067992e..4faa142f 100644 --- a/environments/Amazon2023/EMOD_ENV.id +++ b/environments/Amazon2023/EMOD_ENV.id @@ -1 +1 @@ -cc36c13e-89a0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file +e53bed08-ab24-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Amazon2023/EMOD_ENV_Amazon2023.def b/environments/Amazon2023/EMOD_ENV_Amazon2023.def index d81f6c82..5d2fdcc6 100644 --- a/environments/Amazon2023/EMOD_ENV_Amazon2023.def +++ b/environments/Amazon2023/EMOD_ENV_Amazon2023.def @@ -4,17 +4,17 @@ From: Assets/EMOD_OS_Amazon2023.sif %post dnf upgrade -y - dnf -y install python - dnf -y install python-pip - dnf -y install mpich + dnf install -y python3.13 + dnf install -y python3.13-pip + dnf install -y mpich dnf clean all - python3 -m venv py_env + python3.13 -m venv py_env . py_env/bin/activate - pip install pip --upgrade - pip install emod-api==2.0.26 --extra-index-url https://packages.idmod.org/api/pypi/pypi-production/simple + pip install pip --upgrade + pip install emod-api~=3.1 %runscript @@ -29,4 +29,4 @@ From: Assets/EMOD_OS_Amazon2023.sif Author kfrey@idmod.org %help - Minimal container for running EMOD using emod-api for file support. \ No newline at end of file + Minimal container for running EMOD using emod-api for file support. diff --git a/environments/Amazon2023/EMOD_EXE.id b/environments/Amazon2023/EMOD_EXE.id index 88e029ef..7fb439e9 100644 --- a/environments/Amazon2023/EMOD_EXE.id +++ b/environments/Amazon2023/EMOD_EXE.id @@ -1 +1 @@ -b1eb93ae-84a0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file +9cb7f0bf-aa24-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Amazon2023/EMOD_EXE_Amazon2023.def b/environments/Amazon2023/EMOD_EXE_Amazon2023.def index 8fcd6c21..f38ae28e 100644 --- a/environments/Amazon2023/EMOD_EXE_Amazon2023.def +++ b/environments/Amazon2023/EMOD_EXE_Amazon2023.def @@ -4,26 +4,21 @@ From: Assets/EMOD_OS_Amazon2023.sif %post dnf upgrade -y - dnf install python-devel -y - dnf install mpich-devel -y - dnf install sqlite-devel -y - dnf install git -y - dnf install glibc-devel -y - dnf install gcc-c++ -y + dnf install -y python3.13-devel + dnf install -y python3.13-pip + dnf install -y mpich-devel + dnf install -y git + dnf install -y glibc-devel + dnf install -y gcc-c++ dnf clean all - curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py - python3 get-pip.py - rm get-pip.py - - python3 -m pip install pip --upgrade - python3 -m pip install scons + python3.13 -m pip install pip --upgrade + python3.13 -m pip install scons export USER=CalculonUser-EMOD export PATH=$PATH:/usr/lib64/mpich/bin - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/mpich/lib git clone https://github.com/EMOD-Hub/EMOD-Generic @@ -53,4 +48,4 @@ From: Assets/EMOD_OS_Amazon2023.sif Author kfrey@idmod.org %help - Minimal container for building EMOD. \ No newline at end of file + Minimal container for building EMOD. diff --git a/environments/Amazon2023/EMOD_OS.id b/environments/Amazon2023/EMOD_OS.id index 99694200..f3db1f2b 100644 --- a/environments/Amazon2023/EMOD_OS.id +++ b/environments/Amazon2023/EMOD_OS.id @@ -1 +1 @@ -106d5f01-84a0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file +74769f14-aa24-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Amazon2023/EMOD_OS_Amazon2023.def b/environments/Amazon2023/EMOD_OS_Amazon2023.def index 0a05fc41..9ec8e583 100644 --- a/environments/Amazon2023/EMOD_OS_Amazon2023.def +++ b/environments/Amazon2023/EMOD_OS_Amazon2023.def @@ -17,4 +17,4 @@ From: amazonlinux:2023 Author kfrey@idmod.org %help - Minimal container. Creates an Asset on COMPS; avoids repeated pull from docker. \ No newline at end of file + Minimal container. Creates an Asset on COMPS; avoids repeated pull from docker. diff --git a/environments/Amazon2023/EMOD_SCHEMA.id b/environments/Amazon2023/EMOD_SCHEMA.id index d1a70881..e2afb1eb 100644 --- a/environments/Amazon2023/EMOD_SCHEMA.id +++ b/environments/Amazon2023/EMOD_SCHEMA.id @@ -1 +1 @@ -f670dabc-84a0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file +a113c0d3-aa24-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Debian13/EMOD_ENV.id b/environments/Debian13/EMOD_ENV.id index d3131389..25cfc598 100644 --- a/environments/Debian13/EMOD_ENV.id +++ b/environments/Debian13/EMOD_ENV.id @@ -1 +1 @@ -9609789d-8df6-f011-aa29-b88303911bc1::Asset Collection \ No newline at end of file +55dff54e-ac24-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Debian13/EMOD_ENV_Debian13.def b/environments/Debian13/EMOD_ENV_Debian13.def index c11a8ca8..9d57076f 100644 --- a/environments/Debian13/EMOD_ENV_Debian13.def +++ b/environments/Debian13/EMOD_ENV_Debian13.def @@ -5,18 +5,18 @@ From: Assets/EMOD_OS_Debian13.sif apt-get update apt-get upgrade -y - apt-get install python3 -y - apt-get install python3-pip -y - apt-get install python3-venv -y - apt-get install mpich -y + apt-get install -y python3 + apt-get install -y python3-pip + apt-get install -y python3-venv + apt-get install -y mpich apt-get clean python3 -m venv py_env . py_env/bin/activate - pip3 install pip --upgrade - pip3 install emod-api==2.0.26 --extra-index-url https://packages.idmod.org/api/pypi/pypi-production/simple + pip3 install pip --upgrade + pip3 install emod-api~=3.1 %runscript @@ -31,4 +31,4 @@ From: Assets/EMOD_OS_Debian13.sif Author kfrey@idmod.org %help - Minimal container for running EMOD using emod-api for file support. \ No newline at end of file + Minimal container for running EMOD using emod-api for file support. diff --git a/environments/Debian13/EMOD_EXE.id b/environments/Debian13/EMOD_EXE.id index 93c9e76d..955f2477 100644 --- a/environments/Debian13/EMOD_EXE.id +++ b/environments/Debian13/EMOD_EXE.id @@ -1 +1 @@ -b076b695-8cf6-f011-aa29-b88303911bc1::Asset Collection \ No newline at end of file +280855d1-ab24-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Debian13/EMOD_EXE_Debian13.def b/environments/Debian13/EMOD_EXE_Debian13.def index acbb0bc6..43c35aae 100644 --- a/environments/Debian13/EMOD_EXE_Debian13.def +++ b/environments/Debian13/EMOD_EXE_Debian13.def @@ -5,14 +5,13 @@ From: Assets/EMOD_OS_Debian13.sif apt-get update apt-get upgrade -y - apt-get install python3-dev -y - apt-get install libmpich-dev -y - apt-get install libsqlite3-dev -y - apt-get install git -y - apt-get install libc-dev -y - apt-get install g++ -y + apt-get install -y python3-dev + apt-get install -y libmpich-dev + apt-get install -y git + apt-get install -y libc-dev + apt-get install -y g++ - apt-get install scons -y + apt-get install -y scons apt-get clean @@ -46,4 +45,4 @@ From: Assets/EMOD_OS_Debian13.sif Author kfrey@idmod.org %help - To infinity, and beyond. \ No newline at end of file + To infinity, and beyond. diff --git a/environments/Debian13/EMOD_OS.id b/environments/Debian13/EMOD_OS.id index 7310452a..cf501681 100644 --- a/environments/Debian13/EMOD_OS.id +++ b/environments/Debian13/EMOD_OS.id @@ -1 +1 @@ -baa837d3-8bf6-f011-aa29-b88303911bc1::Asset Collection \ No newline at end of file +a1e39b28-ab24-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Debian13/EMOD_OS_Debian13.def b/environments/Debian13/EMOD_OS_Debian13.def index e5b5e821..b4427192 100644 --- a/environments/Debian13/EMOD_OS_Debian13.def +++ b/environments/Debian13/EMOD_OS_Debian13.def @@ -1,5 +1,5 @@ Bootstrap: docker -From: debian:13.3 +From: debian:13.4 %post apt-get clean @@ -17,4 +17,4 @@ From: debian:13.3 Author kfrey@idmod.org %help - Minimal container. Creates an Asset on COMPS; avoids repeated pull from docker. \ No newline at end of file + Minimal container. Creates an Asset on COMPS; avoids repeated pull from docker. diff --git a/environments/Debian13/EMOD_SCHEMA.id b/environments/Debian13/EMOD_SCHEMA.id index b66c8b05..4dfb145b 100644 --- a/environments/Debian13/EMOD_SCHEMA.id +++ b/environments/Debian13/EMOD_SCHEMA.id @@ -1 +1 @@ -bd2b13a9-8cf6-f011-aa29-b88303911bc1::Asset Collection \ No newline at end of file +c2485aea-ab24-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Fedora42/EMOD_ENV.id b/environments/Fedora42/EMOD_ENV.id deleted file mode 100644 index a9832365..00000000 --- a/environments/Fedora42/EMOD_ENV.id +++ /dev/null @@ -1 +0,0 @@ -fff67313-8aa0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file diff --git a/environments/Fedora42/EMOD_ENV_Fedora42.def b/environments/Fedora42/EMOD_ENV_Fedora42.def deleted file mode 100644 index 4ed861e8..00000000 --- a/environments/Fedora42/EMOD_ENV_Fedora42.def +++ /dev/null @@ -1,32 +0,0 @@ -Bootstrap: localimage -From: Assets/EMOD_OS_Fedora42.sif - -%post - dnf upgrade -y - - dnf install python3 -y - dnf install python3-pip -y - dnf install mpich -y - - dnf clean all - - python3 -m venv py_env - . py_env/bin/activate - - pip3 install pip --upgrade - pip3 install emod-api==2.0.26 --extra-index-url https://packages.idmod.org/api/pypi/pypi-production/simple - -%runscript - - -%environment - - -%test - - -%labels - Author kfrey@idmod.org - -%help - Minimal container for running EMOD using emod-api for file support. \ No newline at end of file diff --git a/environments/Fedora42/EMOD_EXE.id b/environments/Fedora42/EMOD_EXE.id deleted file mode 100644 index 1943abef..00000000 --- a/environments/Fedora42/EMOD_EXE.id +++ /dev/null @@ -1 +0,0 @@ -c9a057d1-86a0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file diff --git a/environments/Fedora42/EMOD_OS.id b/environments/Fedora42/EMOD_OS.id deleted file mode 100644 index c6d8d381..00000000 --- a/environments/Fedora42/EMOD_OS.id +++ /dev/null @@ -1 +0,0 @@ -d3dda41f-86a0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file diff --git a/environments/Fedora42/EMOD_SCHEMA.id b/environments/Fedora42/EMOD_SCHEMA.id deleted file mode 100644 index 32964884..00000000 --- a/environments/Fedora42/EMOD_SCHEMA.id +++ /dev/null @@ -1 +0,0 @@ -cf2cd9e3-86a0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file diff --git a/environments/Fedora43/EMOD_ENV.id b/environments/Fedora43/EMOD_ENV.id new file mode 100644 index 00000000..2dc5f427 --- /dev/null +++ b/environments/Fedora43/EMOD_ENV.id @@ -0,0 +1 @@ +0bc06301-ae24-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Fedora43/EMOD_ENV_Fedora43.def b/environments/Fedora43/EMOD_ENV_Fedora43.def new file mode 100644 index 00000000..581fbfd9 --- /dev/null +++ b/environments/Fedora43/EMOD_ENV_Fedora43.def @@ -0,0 +1,32 @@ +Bootstrap: localimage +From: Assets/EMOD_OS_Fedora43.sif + +%post + dnf upgrade -y + + dnf install -y python3 + dnf install -y python3-pip + dnf install -y mpich + + dnf clean all + + python3 -m venv py_env + . py_env/bin/activate + + pip3 install pip --upgrade + pip3 install emod-api~=3.1 + +%runscript + + +%environment + + +%test + + +%labels + Author kfrey@idmod.org + +%help + Minimal container for running EMOD using emod-api for file support. diff --git a/environments/Fedora43/EMOD_EXE.id b/environments/Fedora43/EMOD_EXE.id new file mode 100644 index 00000000..507f5db5 --- /dev/null +++ b/environments/Fedora43/EMOD_EXE.id @@ -0,0 +1 @@ +b19415aa-ad24-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Fedora42/EMOD_EXE_Fedora42.def b/environments/Fedora43/EMOD_EXE_Fedora43.def similarity index 65% rename from environments/Fedora42/EMOD_EXE_Fedora42.def rename to environments/Fedora43/EMOD_EXE_Fedora43.def index 9d437ab7..7d5c2898 100644 --- a/environments/Fedora42/EMOD_EXE_Fedora42.def +++ b/environments/Fedora43/EMOD_EXE_Fedora43.def @@ -1,15 +1,14 @@ Bootstrap: localimage -From: Assets/EMOD_OS_Fedora42.sif +From: Assets/EMOD_OS_Fedora43.sif %post dnf upgrade -y - dnf install python-devel -y - dnf install mpich-devel -y - dnf install sqlite-devel -y - dnf install git -y - dnf install glibc-devel -y - dnf install gcc-c++ -y + dnf install -y python-devel + dnf install -y mpich-devel + dnf install -y git + dnf install -y glibc-devel + dnf install -y gcc-c++ dnf clean all @@ -26,7 +25,6 @@ From: Assets/EMOD_OS_Fedora42.sif git checkout Generic-Ongoing export PATH=$PATH:/usr/lib64/mpich/bin - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/mpich/lib scons --Release --jobs=4 --Disease=Generic @@ -49,4 +47,4 @@ From: Assets/EMOD_OS_Fedora42.sif Author kfrey@idmod.org %help - Minimal container for building EMOD. \ No newline at end of file + Minimal container for building EMOD. diff --git a/environments/Fedora43/EMOD_OS.id b/environments/Fedora43/EMOD_OS.id new file mode 100644 index 00000000..18d38caa --- /dev/null +++ b/environments/Fedora43/EMOD_OS.id @@ -0,0 +1 @@ +7bd1abd0-ac24-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Fedora42/EMOD_OS_Fedora42.def b/environments/Fedora43/EMOD_OS_Fedora43.def similarity index 83% rename from environments/Fedora42/EMOD_OS_Fedora42.def rename to environments/Fedora43/EMOD_OS_Fedora43.def index 4d80567f..02dd45d8 100644 --- a/environments/Fedora42/EMOD_OS_Fedora42.def +++ b/environments/Fedora43/EMOD_OS_Fedora43.def @@ -1,5 +1,5 @@ Bootstrap: docker -From: fedora:42 +From: fedora:43 %post dnf clean all @@ -17,4 +17,4 @@ From: fedora:42 Author kfrey@idmod.org %help - Minimal container. Creates an Asset on COMPS; avoids repeated pull from docker. \ No newline at end of file + Minimal container. Creates an Asset on COMPS; avoids repeated pull from docker. diff --git a/environments/Fedora43/EMOD_SCHEMA.id b/environments/Fedora43/EMOD_SCHEMA.id new file mode 100644 index 00000000..00c52917 --- /dev/null +++ b/environments/Fedora43/EMOD_SCHEMA.id @@ -0,0 +1 @@ +4ba325be-ad24-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Fedora42/make01_EMOD_OS.py b/environments/Fedora43/make01_EMOD_OS.py similarity index 100% rename from environments/Fedora42/make01_EMOD_OS.py rename to environments/Fedora43/make01_EMOD_OS.py diff --git a/environments/Fedora42/make02_EMOD_EXE.py b/environments/Fedora43/make02_EMOD_EXE.py similarity index 100% rename from environments/Fedora42/make02_EMOD_EXE.py rename to environments/Fedora43/make02_EMOD_EXE.py diff --git a/environments/Fedora42/make03_EMOD_ENV.py b/environments/Fedora43/make03_EMOD_ENV.py similarity index 100% rename from environments/Fedora42/make03_EMOD_ENV.py rename to environments/Fedora43/make03_EMOD_ENV.py diff --git a/environments/Rocky10/EMOD_ENV.id b/environments/Rocky10/EMOD_ENV.id new file mode 100644 index 00000000..2f123b43 --- /dev/null +++ b/environments/Rocky10/EMOD_ENV.id @@ -0,0 +1 @@ +8bb779f9-b024-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Rocky10/EMOD_ENV_Rocky10.def b/environments/Rocky10/EMOD_ENV_Rocky10.def new file mode 100644 index 00000000..9147b11a --- /dev/null +++ b/environments/Rocky10/EMOD_ENV_Rocky10.def @@ -0,0 +1,32 @@ +Bootstrap: localimage +From: Assets/EMOD_OS_Rocky10.sif + +%post + dnf upgrade -y + + dnf install -y python + dnf install -y python-pip + dnf install -y mpich + + dnf clean all + + python3 -m venv py_env + . py_env/bin/activate + + pip install pip --upgrade + pip install emod-api~=3.1 + +%runscript + + +%environment + + +%test + + +%labels + Author kfrey@idmod.org + +%help + Minimal container for running EMOD using emod-api for file support. diff --git a/environments/Rocky10/EMOD_EXE.id b/environments/Rocky10/EMOD_EXE.id new file mode 100644 index 00000000..1e258096 --- /dev/null +++ b/environments/Rocky10/EMOD_EXE.id @@ -0,0 +1 @@ +b116ed62-b024-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Rocky9/EMOD_EXE_Rocky9.def b/environments/Rocky10/EMOD_EXE_Rocky10.def similarity index 72% rename from environments/Rocky9/EMOD_EXE_Rocky9.def rename to environments/Rocky10/EMOD_EXE_Rocky10.def index 351f71e3..e7728fb7 100644 --- a/environments/Rocky9/EMOD_EXE_Rocky9.def +++ b/environments/Rocky10/EMOD_EXE_Rocky10.def @@ -1,15 +1,14 @@ Bootstrap: localimage -From: Assets/EMOD_OS_Rocky9.sif +From: Assets/EMOD_OS_Rocky10.sif %post dnf upgrade -y - dnf install python-devel -y - dnf install mpich-devel -y - dnf install sqlite-devel -y - dnf install git -y - dnf install glibc-devel -y - dnf install gcc-c++ -y + dnf install -y python-devel + dnf install -y mpich-devel + dnf install -y git + dnf install -y glibc-devel + dnf install -y gcc-c++ dnf clean all @@ -50,4 +49,4 @@ From: Assets/EMOD_OS_Rocky9.sif Author kfrey@idmod.org %help - Minimal container for building EMOD. \ No newline at end of file + Minimal container for building EMOD. diff --git a/environments/Rocky10/EMOD_OS.id b/environments/Rocky10/EMOD_OS.id new file mode 100644 index 00000000..9659e1eb --- /dev/null +++ b/environments/Rocky10/EMOD_OS.id @@ -0,0 +1 @@ +76eb5491-ae24-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Rocky9/EMOD_OS_Rocky9.def b/environments/Rocky10/EMOD_OS_Rocky10.def similarity index 77% rename from environments/Rocky9/EMOD_OS_Rocky9.def rename to environments/Rocky10/EMOD_OS_Rocky10.def index 3dedf052..a24657b6 100644 --- a/environments/Rocky9/EMOD_OS_Rocky9.def +++ b/environments/Rocky10/EMOD_OS_Rocky10.def @@ -1,5 +1,5 @@ Bootstrap: docker -From: rockylinux/rockylinux:9.6 +From: rockylinux/rockylinux:10.1 %post dnf clean all @@ -17,4 +17,4 @@ From: rockylinux/rockylinux:9.6 Author kfrey@idmod.org %help - Minimal container. Creates an Asset on COMPS; avoids repeated pull from docker. \ No newline at end of file + Minimal container. Creates an Asset on COMPS; avoids repeated pull from docker. diff --git a/environments/Rocky10/EMOD_SCHEMA.id b/environments/Rocky10/EMOD_SCHEMA.id new file mode 100644 index 00000000..5d5b3218 --- /dev/null +++ b/environments/Rocky10/EMOD_SCHEMA.id @@ -0,0 +1 @@ +44a28775-b024-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Rocky9/make01_EMOD_OS.py b/environments/Rocky10/make01_EMOD_OS.py similarity index 100% rename from environments/Rocky9/make01_EMOD_OS.py rename to environments/Rocky10/make01_EMOD_OS.py diff --git a/environments/Rocky9/make02_EMOD_EXE.py b/environments/Rocky10/make02_EMOD_EXE.py similarity index 100% rename from environments/Rocky9/make02_EMOD_EXE.py rename to environments/Rocky10/make02_EMOD_EXE.py diff --git a/environments/Rocky9/make03_EMOD_ENV.py b/environments/Rocky10/make03_EMOD_ENV.py similarity index 100% rename from environments/Rocky9/make03_EMOD_ENV.py rename to environments/Rocky10/make03_EMOD_ENV.py diff --git a/environments/Rocky9/EMOD_ENV.id b/environments/Rocky9/EMOD_ENV.id deleted file mode 100644 index 7f3ac78a..00000000 --- a/environments/Rocky9/EMOD_ENV.id +++ /dev/null @@ -1 +0,0 @@ -c9b23a5d-8aa0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file diff --git a/environments/Rocky9/EMOD_ENV_Rocky9.def b/environments/Rocky9/EMOD_ENV_Rocky9.def deleted file mode 100644 index 8427d8b9..00000000 --- a/environments/Rocky9/EMOD_ENV_Rocky9.def +++ /dev/null @@ -1,32 +0,0 @@ -Bootstrap: localimage -From: Assets/EMOD_OS_Rocky9.sif - -%post - dnf upgrade -y - - dnf -y install python - dnf -y install python-pip - dnf -y install mpich - - dnf clean all - - python3 -m venv py_env - . py_env/bin/activate - - pip install pip --upgrade - pip install emod-api==2.0.26 --extra-index-url https://packages.idmod.org/api/pypi/pypi-production/simple - -%runscript - - -%environment - - -%test - - -%labels - Author kfrey@idmod.org - -%help - Minimal container for running EMOD using emod-api for file support. \ No newline at end of file diff --git a/environments/Rocky9/EMOD_EXE.id b/environments/Rocky9/EMOD_EXE.id deleted file mode 100644 index 7789c3f7..00000000 --- a/environments/Rocky9/EMOD_EXE.id +++ /dev/null @@ -1 +0,0 @@ -7424e7c8-88a0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file diff --git a/environments/Rocky9/EMOD_OS.id b/environments/Rocky9/EMOD_OS.id deleted file mode 100644 index d0b01ffe..00000000 --- a/environments/Rocky9/EMOD_OS.id +++ /dev/null @@ -1 +0,0 @@ -9aa4fdf2-86a0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file diff --git a/environments/Rocky9/EMOD_SCHEMA.id b/environments/Rocky9/EMOD_SCHEMA.id deleted file mode 100644 index fa16b28e..00000000 --- a/environments/Rocky9/EMOD_SCHEMA.id +++ /dev/null @@ -1 +0,0 @@ -fd1c19dc-88a0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file diff --git a/environments/Ubuntu24/EMOD_ENV.id b/environments/Ubuntu24/EMOD_ENV.id index 97b3e8a6..bae7a604 100644 --- a/environments/Ubuntu24/EMOD_ENV.id +++ b/environments/Ubuntu24/EMOD_ENV.id @@ -1 +1 @@ -a2a92bc7-8aa0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file +d2243185-b324-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Ubuntu24/EMOD_ENV_Ubuntu24.def b/environments/Ubuntu24/EMOD_ENV_Ubuntu24.def index 04f84aad..5d1076b7 100644 --- a/environments/Ubuntu24/EMOD_ENV_Ubuntu24.def +++ b/environments/Ubuntu24/EMOD_ENV_Ubuntu24.def @@ -3,23 +3,20 @@ From: Assets/EMOD_OS_Ubuntu24.sif %post apt-get update - apt-get install software-properties-common -y - apt-get update - add-apt-repository universe apt-get upgrade -y - apt-get install python3 -y - apt-get install python3-pip -y - apt-get install python3-venv -y - apt-get install mpich -y + apt-get install -y python3 + apt-get install -y python3-pip + apt-get install -y python3-venv + apt-get install -y mpich apt-get clean python3 -m venv py_env . py_env/bin/activate - pip3 install pip --upgrade - pip3 install emod-api==2.0.26 --extra-index-url https://packages.idmod.org/api/pypi/pypi-production/simple + pip3 install pip --upgrade + pip3 install emod-api~=3.1 %runscript @@ -34,4 +31,4 @@ From: Assets/EMOD_OS_Ubuntu24.sif Author kfrey@idmod.org %help - Minimal container for running EMOD using emod-api for file support. \ No newline at end of file + Minimal container for running EMOD using emod-api for file support. diff --git a/environments/Ubuntu24/EMOD_EXE.id b/environments/Ubuntu24/EMOD_EXE.id index cf061495..4052c90c 100644 --- a/environments/Ubuntu24/EMOD_EXE.id +++ b/environments/Ubuntu24/EMOD_EXE.id @@ -1 +1 @@ -46105d1e-88a0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file +122e8061-b224-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Ubuntu24/EMOD_EXE_Ubuntu24.def b/environments/Ubuntu24/EMOD_EXE_Ubuntu24.def index 0fc9882d..07904a5e 100644 --- a/environments/Ubuntu24/EMOD_EXE_Ubuntu24.def +++ b/environments/Ubuntu24/EMOD_EXE_Ubuntu24.def @@ -3,19 +3,15 @@ From: Assets/EMOD_OS_Ubuntu24.sif %post apt-get update - apt-get install software-properties-common -y - apt-get update - add-apt-repository universe apt-get upgrade -y - apt-get install python3-dev -y - apt-get install libmpich-dev -y - apt-get install libsqlite3-dev -y - apt-get install git -y - apt-get install libc-dev -y - apt-get install g++ -y + apt-get install -y python3-dev + apt-get install -y libmpich-dev + apt-get install -y git + apt-get install -y libc-dev + apt-get install -y g++ - apt-get install scons -y + apt-get install -y scons apt-get clean @@ -49,4 +45,4 @@ From: Assets/EMOD_OS_Ubuntu24.sif Author kfrey@idmod.org %help - Minimal container for building EMOD. \ No newline at end of file + Minimal container for building EMOD. diff --git a/environments/Ubuntu24/EMOD_OS.id b/environments/Ubuntu24/EMOD_OS.id index dc2ffc29..d511729d 100644 --- a/environments/Ubuntu24/EMOD_OS.id +++ b/environments/Ubuntu24/EMOD_OS.id @@ -1 +1 @@ -9db80e2f-87a0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file +2426577e-b124-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/environments/Ubuntu24/EMOD_OS_Ubuntu24.def b/environments/Ubuntu24/EMOD_OS_Ubuntu24.def index 2aa3751c..af81e508 100644 --- a/environments/Ubuntu24/EMOD_OS_Ubuntu24.def +++ b/environments/Ubuntu24/EMOD_OS_Ubuntu24.def @@ -17,4 +17,4 @@ From: ubuntu:24.04 Author kfrey@idmod.org %help - Minimal container. Creates an Asset on COMPS; avoids repeated pull from docker. \ No newline at end of file + Minimal container. Creates an Asset on COMPS; avoids repeated pull from docker. diff --git a/environments/Ubuntu24/EMOD_SCHEMA.id b/environments/Ubuntu24/EMOD_SCHEMA.id index 8be255e1..75c67b37 100644 --- a/environments/Ubuntu24/EMOD_SCHEMA.id +++ b/environments/Ubuntu24/EMOD_SCHEMA.id @@ -1 +1 @@ -cd5fc233-88a0-f011-aa26-b88303911bc1::Asset Collection \ No newline at end of file +60f53670-b224-f111-92e2-000d3af5294c::Asset Collection \ No newline at end of file diff --git a/local_python/container_assets/Eradication b/local_python/container_assets/Eradication index 867c59ad..0a310cc6 100644 Binary files a/local_python/container_assets/Eradication and b/local_python/container_assets/Eradication differ diff --git a/local_python/container_assets/reporter_plugins/libReportSerosurvey.so b/local_python/container_assets/reporter_plugins/libReportSerosurvey.so deleted file mode 100644 index 1e144200..00000000 Binary files a/local_python/container_assets/reporter_plugins/libReportSerosurvey.so and /dev/null differ diff --git a/local_python/container_assets/reporter_plugins/libReportStrainTracking.so b/local_python/container_assets/reporter_plugins/libReportStrainTracking.so deleted file mode 100644 index 1bf72764..00000000 Binary files a/local_python/container_assets/reporter_plugins/libReportStrainTracking.so and /dev/null differ diff --git a/local_python/container_assets/schema.json b/local_python/container_assets/schema.json index 28e8a017..42e39a8f 100644 --- a/local_python/container_assets/schema.json +++ b/local_python/container_assets/schema.json @@ -1,9 +1,9 @@ { "Version": { - "Creator": "outputs/Eradication", - "DTK_Branch": "Generic-Ongoing(91be201e)", - "DTK_Build_Date": "Feb 7 2025 23:06:19", - "DTK_Version": "2.21.94.0" + "DTK_Branch": "Generic-Ongoing(cc21d557)", + "DTK_Build_Date": "Apr 5 2026 20:09:55", + "DTK_Version": "2.22.31", + "Supported_Simulation_Types": "GENERIC" }, "config": { "AgentConfig": { @@ -970,12 +970,30 @@ "type": "Constrained String", "value_source": "ERROR,WARNING,INFO,DEBUG,VALID" }, + "logLevel_BaseEventReport": { + "default": "INFO", + "description": "Logging level to be used for indicated module.", + "type": "Constrained String", + "value_source": "ERROR,WARNING,INFO,DEBUG,VALID" + }, + "logLevel_BaseEventReportIntervalOutput": { + "default": "INFO", + "description": "Logging level to be used for indicated module.", + "type": "Constrained String", + "value_source": "ERROR,WARNING,INFO,DEBUG,VALID" + }, "logLevel_BaseTextReport": { "default": "INFO", "description": "Logging level to be used for indicated module.", "type": "Constrained String", "value_source": "ERROR,WARNING,INFO,DEBUG,VALID" }, + "logLevel_BaseTextReportEvents": { + "default": "INFO", + "description": "Logging level to be used for indicated module.", + "type": "Constrained String", + "value_source": "ERROR,WARNING,INFO,DEBUG,VALID" + }, "logLevel_BinnedReport": { "default": "INFO", "description": "Logging level to be used for indicated module.", @@ -1390,6 +1408,12 @@ "type": "Constrained String", "value_source": "ERROR,WARNING,INFO,DEBUG,VALID" }, + "logLevel_ProgVersion": { + "default": "INFO", + "description": "Logging level to be used for indicated module.", + "type": "Constrained String", + "value_source": "ERROR,WARNING,INFO,DEBUG,VALID" + }, "logLevel_Properties": { "default": "INFO", "description": "Logging level to be used for indicated module.", @@ -1456,18 +1480,48 @@ "type": "Constrained String", "value_source": "ERROR,WARNING,INFO,DEBUG,VALID" }, + "logLevel_ReportFactory": { + "default": "INFO", + "description": "Logging level to be used for indicated module.", + "type": "Constrained String", + "value_source": "ERROR,WARNING,INFO,DEBUG,VALID" + }, + "logLevel_ReportHumanMigrationTracking": { + "default": "INFO", + "description": "Logging level to be used for indicated module.", + "type": "Constrained String", + "value_source": "ERROR,WARNING,INFO,DEBUG,VALID" + }, + "logLevel_ReportNodeDemographics": { + "default": "INFO", + "description": "Logging level to be used for indicated module.", + "type": "Constrained String", + "value_source": "ERROR,WARNING,INFO,DEBUG,VALID" + }, "logLevel_ReportStatsByIP": { "default": "INFO", "description": "Logging level to be used for indicated module.", "type": "Constrained String", "value_source": "ERROR,WARNING,INFO,DEBUG,VALID" }, + "logLevel_ReportStrainTracking": { + "default": "INFO", + "description": "Logging level to be used for indicated module.", + "type": "Constrained String", + "value_source": "ERROR,WARNING,INFO,DEBUG,VALID" + }, "logLevel_ReportSurveillanceEventRecorder": { "default": "INFO", "description": "Logging level to be used for indicated module.", "type": "Constrained String", "value_source": "ERROR,WARNING,INFO,DEBUG,VALID" }, + "logLevel_ReportUtilities": { + "default": "INFO", + "description": "Logging level to be used for indicated module.", + "type": "Constrained String", + "value_source": "ERROR,WARNING,INFO,DEBUG,VALID" + }, "logLevel_SQLReporter": { "default": "INFO", "description": "Logging level to be used for indicated module.", @@ -4568,6 +4622,14 @@ ], "type": "Vector Enum" }, + "SQL_Report_Name": { + "default": "simulation_events.db", + "depends-on": { + "Enable_Event_DB": 1 + }, + "description": "Output file name for SQL report.", + "type": "string" + }, "SQL_Start_Time": { "default": 0, "depends-on": { @@ -4682,7 +4744,7 @@ "Base_Year": { "default": 2015, "depends-on": { - "Simulation_Type": "STI_SIM,HIV_SIM,TYPHOID_SIM" + "Simulation_Type": "GENERIC_SIM,STI_SIM,HIV_SIM,TYPHOID_SIM" }, "description": "Absolute time in years when the simulation begins. This can be combined with CampaignEventByYear to trigger campaign events.", "max": 2200, @@ -5047,12 +5109,13 @@ }, "TBHIVConfig": { "TBHIV_Drug_Params": { - "default": {}, + "default": [], "depends-on": { "Simulation_Type": "TBHIV_SIM" }, "description": "This JSON structure contains the names of anti-tuberculosis drugs and the parameters that define them.", - "type": "idmType:TBHIVDrugCollection" + "item_type": "idmType:TBHIVDrugTypeParameters", + "type": "Vector idmType:TBHIVDrugTypeParameters" } } }, @@ -5272,6 +5335,11 @@ "class": "BroadcastCoordinatorEvent" }, "CalendarEventCoordinator": { + "Cost_Assumes_Total_Coverage": { + "default": 0, + "description": "Individual intervention cost applies to all individuals in target demographic and ignores coverage.", + "type": "bool" + }, "Distribution_Coverages": { "ascending": 0, "default": [], @@ -5335,7 +5403,7 @@ "Target_Demographic": "ExplicitAgeRanges,ExplicitAgeRangesAndGender" }, "description": "The lower end of ages targeted for an intervention, in years.", - "max": 3.402823466e+38, + "max": 9.322804028e+35, "min": 0, "type": "float" }, @@ -5671,7 +5739,7 @@ "Target_Demographic": "ExplicitAgeRanges,ExplicitAgeRangesAndGender" }, "description": "The lower end of ages targeted for an intervention, in years.", - "max": 3.402823466e+38, + "max": 9.322804028e+35, "min": 0, "type": "float" }, @@ -5898,6 +5966,11 @@ "class": "CommunityHealthWorkerEventCoordinator" }, "CoverageByNodeEventCoordinator": { + "Cost_Assumes_Total_Coverage": { + "default": 0, + "description": "Individual intervention cost applies to all individuals in target demographic and ignores coverage.", + "type": "bool" + }, "Coverage_By_Node": { "default": [], "description": "An array of (nodeID, coverage) pairs configuring the demographic coverage of interventions by node for the targeted populations. The coverage value must be a float between 0 and 1.", @@ -5958,7 +6031,7 @@ "Target_Demographic": "ExplicitAgeRanges,ExplicitAgeRangesAndGender" }, "description": "The lower end of ages targeted for an intervention, in years.", - "max": 3.402823466e+38, + "max": 9.322804028e+35, "min": 0, "type": "float" }, @@ -6757,6 +6830,11 @@ "class": "DelayEventCoordinator" }, "GroupInterventionDistributionEventCoordinator": { + "Cost_Assumes_Total_Coverage": { + "default": 0, + "description": "Individual intervention cost applies to all individuals in target demographic and ignores coverage.", + "type": "bool" + }, "Demographic_Coverage": { "default": 1, "description": "The fraction of individuals in the target demographic that will receive this intervention.", @@ -6825,7 +6903,7 @@ "Target_Demographic": "ExplicitAgeRanges,ExplicitAgeRangesAndGender" }, "description": "The lower end of ages targeted for an intervention, in years.", - "max": 3.402823466e+38, + "max": 9.322804028e+35, "min": 0, "type": "float" }, @@ -6928,6 +7006,11 @@ "class": "NChooserEventCoordinator" }, "StandardInterventionDistributionEventCoordinator": { + "Cost_Assumes_Total_Coverage": { + "default": 0, + "description": "Individual intervention cost applies to all individuals in target demographic and ignores coverage.", + "type": "bool" + }, "Demographic_Coverage": { "default": 1, "description": "The fraction of individuals in the target demographic that will receive this intervention.", @@ -6996,7 +7079,7 @@ "Target_Demographic": "ExplicitAgeRanges,ExplicitAgeRangesAndGender" }, "description": "The lower end of ages targeted for an intervention, in years.", - "max": 3.402823466e+38, + "max": 9.322804028e+35, "min": 0, "type": "float" }, @@ -7610,6 +7693,11 @@ "description": "The unique identifying coordinator name used to identify the different coordinators in reports.", "type": "string" }, + "Cost_Assumes_Total_Coverage": { + "default": 0, + "description": "Individual intervention cost applies to all individuals in target demographic and ignores coverage.", + "type": "bool" + }, "Duration": { "default": -1, "description": "The time period (in days) that the triggered event coordinator is active before it expires.", @@ -8030,7 +8118,7 @@ "Target_Demographic": "ExplicitAgeRanges,ExplicitAgeRangesAndGender" }, "description": "The lower end of ages targeted for an intervention, in years.", - "max": 3.402823466e+38, + "max": 9.322804028e+35, "min": 0, "type": "float" }, @@ -9248,6 +9336,13 @@ "description": "An array of nested interventions to be distributed at the end of a delay period, to covered fraction of the population.", "type": "idmAbstractType:IndividualIntervention" }, + "Cost_To_Consumer": { + "default": 0, + "description": "Cost per individual receiving the intervention.", + "max": 3.402823466e+38, + "min": 0, + "type": "float" + }, "Coverage": { "default": 1, "description": "The proportion of individuals who receive the DelayedIntervention that actually receive the configured interventions.", @@ -10251,165 +10346,967 @@ ], "class": "IVCalendar" }, - "MigrateIndividuals": { - "Disqualifying_Properties": { - "default": [], - "description": "A list of IndividualProperty key:value pairs that cause an intervention to be aborted. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.", - "type": "Dynamic String Set", - "value_source": "" - }, - "Dont_Allow_Duplicates": { - "default": 0, - "description": "If an individual's container has an intervention, set to true (1) to prevent them from receiving another copy of the intervention. Supported by all intervention classes.", - "type": "bool" - }, - "Duration_At_Node_Constant": { - "default": -1, - "depends-on": { - "Duration_At_Node_Distribution": "CONSTANT_DISTRIBUTION" - }, - "description": "The value to assign to all individuals.", - "max": 3.402823466e+38, + "ImmunityBloodTest": { + "Base_Sensitivity": { + "default": 1, + "description": "The sensitivity of the diagnostic. This sets the proportion of the time that individuals with the condition being tested receive a positive diagnostic test. When set to zero, then individuals who have the condition always receive a false-negative diagnostic test.", + "max": 1, "min": 0, "type": "float" }, - "Duration_At_Node_Distribution": { - "default": "NOT_INITIALIZED", - "description": "The distribution type to use for assigning the duration of time an individual or family spends at a destination node after intervention-based migration.", - "enum": [ - "NOT_INITIALIZED", - "CONSTANT_DISTRIBUTION", - "UNIFORM_DISTRIBUTION", - "GAUSSIAN_DISTRIBUTION", - "EXPONENTIAL_DISTRIBUTION", - "POISSON_DISTRIBUTION", - "LOG_NORMAL_DISTRIBUTION", - "DUAL_CONSTANT_DISTRIBUTION", - "WEIBULL_DISTRIBUTION", - "DUAL_EXPONENTIAL_DISTRIBUTION", - "GAMMA_DISTRIBUTION" - ], - "type": "enum" - }, - "Duration_At_Node_Exponential": { - "default": -1, - "depends-on": { - "Duration_At_Node_Distribution": "EXPONENTIAL_DISTRIBUTION" - }, - "description": "The mean for an exponential distribution.", - "max": 3.402823466e+38, - "min": 1.175494351e-38, - "type": "float" - }, - "Duration_At_Node_Gaussian_Mean": { - "default": -1, - "depends-on": { - "Duration_At_Node_Distribution": "GAUSSIAN_DISTRIBUTION" - }, - "description": "The mean for a Gaussian distribution.", - "max": 3.402823466e+38, + "Base_Specificity": { + "default": 1, + "description": "The specificity of the diagnostic. This sets the proportion of the time that individuals without the condition being tested receive a negative diagnostic test. When set to 1, the diagnostic always accurately reflects the lack of having the condition. When set to zero, then individuals who do not have the condition always receive a false-positive diagnostic test.", + "max": 1, "min": 0, "type": "float" }, - "Duration_At_Node_Gaussian_Std_Dev": { - "default": -1, - "depends-on": { - "Duration_At_Node_Distribution": "GAUSSIAN_DISTRIBUTION" - }, - "description": "The standard deviation for a Gaussian distribution.", - "max": 3.402823466e+38, - "min": 1.175494351e-38, - "type": "float" - }, - "Duration_At_Node_Kappa": { - "default": -1, - "depends-on": { - "Duration_At_Node_Distribution": "WEIBULL_DISTRIBUTION" - }, - "description": "The shape value in a Weibull distribution.", - "max": 3.402823466e+38, - "min": 1.175494351e-38, - "type": "float" - }, - "Duration_At_Node_Lambda": { - "default": -1, - "depends-on": { - "Duration_At_Node_Distribution": "WEIBULL_DISTRIBUTION" - }, - "description": "The scale value in a Weibull distribution.", - "max": 3.402823466e+38, - "min": 1.175494351e-38, - "type": "float" - }, - "Duration_At_Node_Log_Normal_Mu": { - "default": 3.402823466e+38, - "depends-on": { - "Duration_At_Node_Distribution": "LOG_NORMAL_DISTRIBUTION" - }, - "description": "The mean for a log-normal distribution.", - "max": 1.701411733e+38, - "min": -3.402823466e+38, - "type": "float" - }, - "Duration_At_Node_Log_Normal_Sigma": { - "default": 3.402823466e+38, - "depends-on": { - "Duration_At_Node_Distribution": "LOG_NORMAL_DISTRIBUTION" - }, - "description": "The width for a log-normal distribution.", - "max": 1.701411733e+38, - "min": -3.402823466e+38, - "type": "float" - }, - "Duration_At_Node_Max": { - "default": -1, - "depends-on": { - "Duration_At_Node_Distribution": "UNIFORM_DISTRIBUTION" - }, - "description": "The maximum of the uniform distribution.", + "Cost_To_Consumer": { + "default": 1, + "description": "The unit 'cost' assigned to the diagnostic. Setting Cost_To_Consumer to zero for all other interventions, and to a non-zero amount for one intervention, provides a convenient way to track the number of times the intervention has been applied in a simulation.", "max": 3.402823466e+38, "min": 0, "type": "float" }, - "Duration_At_Node_Mean_1": { - "default": -1, - "depends-on": { - "Duration_At_Node_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION" - }, - "description": "The mean of the first exponential distribution.", + "Days_To_Diagnosis": { + "default": 0, + "description": "The number of days from test until diagnosis.", "max": 3.402823466e+38, - "min": 1.175494351e-38, + "min": 0, "type": "float" }, - "Duration_At_Node_Mean_2": { - "default": -1, - "depends-on": { - "Duration_At_Node_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION" - }, - "description": "The mean of the second exponential distribution.", - "max": 3.402823466e+38, - "min": 1.175494351e-38, - "type": "float" + "Disqualifying_Properties": { + "default": [], + "description": "A list of IndividualProperty key:value pairs that cause an intervention to be aborted. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.", + "type": "Dynamic String Set", + "value_source": "" }, - "Duration_At_Node_Min": { - "default": -1, - "depends-on": { - "Duration_At_Node_Distribution": "UNIFORM_DISTRIBUTION" - }, - "description": "The minimum of the uniform distribution.", - "max": 3.402823466e+38, - "min": 0, - "type": "float" + "Dont_Allow_Duplicates": { + "default": 0, + "description": "If an individual's container has an intervention, set to true (1) to prevent them from receiving another copy of the intervention. Supported by all intervention classes.", + "type": "bool" }, - "Duration_At_Node_Peak_2_Value": { - "default": -1, + "Enable_Intervention_Replacement": { + "default": 0, "depends-on": { - "Duration_At_Node_Distribution": "DUAL_CONSTANT_DISTRIBUTION" + "Dont_Allow_Duplicates": 1 }, - "description": "The value to assign to the remaining individuals.", - "max": 3.402823466e+38, - "min": 0, - "type": "float" + "description": "When enabled, distributing intervention will remove all other interventions of the same name on targeted individual.", + "type": "bool" + }, + "Enable_IsSymptomatic": { + "default": 0, + "description": "If true, requires an infection to be symptomatic to return a positive test.", + "type": "bool" + }, + "Event_Trigger_Distributed": { + "default": "NoTrigger", + "description": "Event to be broadcast when intervention is distributed. See list of available events for possible values.", + "enum": [ + "NoTrigger", + "Births", + "EveryUpdate", + "EveryTimeStep", + "NewInfection", + "TBActivation", + "NewClinicalCase", + "NewSevereCase", + "DiseaseDeaths", + "OpportunisticInfectionDeath", + "NonDiseaseDeaths", + "TBActivationSmearPos", + "TBActivationSmearNeg", + "TBActivationExtrapulm", + "TBActivationPostRelapse", + "TBPendingRelapse", + "TBActivationPresymptomatic", + "TestPositiveOnSmear", + "ProviderOrdersTBTest", + "TBTestPositive", + "TBTestNegative", + "TBTestDefault", + "TBRestartHSB", + "TBMDRTestPositive", + "TBMDRTestNegative", + "TBMDRTestDefault", + "TBFailedDrugRegimen", + "TBRelapseAfterDrugRegimen", + "TBStartDrugRegimen", + "TBStopDrugRegimen", + "PropertyChange", + "STIDebut", + "StartedART", + "StoppedART", + "InterventionDisqualified", + "HIVNewlyDiagnosed", + "GaveBirth", + "Pregnant", + "Emigrating", + "Immigrating", + "HIVTestedNegative", + "HIVTestedPositive", + "HIVSymptomatic", + "HIVPreARTToART", + "HIVNonPreARTToART", + "TwelveWeeksPregnant", + "FourteenWeeksPregnant", + "SixWeeksOld", + "EighteenMonthsOld", + "STIPreEmigrating", + "STIPostImmigrating", + "STINewInfection", + "NewExternalHIVInfection", + "NodePropertyChange", + "HappyBirthday", + "EnteredRelationship", + "ExitedRelationship", + "FirstCoitalAct", + "NewlySymptomatic", + "SymptomaticCleared", + "ExposureComplete", + "SheddingComplete", + "PositiveResult", + "NegativeResult", + "Blackout", + "ReceivedTreatment", + "SixMonthsOld", + "OneYearOld", + "MonteCarloDeaths", + "InfectionCleared", + "GP_EVENT_000", + "GP_EVENT_001", + "GP_EVENT_002", + "GP_EVENT_003", + "GP_EVENT_004", + "GP_EVENT_005", + "GP_EVENT_006", + "GP_EVENT_007", + "GP_EVENT_008", + "GP_EVENT_009", + "GP_EVENT_010", + "GP_EVENT_011", + "GP_EVENT_012", + "GP_EVENT_013", + "GP_EVENT_014", + "GP_EVENT_015", + "GP_EVENT_016", + "GP_EVENT_017", + "GP_EVENT_018", + "GP_EVENT_019", + "GP_EVENT_020", + "GP_EVENT_021", + "GP_EVENT_022", + "GP_EVENT_023", + "GP_EVENT_024", + "GP_EVENT_025", + "GP_EVENT_026", + "GP_EVENT_027", + "GP_EVENT_028", + "GP_EVENT_029", + "GP_EVENT_030", + "GP_EVENT_031", + "GP_EVENT_032", + "GP_EVENT_033", + "GP_EVENT_034", + "GP_EVENT_035", + "GP_EVENT_036", + "GP_EVENT_037", + "GP_EVENT_038", + "GP_EVENT_039", + "GP_EVENT_040", + "GP_EVENT_041", + "GP_EVENT_042", + "GP_EVENT_043", + "GP_EVENT_044", + "GP_EVENT_045", + "GP_EVENT_046", + "GP_EVENT_047", + "GP_EVENT_048", + "GP_EVENT_049", + "GP_EVENT_050", + "GP_EVENT_051", + "GP_EVENT_052", + "GP_EVENT_053", + "GP_EVENT_054", + "GP_EVENT_055", + "GP_EVENT_056", + "GP_EVENT_057", + "GP_EVENT_058", + "GP_EVENT_059", + "GP_EVENT_060", + "GP_EVENT_061", + "GP_EVENT_062", + "GP_EVENT_063", + "GP_EVENT_064", + "GP_EVENT_065", + "GP_EVENT_066", + "GP_EVENT_067", + "GP_EVENT_068", + "GP_EVENT_069", + "GP_EVENT_070", + "GP_EVENT_071", + "GP_EVENT_072", + "GP_EVENT_073", + "GP_EVENT_074", + "GP_EVENT_075", + "GP_EVENT_076", + "GP_EVENT_077", + "GP_EVENT_078", + "GP_EVENT_079", + "GP_EVENT_080", + "GP_EVENT_081", + "GP_EVENT_082", + "GP_EVENT_083", + "GP_EVENT_084", + "GP_EVENT_085", + "GP_EVENT_086", + "GP_EVENT_087", + "GP_EVENT_088", + "GP_EVENT_089", + "GP_EVENT_090", + "GP_EVENT_091", + "GP_EVENT_092", + "GP_EVENT_093", + "GP_EVENT_094", + "GP_EVENT_095", + "GP_EVENT_096", + "GP_EVENT_097", + "GP_EVENT_098", + "GP_EVENT_099", + "NUM_EVENT_TRIGGERS" + ], + "type": "enum" + }, + "Event_Trigger_Expired": { + "default": "NoTrigger", + "description": "Event to be broadcast when intervention expires. See list of available events for possible values.", + "enum": [ + "NoTrigger", + "Births", + "EveryUpdate", + "EveryTimeStep", + "NewInfection", + "TBActivation", + "NewClinicalCase", + "NewSevereCase", + "DiseaseDeaths", + "OpportunisticInfectionDeath", + "NonDiseaseDeaths", + "TBActivationSmearPos", + "TBActivationSmearNeg", + "TBActivationExtrapulm", + "TBActivationPostRelapse", + "TBPendingRelapse", + "TBActivationPresymptomatic", + "TestPositiveOnSmear", + "ProviderOrdersTBTest", + "TBTestPositive", + "TBTestNegative", + "TBTestDefault", + "TBRestartHSB", + "TBMDRTestPositive", + "TBMDRTestNegative", + "TBMDRTestDefault", + "TBFailedDrugRegimen", + "TBRelapseAfterDrugRegimen", + "TBStartDrugRegimen", + "TBStopDrugRegimen", + "PropertyChange", + "STIDebut", + "StartedART", + "StoppedART", + "InterventionDisqualified", + "HIVNewlyDiagnosed", + "GaveBirth", + "Pregnant", + "Emigrating", + "Immigrating", + "HIVTestedNegative", + "HIVTestedPositive", + "HIVSymptomatic", + "HIVPreARTToART", + "HIVNonPreARTToART", + "TwelveWeeksPregnant", + "FourteenWeeksPregnant", + "SixWeeksOld", + "EighteenMonthsOld", + "STIPreEmigrating", + "STIPostImmigrating", + "STINewInfection", + "NewExternalHIVInfection", + "NodePropertyChange", + "HappyBirthday", + "EnteredRelationship", + "ExitedRelationship", + "FirstCoitalAct", + "NewlySymptomatic", + "SymptomaticCleared", + "ExposureComplete", + "SheddingComplete", + "PositiveResult", + "NegativeResult", + "Blackout", + "ReceivedTreatment", + "SixMonthsOld", + "OneYearOld", + "MonteCarloDeaths", + "InfectionCleared", + "GP_EVENT_000", + "GP_EVENT_001", + "GP_EVENT_002", + "GP_EVENT_003", + "GP_EVENT_004", + "GP_EVENT_005", + "GP_EVENT_006", + "GP_EVENT_007", + "GP_EVENT_008", + "GP_EVENT_009", + "GP_EVENT_010", + "GP_EVENT_011", + "GP_EVENT_012", + "GP_EVENT_013", + "GP_EVENT_014", + "GP_EVENT_015", + "GP_EVENT_016", + "GP_EVENT_017", + "GP_EVENT_018", + "GP_EVENT_019", + "GP_EVENT_020", + "GP_EVENT_021", + "GP_EVENT_022", + "GP_EVENT_023", + "GP_EVENT_024", + "GP_EVENT_025", + "GP_EVENT_026", + "GP_EVENT_027", + "GP_EVENT_028", + "GP_EVENT_029", + "GP_EVENT_030", + "GP_EVENT_031", + "GP_EVENT_032", + "GP_EVENT_033", + "GP_EVENT_034", + "GP_EVENT_035", + "GP_EVENT_036", + "GP_EVENT_037", + "GP_EVENT_038", + "GP_EVENT_039", + "GP_EVENT_040", + "GP_EVENT_041", + "GP_EVENT_042", + "GP_EVENT_043", + "GP_EVENT_044", + "GP_EVENT_045", + "GP_EVENT_046", + "GP_EVENT_047", + "GP_EVENT_048", + "GP_EVENT_049", + "GP_EVENT_050", + "GP_EVENT_051", + "GP_EVENT_052", + "GP_EVENT_053", + "GP_EVENT_054", + "GP_EVENT_055", + "GP_EVENT_056", + "GP_EVENT_057", + "GP_EVENT_058", + "GP_EVENT_059", + "GP_EVENT_060", + "GP_EVENT_061", + "GP_EVENT_062", + "GP_EVENT_063", + "GP_EVENT_064", + "GP_EVENT_065", + "GP_EVENT_066", + "GP_EVENT_067", + "GP_EVENT_068", + "GP_EVENT_069", + "GP_EVENT_070", + "GP_EVENT_071", + "GP_EVENT_072", + "GP_EVENT_073", + "GP_EVENT_074", + "GP_EVENT_075", + "GP_EVENT_076", + "GP_EVENT_077", + "GP_EVENT_078", + "GP_EVENT_079", + "GP_EVENT_080", + "GP_EVENT_081", + "GP_EVENT_082", + "GP_EVENT_083", + "GP_EVENT_084", + "GP_EVENT_085", + "GP_EVENT_086", + "GP_EVENT_087", + "GP_EVENT_088", + "GP_EVENT_089", + "GP_EVENT_090", + "GP_EVENT_091", + "GP_EVENT_092", + "GP_EVENT_093", + "GP_EVENT_094", + "GP_EVENT_095", + "GP_EVENT_096", + "GP_EVENT_097", + "GP_EVENT_098", + "GP_EVENT_099", + "NUM_EVENT_TRIGGERS" + ], + "type": "enum" + }, + "Intervention_Name": { + "default": "ImmunityBloodTest", + "description": "The optional name used to refer to this intervention as a means to differentiate it from others that use the same class.", + "type": "string" + }, + "Negative_Diagnosis_Event": { + "default": "NoTrigger", + "description": "If an individual tests negative (does not have immunity), then an individual type event is broadcast. This may trigger another intervention when the event occurs. Only used when **Event_Or_Config** is set to Event.", + "enum": [ + "NoTrigger", + "Births", + "EveryUpdate", + "EveryTimeStep", + "NewInfection", + "TBActivation", + "NewClinicalCase", + "NewSevereCase", + "DiseaseDeaths", + "OpportunisticInfectionDeath", + "NonDiseaseDeaths", + "TBActivationSmearPos", + "TBActivationSmearNeg", + "TBActivationExtrapulm", + "TBActivationPostRelapse", + "TBPendingRelapse", + "TBActivationPresymptomatic", + "TestPositiveOnSmear", + "ProviderOrdersTBTest", + "TBTestPositive", + "TBTestNegative", + "TBTestDefault", + "TBRestartHSB", + "TBMDRTestPositive", + "TBMDRTestNegative", + "TBMDRTestDefault", + "TBFailedDrugRegimen", + "TBRelapseAfterDrugRegimen", + "TBStartDrugRegimen", + "TBStopDrugRegimen", + "PropertyChange", + "STIDebut", + "StartedART", + "StoppedART", + "InterventionDisqualified", + "HIVNewlyDiagnosed", + "GaveBirth", + "Pregnant", + "Emigrating", + "Immigrating", + "HIVTestedNegative", + "HIVTestedPositive", + "HIVSymptomatic", + "HIVPreARTToART", + "HIVNonPreARTToART", + "TwelveWeeksPregnant", + "FourteenWeeksPregnant", + "SixWeeksOld", + "EighteenMonthsOld", + "STIPreEmigrating", + "STIPostImmigrating", + "STINewInfection", + "NewExternalHIVInfection", + "NodePropertyChange", + "HappyBirthday", + "EnteredRelationship", + "ExitedRelationship", + "FirstCoitalAct", + "NewlySymptomatic", + "SymptomaticCleared", + "ExposureComplete", + "SheddingComplete", + "PositiveResult", + "NegativeResult", + "Blackout", + "ReceivedTreatment", + "SixMonthsOld", + "OneYearOld", + "MonteCarloDeaths", + "InfectionCleared", + "GP_EVENT_000", + "GP_EVENT_001", + "GP_EVENT_002", + "GP_EVENT_003", + "GP_EVENT_004", + "GP_EVENT_005", + "GP_EVENT_006", + "GP_EVENT_007", + "GP_EVENT_008", + "GP_EVENT_009", + "GP_EVENT_010", + "GP_EVENT_011", + "GP_EVENT_012", + "GP_EVENT_013", + "GP_EVENT_014", + "GP_EVENT_015", + "GP_EVENT_016", + "GP_EVENT_017", + "GP_EVENT_018", + "GP_EVENT_019", + "GP_EVENT_020", + "GP_EVENT_021", + "GP_EVENT_022", + "GP_EVENT_023", + "GP_EVENT_024", + "GP_EVENT_025", + "GP_EVENT_026", + "GP_EVENT_027", + "GP_EVENT_028", + "GP_EVENT_029", + "GP_EVENT_030", + "GP_EVENT_031", + "GP_EVENT_032", + "GP_EVENT_033", + "GP_EVENT_034", + "GP_EVENT_035", + "GP_EVENT_036", + "GP_EVENT_037", + "GP_EVENT_038", + "GP_EVENT_039", + "GP_EVENT_040", + "GP_EVENT_041", + "GP_EVENT_042", + "GP_EVENT_043", + "GP_EVENT_044", + "GP_EVENT_045", + "GP_EVENT_046", + "GP_EVENT_047", + "GP_EVENT_048", + "GP_EVENT_049", + "GP_EVENT_050", + "GP_EVENT_051", + "GP_EVENT_052", + "GP_EVENT_053", + "GP_EVENT_054", + "GP_EVENT_055", + "GP_EVENT_056", + "GP_EVENT_057", + "GP_EVENT_058", + "GP_EVENT_059", + "GP_EVENT_060", + "GP_EVENT_061", + "GP_EVENT_062", + "GP_EVENT_063", + "GP_EVENT_064", + "GP_EVENT_065", + "GP_EVENT_066", + "GP_EVENT_067", + "GP_EVENT_068", + "GP_EVENT_069", + "GP_EVENT_070", + "GP_EVENT_071", + "GP_EVENT_072", + "GP_EVENT_073", + "GP_EVENT_074", + "GP_EVENT_075", + "GP_EVENT_076", + "GP_EVENT_077", + "GP_EVENT_078", + "GP_EVENT_079", + "GP_EVENT_080", + "GP_EVENT_081", + "GP_EVENT_082", + "GP_EVENT_083", + "GP_EVENT_084", + "GP_EVENT_085", + "GP_EVENT_086", + "GP_EVENT_087", + "GP_EVENT_088", + "GP_EVENT_089", + "GP_EVENT_090", + "GP_EVENT_091", + "GP_EVENT_092", + "GP_EVENT_093", + "GP_EVENT_094", + "GP_EVENT_095", + "GP_EVENT_096", + "GP_EVENT_097", + "GP_EVENT_098", + "GP_EVENT_099", + "NUM_EVENT_TRIGGERS" + ], + "type": "enum" + }, + "New_Property_Value": { + "default": "", + "description": "An optional IndividualProperty key:value pair that will be assigned when the intervention is distributed. Generally used to indicate the broad category of health care cascade to which an intervention belongs to prevent individuals from accessing care through multiple pathways.", + "type": "Constrained String", + "value_source": "'::*.Individual_Properties.*.Property':'::*.Individual_Properties.*.Values'" + }, + "Positive_Diagnosis_Config": { + "depends-on": { + "Event_Or_Config": "Config" + }, + "description": "The intervention distributed to individuals if they test positive. Only used when Event_Or_Config is set to Config.", + "type": "idmAbstractType:IndividualIntervention" + }, + "Positive_Diagnosis_Event": { + "default": "NoTrigger", + "description": "If the test is positive, this specifies an event that can trigger another intervention when the event occurs. Only used if Event_Or_Config is set to Event.", + "enum": [ + "NoTrigger", + "Births", + "EveryUpdate", + "EveryTimeStep", + "NewInfection", + "TBActivation", + "NewClinicalCase", + "NewSevereCase", + "DiseaseDeaths", + "OpportunisticInfectionDeath", + "NonDiseaseDeaths", + "TBActivationSmearPos", + "TBActivationSmearNeg", + "TBActivationExtrapulm", + "TBActivationPostRelapse", + "TBPendingRelapse", + "TBActivationPresymptomatic", + "TestPositiveOnSmear", + "ProviderOrdersTBTest", + "TBTestPositive", + "TBTestNegative", + "TBTestDefault", + "TBRestartHSB", + "TBMDRTestPositive", + "TBMDRTestNegative", + "TBMDRTestDefault", + "TBFailedDrugRegimen", + "TBRelapseAfterDrugRegimen", + "TBStartDrugRegimen", + "TBStopDrugRegimen", + "PropertyChange", + "STIDebut", + "StartedART", + "StoppedART", + "InterventionDisqualified", + "HIVNewlyDiagnosed", + "GaveBirth", + "Pregnant", + "Emigrating", + "Immigrating", + "HIVTestedNegative", + "HIVTestedPositive", + "HIVSymptomatic", + "HIVPreARTToART", + "HIVNonPreARTToART", + "TwelveWeeksPregnant", + "FourteenWeeksPregnant", + "SixWeeksOld", + "EighteenMonthsOld", + "STIPreEmigrating", + "STIPostImmigrating", + "STINewInfection", + "NewExternalHIVInfection", + "NodePropertyChange", + "HappyBirthday", + "EnteredRelationship", + "ExitedRelationship", + "FirstCoitalAct", + "NewlySymptomatic", + "SymptomaticCleared", + "ExposureComplete", + "SheddingComplete", + "PositiveResult", + "NegativeResult", + "Blackout", + "ReceivedTreatment", + "SixMonthsOld", + "OneYearOld", + "MonteCarloDeaths", + "InfectionCleared", + "GP_EVENT_000", + "GP_EVENT_001", + "GP_EVENT_002", + "GP_EVENT_003", + "GP_EVENT_004", + "GP_EVENT_005", + "GP_EVENT_006", + "GP_EVENT_007", + "GP_EVENT_008", + "GP_EVENT_009", + "GP_EVENT_010", + "GP_EVENT_011", + "GP_EVENT_012", + "GP_EVENT_013", + "GP_EVENT_014", + "GP_EVENT_015", + "GP_EVENT_016", + "GP_EVENT_017", + "GP_EVENT_018", + "GP_EVENT_019", + "GP_EVENT_020", + "GP_EVENT_021", + "GP_EVENT_022", + "GP_EVENT_023", + "GP_EVENT_024", + "GP_EVENT_025", + "GP_EVENT_026", + "GP_EVENT_027", + "GP_EVENT_028", + "GP_EVENT_029", + "GP_EVENT_030", + "GP_EVENT_031", + "GP_EVENT_032", + "GP_EVENT_033", + "GP_EVENT_034", + "GP_EVENT_035", + "GP_EVENT_036", + "GP_EVENT_037", + "GP_EVENT_038", + "GP_EVENT_039", + "GP_EVENT_040", + "GP_EVENT_041", + "GP_EVENT_042", + "GP_EVENT_043", + "GP_EVENT_044", + "GP_EVENT_045", + "GP_EVENT_046", + "GP_EVENT_047", + "GP_EVENT_048", + "GP_EVENT_049", + "GP_EVENT_050", + "GP_EVENT_051", + "GP_EVENT_052", + "GP_EVENT_053", + "GP_EVENT_054", + "GP_EVENT_055", + "GP_EVENT_056", + "GP_EVENT_057", + "GP_EVENT_058", + "GP_EVENT_059", + "GP_EVENT_060", + "GP_EVENT_061", + "GP_EVENT_062", + "GP_EVENT_063", + "GP_EVENT_064", + "GP_EVENT_065", + "GP_EVENT_066", + "GP_EVENT_067", + "GP_EVENT_068", + "GP_EVENT_069", + "GP_EVENT_070", + "GP_EVENT_071", + "GP_EVENT_072", + "GP_EVENT_073", + "GP_EVENT_074", + "GP_EVENT_075", + "GP_EVENT_076", + "GP_EVENT_077", + "GP_EVENT_078", + "GP_EVENT_079", + "GP_EVENT_080", + "GP_EVENT_081", + "GP_EVENT_082", + "GP_EVENT_083", + "GP_EVENT_084", + "GP_EVENT_085", + "GP_EVENT_086", + "GP_EVENT_087", + "GP_EVENT_088", + "GP_EVENT_089", + "GP_EVENT_090", + "GP_EVENT_091", + "GP_EVENT_092", + "GP_EVENT_093", + "GP_EVENT_094", + "GP_EVENT_095", + "GP_EVENT_096", + "GP_EVENT_097", + "GP_EVENT_098", + "GP_EVENT_099", + "NUM_EVENT_TRIGGERS" + ], + "type": "enum" + }, + "Positive_Threshold_AcquisitionImmunity": { + "default": 1, + "description": "Specifies the threshold for acquired immunity, where 1 equals 100% immunity and 0 equals 100% susceptible.", + "max": 1, + "min": 0, + "type": "float" + }, + "Sim_Types": [ + "*" + ], + "Treatment_Fraction": { + "default": 1, + "description": "The fraction of positive diagnoses that are treated.", + "max": 1, + "min": 0, + "type": "float" + }, + "class": "ImmunityBloodTest" + }, + "MigrateIndividuals": { + "Disqualifying_Properties": { + "default": [], + "description": "A list of IndividualProperty key:value pairs that cause an intervention to be aborted. Generally used to control the flow of health care access. For example, to prevent the same individual from accessing health care via two different routes at the same time.", + "type": "Dynamic String Set", + "value_source": "" + }, + "Dont_Allow_Duplicates": { + "default": 0, + "description": "If an individual's container has an intervention, set to true (1) to prevent them from receiving another copy of the intervention. Supported by all intervention classes.", + "type": "bool" + }, + "Duration_At_Node_Constant": { + "default": -1, + "depends-on": { + "Duration_At_Node_Distribution": "CONSTANT_DISTRIBUTION" + }, + "description": "The value to assign to all individuals.", + "max": 3.402823466e+38, + "min": 0, + "type": "float" + }, + "Duration_At_Node_Distribution": { + "default": "NOT_INITIALIZED", + "description": "The distribution type to use for assigning the duration of time an individual or family spends at a destination node after intervention-based migration.", + "enum": [ + "NOT_INITIALIZED", + "CONSTANT_DISTRIBUTION", + "UNIFORM_DISTRIBUTION", + "GAUSSIAN_DISTRIBUTION", + "EXPONENTIAL_DISTRIBUTION", + "POISSON_DISTRIBUTION", + "LOG_NORMAL_DISTRIBUTION", + "DUAL_CONSTANT_DISTRIBUTION", + "WEIBULL_DISTRIBUTION", + "DUAL_EXPONENTIAL_DISTRIBUTION", + "GAMMA_DISTRIBUTION" + ], + "type": "enum" + }, + "Duration_At_Node_Exponential": { + "default": -1, + "depends-on": { + "Duration_At_Node_Distribution": "EXPONENTIAL_DISTRIBUTION" + }, + "description": "The mean for an exponential distribution.", + "max": 3.402823466e+38, + "min": 1.175494351e-38, + "type": "float" + }, + "Duration_At_Node_Gaussian_Mean": { + "default": -1, + "depends-on": { + "Duration_At_Node_Distribution": "GAUSSIAN_DISTRIBUTION" + }, + "description": "The mean for a Gaussian distribution.", + "max": 3.402823466e+38, + "min": 0, + "type": "float" + }, + "Duration_At_Node_Gaussian_Std_Dev": { + "default": -1, + "depends-on": { + "Duration_At_Node_Distribution": "GAUSSIAN_DISTRIBUTION" + }, + "description": "The standard deviation for a Gaussian distribution.", + "max": 3.402823466e+38, + "min": 1.175494351e-38, + "type": "float" + }, + "Duration_At_Node_Kappa": { + "default": -1, + "depends-on": { + "Duration_At_Node_Distribution": "WEIBULL_DISTRIBUTION" + }, + "description": "The shape value in a Weibull distribution.", + "max": 3.402823466e+38, + "min": 1.175494351e-38, + "type": "float" + }, + "Duration_At_Node_Lambda": { + "default": -1, + "depends-on": { + "Duration_At_Node_Distribution": "WEIBULL_DISTRIBUTION" + }, + "description": "The scale value in a Weibull distribution.", + "max": 3.402823466e+38, + "min": 1.175494351e-38, + "type": "float" + }, + "Duration_At_Node_Log_Normal_Mu": { + "default": 3.402823466e+38, + "depends-on": { + "Duration_At_Node_Distribution": "LOG_NORMAL_DISTRIBUTION" + }, + "description": "The mean for a log-normal distribution.", + "max": 1.701411733e+38, + "min": -3.402823466e+38, + "type": "float" + }, + "Duration_At_Node_Log_Normal_Sigma": { + "default": 3.402823466e+38, + "depends-on": { + "Duration_At_Node_Distribution": "LOG_NORMAL_DISTRIBUTION" + }, + "description": "The width for a log-normal distribution.", + "max": 1.701411733e+38, + "min": -3.402823466e+38, + "type": "float" + }, + "Duration_At_Node_Max": { + "default": -1, + "depends-on": { + "Duration_At_Node_Distribution": "UNIFORM_DISTRIBUTION" + }, + "description": "The maximum of the uniform distribution.", + "max": 3.402823466e+38, + "min": 0, + "type": "float" + }, + "Duration_At_Node_Mean_1": { + "default": -1, + "depends-on": { + "Duration_At_Node_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION" + }, + "description": "The mean of the first exponential distribution.", + "max": 3.402823466e+38, + "min": 1.175494351e-38, + "type": "float" + }, + "Duration_At_Node_Mean_2": { + "default": -1, + "depends-on": { + "Duration_At_Node_Distribution": "DUAL_EXPONENTIAL_DISTRIBUTION" + }, + "description": "The mean of the second exponential distribution.", + "max": 3.402823466e+38, + "min": 1.175494351e-38, + "type": "float" + }, + "Duration_At_Node_Min": { + "default": -1, + "depends-on": { + "Duration_At_Node_Distribution": "UNIFORM_DISTRIBUTION" + }, + "description": "The minimum of the uniform distribution.", + "max": 3.402823466e+38, + "min": 0, + "type": "float" + }, + "Duration_At_Node_Peak_2_Value": { + "default": -1, + "depends-on": { + "Duration_At_Node_Distribution": "DUAL_CONSTANT_DISTRIBUTION" + }, + "description": "The value to assign to the remaining individuals.", + "max": 3.402823466e+38, + "min": 0, + "type": "float" }, "Duration_At_Node_Poisson_Mean": { "default": -1, @@ -16012,7 +16909,7 @@ "Target_Demographic": "ExplicitAgeRanges,ExplicitAgeRangesAndGender" }, "description": "The lower end of ages targeted for an intervention, in years.", - "max": 3.402823466e+38, + "max": 9.322804028e+35, "min": 0, "type": "float" }, @@ -16573,7 +17470,7 @@ "Target_Demographic": "ExplicitAgeRanges,ExplicitAgeRangesAndGender" }, "description": "The lower end of ages targeted for an intervention, in years.", - "max": 3.402823466e+38, + "max": 9.322804028e+35, "min": 0, "type": "float" }, @@ -17029,8 +17926,12 @@ }, "NodeSetNodeList": { "Node_List": { + "ascending": 0, + "default": [], "description": "A comma-separated list of node IDs in which this event will occur.", - "type": "idmType:NodeListConfig" + "max": 4294967295, + "min": 0, + "type": "Vector Uint32" }, "class": "NodeSetNodeList" } @@ -17230,8 +18131,7 @@ "max": 3.402823466e+38, "min": 0, "type": "float" - }, - "class": "Action" + } }, "idmType:AgeAndProbability": { "Age": { @@ -17247,8 +18147,7 @@ "max": 1, "min": 0, "type": "float" - }, - "class": "AgeAndProbability" + } }, "idmType:AgeRange": { "Max": { @@ -17264,8 +18163,52 @@ "max": 125, "min": 0, "type": "float" + } + }, + "idmType:IReport": { + "ReportHumanMigrationTracking": { + "class": "ReportHumanMigrationTracking" + }, + "ReportNodeDemographics": { + "IP_Key_To_Collect": { + "default": "", + "description": "Name of the key to add a column for.", + "type": "string" + }, + "Stratify_By_Gender": { + "default": 1, + "description": "1 (default) implies stratify by gender, 0 implies do not", + "type": "bool" + }, + "class": "ReportNodeDemographics" }, - "class": "AgeRange" + "ReportStrainTracking": { + "Ouput_Every_Timestep": { + "default": 0, + "description": "Write after every timestep.", + "type": "bool" + }, + "Report_Name": { + "default": "ReportStrainTracking.csv", + "description": "Output file name.", + "type": "string" + }, + "Time_End": { + "default": 3.402823466e+38, + "description": "No output after this timestep.", + "max": 3.402823466e+38, + "min": 0, + "type": "float" + }, + "Time_Start": { + "default": 0, + "description": "No output prior to this timestep.", + "max": 3.402823466e+38, + "min": 0, + "type": "float" + }, + "class": "ReportStrainTracking" + } }, "idmType:IncidenceCounter": { "Count_Events_For_Num_Timesteps": { @@ -17332,7 +18275,7 @@ "Target_Demographic": "ExplicitAgeRanges,ExplicitAgeRangesAndGender" }, "description": "The lower end of ages targeted for an intervention, in years.", - "max": 3.402823466e+38, + "max": 9.322804028e+35, "min": 0, "type": "float" }, @@ -17635,7 +18578,7 @@ "Target_Demographic": "ExplicitAgeRanges,ExplicitAgeRangesAndGender" }, "description": "The lower end of ages targeted for an intervention, in years.", - "max": 3.402823466e+38, + "max": 9.322804028e+35, "min": 0, "type": "float" }, @@ -17885,23 +18828,14 @@ "max": 2147483647, "min": 0, "type": "integer" - }, - "class": "NodeIdAndCoverage" - }, - "idmType:NodeListConfig": [ - { - "description": "Id of Node", - "min": 0, - "type": "integer" } - ], + }, "idmType:PropertyRestriction": { "Restrictions": { "default": [], "description": "", "type": "Vector String" - }, - "class": "PropertyRestriction" + } }, "idmType:Responder": { "Action_List": { @@ -18125,160 +19059,163 @@ "type": "enum" } }, - "idmType:TBHIVDrugCollection": { - "": { - "TB_Drug_Cure_Rate": { - "default": 1, - "description": "The daily probability of TB cure in an individual with drug-sensitive TB under drug treatment.", - "max": 1, - "min": 0, - "type": "float" - }, - "TB_Drug_Cure_Rate_HIV": { - "default": 1, - "depends-on": { - "Enable_Coinfection": 1 - }, - "description": "The daily probability of active TB infection being cured in an HIV+ person under drug treatment.", - "max": 1, - "min": 0, - "type": "float" - }, - "TB_Drug_Cure_Rate_MDR": { - "default": 1, - "depends-on": { - "Enable_Coinfection": 1 - }, - "description": "The daily probability of active MDR infection being cured in an HIV+ or HIV- person under drug treatment.", - "max": 1, - "min": 0, - "type": "float" - }, - "TB_Drug_Inactivation_Rate": { - "default": 1, - "description": "The daily rate at which treatment with an anti-TB drug causes inactivation in an individual with drug-sensitive TB.", - "max": 1, - "min": 0, - "type": "float" - }, - "TB_Drug_Inactivation_Rate_HIV": { - "default": 1, - "depends-on": { - "Enable_Coinfection": 1 - }, - "description": "The daily probability of active drug-sensitive TB infection becoming latent in an HIV+ person, not currently on ART, under drug treatment.", - "max": 1, - "min": 0, - "type": "float" - }, - "TB_Drug_Inactivation_Rate_MDR": { - "default": 1, - "depends-on": { - "Enable_Coinfection": 1 - }, - "description": "The daily probability of active MDR infection becoming latent in an HIV+ or HIV- person under drug treatment.", - "max": 1, - "min": 0, - "type": "float" + "idmType:TBHIVDrugTypeParameters": { + "TB_Drug_Cure_Rate": { + "default": 1, + "description": "The daily probability of TB cure in an individual with drug-sensitive TB under drug treatment.", + "max": 1, + "min": 0, + "type": "float" + }, + "TB_Drug_Cure_Rate_HIV": { + "default": 1, + "depends-on": { + "Enable_Coinfection": 1 }, - "TB_Drug_Mortality_Rate": { - "default": 0, - "description": "The daily rate at which treatment with an anti-TB drug causes death in an individual with drug-sensitive TB.", - "max": 1, - "min": 0, - "type": "float" + "description": "The daily probability of active TB infection being cured in an HIV+ person under drug treatment.", + "max": 1, + "min": 0, + "type": "float" + }, + "TB_Drug_Cure_Rate_MDR": { + "default": 1, + "depends-on": { + "Enable_Coinfection": 1 }, - "TB_Drug_Mortality_Rate_HIV": { - "default": 0, - "depends-on": { - "Enable_Coinfection": 1 - }, - "description": "The daily probability of death for HIV+ individual with drug sensitive active infection under drug treatment.", - "max": 1, - "min": 0, - "type": "float" + "description": "The daily probability of active MDR infection being cured in an HIV+ or HIV- person under drug treatment.", + "max": 1, + "min": 0, + "type": "float" + }, + "TB_Drug_Inactivation_Rate": { + "default": 1, + "description": "The daily rate at which treatment with an anti-TB drug causes inactivation in an individual with drug-sensitive TB.", + "max": 1, + "min": 0, + "type": "float" + }, + "TB_Drug_Inactivation_Rate_HIV": { + "default": 1, + "depends-on": { + "Enable_Coinfection": 1 }, - "TB_Drug_Mortality_Rate_MDR": { - "default": 0, - "depends-on": { - "Enable_Coinfection": 1 - }, - "description": "The daily probability of death for individual with MDR active infection under drug treatment.", - "max": 1, - "min": 0, - "type": "float" + "description": "The daily probability of active drug-sensitive TB infection becoming latent in an HIV+ person, not currently on ART, under drug treatment.", + "max": 1, + "min": 0, + "type": "float" + }, + "TB_Drug_Inactivation_Rate_MDR": { + "default": 1, + "depends-on": { + "Enable_Coinfection": 1 }, - "TB_Drug_Primary_Decay_Time_Constant": { - "default": 0, - "description": "The number of days before the efficacy of a specific anti-TB drug begins to decay.", - "max": 100000, - "min": 0, - "type": "float" + "description": "The daily probability of active MDR infection becoming latent in an HIV+ or HIV- person under drug treatment.", + "max": 1, + "min": 0, + "type": "float" + }, + "TB_Drug_Mortality_Rate": { + "default": 0, + "description": "The daily rate at which treatment with an anti-TB drug causes death in an individual with drug-sensitive TB.", + "max": 1, + "min": 0, + "type": "float" + }, + "TB_Drug_Mortality_Rate_HIV": { + "default": 0, + "depends-on": { + "Enable_Coinfection": 1 }, - "TB_Drug_Relapse_Rate": { - "default": 0, - "description": "The daily probability of TB inactivation and subsequent relapse in an individual with drug-sensitive TB under drug treatment.", - "max": 1, - "min": 0, - "type": "float" + "description": "The daily probability of death for HIV+ individual with drug sensitive active infection under drug treatment.", + "max": 1, + "min": 0, + "type": "float" + }, + "TB_Drug_Mortality_Rate_MDR": { + "default": 0, + "depends-on": { + "Enable_Coinfection": 1 }, - "TB_Drug_Relapse_Rate_HIV": { - "default": 0, - "depends-on": { - "Enable_Coinfection": 1 - }, - "description": "The daily probability that a drug-sensitive active infection in an HIV+ individual not currently on ART will inactivate but subsequently relapse under drug treatment.", - "max": 1, - "min": 0, - "type": "float" + "description": "The daily probability of death for individual with MDR active infection under drug treatment.", + "max": 1, + "min": 0, + "type": "float" + }, + "TB_Drug_Name": { + "default": "", + "description": "The unique name of the drug.", + "type": "string" + }, + "TB_Drug_Primary_Decay_Time_Constant": { + "default": 0, + "description": "The number of days before the efficacy of a specific anti-TB drug begins to decay.", + "max": 100000, + "min": 0, + "type": "float" + }, + "TB_Drug_Relapse_Rate": { + "default": 0, + "description": "The daily probability of TB inactivation and subsequent relapse in an individual with drug-sensitive TB under drug treatment.", + "max": 1, + "min": 0, + "type": "float" + }, + "TB_Drug_Relapse_Rate_HIV": { + "default": 0, + "depends-on": { + "Enable_Coinfection": 1 }, - "TB_Drug_Relapse_Rate_MDR": { - "default": 0, - "depends-on": { - "Enable_Coinfection": 1 - }, - "description": "The daily probability that an active MDR-TB infection (in HIV+ or HIV-) will inactivate but subsequently relapse under drug treatment.", - "max": 1, - "min": 0, - "type": "float" + "description": "The daily probability that a drug-sensitive active infection in an HIV+ individual not currently on ART will inactivate but subsequently relapse under drug treatment.", + "max": 1, + "min": 0, + "type": "float" + }, + "TB_Drug_Relapse_Rate_MDR": { + "default": 0, + "depends-on": { + "Enable_Coinfection": 1 }, - "TB_Drug_Resistance_Rate": { - "default": 0, - "description": "The daily probability that an individual with drug-sensitive TB will acquire MDR-TB under drug treatment. Only individuals who return to the latent state or fail can acquire MDR-TB.", - "max": 1, - "min": 0, - "type": "float" + "description": "The daily probability that an active MDR-TB infection (in HIV+ or HIV-) will inactivate but subsequently relapse under drug treatment.", + "max": 1, + "min": 0, + "type": "float" + }, + "TB_Drug_Resistance_Rate": { + "default": 0, + "description": "The daily probability that an individual with drug-sensitive TB will acquire MDR-TB under drug treatment. Only individuals who return to the latent state or fail can acquire MDR-TB.", + "max": 1, + "min": 0, + "type": "float" + }, + "TB_Drug_Resistance_Rate_HIV": { + "default": 0, + "depends-on": { + "Enable_Coinfection": 1 }, - "TB_Drug_Resistance_Rate_HIV": { - "default": 0, - "depends-on": { - "Enable_Coinfection": 1 - }, - "description": "The daily probability that an (HIV+) individual with drug-sensitive TB will acquire MDR-TB under drug treatment.", - "max": 1, - "min": 0, - "type": "float" + "description": "The daily probability that an (HIV+) individual with drug-sensitive TB will acquire MDR-TB under drug treatment.", + "max": 1, + "min": 0, + "type": "float" + }, + "TB_Reduced_Acquire": { + "default": 0, + "depends-on": { + "Enable_Coinfection": 1 }, - "TB_Reduced_Acquire": { - "default": 0, - "depends-on": { - "Enable_Coinfection": 1 - }, - "description": "Proportion reduction in acquisition of new TB infection under drug treatment.", - "max": 1, - "min": 0, - "type": "float" + "description": "Proportion reduction in acquisition of new TB infection under drug treatment.", + "max": 1, + "min": 0, + "type": "float" + }, + "TB_Reduced_Transmit": { + "default": 0, + "depends-on": { + "Enable_Coinfection": 1 }, - "TB_Reduced_Transmit": { - "default": 0, - "depends-on": { - "Enable_Coinfection": 1 - }, - "description": "Proportion reduction in TB transmission under drug treatment.", - "max": 1, - "min": 0, - "type": "float" - } + "description": "Proportion reduction in TB transmission under drug treatment.", + "max": 1, + "min": 0, + "type": "float" } }, "idmType:TargetedDistribution": { @@ -18330,8 +19267,7 @@ "max": 3.402823466e+38, "min": 0, "type": "float" - }, - "class": "TargetedDistribution" + } }, "idmType:WaningEffect": { "Age_Multiplier": { @@ -18465,7 +19401,17 @@ ], "Use_Defaults": { "default": 0, - "description": "Set to true (1) if you don't want to have to specify all params for event coordinators and interventions. Use at own risk.", + "description": "Set to 1 to apply default values to unspecified parameters.", + "type": "bool" + } + }, + "reports": { + "Reports": [ + "idmType:IReport" + ], + "Use_Defaults": { + "default": 0, + "description": "Set to 1 to apply default values to unspecified parameters.", "type": "bool" } } diff --git a/local_python/py_assets_common/emod_camp_events.py b/local_python/py_assets_common/emod_camp_events.py index 0bc0d933..989183d8 100644 --- a/local_python/py_assets_common/emod_camp_events.py +++ b/local_python/py_assets_common/emod_camp_events.py @@ -12,7 +12,7 @@ NSNL = 'NodeSetNodeList' -SEC = 'StandardEventCoordinator' +SEC = 'StandardInterventionDistributionEventCoordinator' CNEC = 'CoverageByNodeEventCoordinator' CHWEC = 'CommunityHealthWorkerEventCoordinator' @@ -22,6 +22,9 @@ DI = 'DelayedIntervention' VAX = 'Vaccine' OI = 'OutbreakIndividual' +IMPP = 'ImportPressure' +NBRM = 'NodeBirthRateMult' +NIM = 'NodeInfectivityMult' VEC_AGE = [0/12*365, 3/12*365, 5/12*365, 7/12*365, 9/12*365] VEC_TAKE = [0.0, 0.0, 0.65, 0.92, 1.0] @@ -43,15 +46,15 @@ def build_node_list(reg_list, node_dict): # ***************************************************************************** -def ce_import_pressure(node_list, +def ce_import_pressure(schjson, node_list, start_day=0.0, duration=1.0, magnitude=1.0, age_yrs=40.0, clade=0, genome=0): # Import pressure - camp_event = s2c.get_class_with_defaults(CE, SPATH) - camp_nodes = s2c.get_class_with_defaults(NSNL, SPATH) - camp_coord = s2c.get_class_with_defaults(SEC, SPATH) - camp_iv = s2c.get_class_with_defaults('ImportPressure', SPATH) + camp_event = s2c.get_class_with_defaults(CE, schema_json=schjson) + camp_nodes = s2c.get_class_with_defaults(NSNL, schema_json=schjson) + camp_coord = s2c.get_class_with_defaults(SEC, schema_json=schjson) + camp_iv = s2c.get_class_with_defaults(IMPP, schema_json=schjson) camp_event.Event_Coordinator_Config = camp_coord camp_event.Start_Day = start_day @@ -98,14 +101,14 @@ def ce_random_numbers(node_list, # ***************************************************************************** -def ce_br_force(node_list, times, values, +def ce_br_force(schjson, node_list, times, values, start_day=0.0): # Birth rate multiplier - camp_event = s2c.get_class_with_defaults(CE, SPATH) - camp_nodes = s2c.get_class_with_defaults(NSNL, SPATH) - camp_coord = s2c.get_class_with_defaults(SEC, SPATH) - camp_iv = s2c.get_class_with_defaults('NodeBirthRateMult', SPATH) + camp_event = s2c.get_class_with_defaults(CE, schema_json=schjson) + camp_nodes = s2c.get_class_with_defaults(NSNL, schema_json=schjson) + camp_coord = s2c.get_class_with_defaults(SEC, schema_json=schjson) + camp_iv = s2c.get_class_with_defaults(NBRM, schema_json=schjson) camp_event.Event_Coordinator_Config = camp_coord camp_event.Start_Day = start_day @@ -123,14 +126,14 @@ def ce_br_force(node_list, times, values, # ***************************************************************************** -def ce_inf_force(node_list, step_init, step_width, step_size=1.0, - start_day=0.0, nreps=-1, dt=1.0): +def ce_inf_force(schjson, node_list, step_init, step_width, + step_size=1.0, start_day=0.0, nreps=-1, dt=1.0): # Infectivity multiplier - camp_event = s2c.get_class_with_defaults(CE, SPATH) - camp_nodes = s2c.get_class_with_defaults(NSNL, SPATH) - camp_coord = s2c.get_class_with_defaults(SEC, SPATH) - camp_iv = s2c.get_class_with_defaults('NodeInfectivityMult', SPATH) + camp_event = s2c.get_class_with_defaults(CE, schema_json=schjson) + camp_nodes = s2c.get_class_with_defaults(NSNL, schema_json=schjson) + camp_coord = s2c.get_class_with_defaults(SEC, schema_json=schjson) + camp_iv = s2c.get_class_with_defaults(NIM, schema_json=schjson) camp_event.Event_Coordinator_Config = camp_coord camp_event.Start_Day = start_day @@ -191,7 +194,7 @@ def ce_inf_mod(node_list, # ***************************************************************************** -def ce_RI(node_list, +def ce_RI(schjson, node_list, coverage=None, start_day=0.0, base_take=1.0, coverage_x=None, coverage_y=None, age_one=300.0, frac_two=None, age_two=475.0, age_std=90.0, @@ -206,13 +209,13 @@ def ce_RI(node_list, coverage_y = [coverage] # Vaccine - camp_event = s2c.get_class_with_defaults(CE, SPATH) - camp_nodes = s2c.get_class_with_defaults(NSNL, SPATH) - camp_coord = s2c.get_class_with_defaults(SEC, SPATH) - camp_iv01 = s2c.get_class_with_defaults(NLHTS, SPATH) - camp_iv02 = s2c.get_class_with_defaults(MID, SPATH) - camp_iv03 = s2c.get_class_with_defaults(DI, SPATH) - camp_iv04 = s2c.get_class_with_defaults(VAX, SPATH) + camp_event = s2c.get_class_with_defaults(CE, schema_json=schjson) + camp_nodes = s2c.get_class_with_defaults(NSNL, schema_json=schjson) + camp_coord = s2c.get_class_with_defaults(SEC, schema_json=schjson) + camp_iv01 = s2c.get_class_with_defaults(NLHTS, schema_json=schjson) + camp_iv02 = s2c.get_class_with_defaults(MID, schema_json=schjson) + camp_iv03 = s2c.get_class_with_defaults(DI, schema_json=schjson) + camp_iv04 = s2c.get_class_with_defaults(VAX, schema_json=schjson) camp_event.Event_Coordinator_Config = camp_coord camp_event.Start_Day = start_day @@ -248,8 +251,8 @@ def ce_RI(node_list, # Second RI dose if (frac_two): - camp_iv05 = s2c.get_class_with_defaults(DI, SPATH) - camp_iv06 = s2c.get_class_with_defaults(VAX, SPATH) + camp_iv05 = s2c.get_class_with_defaults(DI, schema_json=schjson) + camp_iv06 = s2c.get_class_with_defaults(VAX, schema_json=schjson) camp_iv05.Actual_IndividualIntervention_Configs = [camp_iv06] camp_iv05.Coverage = frac_two @@ -316,16 +319,16 @@ def ce_OPV_RI(node_list, # ***************************************************************************** -def ce_SIA(node_list, +def ce_SIA(schjson, node_list, start_day=0.0, yrs_min=0.75, yrs_max=5.0, coverage=0.8, base_take=1.0, acq_fact=0.0, age_dep=False): # Vaccine - camp_event = s2c.get_class_with_defaults(CE, SPATH) - camp_nodes = s2c.get_class_with_defaults(NSNL, SPATH) - camp_coord = s2c.get_class_with_defaults(SEC, SPATH) - camp_iv01 = s2c.get_class_with_defaults(DI, SPATH) - camp_iv02 = s2c.get_class_with_defaults(VAX, SPATH) + camp_event = s2c.get_class_with_defaults(CE, schema_json=schjson) + camp_nodes = s2c.get_class_with_defaults(NSNL, schema_json=schjson) + camp_coord = s2c.get_class_with_defaults(SEC, schema_json=schjson) + camp_iv01 = s2c.get_class_with_defaults(DI, schema_json=schjson) + camp_iv02 = s2c.get_class_with_defaults(VAX, schema_json=schjson) camp_event.Event_Coordinator_Config = camp_coord camp_event.Start_Day = start_day diff --git a/local_python/py_assets_common/emod_constants.py b/local_python/py_assets_common/emod_constants.py index 6b1d69e5..a819c6bd 100644 --- a/local_python/py_assets_common/emod_constants.py +++ b/local_python/py_assets_common/emod_constants.py @@ -2,7 +2,7 @@ # # ***************************************************************************** -API_MIN = '2.0.26' +API_MIN = '3.1.0' COMPS_ID_FILE = 'COMPS_ID.id' COMPS_URL = 'https://comps.idmod.org' @@ -20,13 +20,13 @@ PY_PATH = r'python3' -DOCK_PACK = r'mesokurtic/emodpy:2.1.13' +DOCK_PACK = r'mesokurtic/emodpy:3.1' -VE_PY_PATHS = ['/py_env/lib/python3.9/site-packages/', - '/py_env/lib/python3.10/site-packages/', +VE_PY_PATHS = ['/py_env/lib/python3.10/site-packages/', '/py_env/lib/python3.11/site-packages/', '/py_env/lib/python3.12/site-packages/', - '/py_env/lib/python3.13/site-packages/'] + '/py_env/lib/python3.13/site-packages/', + '/py_env/lib/python3.14/site-packages/'] ID_OS = 'EMOD_OS.id' ID_EXE = 'EMOD_EXE.id' diff --git a/local_python/py_assets_common/emod_demog_func.py b/local_python/py_assets_common/emod_demog_func.py index 6c6c6587..4ddbc995 100644 --- a/local_python/py_assets_common/emod_demog_func.py +++ b/local_python/py_assets_common/emod_demog_func.py @@ -8,14 +8,15 @@ import scipy.optimize as opt from emod_api.demographics.demographics_overlay import DemographicsOverlay +from emod_api.demographics.overlay_node import OverlayNode from emod_api.demographics.age_distribution import AgeDistribution from emod_api.demographics.mortality_distribution import MortalityDistribution from emod_api.demographics.susceptibility_distribution import \ SusceptibilityDistribution -from emod_api.demographics.PropertiesAndAttributes import \ +from emod_api.demographics.properties_and_attributes import \ IndividualAttributes, NodeAttributes -from emod_api.demographics import DemographicsTemplates as DT +from emod_api.demographics.calculators import _computeAgeDist from emod_constants import DEMOG_FILE, PATH_OVERLAY, \ MORT_XVAL, POP_AGE_DAYS, MAX_DAILY_MORT @@ -66,10 +67,17 @@ def demog_vd_over(ref_name, node_list, cb_rate, node_att = NodeAttributes() node_att.birth_rate = cb_rate + # Default node + node_obj = OverlayNode(node_id=0) + node_obj.individual_attributes = ind_att + node_obj.node_attributes = node_att + + # Overlay node list + over_nodes = [OverlayNode(node_id=nobj.forced_id) for nobj in node_list] + # Overlay files - dover_obj = DemographicsOverlay(idref=ref_name, nodes=node_list, - individual_attributes=ind_att, - node_attributes=node_att) + dover_obj = DemographicsOverlay(default_node=node_obj, + nodes=over_nodes, idref=ref_name) nfname = DEMOG_FILE.rsplit('.', 1)[0] + '_vd{:04d}.json'.format(idx) nfname = os.path.join(PATH_OVERLAY, nfname) @@ -126,11 +134,22 @@ def demog_is_over(ref_name, node_list, R0, age_x, age_y=None, idx=0): ind_att = IndividualAttributes() ind_att.susceptibility_distribution = ind_sus + # Node attributes + node_att = NodeAttributes() + + # Default node + node_obj = OverlayNode(node_id=0) + node_obj.individual_attributes = ind_att + node_obj.node_attributes = node_att + + # Overlay node list + over_nodes = [OverlayNode(node_id=nobj.forced_id) for nobj in node_list] + # Overlay files - dover_obj = DemographicsOverlay(idref=ref_name, nodes=node_list, - individual_attributes=ind_att) + dover_obj = DemographicsOverlay(default_node=node_obj, + nodes=over_nodes, idref=ref_name) - dover_obj.raw['Defaults']['NodeAttributes'].clear() + dover_obj.default_node.node_attributes.parameter_dict = dict() nfname = DEMOG_FILE.rsplit('.', 1)[0] + '_is{:04d}.json'.format(idx) nfname = os.path.join(PATH_OVERLAY, nfname) @@ -266,8 +285,8 @@ def demog_vd_calc(fname_pop, start_year, steady_state=False): mort_vec = mort_vec.tolist() forcing_vec = 12*[1.0] # No seasonal forcing - (_, age_x_eq, age_y_eq) = DT._computeAgeDist(b_rate, MORT_XVAL, - mort_vec, forcing_vec) + (_, age_x_eq, age_y_eq) = _computeAgeDist(b_rate, MORT_XVAL, + mort_vec, forcing_vec) age_x = (np.interp(POP_AGE_DAYS, age_y_eq, age_x_eq)).tolist() return (pop_init, mort_year, mort_mat_yr, age_x, b_rate, brmx, brmy) diff --git a/local_python/py_assets_common/emod_preproc_func.py b/local_python/py_assets_common/emod_preproc_func.py index 3cd4a9dd..db92c288 100644 --- a/local_python/py_assets_common/emod_preproc_func.py +++ b/local_python/py_assets_common/emod_preproc_func.py @@ -98,6 +98,10 @@ def standard_pre_process(): # Seed random number generator np.random.seed(sim_index) + # Get schema + with open(SPATH) as fid01: + gdata.schema_json = json.load(fid01) + # Demographics file demographicsBuilder() time.sleep(1) diff --git a/model_covariance01/Assets/python/builder_campaign.py b/model_covariance01/Assets/python/builder_campaign.py index b9fb91b1..4805b499 100644 --- a/model_covariance01/Assets/python/builder_campaign.py +++ b/model_covariance01/Assets/python/builder_campaign.py @@ -16,6 +16,9 @@ def campaignBuilder(): + # Get schema + sch_data = gdata.schema_json + # Variables for this simulation # N/A @@ -23,7 +26,7 @@ def campaignBuilder(): ALL_NODES = gdata.demog_object.node_ids # Import pressure - camp_event = ce_import_pressure(ALL_NODES, duration=5.0) + camp_event = ce_import_pressure(sch_data, ALL_NODES, duration=5.0) camp_module.add(camp_event) # End file construction diff --git a/model_covariance01/Assets/python/builder_demographics.py b/model_covariance01/Assets/python/builder_demographics.py index a8733144..fcd3d350 100644 --- a/model_covariance01/Assets/python/builder_demographics.py +++ b/model_covariance01/Assets/python/builder_demographics.py @@ -6,7 +6,8 @@ import global_data as gdata -from emod_api.demographics.Demographics import Demographics, Node +from emod_api.demographics.demographics import Demographics +from emod_api.demographics.node import Node from emod_constants import DEMOG_FILE @@ -26,18 +27,19 @@ def demographicsBuilder(): # Create primary file ref_name = 'Example_Covariance_Sims' - demog_obj = Demographics(nodes=node_list, idref=ref_name) + demog_obj = Demographics(nodes=node_list, idref=ref_name, + set_defaults=False) # Update defaults in primary file - demog_obj.raw['Defaults']['IndividualAttributes'].clear() - demog_obj.raw['Defaults']['NodeAttributes'].clear() + demog_obj.default_node.individual_attributes.parameter_dict = dict() + demog_obj.default_node.node_attributes.parameter_dict = dict() iadict = dict() iadict['AcquisitionHeterogeneityVariance'] = IND_RISK_VAR - demog_obj.raw['Defaults']['IndividualAttributes'].update(iadict) + demog_obj.default_node.individual_attributes.parameter_dict.update(iadict) # Write primary demographics file - demog_obj.generate_file(name=DEMOG_FILE) + demog_obj.to_file(path=DEMOG_FILE) # Save filename to global data for use in other functions gdata.demog_files.append(DEMOG_FILE) diff --git a/model_covariance01/Assets/python/global_data.py b/model_covariance01/Assets/python/global_data.py index f59a91a9..cb68c622 100644 --- a/model_covariance01/Assets/python/global_data.py +++ b/model_covariance01/Assets/python/global_data.py @@ -7,13 +7,14 @@ # Control params sim_index = 0 var_params = dict() +schema_json = dict() + +# Python in-process +first_call_bool = True # Filename params demog_files = list() demog_object = None -# Other stuff -first_call_bool = True - # ***************************************************************************** diff --git a/model_covariance01/experiment_covariance01/COMPS_ID.id b/model_covariance01/experiment_covariance01/COMPS_ID.id index 38e80671..9011c9c0 100644 --- a/model_covariance01/experiment_covariance01/COMPS_ID.id +++ b/model_covariance01/experiment_covariance01/COMPS_ID.id @@ -1 +1 @@ -2be77b0e-9ea0-f011-aa26-b88303911bc1::Experiment \ No newline at end of file +912b5566-582c-f111-92e2-000d3af5294c::Experiment \ No newline at end of file diff --git a/model_demographics_wpp01/Assets/python/builder_campaign.py b/model_demographics_wpp01/Assets/python/builder_campaign.py index dfc75ed9..c7954ac6 100644 --- a/model_demographics_wpp01/Assets/python/builder_campaign.py +++ b/model_demographics_wpp01/Assets/python/builder_campaign.py @@ -16,6 +16,9 @@ def campaignBuilder(): + # Get schema + sch_data = gdata.schema_json + # Variables for this simulation START_YEAR = gdata.var_params['start_year'] @@ -26,7 +29,8 @@ def campaignBuilder(): BR_MULT_X = gdata.brate_mult_x BR_MULT_Y = gdata.brate_mult_y start_day = 365.0*(START_YEAR-BASE_YEAR) - camp_event = ce_br_force(ALL_NODES, BR_MULT_X, BR_MULT_Y, start_day) + camp_event = ce_br_force(sch_data, ALL_NODES, BR_MULT_X, BR_MULT_Y, + start_day=start_day) camp_module.add(camp_event) # End file construction diff --git a/model_demographics_wpp01/Assets/python/builder_demographics.py b/model_demographics_wpp01/Assets/python/builder_demographics.py index 3d7643ed..09db7578 100644 --- a/model_demographics_wpp01/Assets/python/builder_demographics.py +++ b/model_demographics_wpp01/Assets/python/builder_demographics.py @@ -8,12 +8,11 @@ import global_data as gdata -import numpy as np - -from emod_api.demographics.Demographics import Demographics, Node +from emod_api.demographics.demographics import Demographics +from emod_api.demographics.node import Node from emod_demog_func import demog_vd_calc, demog_vd_over -from emod_constants import DEMOG_FILE, BASE_YEAR +from emod_constants import DEMOG_FILE # ***************************************************************************** @@ -43,23 +42,24 @@ def demographicsBuilder(): # Create primary file ref_name = 'Demographics_Datafile' - demog_obj = Demographics(nodes=node_list, idref=ref_name) + demog_obj = Demographics(nodes=node_list, idref=ref_name, + set_defaults=False) + + # Update defaults in primary file + demog_obj.default_node.individual_attributes.parameter_dict = dict() + demog_obj.default_node.node_attributes.parameter_dict = dict() + + # Write primary demographics file + demog_obj.to_file(path=DEMOG_FILE) # Save filename to global data for use in other functions gdata.demog_files.append(DEMOG_FILE) - # Update defaults in primary file - demog_obj.raw['Defaults']['IndividualAttributes'].clear() - demog_obj.raw['Defaults']['NodeAttributes'].clear() - # Write vital dynamics overlay nfname = demog_vd_over(ref_name, node_list, vd_tup[4], vd_tup[1], vd_tup[2], vd_tup[3]) gdata.demog_files.append(nfname) - # Write primary demographics file - demog_obj.generate_file(name=DEMOG_FILE) - # Save the demographics object for use in other functions gdata.demog_object = demog_obj diff --git a/model_demographics_wpp01/Assets/python/global_data.py b/model_demographics_wpp01/Assets/python/global_data.py index acfa4671..469ce1dd 100644 --- a/model_demographics_wpp01/Assets/python/global_data.py +++ b/model_demographics_wpp01/Assets/python/global_data.py @@ -7,6 +7,10 @@ # Control params sim_index = 0 var_params = dict() +schema_json = dict() + +# Python in-process +first_call_bool = True # Filename params demog_files = list() @@ -14,8 +18,6 @@ demog_object = None # Other stuff -first_call_bool = True - init_pop = None brate_mult_x = None diff --git a/model_demographics_wpp01/experiment_estimates01/COMPS_ID.id b/model_demographics_wpp01/experiment_estimates01/COMPS_ID.id index 7c69d536..44508433 100644 --- a/model_demographics_wpp01/experiment_estimates01/COMPS_ID.id +++ b/model_demographics_wpp01/experiment_estimates01/COMPS_ID.id @@ -1 +1 @@ -c945686f-a3a0-f011-aa26-b88303911bc1::Experiment \ No newline at end of file +f09bf222-5c2c-f111-92e2-000d3af5294c::Experiment \ No newline at end of file diff --git a/model_demographics_wpp01/experiment_projections01/COMPS_ID.id b/model_demographics_wpp01/experiment_projections01/COMPS_ID.id index 77cf7750..b6a0ae4e 100644 --- a/model_demographics_wpp01/experiment_projections01/COMPS_ID.id +++ b/model_demographics_wpp01/experiment_projections01/COMPS_ID.id @@ -1 +1 @@ -af6b17e3-a3a0-f011-aa26-b88303911bc1::Experiment \ No newline at end of file +d71d5b2c-5c2c-f111-92e2-000d3af5294c::Experiment \ No newline at end of file diff --git a/model_demographics_wpp01/figure_pyramids/make_fig_pyramids.py b/model_demographics_wpp01/figure_pyramids/make_fig_pyramids.py index b067f2b3..fdce4eab 100644 --- a/model_demographics_wpp01/figure_pyramids/make_fig_pyramids.py +++ b/model_demographics_wpp01/figure_pyramids/make_fig_pyramids.py @@ -98,7 +98,7 @@ def make_fig(): # Save figure plt.tight_layout() - plt.savefig('fig_pyr_{:s}01_{:s}.png'.format(pop_dat_str, dirname)) + plt.savefig('fig_pyr_{:s}_{:s}.png'.format(pop_dat_str, dirname)) plt.close() return None diff --git a/model_measles02/Assets/data/pop_dat_AGO.csv b/model_measles01/Assets/data/pop_dat_AGO.csv similarity index 100% rename from model_measles02/Assets/data/pop_dat_AGO.csv rename to model_measles01/Assets/data/pop_dat_AGO.csv diff --git a/model_measles02/Assets/data/pop_dat_CAF.csv b/model_measles01/Assets/data/pop_dat_CAF.csv similarity index 100% rename from model_measles02/Assets/data/pop_dat_CAF.csv rename to model_measles01/Assets/data/pop_dat_CAF.csv diff --git a/model_measles02/Assets/data/pop_dat_CMR.csv b/model_measles01/Assets/data/pop_dat_CMR.csv similarity index 100% rename from model_measles02/Assets/data/pop_dat_CMR.csv rename to model_measles01/Assets/data/pop_dat_CMR.csv diff --git a/model_measles02/Assets/data/pop_dat_GHA.csv b/model_measles01/Assets/data/pop_dat_GHA.csv similarity index 100% rename from model_measles02/Assets/data/pop_dat_GHA.csv rename to model_measles01/Assets/data/pop_dat_GHA.csv diff --git a/model_measles02/Assets/data/pop_dat_GNB.csv b/model_measles01/Assets/data/pop_dat_GNB.csv similarity index 100% rename from model_measles02/Assets/data/pop_dat_GNB.csv rename to model_measles01/Assets/data/pop_dat_GNB.csv diff --git a/model_measles02/Assets/data/pop_dat_SEN.csv b/model_measles01/Assets/data/pop_dat_SEN.csv similarity index 100% rename from model_measles02/Assets/data/pop_dat_SEN.csv rename to model_measles01/Assets/data/pop_dat_SEN.csv diff --git a/model_measles01/Assets/python/builder_campaign.py b/model_measles01/Assets/python/builder_campaign.py index 5122e5f5..f1160cc3 100644 --- a/model_measles01/Assets/python/builder_campaign.py +++ b/model_measles01/Assets/python/builder_campaign.py @@ -18,6 +18,9 @@ def campaignBuilder(): + # Get schema + sch_data = gdata.schema_json + # Variables for this simulation MCV1_RATE = gdata.var_params['MCV1'] MCV2_FRAC = gdata.var_params['MCV2'] @@ -27,7 +30,9 @@ def campaignBuilder(): SIA_START = gdata.var_params['sia_start_year'] SIA_COVERAGE = gdata.var_params['sia_coverage'] + SIA_INT_YRS = gdata.var_params['sia_interval_yrs'] SIA_MIN_AGE_YR = gdata.var_params['sia_min_age_yr'] + SIA_MAX_AGE_YR = gdata.var_params['sia_max_age_yr'] MAT_FACTOR = gdata.var_params['mat_factor'] @@ -38,19 +43,21 @@ def campaignBuilder(): BR_MULT_X = gdata.brate_mult_x BR_MULT_Y = gdata.brate_mult_y start_day = 365.0*(gdata.start_year-BASE_YEAR) - camp_event = ce_br_force(ALL_NODES, BR_MULT_X, BR_MULT_Y, start_day) + camp_event = ce_br_force(sch_data, ALL_NODES, BR_MULT_X, BR_MULT_Y, + start_day=start_day) camp_module.add(camp_event) # R0 seasonality start_day = 365.0*(gdata.start_year-BASE_YEAR) - camp_event = ce_inf_force(ALL_NODES, 15.0, 60.0, 1.30, - dt=gdata.t_step_days) + camp_event = ce_inf_force(sch_data, ALL_NODES, 15.0, 60.0, + step_size=1.30, dt=gdata.t_step_days) camp_module.add(camp_event) # RI start_day = 365.0*(gdata.start_year-BASE_YEAR) acq_fact = MAT_FACTOR/2.0 - camp_event = ce_RI(ALL_NODES, coverage=MCV1_RATE, start_day=start_day, + camp_event = ce_RI(sch_data, ALL_NODES, + coverage=MCV1_RATE, start_day=start_day, base_take=0.95, acq_fact=acq_fact, age_dep=AGE_DEP, age_one=MCV1_AGE, frac_two=MCV2_FRAC, age_std=60.0) camp_module.add(camp_event) @@ -62,14 +69,20 @@ def campaignBuilder(): acq_fact = MAT_FACTOR/2.0 while (sia_year < gdata.run_years): - sia_year = sia_year + max(2.0, np.random.poisson(sia_rate)) start_sia = 365.0*sia_year+start_day - camp_event = ce_SIA(ALL_NODES, start_day=start_sia, - yrs_min=SIA_MIN_AGE_YR, coverage=SIA_COVERAGE, - base_take=0.95, acq_fact=acq_fact, age_dep=AGE_DEP) + camp_event = ce_SIA(sch_data, ALL_NODES, start_day=start_sia, + yrs_max=SIA_MAX_AGE_YR, yrs_min=SIA_MIN_AGE_YR, + coverage=SIA_COVERAGE, base_take=0.95, + acq_fact=acq_fact, age_dep=AGE_DEP) camp_module.add(camp_event) + d_years = SIA_INT_YRS + if (d_years < 0): + d_years = max(2.0, np.random.poisson(sia_rate)) + else: + sia_year = sia_year + d_years + # End file construction camp_module.save(filename=CAMP_FILE) diff --git a/model_measles01/Assets/python/builder_demographics.py b/model_measles01/Assets/python/builder_demographics.py index 8570f623..4d8c071e 100644 --- a/model_measles01/Assets/python/builder_demographics.py +++ b/model_measles01/Assets/python/builder_demographics.py @@ -10,7 +10,8 @@ import numpy as np -from emod_api.demographics.Demographics import Demographics, Node +from emod_api.demographics.demographics import Demographics +from emod_api.demographics.node import Node from emod_demog_func import demog_vd_calc, demog_vd_over, demog_is_over from emod_constants import DEMOG_FILE, DEMOG_IRS @@ -23,10 +24,11 @@ def demographicsBuilder(): # Variables for this simulation R0 = gdata.var_params['R0'] LOG10_IMP = gdata.var_params['log10_import_mult'] + REF_CODE = gdata.var_params['ref_code'] REF_YEAR = gdata.var_params['ref_year'] # Demographic reference data file - dat_file = 'pop_dat_COD.csv' + dat_file = f'pop_dat_{REF_CODE}.csv' fname_pop = os.path.join('Assets', 'data', dat_file) # Calculate vital dynamics @@ -48,27 +50,28 @@ def demographicsBuilder(): # Create primary file ref_name = 'Demographics_Datafile' - demog_obj = Demographics(nodes=node_list, idref=ref_name) + demog_obj = Demographics(nodes=node_list, idref=ref_name, + set_defaults=False) + + # Update defaults in primary file + demog_obj.default_node.individual_attributes.parameter_dict = dict() + demog_obj.default_node.node_attributes.parameter_dict = dict() + + # Write primary demographics file + demog_obj.to_file(path=DEMOG_FILE) # Save filename to global data for use in other functions gdata.demog_files.append(DEMOG_FILE) - # Update defaults in primary file - demog_obj.raw['Defaults']['IndividualAttributes'].clear() - demog_obj.raw['Defaults']['NodeAttributes'].clear() + # Write initial susceptibility overlay + nfname = demog_is_over(ref_name, node_list, R0, vd_tup[3]) + gdata.demog_files.append(nfname) # Write vital dynamics overlay nfname = demog_vd_over(ref_name, node_list, vd_tup[4], vd_tup[1], vd_tup[2], vd_tup[3]) gdata.demog_files.append(nfname) - # Write initial susceptibility overlay - nfname = demog_is_over(ref_name, node_list, R0, vd_tup[3]) - gdata.demog_files.append(nfname) - - # Write primary demographics file - demog_obj.generate_file(name=DEMOG_FILE) - # Save the demographics object for use in other functions gdata.demog_object = demog_obj diff --git a/model_measles01/Assets/python/dtk_post_process.py b/model_measles01/Assets/python/dtk_post_process.py index 47df60f5..00885ad4 100644 --- a/model_measles01/Assets/python/dtk_post_process.py +++ b/model_measles01/Assets/python/dtk_post_process.py @@ -9,7 +9,7 @@ import numpy as np -from emod_postproc_func import post_proc_poppyr, post_proc_prev +from emod_postproc_func import post_proc_poppyr, post_proc_prev, post_proc_cost from emod_constants import SQL_TIME, SQL_MCW, SQL_AGE, O_FILE, MO_DAYS, \ SQL_FILE, BASE_YEAR @@ -29,6 +29,9 @@ def application(output_path): # Timeseries of prevalence post_proc_prev(output_path, parsed_dat[key_str]) + # Retain campaign cost output channel + post_proc_cost(output_path, parsed_dat[key_str]) + # Connect to SQL database; retreive new entries connection_obj = sqlite3.connect(SQL_FILE) cursor_obj = connection_obj.cursor() diff --git a/model_measles01/Assets/python/global_data.py b/model_measles01/Assets/python/global_data.py index b4760385..b156cd79 100644 --- a/model_measles01/Assets/python/global_data.py +++ b/model_measles01/Assets/python/global_data.py @@ -7,6 +7,10 @@ # Control params sim_index = 0 var_params = dict() +schema_json = dict() + +# Python in-process +first_call_bool = True # Filename params demog_files = list() @@ -14,8 +18,6 @@ demog_object = None # Other stuff -first_call_bool = True - init_pop = 250000 inf_prd_mean = 18.0 diff --git a/model_measles01/experiment_surf_base/make01_param_dict.py b/model_measles01/experiment_surf_base/make01_param_dict.py index 3fbc00df..efd269d0 100644 --- a/model_measles01/experiment_surf_base/make01_param_dict.py +++ b/model_measles01/experiment_surf_base/make01_param_dict.py @@ -56,13 +56,16 @@ def write_param_dict(): vals = 365.0*np.random.choice(np.arange(3, 19)/12, size=NSIMS) P_VAR['MCV1_age'] = (np.round(vals, 2)).tolist() - # Reference year for population; uses UN WPP for DRC + # Reference country code and year for population pyramid + P_CON['ref_code'] = 'COD' P_CON['ref_year'] = 2040 # SIA parameters P_CON['sia_start_year'] = 1000 + P_CON['sia_interval_yrs'] = -1 P_CON['sia_coverage'] = 0.60 P_CON['sia_min_age_yr'] = 0.75 + P_CON['sia_max_age_yr'] = 5.00 # Log10 of multiplier on exogeneous case importation P_CON['log10_import_mult'] = 1.0 diff --git a/model_measles01/experiment_surf_ideal/make01_param_dict.py b/model_measles01/experiment_surf_ideal/make01_param_dict.py index 464334ea..371b50cb 100644 --- a/model_measles01/experiment_surf_ideal/make01_param_dict.py +++ b/model_measles01/experiment_surf_ideal/make01_param_dict.py @@ -56,13 +56,16 @@ def write_param_dict(): vals = 365.0*np.random.choice(np.arange(3, 19)/12, size=NSIMS) P_VAR['MCV1_age'] = (np.round(vals, 2)).tolist() - # Reference year for population; uses UN WPP for DRC + # Reference country code and year for population pyramid + P_CON['ref_code'] = 'COD' P_CON['ref_year'] = 2040 # SIA parameters P_CON['sia_start_year'] = 1000 + P_CON['sia_interval_yrs'] = -1 P_CON['sia_coverage'] = 0.60 P_CON['sia_min_age_yr'] = 0.75 + P_CON['sia_max_age_yr'] = 5.00 # Log10 of multiplier on exogeneous case importation P_CON['log10_import_mult'] = 1.0 diff --git a/model_measles01/experiment_sweep_base/make01_param_dict.py b/model_measles01/experiment_sweep_base/make01_param_dict.py index ebf61916..70a864f8 100644 --- a/model_measles01/experiment_sweep_base/make01_param_dict.py +++ b/model_measles01/experiment_sweep_base/make01_param_dict.py @@ -56,13 +56,16 @@ def write_param_dict(): vals = np.random.choice([180.0, 270.0], size=NSIMS) P_VAR['MCV1_age'] = (np.round(vals, 2)).tolist() - # Reference year for population; uses UN WPP for DRC + # Reference country code and year for population pyramid + P_CON['ref_code'] = 'COD' P_CON['ref_year'] = 2040 # SIA parameters P_CON['sia_start_year'] = 1000 + P_CON['sia_interval_yrs'] = -1 P_CON['sia_coverage'] = 0.60 P_CON['sia_min_age_yr'] = 0.75 + P_CON['sia_max_age_yr'] = 5.00 # Log10 of multiplier on exogeneous case importation P_CON['log10_import_mult'] = 1.0 diff --git a/model_measles01/experiment_sweep_base_MCV2/make01_param_dict.py b/model_measles01/experiment_sweep_base_MCV2/make01_param_dict.py index aabe5e3b..ecc5ae92 100644 --- a/model_measles01/experiment_sweep_base_MCV2/make01_param_dict.py +++ b/model_measles01/experiment_sweep_base_MCV2/make01_param_dict.py @@ -56,13 +56,16 @@ def write_param_dict(): vals = np.random.choice([180.0, 270.0], size=NSIMS) P_VAR['MCV1_age'] = (np.round(vals, 2)).tolist() - # Reference year for population; uses UN WPP for DRC + # Reference country code and year for population pyramid + P_CON['ref_code'] = 'COD' P_CON['ref_year'] = 2040 # SIA parameters P_CON['sia_start_year'] = 1000 + P_CON['sia_interval_yrs'] = -1 P_CON['sia_coverage'] = 0.60 P_CON['sia_min_age_yr'] = 0.75 + P_CON['sia_max_age_yr'] = 5.00 # Log10 of multiplier on exogeneous case importation P_CON['log10_import_mult'] = 1.0 diff --git a/model_measles01/experiment_sweep_base_SIAs/make01_param_dict.py b/model_measles01/experiment_sweep_base_SIAs/make01_param_dict.py index c8b8b747..9b922fa7 100644 --- a/model_measles01/experiment_sweep_base_SIAs/make01_param_dict.py +++ b/model_measles01/experiment_sweep_base_SIAs/make01_param_dict.py @@ -56,14 +56,17 @@ def write_param_dict(): vals = np.random.choice([180.0, 270.0], size=NSIMS) P_VAR['MCV1_age'] = (np.round(vals, 2)).tolist() - # Reference year for population; uses UN WPP for DRC + # Reference country code and year for population pyramid + P_CON['ref_code'] = 'COD' P_CON['ref_year'] = 2040 # SIA parameters P_CON['sia_start_year'] = 18 + P_CON['sia_interval_yrs'] = -1 P_CON['sia_coverage'] = 0.60 vals = np.random.choice([0.5, 0.75], size=NSIMS) P_VAR['sia_min_age_yr'] = (np.round(vals, 2)).tolist() + P_CON['sia_max_age_yr'] = 5.00 # Log10 of multiplier on exogeneous case importation P_CON['log10_import_mult'] = 1.0 diff --git a/model_measles02/experiment_none_ri70/COMPS_ID.id b/model_measles02/experiment_none_ri70/COMPS_ID.id deleted file mode 100644 index 6345c0c2..00000000 --- a/model_measles02/experiment_none_ri70/COMPS_ID.id +++ /dev/null @@ -1 +0,0 @@ -500573d8-96f8-f011-aa2b-b88303911bc1::Experiment \ No newline at end of file diff --git a/model_measles02/experiment_sia3yr60cv_ri70/COMPS_ID.id b/model_measles02/experiment_sia3yr60cv_ri70/COMPS_ID.id deleted file mode 100644 index b4601075..00000000 --- a/model_measles02/experiment_sia3yr60cv_ri70/COMPS_ID.id +++ /dev/null @@ -1 +0,0 @@ -57f79ce0-96f8-f011-aa2b-b88303911bc1::Experiment \ No newline at end of file diff --git a/model_measles03/Assets/data/pop_dat_AGO.csv b/model_measles03/Assets/data/pop_dat_AGO.csv new file mode 100644 index 00000000..8ea088d8 --- /dev/null +++ b/model_measles03/Assets/data/pop_dat_AGO.csv @@ -0,0 +1,22 @@ +1950,1955,1960,1965,1970,1975,1980,1985,1990,1995,2000,2005,2010,2015,2020,2025,2030,2035,2040,2045,2050,2055,2060,2065,2070,2075,2080,2085,2090,2095,2100 +722000,849000,992000,1099000,1180000,1327000,1586000,1941000,2331000,2677000,3064000,3642000,4395000,5158000,5847000,6473000,7051000,7640000,8181000,8632000,8985000,9290000,9517000,9658000,9783000,9872000,9866000,9909000,9888000,9838000,9731000 +562000,617000,723000,835000,923000,1060000,1203000,1447000,1768000,2131000,2466000,2856000,3471000,4267000,5056000,5743000,6363000,6943000,7533000,8077000,8531000,8889000,9200000,9432000,9579000,9711000,9805000,9804000,9852000,9836000,9791000 +507000,530000,547000,646000,732000,897000,1034000,1176000,1411000,1725000,2084000,2420000,2822000,3445000,4243000,5025000,5709000,6328000,6908000,7497000,8042000,8497000,8855000,9167000,9401000,9550000,9683000,9779000,9780000,9829000,9814000 +460000,488000,480000,493000,568000,723000,890000,1027000,1161000,1390000,1705000,2067000,2413000,2824000,3439000,4215000,4992000,5675000,6293000,6872000,7462000,8006000,8461000,8820000,9133000,9367000,9518000,9652000,9749000,9751000,9801000 +412000,447000,484000,456000,461000,567000,730000,901000,1023000,1149000,1389000,1711000,2089000,2452000,2842000,3406000,4172000,4946000,5626000,6243000,6821000,7408000,7951000,8406000,8765000,9079000,9314000,9466000,9601000,9700000,9703000 +360000,397000,452000,462000,432000,460000,579000,747000,898000,1010000,1152000,1400000,1740000,2136000,2478000,2808000,3361000,4122000,4890000,5567000,6182000,6757000,7343000,7885000,8339000,8698000,9013000,9250000,9403000,9540000,9640000 +312000,341000,380000,413000,415000,427000,468000,591000,741000,881000,1005000,1155000,1417000,1771000,2149000,2440000,2764000,3312000,4066000,4828000,5501000,6112000,6686000,7269000,7809000,8263000,8623000,8938000,9177000,9332000,9471000 +265000,292000,307000,329000,346000,403000,425000,472000,581000,719000,865000,994000,1155000,1427000,1767000,2107000,2392000,2712000,3254000,4000000,4755000,5422000,6030000,6600000,7181000,7719000,8173000,8534000,8851000,9091000,9249000 +219000,243000,248000,252000,256000,332000,393000,418000,457000,558000,698000,843000,980000,1149000,1410000,1720000,2052000,2333000,2650000,3184000,3919000,4664000,5324000,5925000,6491000,7069000,7605000,8058000,8421000,8739000,8982000 +180000,198000,194000,196000,184000,243000,319000,378000,399000,434000,534000,671000,819000,960000,1121000,1360000,1662000,1986000,2263000,2574000,3098000,3818000,4548000,5198000,5791000,6352000,6924000,7457000,7909000,8272000,8593000 +148000,160000,152000,152000,142000,172000,229000,301000,353000,372000,409000,506000,641000,788000,922000,1067000,1297000,1589000,1903000,2172000,2475000,2984000,3683000,4394000,5028000,5610000,6161000,6726000,7253000,7702000,8067000 +118000,130000,127000,122000,116000,130000,159000,211000,273000,321000,342000,378000,473000,603000,741000,859000,1000000,1219000,1496000,1796000,2054000,2346000,2833000,3503000,4186000,4799000,5364000,5903000,6455000,6974000,7421000 +81000,101000,107000,103000,97000,101000,115000,140000,184000,239000,284000,305000,342000,431000,550000,669000,783000,914000,1117000,1375000,1654000,1896000,2172000,2630000,3260000,3906000,4489000,5030000,5550000,6087000,6596000 +60000,65000,79000,82000,77000,79000,84000,95000,114000,151000,198000,238000,261000,296000,373000,471000,581000,682000,799000,980000,1210000,1461000,1681000,1932000,2349000,2922000,3513000,4052000,4559000,5051000,5564000 +40000,43000,44000,53000,54000,57000,59000,62000,69000,84000,113000,151000,186000,208000,237000,294000,379000,469000,554000,652000,803000,996000,1209000,1397000,1614000,1974000,2468000,2984000,3463000,3920000,4374000 +20000,24000,25000,25000,30000,33000,35000,37000,38000,43000,54000,74000,103000,130000,146000,164000,209000,271000,337000,400000,474000,588000,735000,898000,1046000,1219000,1503000,1895000,2312000,2709000,3098000 +8000,10000,12000,12000,12000,15000,17000,18000,18000,19000,22000,29000,42000,59000,76000,84000,96000,124000,162000,203000,243000,291000,364000,460000,567000,667000,787000,984000,1258000,1556000,1849000 +3000,3000,4000,4000,4000,4000,6000,6000,6000,7000,7000,9000,12000,18000,26000,32000,37000,43000,56000,74000,94000,114000,138000,175000,224000,280000,334000,401000,513000,669000,844000 +0,1000,1000,1000,1000,1000,1000,2000,2000,2000,2000,2000,3000,4000,6000,7000,10000,12000,14000,18000,24000,30000,37000,46000,59000,77000,98000,120000,148000,195000,261000 +0,0,0,0,0,0,0,0,0,0,0,1000,1000,1000,1000,1000,1000,2000,2000,3000,4000,5000,6000,8000,10000,13000,17000,22000,28000,36000,49000 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000,1000,1000,1000,2000,2000,3000,4000,5000 diff --git a/model_measles03/Assets/data/pop_dat_CAF.csv b/model_measles03/Assets/data/pop_dat_CAF.csv new file mode 100644 index 00000000..2e1c6e0a --- /dev/null +++ b/model_measles03/Assets/data/pop_dat_CAF.csv @@ -0,0 +1,22 @@ +1950,1955,1960,1965,1970,1975,1980,1985,1990,1995,2000,2005,2010,2015,2020,2025,2030,2035,2040,2045,2050,2055,2060,2065,2070,2075,2080,2085,2090,2095,2100 +214000,247000,270000,303000,352000,389000,418000,469000,527000,593000,665000,740000,833000,894000,956000,1110000,1267000,1373000,1421000,1449000,1470000,1490000,1496000,1487000,1471000,1443000,1416000,1389000,1371000,1338000,1304000 +165000,187000,219000,243000,277000,324000,339000,360000,420000,499000,562000,627000,698000,779000,855000,923000,1079000,1234000,1340000,1389000,1418000,1440000,1462000,1469000,1462000,1447000,1421000,1395000,1371000,1353000,1322000 +148000,159000,181000,213000,237000,270000,294000,301000,332000,416000,492000,549000,614000,677000,765000,844000,913000,1069000,1223000,1329000,1378000,1407000,1430000,1452000,1459000,1453000,1439000,1413000,1388000,1363000,1347000 +135000,143000,155000,176000,208000,229000,248000,268000,281000,330000,410000,475000,528000,565000,653000,749000,833000,902000,1057000,1211000,1316000,1365000,1395000,1418000,1440000,1448000,1442000,1428000,1403000,1379000,1355000 +123000,130000,138000,150000,171000,195000,214000,230000,252000,278000,323000,387000,436000,424000,514000,619000,730000,815000,884000,1038000,1190000,1294000,1344000,1374000,1398000,1421000,1429000,1424000,1411000,1387000,1363000 +109000,117000,124000,132000,144000,157000,185000,203000,221000,247000,267000,297000,342000,319000,365000,472000,596000,708000,792000,861000,1013000,1163000,1267000,1318000,1348000,1373000,1396000,1406000,1402000,1390000,1367000 +95000,102000,110000,118000,126000,132000,146000,173000,193000,214000,235000,244000,258000,245000,269000,329000,452000,575000,684000,767000,836000,986000,1134000,1238000,1289000,1320000,1346000,1370000,1381000,1378000,1367000 +86000,88000,96000,104000,112000,116000,119000,131000,161000,185000,201000,212000,212000,188000,207000,241000,312000,432000,552000,659000,741000,810000,957000,1103000,1206000,1257000,1290000,1316000,1342000,1354000,1353000 +77000,79000,82000,90000,98000,103000,100000,99000,116000,152000,171000,180000,185000,161000,160000,185000,227000,296000,412000,528000,633000,713000,781000,924000,1068000,1170000,1221000,1255000,1283000,1310000,1323000 +67000,70000,73000,76000,84000,90000,85000,79000,84000,109000,140000,152000,157000,147000,139000,142000,173000,213000,279000,390000,502000,603000,682000,748000,888000,1028000,1128000,1180000,1215000,1244000,1272000 +59000,60000,63000,66000,70000,76000,71000,64000,63000,78000,98000,122000,132000,127000,128000,123000,131000,160000,198000,261000,366000,473000,569000,645000,710000,844000,980000,1077000,1129000,1164000,1194000 +47000,52000,53000,56000,60000,62000,59000,52000,49000,57000,68000,83000,103000,107000,110000,112000,111000,119000,146000,181000,240000,338000,438000,529000,600000,663000,790000,919000,1013000,1064000,1100000 +40000,39000,44000,45000,48000,51000,46000,40000,37000,42000,48000,56000,68000,82000,90000,92000,98000,97000,105000,129000,161000,215000,304000,395000,479000,545000,603000,722000,842000,930000,980000 +32000,31000,31000,35000,36000,39000,36000,30000,27000,30000,33000,36000,42000,50000,65000,71000,76000,81000,81000,88000,109000,137000,184000,261000,340000,414000,473000,526000,631000,739000,820000 +22000,22000,21000,22000,25000,26000,26000,23000,19000,20000,22000,23000,26000,29000,37000,47000,54000,59000,63000,64000,70000,87000,109000,147000,210000,275000,336000,386000,431000,520000,611000 +12000,12000,13000,13000,13000,15000,17000,16000,14000,12000,13000,14000,15000,15000,19000,24000,33000,38000,42000,45000,45000,50000,63000,79000,107000,154000,202000,248000,286000,321000,389000 +5000,5000,5000,6000,6000,6000,8000,9000,9000,8000,7000,7000,8000,7000,8000,10000,14000,20000,23000,26000,28000,28000,31000,39000,50000,68000,97000,128000,158000,182000,206000 +1000,1000,2000,2000,2000,2000,3000,4000,4000,4000,3000,3000,3000,2000,3000,3000,5000,7000,9000,11000,12000,13000,13000,15000,19000,24000,33000,48000,63000,78000,90000 +0,0,0,0,0,0,1000,1000,1000,1000,1000,1000,1000,0,1000,1000,1000,2000,2000,3000,4000,4000,4000,4000,5000,6000,8000,11000,16000,22000,27000 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000,1000,1000,1000,1000,1000,1000,2000,2000,3000,5000 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/model_measles03/Assets/data/pop_dat_CMR.csv b/model_measles03/Assets/data/pop_dat_CMR.csv new file mode 100644 index 00000000..98cb1083 --- /dev/null +++ b/model_measles03/Assets/data/pop_dat_CMR.csv @@ -0,0 +1,22 @@ +1950,1955,1960,1965,1970,1975,1980,1985,1990,1995,2000,2005,2010,2015,2020,2025,2030,2035,2040,2045,2050,2055,2060,2065,2070,2075,2080,2085,2090,2095,2100 +666000,718000,830000,976000,1136000,1324000,1550000,1834000,2123000,2368000,2588000,2972000,3419000,3812000,4277000,4559000,4827000,5134000,5459000,5738000,5972000,6121000,6252000,6386000,6488000,6559000,6591000,6585000,6573000,6512000,6451000 +540000,563000,625000,740000,885000,1051000,1234000,1455000,1746000,2023000,2250000,2467000,2853000,3316000,3725000,4200000,4479000,4748000,5056000,5382000,5663000,5899000,6052000,6186000,6324000,6429000,6504000,6540000,6537000,6529000,6472000 +485000,516000,543000,606000,721000,866000,1030000,1210000,1433000,1720000,1990000,2216000,2435000,2827000,3290000,3701000,4173000,4452000,4721000,5029000,5356000,5637000,5873000,6027000,6162000,6300000,6407000,6483000,6520000,6518000,6512000 +432000,468000,500000,529000,593000,707000,852000,1005000,1191000,1409000,1689000,1956000,2184000,2420000,2800000,3264000,3673000,4144000,4423000,4693000,5000000,5327000,5608000,5845000,5999000,6135000,6274000,6381000,6458000,6496000,6495000 +382000,415000,448000,480000,514000,578000,689000,813000,980000,1158000,1368000,1640000,1908000,2167000,2382000,2763000,3224000,3631000,4100000,4379000,4649000,4956000,5282000,5563000,5799000,5954000,6091000,6230000,6338000,6416000,6456000 +335000,364000,393000,422000,464000,498000,558000,648000,786000,944000,1112000,1313000,1584000,1884000,2124000,2340000,2718000,3175000,3580000,4046000,4325000,4594000,4901000,5226000,5506000,5743000,5899000,6037000,6177000,6287000,6366000 +292000,318000,344000,369000,406000,448000,479000,524000,624000,753000,902000,1062000,1262000,1555000,1840000,2079000,2294000,2669000,3122000,3524000,3986000,4265000,4534000,4840000,5164000,5444000,5681000,5837000,5977000,6119000,6230000 +253000,276000,300000,323000,354000,390000,429000,450000,502000,596000,716000,857000,1014000,1229000,1511000,1792000,2029000,2243000,2613000,3061000,3459000,3918000,4195000,4464000,4768000,5091000,5371000,5609000,5767000,5909000,6053000 +217000,238000,259000,280000,307000,338000,372000,403000,430000,477000,564000,676000,813000,980000,1187000,1461000,1738000,1972000,2183000,2548000,2989000,3382000,3835000,4110000,4377000,4680000,5002000,5282000,5520000,5681000,5825000 +185000,203000,221000,240000,264000,291000,320000,349000,383000,406000,448000,528000,637000,777000,937000,1135000,1405000,1675000,1904000,2112000,2468000,2900000,3286000,3731000,4003000,4269000,4569000,4889000,5168000,5407000,5570000 +155000,170000,186000,203000,224000,248000,272000,297000,327000,357000,376000,414000,491000,600000,733000,882000,1078000,1337000,1597000,1819000,2021000,2367000,2786000,3161000,3594000,3862000,4124000,4420000,4736000,5013000,5252000 +126000,139000,153000,168000,185000,206000,227000,249000,274000,300000,325000,341000,377000,453000,555000,675000,822000,1007000,1252000,1499000,1710000,1905000,2235000,2635000,2996000,3412000,3673000,3929000,4220000,4530000,4803000 +98000,109000,121000,133000,148000,165000,183000,202000,222000,243000,264000,286000,301000,337000,406000,493000,611000,746000,916000,1142000,1371000,1568000,1751000,2060000,2435000,2775000,3168000,3419000,3667000,3949000,4250000 +70000,79000,88000,98000,110000,124000,138000,154000,171000,187000,202000,220000,239000,255000,287000,340000,425000,528000,647000,797000,997000,1201000,1377000,1543000,1822000,2161000,2470000,2830000,3065000,3300000,3567000 +45000,51000,57000,65000,74000,84000,95000,106000,119000,132000,143000,155000,170000,187000,200000,221000,272000,341000,426000,524000,649000,814000,985000,1134000,1277000,1516000,1805000,2073000,2387000,2599000,2813000 +24000,27000,31000,36000,42000,48000,56000,63000,71000,80000,89000,97000,107000,118000,131000,135000,158000,195000,246000,309000,382000,475000,599000,728000,844000,956000,1142000,1369000,1583000,1836000,2013000 +8000,12000,14000,16000,19000,22000,26000,30000,35000,40000,45000,51000,56000,63000,70000,74000,81000,95000,119000,151000,190000,236000,295000,375000,459000,536000,612000,738000,894000,1043000,1221000 +3000,3000,4000,5000,6000,7000,9000,10000,12000,14000,17000,19000,22000,25000,28000,28000,34000,37000,44000,56000,71000,90000,112000,142000,182000,225000,265000,307000,375000,460000,543000 +0,1000,1000,1000,1000,2000,2000,2000,3000,3000,4000,5000,6000,7000,8000,7000,9000,11000,12000,14000,18000,23000,30000,37000,48000,62000,77000,92000,108000,135000,168000 +0,0,0,0,0,0,0,0,0,0,1000,1000,1000,1000,1000,1000,1000,2000,2000,2000,3000,4000,5000,6000,8000,10000,13000,17000,20000,24000,31000 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000,1000,1000,1000,2000,2000,3000,3000 diff --git a/model_measles02/Assets/data/pop_dat_COD.csv b/model_measles03/Assets/data/pop_dat_COD.csv similarity index 100% rename from model_measles02/Assets/data/pop_dat_COD.csv rename to model_measles03/Assets/data/pop_dat_COD.csv diff --git a/model_measles03/Assets/data/pop_dat_GHA.csv b/model_measles03/Assets/data/pop_dat_GHA.csv new file mode 100644 index 00000000..14348290 --- /dev/null +++ b/model_measles03/Assets/data/pop_dat_GHA.csv @@ -0,0 +1,22 @@ +1950,1955,1960,1965,1970,1975,1980,1985,1990,1995,2000,2005,2010,2015,2020,2025,2030,2035,2040,2045,2050,2055,2060,2065,2070,2075,2080,2085,2090,2095,2100 +843000,1112000,1360000,1544000,1684000,1871000,2214000,2597000,2748000,2853000,3016000,3450000,3796000,4209000,4305000,4381000,4509000,4695000,4911000,5041000,5079000,5085000,5084000,5110000,5105000,5093000,5034000,4944000,4851000,4776000,4712000 +622000,758000,1012000,1210000,1395000,1542000,1734000,2088000,2438000,2613000,2733000,2913000,3352000,3705000,4129000,4237000,4317000,4449000,4638000,4857000,4990000,5033000,5043000,5045000,5075000,5073000,5064000,5008000,4920000,4829000,4756000 +614000,604000,737000,899000,1110000,1365000,1466000,1637000,2039000,2389000,2566000,2690000,2871000,3305000,3660000,4083000,4196000,4279000,4414000,4604000,4825000,4961000,5006000,5018000,5023000,5055000,5055000,5047000,4992000,4906000,4816000 +615000,603000,594000,692000,851000,1094000,1322000,1380000,1587000,1991000,2348000,2541000,2663000,2836000,3267000,3621000,4045000,4160000,4245000,4382000,4574000,4795000,4932000,4980000,4994000,5000000,5033000,5034000,5027000,4973000,4889000 +522000,605000,593000,609000,696000,827000,1093000,1280000,1291000,1514000,1935000,2327000,2514000,2615000,2784000,3212000,3567000,3990000,4107000,4195000,4333000,4526000,4748000,4887000,4937000,4953000,4961000,4995000,4997000,4992000,4940000 +408000,514000,593000,596000,608000,664000,832000,1086000,1175000,1212000,1457000,1919000,2300000,2460000,2558000,2727000,3154000,3508000,3929000,4048000,4138000,4278000,4472000,4695000,4836000,4887000,4905000,4915000,4951000,4955000,4952000 +325000,401000,502000,549000,558000,582000,643000,801000,996000,1105000,1162000,1443000,1892000,2248000,2405000,2503000,2674000,3097000,3449000,3868000,3989000,4081000,4222000,4418000,4642000,4784000,4837000,4857000,4869000,4906000,4913000 +245000,317000,389000,434000,489000,538000,545000,586000,734000,940000,1060000,1146000,1419000,1845000,2193000,2350000,2451000,2622000,3041000,3391000,3806000,3929000,4023000,4166000,4363000,4587000,4730000,4786000,4807000,4822000,4861000 +187000,237000,305000,328000,379000,471000,499000,485000,537000,690000,900000,1036000,1119000,1377000,1793000,2135000,2292000,2395000,2565000,2979000,3325000,3737000,3861000,3958000,4102000,4299000,4524000,4668000,4726000,4751000,4768000 +147000,179000,226000,256000,284000,362000,438000,450000,446000,503000,657000,871000,1004000,1080000,1331000,1735000,2072000,2228000,2331000,2500000,2907000,3249000,3656000,3781000,3879000,4025000,4222000,4448000,4594000,4655000,4683000 +124000,138000,168000,191000,222000,267000,337000,400000,414000,416000,474000,630000,834000,959000,1034000,1274000,1668000,1995000,2149000,2251000,2417000,2815000,3150000,3550000,3676000,3776000,3923000,4121000,4346000,4495000,4560000 +100000,114000,127000,146000,167000,203000,250000,312000,364000,381000,386000,446000,593000,784000,904000,973000,1207000,1583000,1897000,2046000,2146000,2309000,2694000,3019000,3407000,3534000,3637000,3787000,3985000,4211000,4363000 +92000,88000,101000,113000,129000,147000,183000,226000,276000,326000,344000,352000,408000,543000,722000,829000,901000,1119000,1471000,1766000,1909000,2007000,2165000,2531000,2843000,3216000,3344000,3452000,3604000,3804000,4030000 +83000,76000,74000,91000,99000,107000,126000,150000,190000,235000,280000,298000,306000,356000,477000,630000,734000,800000,997000,1314000,1581000,1714000,1807000,1957000,2295000,2588000,2940000,3070000,3183000,3338000,3539000 +67000,62000,57000,68000,78000,74000,85000,91000,115000,148000,185000,223000,239000,247000,290000,385000,520000,608000,665000,833000,1102000,1331000,1449000,1535000,1672000,1972000,2238000,2560000,2691000,2810000,2967000 +47000,43000,40000,53000,56000,50000,53000,50000,61000,78000,103000,130000,158000,170000,178000,206000,282000,384000,451000,496000,625000,833000,1012000,1109000,1183000,1303000,1552000,1780000,2059000,2186000,2307000 +25000,23000,22000,32000,36000,28000,29000,23000,27000,33000,44000,59000,75000,92000,101000,103000,125000,173000,237000,280000,311000,396000,533000,653000,724000,783000,878000,1063000,1239000,1456000,1568000 +10000,9000,9000,13000,16000,13000,12000,8000,8000,10000,14000,19000,25000,32000,40000,43000,46000,57000,80000,111000,133000,150000,194000,265000,329000,372000,411000,473000,586000,699000,841000 +2000,2000,2000,4000,4000,3000,3000,2000,2000,2000,3000,4000,5000,7000,9000,11000,13000,14000,17000,25000,35000,43000,49000,66000,91000,116000,136000,155000,185000,237000,292000 +0,0,0,1000,1000,0,1000,0,0,0,0,0,1000,1000,1000,1000,2000,2000,2000,3000,5000,7000,8000,10000,13000,19000,26000,31000,37000,46000,62000 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000,1000,1000,2000,2000,3000,4000,5000,7000 diff --git a/model_measles03/Assets/data/pop_dat_GNB.csv b/model_measles03/Assets/data/pop_dat_GNB.csv new file mode 100644 index 00000000..c8cea585 --- /dev/null +++ b/model_measles03/Assets/data/pop_dat_GNB.csv @@ -0,0 +1,22 @@ +1950,1955,1960,1965,1970,1975,1980,1985,1990,1995,2000,2005,2010,2015,2020,2025,2030,2035,2040,2045,2050,2055,2060,2065,2070,2075,2080,2085,2090,2095,2100 +89000,92000,95000,99000,90000,110000,157000,171000,179000,195000,214000,238000,265000,288000,294000,304000,318000,331000,341000,346000,348000,348000,348000,347000,346000,343000,337000,332000,326000,321000,314000 +66000,68000,68000,79000,85000,86000,124000,138000,153000,168000,176000,198000,225000,255000,280000,287000,297000,311000,325000,335000,341000,343000,343000,343000,342000,343000,339000,334000,328000,323000,318000 +53000,55000,55000,63000,76000,82000,95000,112000,126000,151000,159000,169000,193000,222000,252000,277000,284000,294000,308000,322000,333000,338000,340000,341000,341000,340000,341000,337000,332000,327000,321000 +50000,48000,48000,48000,60000,72000,77000,83000,100000,125000,144000,153000,165000,190000,219000,249000,274000,282000,292000,306000,320000,330000,336000,338000,339000,339000,338000,339000,335000,330000,325000 +47000,49000,47000,37000,41000,58000,69000,68000,74000,98000,118000,137000,149000,162000,187000,216000,246000,271000,278000,288000,303000,317000,327000,333000,335000,336000,336000,336000,336000,333000,328000 +46000,47000,50000,36000,30000,41000,62000,62000,61000,72000,92000,112000,132000,145000,158000,183000,212000,242000,267000,274000,284000,299000,313000,323000,329000,332000,333000,333000,333000,333000,330000 +42000,44000,45000,40000,30000,31000,50000,54000,55000,59000,67000,87000,107000,128000,141000,155000,179000,208000,238000,262000,270000,280000,295000,309000,319000,325000,328000,329000,330000,329000,330000 +37000,38000,39000,37000,34000,29000,40000,43000,47000,53000,55000,63000,83000,103000,124000,137000,151000,175000,203000,233000,257000,265000,276000,290000,304000,315000,321000,324000,325000,326000,326000 +30000,32000,33000,33000,33000,31000,33000,33000,35000,45000,49000,51000,60000,79000,99000,120000,133000,146000,170000,198000,227000,251000,260000,270000,284000,299000,309000,316000,319000,320000,321000 +21000,25000,27000,28000,29000,28000,27000,27000,27000,34000,41000,45000,48000,57000,76000,95000,115000,128000,141000,164000,192000,220000,244000,252000,263000,277000,292000,302000,309000,312000,314000 +18000,18000,21000,23000,25000,25000,22000,24000,24000,26000,30000,37000,42000,45000,53000,71000,90000,109000,122000,134000,157000,184000,211000,235000,243000,254000,268000,282000,293000,300000,304000 +14000,16000,15000,18000,20000,21000,18000,21000,22000,22000,23000,27000,34000,38000,41000,49000,66000,84000,102000,114000,126000,148000,173000,200000,223000,231000,242000,256000,270000,281000,288000 +11000,12000,13000,12000,15000,17000,16000,18000,20000,20000,19000,20000,24000,30000,34000,37000,44000,60000,76000,93000,104000,116000,136000,160000,185000,207000,215000,225000,239000,253000,264000 +9000,9000,9000,10000,10000,13000,13000,15000,17000,17000,16000,15000,16000,20000,26000,29000,32000,38000,52000,66000,81000,91000,102000,120000,142000,164000,184000,192000,203000,216000,230000 +6000,6000,7000,7000,7000,8000,11000,12000,14000,13000,12000,12000,12000,13000,16000,20000,23000,25000,31000,42000,53000,66000,74000,84000,99000,118000,137000,155000,162000,172000,185000 +3000,4000,4000,4000,4000,5000,8000,9000,10000,9000,8000,8000,8000,8000,9000,10000,14000,16000,18000,22000,30000,38000,48000,54000,61000,73000,88000,103000,117000,124000,133000 +1000,2000,2000,2000,2000,2000,4000,6000,6000,6000,5000,4000,4000,4000,4000,5000,6000,8000,9000,10000,13000,18000,23000,29000,33000,38000,46000,56000,66000,77000,82000 +0,1000,1000,1000,1000,1000,2000,3000,3000,3000,2000,2000,2000,2000,2000,2000,2000,3000,3000,4000,5000,6000,8000,11000,13000,16000,18000,23000,28000,34000,40000 +0,0,0,0,0,0,1000,1000,1000,1000,1000,1000,0,0,0,0,0,1000,1000,1000,1000,1000,2000,3000,3000,4000,5000,6000,8000,10000,12000 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000,1000,1000,1000,1000,2000,2000 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/model_measles03/Assets/data/pop_dat_SEN.csv b/model_measles03/Assets/data/pop_dat_SEN.csv new file mode 100644 index 00000000..839c049f --- /dev/null +++ b/model_measles03/Assets/data/pop_dat_SEN.csv @@ -0,0 +1,22 @@ +1950,1955,1960,1965,1970,1975,1980,1985,1990,1995,2000,2005,2010,2015,2020,2025,2030,2035,2040,2045,2050,2055,2060,2065,2070,2075,2080,2085,2090,2095,2100 +433000,529000,609000,696000,798000,938000,1097000,1234000,1353000,1473000,1617000,1833000,2108000,2364000,2531000,2725000,2919000,3146000,3380000,3572000,3741000,3881000,4011000,4133000,4246000,4329000,4386000,4412000,4408000,4396000,4382000 +327000,368000,456000,529000,605000,701000,840000,1009000,1160000,1287000,1396000,1544000,1778000,2064000,2330000,2505000,2702000,2900000,3129000,3364000,3559000,3728000,3870000,4000000,4124000,4237000,4321000,4378000,4405000,4401000,4390000 +286000,318000,359000,446000,517000,592000,685000,825000,997000,1147000,1270000,1378000,1528000,1765000,2053000,2320000,2496000,2694000,2892000,3121000,3357000,3552000,3722000,3864000,3995000,4119000,4232000,4316000,4374000,4401000,4398000 +251000,281000,313000,354000,440000,508000,570000,666000,811000,979000,1120000,1243000,1352000,1505000,1749000,2038000,2305000,2482000,2681000,2879000,3108000,3344000,3540000,3710000,3853000,3984000,4108000,4222000,4306000,4364000,4392000 +219000,246000,277000,311000,355000,433000,469000,535000,644000,783000,927000,1068000,1191000,1305000,1476000,1723000,2010000,2277000,2455000,2653000,2852000,3081000,3318000,3514000,3685000,3828000,3960000,4084000,4198000,4283000,4342000 +188000,215000,244000,276000,314000,350000,390000,430000,511000,614000,726000,869000,1009000,1136000,1271000,1447000,1691000,1978000,2245000,2423000,2621000,2820000,3050000,3287000,3483000,3655000,3799000,3931000,4056000,4171000,4256000 +161000,184000,212000,242000,277000,309000,316000,358000,410000,487000,567000,678000,820000,963000,1106000,1246000,1419000,1663000,1950000,2216000,2393000,2592000,2791000,3021000,3258000,3455000,3627000,3772000,3905000,4031000,4146000 +138000,157000,180000,208000,240000,271000,282000,291000,342000,390000,452000,531000,641000,784000,938000,1084000,1222000,1396000,1639000,1924000,2190000,2367000,2566000,2765000,2996000,3233000,3431000,3604000,3749000,3883000,4009000 +116000,133000,152000,175000,204000,232000,249000,262000,277000,326000,364000,424000,503000,613000,763000,917000,1063000,1200000,1374000,1616000,1899000,2164000,2342000,2541000,2740000,2971000,3210000,3408000,3581000,3727000,3862000 +98000,111000,127000,145000,168000,195000,214000,232000,249000,264000,304000,342000,401000,480000,594000,743000,896000,1040000,1178000,1350000,1590000,1873000,2137000,2315000,2514000,2714000,2946000,3184000,3383000,3557000,3704000 +80000,91000,104000,119000,138000,159000,179000,198000,219000,235000,245000,285000,322000,381000,462000,573000,720000,871000,1014000,1151000,1322000,1561000,1841000,2104000,2282000,2482000,2683000,2915000,3154000,3354000,3529000 +64000,73000,83000,95000,110000,126000,143000,163000,184000,204000,216000,226000,265000,302000,362000,438000,549000,692000,840000,981000,1117000,1287000,1523000,1800000,2062000,2241000,2442000,2644000,2877000,3116000,3317000 +51000,55000,63000,72000,83000,96000,109000,126000,146000,166000,182000,194000,205000,242000,280000,334000,411000,517000,656000,800000,939000,1073000,1241000,1474000,1748000,2008000,2189000,2391000,2593000,2827000,3067000 +39000,40000,44000,50000,58000,67000,78000,90000,107000,125000,140000,155000,168000,179000,215000,246000,302000,374000,474000,607000,746000,880000,1012000,1177000,1405000,1675000,1932000,2114000,2317000,2521000,2755000 +26000,27000,28000,31000,36000,42000,48000,58000,70000,83000,96000,109000,123000,136000,147000,175000,208000,257000,323000,416000,539000,669000,798000,925000,1086000,1306000,1568000,1821000,2004000,2207000,2411000 +14000,14000,15000,16000,17000,21000,24000,30000,37000,46000,54000,63000,73000,85000,96000,103000,129000,157000,199000,256000,336000,443000,559000,677000,797000,948000,1156000,1403000,1645000,1827000,2028000 +5000,5000,6000,6000,6000,7000,9000,11000,14000,19000,22000,26000,32000,39000,47000,52000,60000,78000,99000,130000,173000,235000,318000,413000,512000,616000,750000,932000,1152000,1372000,1545000 +1000,1000,1000,1000,1000,2000,2000,2000,3000,5000,6000,7000,9000,11000,14000,16000,21000,25000,35000,47000,66000,92000,130000,184000,247000,318000,396000,498000,637000,809000,986000 +0,0,0,0,0,0,0,0,0,1000,1000,1000,1000,1000,2000,3000,4000,5000,7000,10000,15000,22000,32000,49000,73000,104000,140000,182000,241000,322000,425000 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000,1000,2000,2000,4000,6000,10000,17000,25000,36000,50000,71000,100000 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000,1000,2000,3000,5000,7000,11000 diff --git a/model_measles02/Assets/python/builder_campaign.py b/model_measles03/Assets/python/builder_campaign.py similarity index 76% rename from model_measles02/Assets/python/builder_campaign.py rename to model_measles03/Assets/python/builder_campaign.py index 265a51d4..f1160cc3 100644 --- a/model_measles02/Assets/python/builder_campaign.py +++ b/model_measles03/Assets/python/builder_campaign.py @@ -18,6 +18,9 @@ def campaignBuilder(): + # Get schema + sch_data = gdata.schema_json + # Variables for this simulation MCV1_RATE = gdata.var_params['MCV1'] MCV2_FRAC = gdata.var_params['MCV2'] @@ -40,19 +43,21 @@ def campaignBuilder(): BR_MULT_X = gdata.brate_mult_x BR_MULT_Y = gdata.brate_mult_y start_day = 365.0*(gdata.start_year-BASE_YEAR) - camp_event = ce_br_force(ALL_NODES, BR_MULT_X, BR_MULT_Y, start_day) + camp_event = ce_br_force(sch_data, ALL_NODES, BR_MULT_X, BR_MULT_Y, + start_day=start_day) camp_module.add(camp_event) # R0 seasonality start_day = 365.0*(gdata.start_year-BASE_YEAR) - camp_event = ce_inf_force(ALL_NODES, 15.0, 60.0, 1.30, - dt=gdata.t_step_days) + camp_event = ce_inf_force(sch_data, ALL_NODES, 15.0, 60.0, + step_size=1.30, dt=gdata.t_step_days) camp_module.add(camp_event) # RI start_day = 365.0*(gdata.start_year-BASE_YEAR) acq_fact = MAT_FACTOR/2.0 - camp_event = ce_RI(ALL_NODES, coverage=MCV1_RATE, start_day=start_day, + camp_event = ce_RI(sch_data, ALL_NODES, + coverage=MCV1_RATE, start_day=start_day, base_take=0.95, acq_fact=acq_fact, age_dep=AGE_DEP, age_one=MCV1_AGE, frac_two=MCV2_FRAC, age_std=60.0) camp_module.add(camp_event) @@ -60,17 +65,23 @@ def campaignBuilder(): # SIAs start_day = 365.0*(gdata.start_year-BASE_YEAR) sia_year = SIA_START + sia_rate = 1.0/(1.0-MCV1_RATE+0.001) acq_fact = MAT_FACTOR/2.0 while (sia_year < gdata.run_years): start_sia = 365.0*sia_year+start_day - camp_event = ce_SIA(ALL_NODES, start_day=start_sia, + camp_event = ce_SIA(sch_data, ALL_NODES, start_day=start_sia, yrs_max=SIA_MAX_AGE_YR, yrs_min=SIA_MIN_AGE_YR, coverage=SIA_COVERAGE, base_take=0.95, acq_fact=acq_fact, age_dep=AGE_DEP) camp_module.add(camp_event) - sia_year = sia_year + SIA_INT_YRS + + d_years = SIA_INT_YRS + if (d_years < 0): + d_years = max(2.0, np.random.poisson(sia_rate)) + else: + sia_year = sia_year + d_years # End file construction camp_module.save(filename=CAMP_FILE) diff --git a/model_measles02/Assets/python/builder_config.py b/model_measles03/Assets/python/builder_config.py similarity index 100% rename from model_measles02/Assets/python/builder_config.py rename to model_measles03/Assets/python/builder_config.py diff --git a/model_measles02/Assets/python/builder_demographics.py b/model_measles03/Assets/python/builder_demographics.py similarity index 66% rename from model_measles02/Assets/python/builder_demographics.py rename to model_measles03/Assets/python/builder_demographics.py index 88fe36bf..6dc233cf 100644 --- a/model_measles02/Assets/python/builder_demographics.py +++ b/model_measles03/Assets/python/builder_demographics.py @@ -10,7 +10,8 @@ import numpy as np -from emod_api.demographics.Demographics import Demographics, Node +from emod_api.demographics.demographics import Demographics +from emod_api.demographics.node import Node from emod_demog_func import demog_vd_calc, demog_vd_over, demog_is_over from emod_constants import DEMOG_FILE, DEMOG_IRS @@ -25,6 +26,7 @@ def demographicsBuilder(): LOG10_IMP = gdata.var_params['log10_import_mult'] REF_CODE = gdata.var_params['ref_code'] REF_YEAR = gdata.var_params['ref_year'] + NUM_NODES = gdata.var_params['num_nodes'] # Demographic reference data file dat_file = f'pop_dat_{REF_CODE}.csv' @@ -39,37 +41,42 @@ def demographicsBuilder(): # Populate nodes in primary file node_list = list() node_id = 1 - imp_rate = R0/6.0 * gdata.init_pop * 1.615e-7 * np.power(10.0, LOG10_IMP) - nname = 'EXAMPLE:A{:05d}'.format(node_id) - node_obj = Node(lat=0.0, lon=0.0, pop=gdata.init_pop, - name=nname, forced_id=node_id) - irs_dict = {DEMOG_IRS: imp_rate} - node_obj.node_attributes.extra_attributes = irs_dict - node_list.append(node_obj) + + for k1 in range(NUM_NODES): + node_pop = float(gdata.init_pop) / NUM_NODES + imp_rate = R0/6.0 * node_pop * 1.615e-7 * np.power(10.0, LOG10_IMP) + nname = 'EXAMPLE:A{:05d}'.format(node_id) + node_obj = Node(lat=0.0, lon=0.0, pop=node_pop, + name=nname, forced_id=node_id) + irs_dict = {DEMOG_IRS: imp_rate} + node_obj.node_attributes.extra_attributes = irs_dict + node_list.append(node_obj) + node_id = node_id + 1 # Create primary file ref_name = 'Demographics_Datafile' - demog_obj = Demographics(nodes=node_list, idref=ref_name) + demog_obj = Demographics(nodes=node_list, idref=ref_name, + set_defaults=False) + + # Update defaults in primary file + demog_obj.default_node.individual_attributes.parameter_dict = dict() + demog_obj.default_node.node_attributes.parameter_dict = dict() + + # Write primary demographics file + demog_obj.to_file(path=DEMOG_FILE) # Save filename to global data for use in other functions gdata.demog_files.append(DEMOG_FILE) - # Update defaults in primary file - demog_obj.raw['Defaults']['IndividualAttributes'].clear() - demog_obj.raw['Defaults']['NodeAttributes'].clear() + # Write initial susceptibility overlay + nfname = demog_is_over(ref_name, node_list, R0, vd_tup[3]) + gdata.demog_files.append(nfname) # Write vital dynamics overlay nfname = demog_vd_over(ref_name, node_list, vd_tup[4], vd_tup[1], vd_tup[2], vd_tup[3]) gdata.demog_files.append(nfname) - # Write initial susceptibility overlay - nfname = demog_is_over(ref_name, node_list, R0, vd_tup[3]) - gdata.demog_files.append(nfname) - - # Write primary demographics file - demog_obj.generate_file(name=DEMOG_FILE) - # Save the demographics object for use in other functions gdata.demog_object = demog_obj diff --git a/model_measles02/Assets/python/builder_reports.py b/model_measles03/Assets/python/builder_reports.py similarity index 100% rename from model_measles02/Assets/python/builder_reports.py rename to model_measles03/Assets/python/builder_reports.py diff --git a/model_measles02/Assets/python/dtk_in_process.py b/model_measles03/Assets/python/dtk_in_process.py similarity index 100% rename from model_measles02/Assets/python/dtk_in_process.py rename to model_measles03/Assets/python/dtk_in_process.py diff --git a/model_measles02/Assets/python/dtk_post_process.py b/model_measles03/Assets/python/dtk_post_process.py similarity index 100% rename from model_measles02/Assets/python/dtk_post_process.py rename to model_measles03/Assets/python/dtk_post_process.py diff --git a/model_measles02/Assets/python/dtk_pre_process.py b/model_measles03/Assets/python/dtk_pre_process.py similarity index 100% rename from model_measles02/Assets/python/dtk_pre_process.py rename to model_measles03/Assets/python/dtk_pre_process.py diff --git a/model_measles02/Assets/python/global_data.py b/model_measles03/Assets/python/global_data.py similarity index 98% rename from model_measles02/Assets/python/global_data.py rename to model_measles03/Assets/python/global_data.py index b4760385..b156cd79 100644 --- a/model_measles02/Assets/python/global_data.py +++ b/model_measles03/Assets/python/global_data.py @@ -7,6 +7,10 @@ # Control params sim_index = 0 var_params = dict() +schema_json = dict() + +# Python in-process +first_call_bool = True # Filename params demog_files = list() @@ -14,8 +18,6 @@ demog_object = None # Other stuff -first_call_bool = True - init_pop = 250000 inf_prd_mean = 18.0 diff --git a/model_measles02/experiment_none_ri70/make01_param_dict.py b/model_measles03/experiment_none_ri70/make01_param_dict.py similarity index 92% rename from model_measles02/experiment_none_ri70/make01_param_dict.py rename to model_measles03/experiment_none_ri70/make01_param_dict.py index 26e28c6e..1c115ea6 100644 --- a/model_measles02/experiment_none_ri70/make01_param_dict.py +++ b/model_measles03/experiment_none_ri70/make01_param_dict.py @@ -30,7 +30,7 @@ def write_param_dict(): # Setup param_dict = dict() - param_dict[EXP_NAME] = 'Measles02-NoSIAs-70RI' + param_dict[EXP_NAME] = 'Measles03-NoSIAs-70RI' param_dict[NUM_SIMS] = 250 param_dict[EXP_V] = dict() param_dict[EXP_C] = dict() @@ -43,40 +43,29 @@ def write_param_dict(): P_VAR = param_dict[EXP_V] P_CON = param_dict[EXP_C] + # Run number (EMOD random seed) + P_VAR['run_number'] = list(range(NSIMS)) - - # - # Priority inputs - # + # Infectivity + vals = 10.0 + np.random.gamma(30.0, scale=0.133, size=NSIMS) + P_VAR['R0'] = (np.round(vals, 2)).tolist() # RI params P_CON['MCV1'] = 0.70 - # SIA parameters - P_CON['sia_start_year'] = 1000 - P_CON['sia_interval_yrs'] = 3 - P_CON['sia_coverage'] = 0.00 - P_CON['sia_min_age_yr'] = 0.75 - P_CON['sia_max_age_yr'] = 5.00 - - - - # - # Maybe if time? - # - # Reference country code and year for population pyramid P_CON['ref_code'] = 'COD' P_CON['ref_year'] = 2040 + # Number of nodes + P_CON['num_nodes'] = 2 - - # - # Probably not these - # - - # Run number (EMOD random seed) - P_VAR['run_number'] = list(range(NSIMS)) + # SIA parameters + P_CON['sia_start_year'] = 1000 + P_CON['sia_interval_yrs'] = 3 + P_CON['sia_coverage'] = 0.60 + P_CON['sia_min_age_yr'] = 0.75 + P_CON['sia_max_age_yr'] = 5.00 # Log10 of multiplier on exogeneous case importation P_CON['log10_import_mult'] = 1.0 @@ -86,20 +75,13 @@ def write_param_dict(): P_CON['Age_Take'] = True P_CON['MCV2'] = 0.0 - # Infectivity - vals = 10.0 + np.random.gamma(30.0, scale=0.133, size=NSIMS) - P_VAR['R0'] = (np.round(vals, 2)).tolist() - # Maternal protection effectiveness P_CON['mat_factor'] = 1.0 - - # Write parameter dictionary with open(P_FILE, 'w') as fid01: json.dump(param_dict, fid01) - return None # ***************************************************************************** diff --git a/model_measles02/experiment_none_ri70/make02_launch_sims.py b/model_measles03/experiment_none_ri70/make02_launch_sims.py similarity index 100% rename from model_measles02/experiment_none_ri70/make02_launch_sims.py rename to model_measles03/experiment_none_ri70/make02_launch_sims.py diff --git a/model_measles02/experiment_none_ri70/make03_pool_brick.py b/model_measles03/experiment_none_ri70/make03_pool_brick.py similarity index 100% rename from model_measles02/experiment_none_ri70/make03_pool_brick.py rename to model_measles03/experiment_none_ri70/make03_pool_brick.py diff --git a/model_measles02/experiment_sia3yr60cv_ri70/make01_param_dict.py b/model_measles03/experiment_sia3yr60cv_ri70/make01_param_dict.py similarity index 93% rename from model_measles02/experiment_sia3yr60cv_ri70/make01_param_dict.py rename to model_measles03/experiment_sia3yr60cv_ri70/make01_param_dict.py index c2d6ae4c..1cb67ad7 100644 --- a/model_measles02/experiment_sia3yr60cv_ri70/make01_param_dict.py +++ b/model_measles03/experiment_sia3yr60cv_ri70/make01_param_dict.py @@ -30,7 +30,7 @@ def write_param_dict(): # Setup param_dict = dict() - param_dict[EXP_NAME] = 'Measles02-SIAs3yrs60pct-70RI' + param_dict[EXP_NAME] = 'Measles03-SIAs3Yrs60pct-70RI' param_dict[NUM_SIMS] = 250 param_dict[EXP_V] = dict() param_dict[EXP_C] = dict() @@ -43,15 +43,23 @@ def write_param_dict(): P_VAR = param_dict[EXP_V] P_CON = param_dict[EXP_C] + # Run number (EMOD random seed) + P_VAR['run_number'] = list(range(NSIMS)) - - # - # Priority inputs - # + # Infectivity + vals = 10.0 + np.random.gamma(30.0, scale=0.133, size=NSIMS) + P_VAR['R0'] = (np.round(vals, 2)).tolist() # RI params P_CON['MCV1'] = 0.70 + # Reference country code and year for population pyramid + P_CON['ref_code'] = 'COD' + P_CON['ref_year'] = 2040 + + # Number of nodes + P_CON['num_nodes'] = 2 + # SIA parameters P_CON['sia_start_year'] = 10 P_CON['sia_interval_yrs'] = 3 @@ -59,25 +67,6 @@ def write_param_dict(): P_CON['sia_min_age_yr'] = 0.75 P_CON['sia_max_age_yr'] = 5.00 - - - # - # Maybe if time? - # - - # Reference country code and year for population pyramid - P_CON['ref_code'] = 'COD' - P_CON['ref_year'] = 2040 - - - - # - # Probably not these - # - - # Run number (EMOD random seed) - P_VAR['run_number'] = list(range(NSIMS)) - # Log10 of multiplier on exogeneous case importation P_CON['log10_import_mult'] = 1.0 @@ -86,20 +75,13 @@ def write_param_dict(): P_CON['Age_Take'] = True P_CON['MCV2'] = 0.0 - # Infectivity - vals = 10.0 + np.random.gamma(30.0, scale=0.133, size=NSIMS) - P_VAR['R0'] = (np.round(vals, 2)).tolist() - # Maternal protection effectiveness P_CON['mat_factor'] = 1.0 - - # Write parameter dictionary with open(P_FILE, 'w') as fid01: json.dump(param_dict, fid01) - return None # ***************************************************************************** diff --git a/model_measles02/experiment_sia3yr60cv_ri70/make02_launch_sims.py b/model_measles03/experiment_sia3yr60cv_ri70/make02_launch_sims.py similarity index 100% rename from model_measles02/experiment_sia3yr60cv_ri70/make02_launch_sims.py rename to model_measles03/experiment_sia3yr60cv_ri70/make02_launch_sims.py diff --git a/model_measles02/experiment_sia3yr60cv_ri70/make03_pool_brick.py b/model_measles03/experiment_sia3yr60cv_ri70/make03_pool_brick.py similarity index 100% rename from model_measles02/experiment_sia3yr60cv_ri70/make03_pool_brick.py rename to model_measles03/experiment_sia3yr60cv_ri70/make03_pool_brick.py diff --git a/model_measles02/figure_agehist/make_fig_agehist.py b/model_measles03/figure_agehist/make_fig_agehist.py similarity index 100% rename from model_measles02/figure_agehist/make_fig_agehist.py rename to model_measles03/figure_agehist/make_fig_agehist.py diff --git a/model_measles02/figure_burden/make_fig_burden.py b/model_measles03/figure_burden/make_fig_burden.py similarity index 100% rename from model_measles02/figure_burden/make_fig_burden.py rename to model_measles03/figure_burden/make_fig_burden.py diff --git a/model_measles02/figure_pyramids/make_fig_pyramids.py b/model_measles03/figure_pyramids/make_fig_pyramids.py similarity index 100% rename from model_measles02/figure_pyramids/make_fig_pyramids.py rename to model_measles03/figure_pyramids/make_fig_pyramids.py diff --git a/model_measles02/figure_results/make_fig_results.py b/model_measles03/figure_results/make_fig_results.py similarity index 100% rename from model_measles02/figure_results/make_fig_results.py rename to model_measles03/figure_results/make_fig_results.py diff --git a/pyproject.toml b/pyproject.toml index d3b122a1..cb5e3720 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,19 +1,19 @@ [build-system] -requires = ["setuptools", "setuptools-scm"] +requires = ["setuptools"] build-backend = "setuptools.build_meta" [project] name = "emod-generic-scripts" -dynamic = ["version"] +version = "0.0.0" description = "Demonstration models using the Generic-Ongoing branch of EMOD." readme = "README.md" -requires-python = ">=3.9" +requires-python = ">=3.10" authors = [ {name = "Kurt Frey", email = "kurt.frey@gatesfoundation.org"} ] -keywords = ['modeling', 'IDM'] +keywords = ["modeling", "IDM"] dependencies = [ - "emodpy==2.1.13", + "emodpy~=3.1.0", ] license = "MIT" classifiers = [ @@ -31,6 +31,9 @@ docs = [ "mkdocs-autoapi", "mkdocs-glightbox", ] +lint = [ + "flake8", +] tests = [ ] @@ -40,6 +43,3 @@ Issues = "https://github.com/EMOD-Hub/EMOD-Generic-Scripts/issues" [tool.setuptools] packages = [] - -[tool.setuptools_scm] -version_file = "docs/version.py"