Input files and formats
Input data in metawards
is provided via a variety of different files,
many of which are described below.
There are three types of input files:
Flexible-format: These are a very flexible format, and support a wide range of input data types and layout options. Examples include the extra seeds, design and user input files.
Rigid-format: These have a rigid format, which is specific to their type. The main examples of this are the files used to specify a model (e.g. the network, connections etc.)
JSON-format: These are files that are in standard JSON format. Examples include the disease and demographics files, plus many of the files in MetaWardsData (e.g. the description of the model data, and the static parameters file).
Flexible-format files
Flexible-format files are read using the
Python CSV module.
These files are either column or row based (depending on the file type),
and you are free to use
a comma or spaces as the separator (but must be consistent within a file).
Comments can be added using a #
character, and blank lines are
ignored.
Data within a flexible-format file is interpreted using
metawards.Interpret
. This can interpret simple data, such as
strings, numbers, booleans (true
or false
), as well as complex
data such as dates (next week
, January 10 2020
), expressions
(10.0 / 3.0
, pi * 2.3**2
) and random numbers
(rand(0,10)
, rand()
, rand(2.5, 2.6)
).
Rigid-format files
Rigid-format files are read using a custom parser for each file type. As such, the files have a rigid format that is specified for each file type. We plan to migrate as many rigid-format files across to either flexible-format or JSON-format as possible.
JSON-format files
JSON-format files are standard JSON
files that are used for small or less-structured files, e.g. specifying
the parameters for a disease, or specifying the data associated with
different demographics. These files are read using the
Python JSON module
into dictionaries, which are interpreted by the classes associated with
each file (e.g. Disease
in the case of disease parameters).
Many of these classes use metawards.Interpret
to interpret the
data from the JSON file, meaning that these support expressions, random
numbers etc. We plan to ensure that as much data as possible is interpreted
using metawards.Interpret
, so that there is a consistent
experience across the code.