Beispiel #1
0
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
Beispiel #2
0
def test_transport_rain_two_metamers(interleaf=10.,
                                     density = 350.,
                                     layer_thickness=0.01, 
                                     leaf_sectors = 7,
                                     density_emitted=1e5,
                                     by_sector = False,
                                     display_scene = False):
    g, domain_area, domain, convunit = adel_two_metamers_stand(leaf_sectors=leaf_sectors, 
                                                               density=density,
                                                               interleaf=interleaf,
                                                               leaf_length=20,
                                                               leaf_width=1,
                                                               Einc=0)
    if display_scene:
        scene = plot3d(g)
        Viewer.display(scene)
    weather = sample_weather_with_rain()
    leaves = get_leaf_ids(g)
    DU = emission_source(g, leaves, 
                         domain_area=domain_area,
                         density_emitted=density_emitted)
    transporter = PopDropsTransport(domain=domain, domain_area=domain_area,
                                    dh=layer_thickness, convUnit=convunit,
                                    group_dus=True)
    if sum(DU.values())>0:
        deposits = transporter.disperse(g, DU, weather)
    return count_du_source_target(deposits, leaves, by_sector=False)
Beispiel #3
0
def testdyn(nplants=1,start = 100,step = 50, nstep=30,dec=10,az=0):
    from time import sleep
   
    pars, d = adelR(nplants,start)
    
    pos = [(i*dec,0,0) for i in range(nplants)]
    
    g=mtg_factory(d,adel_metamer, leaf_sectors=1,leaf_db=leafdb, stand = [(pos[i],az) for i in range(nplants)])
    g=mtg_interpreter(g)
    
    time = start
    oldcanopy = RunAdel(time,pars)
    
    for i in range(nstep):
        s = plot3d(g)
        Viewer.display(s)
        #sleep(2)
        time = start + (i + 1) * step
        canopy = RunAdel(time,pars)
        mtg_update_from_table(g, canopy, oldcanopy)
        g=mtg_interpreter(g)
        oldcanopy = canopy
    return g,d
    
 # TO DO : senescence leaf shrink
 # tester secteurs > 1
 
#df=DataFrame(d)
    #df.Lv
    #df.ix[1:7,6:9]
    #df[['Gl','Gv','Ll','Lv','Lr','L_shape']]
# import numpy as np
# from alinea.popdrops.Rain import get_area_and_normal
# a1,_=get_area_and_normal(g1.property('geometry'))
# a1 = dict(((k,np.sum(v)) for k,v in a1.iteritems()))
Beispiel #4
0
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
Beispiel #5
0
def newmtg(canopy,dec=10,az=0):
    from alinea.adel.newmtg import mtg_factory, adel_metamer
    from alinea.adel.mtg_interpreter import mtg_interpreter, plot3d
    g=mtg_factory(canopy,adel_metamer, leaf_sectors=1,leaf_db=leafdb, stand = [((dec,0,0),az)])
    g=mtg_interpreter(g)
    s = plot3d(g)
    return g,s
Beispiel #6
0
def newmtg(canopy, dec=10, az=0):
    from alinea.adel.newmtg import mtg_factory, adel_metamer
    from alinea.adel.mtg_interpreter import mtg_interpreter, plot3d
    g = mtg_factory(canopy,
                    adel_metamer,
                    leaf_sectors=1,
                    leaf_db=leafdb,
                    stand=[((dec, 0, 0), az)])
    g = mtg_interpreter(g)
    s = plot3d(g)
    return g, s
Beispiel #7
0
 def scene(g, property=None):
     if property:
         g = colormap(g, property, cmap='jet', lognorm=True)
         colored = g.property('color')
         colors = {
             vid: colored.get(vid, colored.get(g.complex(vid), [0, 0, 0]))
             for vid in g.vertices(scale=g.max_scale())
         }
     else:
         colors = None
     s = plot3d(g, colors=colors
                )  # use the one of openalea.plantframe.color instead ?
     return s
Beispiel #8
0
def ground_cover(g, domain, camera = {'type':'perspective', 'distance':200., 'fov':50., 'azimuth':0, 'zenith':0.}, image_width = 4288, image_height = 2848, getImages=False, replicate=None):
    """
    compute ground cover based on is_green/not_green property of g
    """
    from alinea.adel.mtg_interpreter import plot3d
    
    colors_def = {'green':[0, 255, 0], 'senescent' : [255, 0, 0]}
    greeness = g.property('is_green')
    colors = {k:colors_def['green'] if greeness[k] else colors_def['senescent'] for k in greeness}
    
    scene = plot3d(g, colors=colors)
    
    gc, im, box = color_ground_cover(scene, domain, colors_def = colors_def, camera = camera, image_width = image_width, image_height = image_height, getImages=getImages, replicate=replicate)
    
    return gc, im, box
Beispiel #9
0
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
Beispiel #10
0
def testdyn(nplants=1, start=100, step=50, nstep=30, dec=10, az=0):
    from time import sleep

    pars, d = adelR(nplants, start)

    pos = [(i * dec, 0, 0) for i in range(nplants)]

    g = mtg_factory(d,
                    adel_metamer,
                    leaf_sectors=1,
                    leaf_db=leafdb,
                    stand=[(pos[i], az) for i in range(nplants)])
    g = mtg_interpreter(g)

    time = start
    oldcanopy = RunAdel(time, pars)

    for i in range(nstep):
        s = plot3d(g)
        Viewer.display(s)
        #sleep(2)
        time = start + (i + 1) * step
        canopy = RunAdel(time, pars)
        mtg_update_from_table(g, canopy, oldcanopy)
        g = mtg_interpreter(g)
        oldcanopy = canopy
    return g, d

# TO DO : senescence leaf shrink
# tester secteurs > 1


#df=DataFrame(d)
#df.Lv
#df.ix[1:7,6:9]
#df[['Gl','Gv','Ll','Lv','Lr','L_shape']]
# import numpy as np
# from alinea.popdrops.Rain import get_area_and_normal
# a1,_=get_area_and_normal(g1.property('geometry'))
# a1 = dict(((k,np.sum(v)) for k,v in a1.iteritems()))
Beispiel #11
0
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
Beispiel #12
0
def ground_cover(
        g,
        domain,
        camera={
            'type': 'perspective',
            'distance': 200.,
            'fov': 50.,
            'azimuth': 0,
            'zenith': 0.
        },
        image_width=4288,
        image_height=2848,
        getImages=False,
        replicate=None):
    """
    compute ground cover based on is_green/not_green property of g
    """
    from alinea.adel.mtg_interpreter import plot3d

    colors_def = {'green': [0, 255, 0], 'senescent': [255, 0, 0]}
    greeness = g.property('is_green')
    colors = {
        k: colors_def['green'] if greeness[k] else colors_def['senescent']
        for k in greeness
    }

    scene = plot3d(g, colors=colors)

    gc, im, box = color_ground_cover(scene,
                                     domain,
                                     colors_def=colors_def,
                                     camera=camera,
                                     image_width=image_width,
                                     image_height=image_height,
                                     getImages=getImages,
                                     replicate=replicate)

    return gc, im, box
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
 # extract_leaves
 from alinea.adel.wheat import extract_wheat
 db = extract_wheat.extract_leaf_info(pj(DATA_IN_DIR, 'laminaCurv.RData'), 
                                      pj(DATA_IN_DIR, 'lamina2D.RData'))
 # fit leaves
 from alinea.adel.fit import fit
 db, discard = fit.fit_leaves(db, NUMBER_OF_LONGITUDINAL_DIVISIONS)
 
 # set the rotation angle of the plant on itself. Permits to randomize the orientation of each leaf.
 stand = zip(positions, [0 for i in range(len(positions))])
 g = mtg_factory(metamers_parameters.to_dict('list'), adel_metamer, leaf_db = db, stand = stand)
 #add geometry
 g = mtg_interpreter(g)
 
 ## plot (uncomment the next 2 lines to plot the 3D model)
 scene = plot3d(g)
 Viewer.display(scene)
 
 # call caribu
 from alinea.caribu.caribu_star import caribu_star
 geom = g.property('geometry')
 star, exposed_area = caribu_star(geom, directions = NUMBER_OF_DIRECTIONS, domain = domain, convUnit = convUnit)#cf caribu_star doc for output interpretation
 caribu_out = pandas.DataFrame([(adel_label(g,vid), star[vid], exposed_area[vid]) for vid in star],
                               columns=['adel_label', 'star', 'exposed_area'])
 
 caribu_out_filepath = pj(DATA_OUT_DIR, 'caribu_out' + str(angle_of_incidence) + '.csv')
 print 'Save caribu output to', caribu_out_filepath
 caribu_out.to_csv(caribu_out_filepath, na_rep='NA', index=False)
 
 # Calculate the star for each class of metamers (metamer1, metamer2, metamer3, etc).
 # Star is "ratio viewed area / area". It takes into consideration the angles of 
Beispiel #15
0
                                         pj(DATA_IN_DIR, 'lamina2D.RData'))
    # fit leaves
    from alinea.adel.fit import fit
    db, discard = fit.fit_leaves(db, NUMBER_OF_LONGITUDINAL_DIVISIONS)

    # set the rotation angle of the plant on itself. Permits to randomize the orientation of each leaf.
    stand = zip(positions, [0 for i in range(len(positions))])
    g = mtg_factory(metamers_parameters.to_dict('list'),
                    adel_metamer,
                    leaf_db=db,
                    stand=stand)
    #add geometry
    g = mtg_interpreter(g)

    ## plot (uncomment the next 2 lines to plot the 3D model)
    scene = plot3d(g)
    Viewer.display(scene)

    # call caribu
    from alinea.caribu.caribu_star import caribu_star
    geom = g.property('geometry')
    star, exposed_area = caribu_star(
        geom,
        directions=NUMBER_OF_DIRECTIONS,
        domain=domain,
        convUnit=convUnit)  #cf caribu_star doc for output interpretation
    caribu_out = pandas.DataFrame(
        [(adel_label(g, vid), star[vid], exposed_area[vid]) for vid in star],
        columns=['adel_label', 'star', 'exposed_area'])

    caribu_out_filepath = pj(DATA_OUT_DIR,
Beispiel #16
0
def adel_scene_node(g):
    return plot3d(g)