Using a Custom Network

You can run a simulation using a custom network by passing filename of the JSON file that contains the network to metawards via the --model or -m parameter.

For example, to use the custom_network.json.bz2 file from the last section, together with the lurgy4.json disease model from previous chapters, and seed the outbreak with 5 infections in London on day 1 you would run;

metawards -d lurgy4 -m custom_network.json.bz2 -a "1 5 London"

You should see that the model runs very quickly, producing output similar to;

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Loading additional seeds from the command line
┏━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Day ┃ Demographic ┃                                   Ward                                    ┃   Number   ┃
┃     ┃             ┃                                                                           ┃   seeded   ┃
┡━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│  1  │    None     │ 2 : WardInfo(name='London', alternate_names=, code='', alternate_codes=,  │     5      │
│     │             │        authority='', authority_code='', region='', region_code='')        │            │
└─────┴─────────────┴───────────────────────────────────────────────────────────────────────────┴────────────┘
seeding play_infections[0][2] += 5
S: 20345  E: 5  I: 0  R: 0  IW: 0  POPULATION: 20350
Number of infections: 5

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 2 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 20345  E: 0  I: 5  R: 0  IW: 0  POPULATION: 20350
Number of infections: 5

...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 129 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 2895  E: 0  I: 1  R: 17454  IW: 0  POPULATION: 20350
Number of infections: 1

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 130 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 2895  E: 0  I: 1  R: 17454  IW: 0  POPULATION: 20350
Number of infections: 1

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 131 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 2895  E: 0  I: 1  R: 17454  IW: 0  POPULATION: 20350
Number of infections: 1

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Day 132 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
S: 2895  E: 0  I: 0  R: 17455  IW: 0  POPULATION: 20350
Number of infections: 0
Ending on day 132

Running MetaWards from within Python or R

It is also possible to run your custom network by passing it in directly to the metawards.run() function in Python or R. For example, in Python;

>>> from metawards import Ward, run
>>> bristol = Ward(name="Bristol")
>>> bristol.add_workers(500)
>>> bristol.set_num_players(750)
>>> london = Ward(name="London")
>>> london.add_workers(8500)
>>> london.set_num_players(10000)
>>> bristol.add_workers(500, destination=london)
>>> london.add_workers(100, destination=bristol)
>>> wards = bristol + london
>>> print(wards)
[ Ward( info=Bristol, id=1, num_workers=1000, num_players=750 ), Ward( info=London, id=2, num_workers=8600, num_players=10000 ) ]
>>> results = run(model=wards, additional=5)

This would create the wards, and then run the model. This will run in a new directory called output_XXXX (where XXXX is replaced by a random string). The results variable holds the full path to the resulting results.csv.bz2 file for this run. The arguments to metawards.run() match those of the command line program. Any Python objects (e.g. the wards, disease, demographics) can be passed in as Python objects. They will be automatically converted to JSON files and passed to the metawards processed in the background.

Note

You can use the + operator to add multiple individual ward objects together to create the wards, e.g. wards = bristol + london.

Note

You can force metawards.run() to use a specified output directory by passing in the output argument. You will need to set force_overwrite_output to True to overwrite any existing output. You can silence the printing to the screen by passing in silent = True.

You can achieve the same in R by typing;

> library(metawards)
> bristol <- metawards$Ward(name="Bristol")
> bristol$add_workers(500)
> bristol$set_num_players(750)
> london <- metawards$Ward(name="London")
> london$add_workers(8500)
> london$set_num_players(10000)
> bristol$add_workers(500, destination=london)
> london$add_workers(100, destination=bristol)
> wards = metawards$Wards()
> wards$add(bristol)
> wards$add(london)
> print(wards)
[ Ward( info=Bristol, id=1, num_workers=1000, num_players=750 ), Ward( info=London, id=2, num_workers=8600, num_players=10000 ) ]
> results <- metawards$run(model=wards, additional=5)

Note

R does not support adding individual ward objects together to get Wards