openalea.mtg.aml module: Long Tour¶
2.1. Reading the file¶
This page illustrates the usage of all the functionalities available in
openalea.mtg.aml module. All
the examples uses the MTG file
code_file2.mtg. If you are interested in the syntax, we stronly recommend
you to look at Section MTG file.
First, let us read the MTG file with the function
MTG(). Note that only one MTG object can be manipulated at a time. This MTG object is the active MTG.
>>> from openalea.mtg.aml import * >>> g = MTG('user/code_file2.mtg') >>> Active() == g True
Active() function checks that g is currently the active MTG.
If a new MTG file is read, it becomes the new active MTG object. However, the function
Activate() can be use to switch between MTG objects as follows:
>>> h = MTG('user/agraf.mtg') >>> Active() == h True >>> Activate(g)
>>> MTGRoot() 0
2.2. Feature functions¶
2.2.1. Order, Rank and Height¶
AlgOrder()) look at the number of + sign that need to be crossed before reaching the vertex considered
>>> Order(3) 0 >>> Order(14) 1 >>> AlgOrder(3,14) 1
AlgHeight()) look at the number of components between the root of the vertex’s branch and the vertex’s position.
>>> Height(3) 0 >>> Height(14) 10 >>> AlgHeight(3, 14) 10
AlgRank()) returns the number < sign that need to be crosssed before reaching the vertex considered.
>>> Rank(3) 0 >>> Rank(14) 4 >>> AlgRank(3, 14) 5
Class() gives the type of vertex usually defined by a letter
>>> Class(3) 'I'
Index() gives the other part of the label
>>> Index(3) 1
When speaking about multiscale tree graph, we also want to access the
>>> Scale(3) 3
A new function called
Label() combines the Class and Index:
>>> Label(3) 'I1'
Feature() returns value of a given feature coded in the MTG file.
>>> Feature(2, "Len") 10.0
ClassScale() returns the Scale at which appears a given class of vertex:
>>> ClassScale('U') 3
EdgeType() returns the type of connection between two vertices (e.g., +, <)
>>> i=8; Class(i), Index(i) ('I', 6) >>> i=9; Class(i), Index(i) ('U', 1) >>> EdgeType(8,9) '+'
Defined() tests whether a vertex’s id is present in the active MTG
>>> Defined(1) True >>> Defined(100000) False
2.3. Date functions¶
The following function requires MTG files to contain Date information.
not yet implemented
2.4. Functions for moving in MTGs¶
Trunk() returns the list of vertices constituting the bearing botanical axis of a branching system
>>> Trunk(2) # vertex 2 is U1 therefore the Trunk should return index related to U1, U2, U3 [2, 24, 31] >>> Class(24), Index(24) ('U', 2) >>> Trunk(3) # vertex 3 is an internode, so we get all internode of the axis containing vertex 3 [3, 4, 5, 6, 7, 8, 21, 22, 23, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35] >>> Class(35), Index(35) ('I', 19)
Topological father of a given vertex.
>>> Label(8) 'I6' >>> Father(8) 7 >>> Label(9) # Let us look at vertex 9 (with the U1 label) 'U1' >>> Father(9) # and look for its father's index 2 >>> Label(2) # and its father's label that appear to also be equal to 1 'U1'
Axis() returns the vertices of the axis to which belongs a given vertex.
>>> [Label(x) for x in Axis(9)] ['U1', 'U2']
The scale may be specified
>>> [Label(x) for x in Axis(9, Scale=3)] ['I20', 'I21', 'I22', 'I23', 'I24', 'I25', 'I26', 'I27', 'I28', 'I29']
Ancestors() returns a list of ancestors of a given vertex
>>> Ancestors(20) # of I29 [20, 19, 18, 17, 16, 14, 13, 12, 11, 10, 8, 7, 6, 5, 4, 3] >>> [Class(x)+str(Index(x)) for x in Ancestors(20)] ['I29', 'I28', 'I27', 'I26', 'I25', 'I24', 'I23', 'I22', 'I21', 'I20', 'I6', 'I5', 'I4', 'I3', 'I2', 'I1']
Path() returns a list of vertices defining the path between two vertices
>>> [Class(x)+str(Index(x)) for x in Path(8, 20)] ['I20', 'I21', 'I22', 'I23', 'I24', 'I25', 'I26', 'I27', 'I28', 'I29']
In order to illustrate the
Sons() function, let us consider the vertex 8
>>> Class(8), Index(8) ('I', 6) >>> [Class(x)+str(Index(x)) for x in Sons(8)] ['I20', 'I7']
Descendants() an array with all the vertices, at the same scale as v, that belong to the branching system starting at v:
>>> [Class(x)+str(Index(x)) for x in Descendants(8)]
Ancestors() contains the vertices on the path from v back to the root (in this order) and finishes by the tree root.:
>>> [Class(x)+str(Index(x)) for x in Ancestors(8)]
Predecessor() returns the Father of a vertex connected to it by a ‘<’ edge, and is therefore equivalent to:
Father(v, EdgeType-> ‘<’).
Successor() is equivalent to
Root() returns root of the branching systenme containing a given vertex and therefore is equivalent to:
Ancestors(v, EdgeType=’<’)[-1] >>> [Class(x)+str(Index(x)) for x in Ancestors(8)] ['I6', 'I5', 'I4', 'I3', 'I2', 'I1'] >>> Root(8) 3 >>> Class(3)+str(Index(3)) 'I1'
Complex returns Scale(v)-1 why what is it for?
>>> Complex(8) 2
Returns a list of vertices that are included in the upper scale of the vertex’s id considered. The array is empty if the vertex has no components.
>>> Components(1, Scale=2) [2, 9, 15, 24, 31] >>> Components(1, Scale=3) [3, 4, 5, 6, 7, 8, 21, 22, 23, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35]
to be done. find example
Vertex defining the father of a vertex with maximum scale.
>>> Label(9) # starting from a Component U1 at vertex's id 9 'U1' >>> Father(9) # what is its Father ? 2 >>> Label(Father(9)) # answer: another U1 of vertex's id 2 'U1' >>> Location(9) # what is the location of vertex 9 8 >>> Label(Location(9)) # the internode I6 'I6'
>>> Label(8) 'I6' >>> Label(Extremities(8)) ['I29', 'I19']
2.5. Geometric interpretation¶
Most of the following functions are not yet implemented. See Quick Start to manipulate MTGs to see the usage of
PlantFrame() with dressing data.
You may also use the former AML code using openalea.aml package
One can use openalea.aml for now:
>>> import openalea.aml as aml >>> aml.MTG('code_file2.txt') >>> pf = aml.PlantFrame(2) >>> aml.Plot()
Shows the MTG file at scale 2. This is possible because Diameter and Lenmgth features are provided at that scale.
2.6. Comparison Functions¶
not yet implemented
Documentation adapted from the AMAPmod user manual version 1.8 Dec 2009.
Documentation to be revised