Skip to content

VEZY/MultiScaleTreeGraph.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MultiScaleTreeGraph

Stable Dev Build Status Coverage Code Style: Blue ColPrac: Contributor's Guide on Collaborative Practices for Community Packages DOI

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.

1. Installation

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")

2. Example

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)

3. Conversion

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)

4. Compatibility

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.

3. Acknowledgments

Several tree-related functions in use are adapted from DataTrees.jl.

This package is heavily inspired by OpenAlea's MTG implementation in Python.

4. Similar packages