Read and Write MTGs
Read
Reading a file
Reading an MTG is done using the read_mtg
function:
file = joinpath(dirname(dirname(pathof(MultiScaleTreeGraph))),"test","files","simple_plant.mtg")
mtg = read_mtg(file)
/ 1: Scene
└─ / 2: Individual
└─ / 3: Axis
└─ / 4: Internode
├─ + 5: Leaf
└─ < 6: Internode
└─ + 7: Leaf
The file given in input can be either a .mtg
, .csv
, .xlsx
or .xlsm
file.
Options
The function has two optional arguments to set the type used for the attributes, and the type used for the MTG field (see next section for more details). It also has a keyword argument to choose the sheet name in case you're reading an xlsx
or xlsm
file.
Attributes type
The type used for the attributes should be a NamedTuple
-alike or a Dict
-alike type. Here is a more in-depth recommendation, use:
NamedTuple
if you don't plan to modify the attributes of the MTG, e.g. to use them for plotting or computing statistics...MutableNamedTuple
if you plan to modify the attributes values but not adding new attributes very often, e.g. recompute an attribute value...Dict
or similar (e.g.OrderedDict
) if you plan to heavily modify the attributes, e.g. adding/removing attributes a lot
If you don't know what to use, just use the default.
MTG encoding type
The MTG encoding type can be either immutable or mutable. By default we use a mutable one (MutableNodeMTG
), but you can use the immutable one by setting the mtg_type
argument of the function to NodeMTG
. If you're planning on modifying the MTG encoding of some of your nodes, you should use MutableNodeMTG
, and if you don't want to modify anything, use NodeMTG
instead as it should be faster.
Again, if you don't know what to use, use the default.
Sheet name
If you're reading your MTG from a .xlsx
or .xlsm
file, you can choose the sheet you want to read by using the keyword argument sheet_name
.
If you don't provide anything for the sheet name, it will read the first one by default.
Keyword arguments must be explicitly named in the function call. In this case it would be:
file = joinpath(dirname(dirname(pathof(MultiScaleTreeGraph))),"test","files","tree3h.xlsx")
mtg = read_mtg(file, sheet_name = "A3H")
Write
Writing an MTG back to disk is as simple as this:
temporary_file = tempname() # using a temporary file here, but you should put the path to the file you want to write
write_mtg(temporary_file, mtg)
[ Info: Writing mtg to /tmp/jl_uxOPqXIfyb
Build manually
It is also possible to build an MTG from scratch using MultiScaleTreeGraph.jl
. It is explained in a further tutorial Make an MTG manually.