Getting Started
This tutorial assumes that you have installed metawards
. To check
that you have, type the following into your console;
metawards --version
and then press return. You should see something similar to the below printed to your screen.
$ metawards --version
┌──────────────────────────────────────────────────────────────────────┐
│ │
│ ╔══════════════════════════════════════════════════════════════╗ │
│ ║ MetaWards version 1.6.2+2.g01a0e4cd ║ │
│ ╚══════════════════════════════════════════════════════════════╝ │
│ │
│ ╔══════════════════════════════════════════════════════════════╗ │
│ ║ https://metawards.org ║ │
│ ╚══════════════════════════════════════════════════════════════╝ │
│ │
│ ╔══════════════════════════════════════════════════════════════╗ │
│ ║ Source information ║ │
│ ╚══════════════════════════════════════════════════════════════╝ │
│ │
│ • repository: https://github.com/metawards/MetaWards │
│ • branch: main │
│ • revision: 01a0e4cd10030826e52b97d454a8f5e73a5df674 │
│ • last modified: 2022-03-18T13:50:18+0000 │
│ │
│ WARNING: MetaWardsData cannot be found! Please see │
│ https://metawards.org/model_data for instructions on how to │
│ download and install this necessary data. │
│ │
│ ╔══════════════════════════════════════════════════════════════╗ │
│ ║ Additional information ║ │
│ ╚══════════════════════════════════════════════════════════════╝ │
│ │
│ Visit https://metawards.org for more information about │
│ metawards, its authors and its license │
│ │
└──────────────────────────────────────────────────────────────────────┘
If you don’t see this, or the output includes a warning about not being about to find MetaWardsData, then please try installing MetaWards or installing and configuring MetaWardsData again.
Warning
This tutorial is written for metawards
version 1.6.2 or
higher. If you are using an older version then please upgrade.
Introducing the Lurgy
The Lurgy is a
completely ficticious disease that we will use throughout this
tutorial. We can run a simulation of an outbreak of the lurgy using
the --disease
command line argument. Type the following;
metawards --disease lurgy
Press return and you should see a lot of output printed. Near the end of the output you will see these lines;
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 0 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 56082077 E: 0 I: 0 R: 0 IW: 0 POPULATION: 56082077
Number of infections: 0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 56082077 E: 0 I: 0 R: 0 IW: 0 POPULATION: 56082077
Number of infections: 0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 2 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 56082077 E: 0 I: 0 R: 0 IW: 0 POPULATION: 56082077
Number of infections: 0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 3 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 56082077 E: 0 I: 0 R: 0 IW: 0 POPULATION: 56082077
Number of infections: 0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 4 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 56082077 E: 0 I: 0 R: 0 IW: 0 POPULATION: 56082077
Number of infections: 0
Infection died ... Ending on day 5
Note
Do not worry if you don’t see exactly this output. You may be using
a different version of metawards
compared to the one used to write
this tutorial. The main thing to look for is the line
Infection died ... Ending on day 5
The --disease
option also has the shorthand -d
. You can get the same
output as above by typing;
metawards -d lurgy
Note
This time when you ran metawards
it stopped to say that the output
directory already exists, and if you want to remove it.
The metawards
program takes care not to overwrite any of your output.
By default a lot of output files from this run have been written to a
directory called output
(we will take a look at these files later).
metawards
will ask you if you want to remove any existing output.
Press y
and hit return to do so. If you want to automatically
remove existing output then use the --force-overwrite-output
option,
e.g.
metawards -d lurgy --force-overwrite-output
You can also set the output directory using the --output
or -o
options, e.g.
metawards -d lurgy -o output2
Seeding an outbreak
The key output from metawards
are the lines which read;
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 0 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 56082077 E: 0 I: 0 R: 0 IW: 0 POPULATION: 56082077
Number of infections: 0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 56082077 E: 0 I: 0 R: 0 IW: 0 POPULATION: 56082077
Number of infections: 0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 2 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 56082077 E: 0 I: 0 R: 0 IW: 0 POPULATION: 56082077
Number of infections: 0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 3 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 56082077 E: 0 I: 0 R: 0 IW: 0 POPULATION: 56082077
Number of infections: 0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 4 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 56082077 E: 0 I: 0 R: 0 IW: 0 POPULATION: 56082077
Number of infections: 0
Infection died ... Ending on day 5
These tell you how long the outbreak lasted (in this case, 5 days), together with how many people were infected. These are the numbers next to the codes;
S: The number of the population who are susceptible to infection
E: The number of the population who are latent, meaning they are infected, but not yet infectious.
I: The number of the population who are infected, meaning they have symptoms and are infectious
R: The number of the population who are removed from being susceptible, either because they have been newly infected that day, or because they have recovered from the infection and are no longer susceptible to infection
IW: The number of electoral wards that contain at least one individual who was newly infected that day.
For more information about these values, please read the papers detailed in the scientific background.
From this output it is clear that no-one has been infected by the lurgy.
This is because we haven’t yet seeded any outbreaks. We can seed an
outbreak in a specific electoral ward by using an additional seeds file.
In this case, we will seed an infection of the lurgy in London using
the ExtraSeedsLondon.dat
file that comes in MetaWardsData
. You specify the additional seeds
file to use via the --additional
or -a
options.
Try typing the below into your console and press return;
metawards -d lurgy -a ExtraSeedsLondon.dat
Now the program will run for a long time (minutes), and you will see an outbreak move through the population. The final lines of your output may look something like this;
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 214 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 11780863 E: 0 I: 1 R: 44301213 IW: 1 POPULATION: 56082077
Number of infections: 1
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 215 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 11780863 E: 1 I: 0 R: 44301213 IW: 0 POPULATION: 56082077
Number of infections: 1
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 216 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 11780863 E: 0 I: 1 R: 44301213 IW: 0 POPULATION: 56082077
Number of infections: 1
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 217 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 11780863 E: 0 I: 1 R: 44301213 IW: 0 POPULATION: 56082077
Number of infections: 1
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 218 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 11780863 E: 0 I: 0 R: 44301214 IW: 0 POPULATION: 56082077
Number of infections: 0
Infection died ... Ending on day 219
Note
Do not worry if your numbers are different. All will be explained :-)
Repeating a calculation
metawards
runs a stochastic simulation. This means that random numbers
are used in the decisions on how individuals in the model are infected,
and how quickly they progress through the infection. This means that
every metawards
run is different.
Fortunately, metawards
prints enough information in the output
to enable a job to be repeated. Look the for line the reads;
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Repeating this run ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
To repeat this job use the command;
┌────────────────────────────────────────────────────────────────────────────────────────┐
│metawards –repeats 1 –seed 85564100 –additional ExtraSeedsLondon.dat –output output │
│–disease lurgy –start-date 2020-05-20 –start-day 0 –parameters march29 –repository │
│/Users/chris/GitHub/MetaWardsData –population 57104043 –nsteps 730 –UV 0.0 –nthreads 4 │
│–nprocs 1 –max-nodes 16384 –max-links 4194304 │
└────────────────────────────────────────────────────────────────────────────────────────┘
Or alternatively use the config.yaml file that will be written to the output directory and
use the command;
┌────────────────────────────────────────────────────────────────────────────────────────┐
│metawards -c config.yaml │
└────────────────────────────────────────────────────────────────────────────────────────┘
This is the command line that you can use to repeat a job (note that
the command line you see will be different). We have been careful to
write metawards
so that it gives the same output when you use
the same inputs, using the same version of metawards
and same version
of data in MetaWardsData
, for the same random number seed and running
the calculation over the same number of threads. We consider it a bug
if metawards
is not reproducible, and ask that you
submit an issue if
you find you cannot repeat a run.
As the command line can be quite long, metawards
will also print out
a config file in the output
directory called output/config.yaml
.
This file contains everything needed to reproduce the calculation, which
can be re-run using the command;
metawards -c config.yaml
(assuming you have copied the config.yaml
file into your current
directory)
Using config files for inputs
You can use this config file directly to run a job using the --config
or -c
options, e.g.
metawards --config config.yaml
This should repeat the calculation that generated this config. You can also edit this file and use it to store commonly used options, e.g. if you always want to model the lurgy, then the config file would read;
disease: lurgy
and you could use this via
metawards -c config.yaml
Note
metawards
uses the ConfigArgParse
python module for parsing command line arguments. Options can be passed
on the command line, in a yaml or ini format config file, or in
some identified cases as an environment variable. If an arg is
specified in more than one place, then commandline values override
environment variables which override config file values which
override defaults.