Understanding the Model Network
At its core,
metawards implements a meta-population model. Individuals
are grouped into workers and players, and distributed across wards. The
force of infection of a ward caused by infection of an individual, based on
their movements and behaviour is calculated, and used to decide whether
other individuals who reside or visit that ward should be infected.
Up to now, you have used a single underlying
for every demographic and model run in this tutorial. This does not need
to be the case, and you can choose to assign different
Network objects to different demographics in
a simulation. You would do this, for example, to model different connections
or movements between wards for different demographics, e.g. workers
or school students. Or to use different networks to represent movements
related to holidays or foreign travel.
The single-node network
You can set the overall network used by default by all demographics via
-m command-line argument. The default value
2011Data, which is based on 2011 census data, and models every
electoral ward in England and Wales.
There are two other models supplied;
2011UK: Again, this is based on the 2011 census, but includes Scotland and Northern Ireland. This model is still a work in progress.
single: This is a single-ward network that is used for testing, or when you don’t want to model geographic behaviour.
You can run a single-ward simulation using the command line;
metawards -d lurgy_home -m single -P 100
We are using the
lurgy_home.json file from the last chapter of this
tutorial. Note that we also need to set the population of this single
ward using the
--population command line argument. In this
case, we are setting the population to 100 individuals.
When you run, you should see that
metawards is siginficantly faster.
Also, as the outbreak is not seeded, nothing much happens.
Seeding the outbreak
Up to now, you have been using the
ExtraSeedsLondon.dat file to seed
every outbreak. This file contains the single line;
1 5 255
The three numbers instruct
metawards to seed the outbreak on day 1
(the first number), infecting 5 individuals (the second number) in
ward 255 (the third number).
The name of this file is misleading, as it is really seeding the ward with index 255, not seeding a ward in London. This will only be seeding London if the network this is used with has a ward in London at index 255.
If you try to seed using this file you will get an error, e.g.
metawards -d lurgy_home -m single -P 100 -a ExtraSeedsLondon.dat
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ERROR ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Unable to seed the infection using (1, 255, 5, None). The error was <class 'IndexError'>: Invalid node index 255. Number of nodes in this container equals 2. Please double-check that you are trying to seed a node that exists in this network. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Traceback (most recent call last): [lots of output] IndexError: Invalid node index 255. Number of nodes in this container equals 2
The traceback can be long and complex, and is really only of use for
developers. You can normally work out what has gone wrong by scrolling up
to before the traceback, and seeing if there is a
ERROR printed immediately
We have provided an
ExtraSeedsOne.dat file, which seeds 5 infections
in ward 1 on the first day of the outbreak. This contains the line;
1 5 1
which says to seed 5 individuals on the first day in ward 1.
Nodes are indexed from 1 rather than 0. This means that
is the first node, and
ward[nnodes] is the last node in the
You can use this with single-ward networks, e.g.
metawards -d lurgy_home -m single -P 100 -a ExtraSeedsOne.dat
However, creating a file to seed an outbreak is inconvenient, particularly when you only want to seed a single ward. You can, optionally, pass the seeding information as the argument, instead of the filename. Thus this will work;
metawards -d lurgy_home -m single -P 100 -a "1 5 1"
Equally, you can seed on multiple days, e.g. seeding 5 individuals on day 1, and then 10 individuals on day 2, via;
metawards -d lurgy_home -m single -P 100 -a "1 5 1\n2 10 1"
The contents of the string is interpreted identically to if it had been
read from a file, with
\n representing a newline character.
The extra seeds file has a flexible and powerful format, e.g. supporting seeding by date, seeding random wards or by random amounts etc. More information on the format of this file can be found here.