def compute_radius(g, v, last_radius): all_r2 = {} for vid in post_order(g, v): r2 = max(sum([all_r2[c] for c in g.children_iter(vid)]), last_radius) all_r2[vid] = r2 for k, v in all_r2.iteritems(): all_r2[k] = sqrt(v) return all_r2
def compute_axes(g, v, fixed_points): marked = {} axes = {} for vid in post_order(g, v): if vid in marked: continue _axe = list(simple_axe(g, vid, marked, fixed_points)) _axe.reverse() axes.setdefault(g.order(_axe[0]), []).append(_axe) return axes
def compute_axes(g, v, fixed_points): marked = {} axes = {} for vid in post_order(g,v): if vid in marked: continue _axe = list(simple_axe(g,vid, marked, fixed_points)) _axe.reverse() axes.setdefault(g.order(_axe[0]),[]).append(_axe) return axes
def max_heigth(g, scale=None): import openalea.mtg.traversal as traversal result = 0 if scale is None: scale = g.max_scale() for r in g.roots(scale): mvalue = {} for vid in traversal.post_order(g, r): mvalue[vid] = max([mvalue[c] + 1 for c in g.children(vid)] + [1]) result = max(mvalue[r], result) return result
def strahler_order(g, vid): """internal function used by :func:`strahler` """ strahler = {} for v in traversal.post_order(g, vid): children_strahler = [strahler[c] for c in g.children(v)] if children_strahler: m, M = min(children_strahler), max(children_strahler) strahler[v] = M if m != M else M + 1 else: strahler[v] = 1 return strahler