The goal of MultiScaleTreeGraph.jl is to read, write, analyse and plot MTG (Multi-scale Tree Graph) files. These files describe the plant topology (i.e. structure) along with some attributes for each node (e.g. geometry, colors, state...).
The package is under intensive development and is in a very early version. The functions may heavily change from one version to another until a more stable version is released.
You can install the latest stable version of MultiScaleTreeGraph.jl using this command:
] add MultiScaleTreeGraph
Or if you prefer the development version:
using Pkg
Pkg.add(url="https://github.com/VEZY/MultiScaleTreeGraph.jl", rev="master")
Read a simple MTG file:
using MultiScaleTreeGraph
file = joinpath(dirname(dirname(pathof(MultiScaleTreeGraph))),"test","files","simple_plant.mtg")
mtg = read_mtg(file)
Then you can compute new variables in the MTG using a DataFrame.jl
's alike syntax:
transform!(mtg, :Length => (x -> x * 1000.) => :length_mm)
And then write the MTG back to disk:
write_mtg("test.mtg",mtg)
You can convert an MTG into a DataFrame and select the variables you need:
DataFrame(mtg, [:length_mm, :XX])
Or convert it to a MetaGraph:
MetaGraph(mtg)
We can plot the MTG using the companion package PlantGeom.jl
.
MultiScaleTreeGraph.jl
trees are compatible with the AbstractTrees.jl package, which means you can use all functions from that package, e.g.:
using AbstractTrees
node = get_node(mtg, 4)
nodevalue(node)
parent(node)
nextsibling(node)
prevsibling(nextsibling(node))
childrentype(node)
childtype(node)
childstatetype(node)
getdescendant(mtg, (1, 1, 1, 2))
collect(PreOrderDFS(mtg))
collect(PostOrderDFS(mtg))
collect(Leaves(mtg))
collect(nodevalues(PreOrderDFS(mtg)))
print_tree(mtg)
You can learn more about MultiScaleTreeGraph.jl
in the documentation of the package.
Several tree-related functions in use are adapted from DataTrees.jl.
This package is heavily inspired by OpenAlea's MTG implementation in Python.