def view_distri_layers(self, g, nb_dispersal_units = 1e5, vmax = None, position_source = 3./5, return_df=False): from alinea.alep.architecture import set_property_on_each_id from alinea.alep.alep_color import alep_colormap, green_yellow_red from alinea.alep.disease_outputs import plot3d_transparency from openalea.plantgl.all import Viewer import matplotlib.pyplot as plt import pandas as pd # Compute severity by leaf self.leaves_in_grid(g) layers = self.layers.keys() layers.sort() layer = layers[int(position_source*len(layers))] if len(self.layers[layer])>0: leaf = self.layers[layer][0] else: non_empty = {k:v for k,v in self.layers.iteritems() if len(v)>0} leaf = self.layers[min(non_empty.keys(), key=lambda k:abs(k-layer))][0] deposits = {k:sum([du.nb_dispersal_units for du in v]) for k,v in self.disperse(g, dispersal_units = {leaf : nb_dispersal_units}).iteritems()} set_property_on_each_id(g, 'nb_dispersal_units', deposits) # Visualization if vmax is None: vmax = 2*max(deposits.values())/3 g = alep_colormap(g, 'nb_dispersal_units', cmap=green_yellow_red(), lognorm=False, zero_to_one=False, vmax = vmax) d = [np.arange(vmax)] fig, ax = plt.subplots() ax.imshow(d, cmap = green_yellow_red()) transp = {vid:0. for k,v in self.layers.iteritems() for vid in v} set_property_on_each_id(g, 'transparency', transp) for id in g: if not id in deposits: g.node(id).color = (0,0,0) g.node(id).transparency = 0.7 elif deposits[id]==0.: g.node(id).color = (0,0,0) g.node(id).transparency = 0.7 else: g.node(id).transparency = 0. scene = plot3d_transparency(g) Viewer.display(scene) if return_df==True: depo_layer = {k:sum([deposits[vid] for vid in v if vid in deposits]) for k,v in self.layers.iteritems()} df = pd.DataFrame([[k,v] for k, v in depo_layer.iteritems()]) df = df.sort(0) df[2] = df[1]/df[1].sum() fig, ax = plt.subplots() ax.plot(df[2], df[0], 'k') ax.set_ylabel('Height', fontsize = 16) ax.set_xlabel('Proportion of deposits', fontsize = 16) return df
def update_plot(g): # Compute severity by leaf severity_by_leaf = compute_severity_by_leaf(g, label='LeafElement') set_property_on_each_id(g, 'severity', severity_by_leaf, label='LeafElement') # Visualization g = alep_colormap(g, 'severity', cmap=green_yellow_red(levels=100), lognorm=False, zero_to_one=False, vmax=100) leaves = get_leaves(g, label='LeafElement') pos_sen = g.property('position_senescence') for leaf in leaves: if pos_sen[leaf] == 0.: g.node(leaf).color = (157, 72, 7) scene = plot3d(g) Viewer.display(scene) return scene
def update_plot(g): from alinea.alep.architecture import set_property_on_each_id from alinea.alep.disease_outputs import compute_severity_by_leaf from alinea.adel.mtg_interpreter import plot3d from openalea.plantgl.all import Viewer # Compute severity by leaf severity_by_leaf = compute_severity_by_leaf(g, label='LeafElement') set_property_on_each_id(g, 'severity', severity_by_leaf, label='LeafElement') # Visualization g = alep_colormap(g, 'severity', cmap=green_yellow_red(levels=100), lognorm=False, zero_to_one=False, vmax=100) leaves = get_leaves(g, label='LeafElement') pos_sen = g.property('position_senescence') for leaf in leaves: if pos_sen[leaf] == 0.: g.node(leaf).color = (157, 72, 7) scene = plot3d(g) Viewer.display(scene) return scene
def view_distri_layers(self, g, density_dispersal_units=1000., vmax=None): from alinea.alep.architecture import set_property_on_each_id from alinea.alep.alep_color import alep_colormap, green_yellow_red from alinea.alep.disease_outputs import plot3d_transparency from openalea.plantgl.all import Viewer import matplotlib.pyplot as plt # Compute severity by leaf nb_dus = density_dispersal_units * self.domain_area deposits = { k: sum([du.nb_dispersal_units for du in v]) for k, v in self.contaminate(g, nb_dus).iteritems() } set_property_on_each_id(g, 'nb_dispersal_units', deposits) # Visualization if vmax is None: vmax = 2 * max(deposits.values()) / 3 g = alep_colormap(g, 'nb_dispersal_units', cmap=green_yellow_red(), lognorm=False, zero_to_one=False) d = [np.arange(vmax)] fig, ax = plt.subplots() ax.imshow(d, cmap=green_yellow_red()) geometries = g.property('geometry') leaves = get_leaves(g, label='LeafElement') leaves = [l for l in leaves if l in geometries] transp = {vid: 0. for k, v in self.layers.iteritems() for vid in v} set_property_on_each_id(g, 'transparency', transp) for id in g: if not id in deposits: g.node(id).color = (1, 1, 1) g.node(id).transparency = 0.7 elif deposits[id] == 0.: g.node(id).color = (1, 1, 1) g.node(id).transparency = 0.7 else: g.node(id).transparency = 0. scene = plot3d_transparency(g) Viewer.display(scene)
def update_plot(g): # Compute severity by leaf severity_by_leaf = compute_severity_by_leaf(g, label = 'LeafElement') set_property_on_each_id(g, 'severity', severity_by_leaf, label = 'LeafElement') # Visualization g = alep_colormap(g, 'severity', cmap=green_yellow_red(levels=100), lognorm=False, zero_to_one=False, vmax=100) leaves = get_leaves(g, label='LeafElement') pos_sen = g.property('position_senescence') for leaf in leaves: if pos_sen[leaf]==0.: g.node(leaf).color = (157, 72, 7) scene = plot3d(g) Viewer.display(scene) return scene
def update_plot(g): from alinea.alep.architecture import set_property_on_each_id from alinea.alep.disease_outputs import compute_severity_by_leaf from alinea.adel.mtg_interpreter import plot3d from openalea.plantgl.all import Viewer # Compute severity by leaf severity_by_leaf = compute_severity_by_leaf(g, label = 'lf') set_property_on_each_id(g, 'severity', severity_by_leaf, label = 'lf') # Visualization g = alep_colormap(g, 'severity', cmap=green_yellow_red(levels=100), lognorm=False, zero_to_one=False, vmax=100) brown = (100,70,30) trunk_ids = [n for n in g if g.label(n).startswith('tronc')] for id in trunk_ids: trunk = g.node(id) trunk.color = brown scene = plot3d(g) Viewer.display(scene) return scene
def update_plot(g): from alinea.alep.architecture import set_property_on_each_id from alinea.alep.disease_outputs import compute_severity_by_leaf from alinea.adel.mtg_interpreter import plot3d from openalea.plantgl.all import Viewer # Compute severity by leaf severity_by_leaf = compute_severity_by_leaf(g, label = 'LeafElement') set_property_on_each_id(g, 'severity', severity_by_leaf, label = 'LeafElement') # Visualization g = alep_colormap(g, 'severity', cmap=green_yellow_red(levels=100), lognorm=False, zero_to_one=False, vmax=100) leaves = get_leaves(g, label='LeafElement') pos_sen = g.property('position_senescence') for leaf in leaves: if pos_sen[leaf]==0.: g.node(leaf).color = (157, 72, 7) scene = plot3d(g) Viewer.display(scene) return scene
def update_plot(g, leaf_source): # Compute severity by leaf nb_dus_by_leaf = count_dispersal_units_by_leaf(g, label = 'LeafElement') set_property_on_each_id(g, 'nb_dus', nb_dus_by_leaf, label = 'LeafElement') # Visualization g = alep_colormap(g, 'nb_dus', cmap=green_yellow_red(levels=1000), lognorm=False, zero_to_one=False, vmax=25) # pos_sen = g.property('position_senescence') for id in g: if not id in nb_dus_by_leaf: # g.node(id).color = (255,255,255) # g.node(id).color = (113,113,113) # g.node(id).transparency = 0.9 g.node(id).transparency = 0. else: g.node(id).transparency = 0. g.node(leaf_source).color = (230, 62, 218) g.node(leaf_source).transparency = 0. scene = plot3d(g) Viewer.display(scene) return scene
""" Gather different strategies for modeling dispersal of fungus propagules.
def plot_severity_rust_by_leaf(g, senescence=True, transparency=None, label='LeafElement'): """ Display the MTG with colored leaves according to disease severity Parameters ---------- g: MTG MTG representing the canopy senescence: bool True if senescence must be displayed, False otherwise transparency: float[0:1] Transparency of the part of the MTG without lesion label: str Label of the part of the MTG concerned by the calculation Returns ------- scene: Scene containing the MTG attacked by the disease """ from alinea.alep.architecture import set_property_on_each_id, get_leaves from alinea.alep.alep_color import alep_colormap, green_yellow_red from alinea.adel.mtg_interpreter import plot3d from alinea.alep.disease_outputs import plot3d_transparency from openalea.plantgl.all import Viewer # Visualization lesions = g.property('lesions') leaves = get_leaves(g, label=label) severity_by_leaf = {} for lf in leaves: if lf in lesions: leaf = g.node(lf) severity_by_leaf[lf] = sum([l.surface for l in leaf.lesions])*100./leaf.area if leaf.area>0 else 0. else: severity_by_leaf[lf] = 0. set_property_on_each_id(g, 'severity', severity_by_leaf, label=label) g = alep_colormap(g, 'severity', cmap=green_yellow_red(levels=100), lognorm=False, zero_to_one=False, vmax=100) if senescence==True: leaves = get_leaves(g, label=label) sen_lengths = g.property('senesced_length') green_lengths = g.property('green_length') for leaf in leaves: if sen_lengths[leaf]>0. and round(green_lengths[leaf],15)==0.: g.node(leaf).color = (157, 72, 7) if transparency!=None: for id in g: if not id in severity_by_leaf: g.node(id).color = (255,255,255) g.node(id).transparency = 0.9 elif severity_by_leaf[id]==0.: g.node(id).color = (255,255,255) g.node(id).transparency = transparency else: g.node(id).transparency = 0. scene = plot3d_transparency(g) else: scene = plot3d_transparency(g) Viewer.display(scene) return scene
""" Gather different strategies for modeling dispersal of fungus propagules.
def plot_severity_rust_by_leaf(g, senescence=True, transparency=None, label='LeafElement'): """ Display the MTG with colored leaves according to disease severity Parameters ---------- g: MTG MTG representing the canopy senescence: bool True if senescence must be displayed, False otherwise transparency: float[0:1] Transparency of the part of the MTG without lesion label: str Label of the part of the MTG concerned by the calculation Returns ------- scene: Scene containing the MTG attacked by the disease """ from alinea.alep.architecture import set_property_on_each_id, get_leaves from alinea.alep.alep_color import alep_colormap, green_yellow_red from alinea.adel.mtg_interpreter import plot3d from alinea.alep.disease_outputs import plot3d_transparency from openalea.plantgl.all import Viewer # Visualization lesions = g.property('lesions') leaves = get_leaves(g, label=label) severity_by_leaf = {} for lf in leaves: if lf in lesions: leaf = g.node(lf) severity_by_leaf[lf] = sum([ l.surface for l in leaf.lesions ]) * 100. / leaf.area if leaf.area > 0 else 0. else: severity_by_leaf[lf] = 0. set_property_on_each_id(g, 'severity', severity_by_leaf, label=label) g = alep_colormap(g, 'severity', cmap=green_yellow_red(levels=100), lognorm=False, zero_to_one=False, vmax=100) if senescence == True: leaves = get_leaves(g, label=label) sen_lengths = g.property('senesced_length') green_lengths = g.property('green_length') for leaf in leaves: if sen_lengths[leaf] > 0. and round(green_lengths[leaf], 15) == 0.: g.node(leaf).color = (157, 72, 7) if transparency != None: for id in g: if not id in severity_by_leaf: g.node(id).color = (255, 255, 255) g.node(id).transparency = 0.9 elif severity_by_leaf[id] == 0.: g.node(id).color = (255, 255, 255) g.node(id).transparency = transparency else: g.node(id).transparency = 0. scene = plot3d_transparency(g) else: scene = plot3d_transparency(g) Viewer.display(scene) return scene