Ejemplo n.º 1
0
def growth_wheat():
    seq, weather = sample_weather()
    wdata = weather.get_weather(seq)

    nsect = 1  #the number of element per leaf

    adel = AdelWheat(nsect=nsect, nplants=1, seed=2)

    # age=900に固定
    g = adel.setup_canopy(900)
    adel.grow(g, wdata)

    # csv保存
    with open('label.csv', 'w') as f:
        writer = csv.writer(f)
        label = g.property('label')
        geometry = g.property('geometry')
        is_green = g.property('is_green')
        writer.writerow([label])
        writer.writerow([geometry])
        writer.writerow([is_green])
    f.close()

    # 茎,緑葉,茶葉,全体を生成して保存
    for i in range(0, 4, 1):
        st = plot3d1(g, i)
        for t in range(len(st)):
            st[t].name = str(t)
        # 自動的に.mtlも保存してくれるっぽい
        st.save("./" + "compare/" + str(i) + "/nsect" + str(nsect) + ".obj")

    st = plot3d1(g, 4)
    w = obj.ObjCodec()
    w.write2("./compare/1/aa.obj", st)
Ejemplo n.º 2
0
def test_statistics():
    nplants = 1
    adel = AdelWheat(nplants=nplants)
    g = adel.setup_canopy(age=100)
    areas = adel.get_exposed_areas(g)
    assert 'green_area' in areas
    pstats = adel.plot_statistics(g)
Ejemplo n.º 3
0
def growth_wheat_someage():
    seq, weather = sample_weather()
    wdata = weather.get_weather(seq)
    nsect = 1  #the number of element per leaf
    adel = AdelWheat(nsect=nsect, nplants=1, seed=2)

    # save_dir = './obj'
    # save_dir = '/home/demo/document/ykato_git/datasets/omg_instance_segmentation/dataset_ver4/obj'
    if os.name == 'nt':
        save_dir = 'I:/ykato_git/datasets/omg_instance_segmentation/dataset_ver4/obj'
    else:
        save_dir = '/home/demo/document/ykato_git/datasets/omg_instance_segmentation/dataset_ver4/obj'

    makeDirectory(save_dir)

    for age in range(100, 1100, 100):

        g = adel.setup_canopy(age)
        adel.grow(g, wdata)

        # パラメータcsv保存
        with open(save_dir + '/param_age{}.csv'.format(age), 'w') as f:
            writer = csv.writer(f)
            label = g.property('label')
            geometry = g.property('geometry')
            is_green = g.property('is_green')
            writer.writerow([label])
            writer.writerow([geometry])
            writer.writerow([is_green])
        f.close()

        # 茎,緑葉,茶葉,全体, 葉を生成して保存

        folder_name = [
            'all', 'stem', 'leaf', 'green_stem', 'green_leaf', 'brown_stem',
            'brown_leaf'
        ]
        for i in range(len(folder_name)):
            makeDirectory(save_dir + '/' + folder_name[i] + '_age' + str(age))
            st = plot3d1(g, i)
            for t in range(len(st)):
                st[t].name = str(t)
            # 自動的に.mtlも保存してくれるっぽい
            st.save(save_dir + '/' + folder_name[i] + '_age' + str(age) +
                    '.obj')

            # if i != 3:
            w = obj.ObjCodec()
            w.write2(save_dir + '/' + folder_name[i] + '_age' + str(age), st)
Ejemplo n.º 4
0
def test_star():
    wheat = AdelWheat()
    g, _ = new_canopy(wheat, age=100)
    geom = g.property('geometry')
    rain_star, rain_exposed_area = caribu_star(geom)
    light_star, light_exposed_area = caribu_star(geom, '16')
    return rain_star, rain_exposed_area, light_star, light_exposed_area
Ejemplo n.º 5
0
# Create our own emitting lesion for this example
class LesionTutoDispersal(Lesion):
    def __init__(self, mutable=False):
        super(LesionTutoDispersal, self).__init__()
        self.fungus_name = fungus_name

    def emission(*args, **kwds):
        return 10000


fungus = Fungus(Lesion=LesionTutoDispersal, parameters={"name": fungus_name})
source_lesion = fungus.lesion()

# create wheat canopy
adel = AdelWheat(nplants=20, nsect=7)
g = adel.setup_canopy(1500)
# plot
# adel.plot(g)

# choose source leaf
leaf_ids = [
    id for id, label in g.property("label").iteritems()
    if label.startswith("LeafElement")
]
source_leaf = g.node(leaf_ids[1])

# Alternatively, pick a leaf based on ist position in the canopy
vid, hmax = get_source_leaf_and_max_height(g)
source_leaf = g.node(vid)
Ejemplo n.º 6
0
def growth_wheat_someage():
    seq, weather = sample_weather()
    wdata = weather.get_weather(seq)
    nsect = 1  #the number of element per leaf
    for sed in range(100):
        adel = AdelWheat(nsect=nsect, nplants=1, seed=sed)

        # save_dir = './obj'
        # save_dir = '/home/demo/document/ykato_git/datasets/omg_instance_segmentation/dataset_ver4/obj'
        if os.name == 'nt':
            save_dir = 'I:/ykato_git/datasets/omg_instance_segmentation/dataset_simulate_100/{}'.format(
                sed)
        else:
            save_dir = '/home/demo/document/ykato_git/datasets/omg_instance_segmentation/dataset_ver4/obj'

        makeDirectory(save_dir)

        for age in range(100, 1100, 100):

            g = adel.setup_canopy(age)
            adel.grow(g, wdata)

            # パラメータcsv保存
            with open(save_dir + '/param_age{}.csv'.format(age), 'w') as f:
                # writer=csv.writer(f)
                label = [g.property('label')]
                geometry = [g.property('geometry')]
                is_green = [g.property('is_green')]
                # writer.writerow([label])
                # writer.writerow([geometry])
                # writer.writerow([is_green])

                header = label[0].keys()
                writer = csv.DictWriter(f, header)
                # header_row = {'j':k for k in header}
                writer.writeheader()
                for row in label:
                    writer.writerow(row)

                header = geometry[0].keys()
                writer = csv.DictWriter(f, header)
                # header_row = {'k':k for k in header}
                # writer.writerow(header_row)
                writer.writeheader()
                for row in geometry:
                    writer.writerow(row)

                header = is_green[0].keys()
                writer = csv.DictWriter(f, header)
                # header_row = {'k':k for k in header}
                # writer.writerow(header_row)
                writer.writeheader()
                for row in is_green:
                    writer.writerow(row)

            # 茎,緑葉,茶葉,全体, 葉を生成して保存

            folder_name = [
                'all', 'stem', 'leaf', 'green_stem', 'green_leaf',
                'brown_stem', 'brown_leaf'
            ]
            for i in range(len(folder_name)):
                makeDirectory(save_dir + '/' + folder_name[i] + '_age' +
                              str(age))
                st = plot3d1(g, i)
                for t in range(len(st)):
                    st[t].name = str(t)
                # 自動的に.mtlも保存してくれるっぽい
                st.save(save_dir + '/' + folder_name[i] + '_age' + str(age) +
                        '.obj')

                # if i != 3:
                w = obj.ObjCodec()
                w.write2(save_dir + '/' + folder_name[i] + '_age' + str(age),
                         st)
Ejemplo n.º 7
0
def alep_custom_reconstructions(variety='Tremie13',
                                nplants=30,
                                sowing_density=250.,
                                plant_density=250.,
                                inter_row=0.15,
                                nsect=7,
                                seed=1,
                                scale_HS=1,
                                scale_leafDim_length=1,
                                scale_leafDim_width=1,
                                scale_leafRate=1,
                                scale_stemDim=1,
                                scale_stemRate=1,
                                scale_fallingRate=1,
                                scale_leafSenescence=1,
                                scale_tillering=1,
                                **kwds):
    parameters = reconstruction_parameters()
    stand = AgronomicStand(sowing_density=sowing_density,
                           plant_density=plant_density,
                           inter_row=inter_row,
                           noise=0.04,
                           density_curve_data=None)
    n_emerged = nplants

    MS_leaves_number_probabilities = {'11': 0.3, '12': 0.7}
    tiller_proba = {'T1': 1., 'T2': 0.5, 'T3': 0.5, 'T4': 0.3}
    ears_per_plant = 2.5

    if 'tiller_probability' in kwds:
        tiller_proba = {
            k: min(1, p * kwds['tiller_probability'])
            for k, p in tiller_proba.iteritems()
        }

    if 'proba_main_nff' in kwds:
        MS_leaves_number_probabilities = {
            '11': 1 - kwds['proba_main_nff'],
            '12': kwds['proba_main_nff']
        }

    # scale _tillering
    tiller_proba = {
        k: min(1, p * scale_tillering)
        for k, p in tiller_proba.iteritems()
    }
    em = pgen_ext.TillerEmission(primary_tiller_probabilities=tiller_proba)
    reg = pgen_ext.TillerRegression(ears_per_plant=ears_per_plant *
                                    scale_tillering)

    #generate plants
    HSfit = HS_fit()[variety]
    axp = pgen_ext.AxePop(
        MS_leaves_number_probabilities=MS_leaves_number_probabilities,
        Emission=em,
        Regression=reg,
        std_em=HSfit.std_TT_hs_0)
    plants = axp.plant_list(n_emerged)

    # Measure and save Green leaf durations on the reference
    adel_pars = parameters['adel_pars']

    HSfit.mean_nff = axp.mean_nff()
    Dimfit = dimension_fits(HS_fit(), **parameters)[variety]
    GLfit = GL_fits(HS_fit(), **parameters)[variety]
    pgen = pgen_ext.PlantGen(HSfit=HSfit,
                             GLfit=GLfit,
                             Dimfit=Dimfit,
                             adel_pars=adel_pars)
    axeT, dimT, phenT = pgen.adelT(plants)
    axeT = axeT.sort(['id_plt', 'id_cohort', 'N_phytomer'])
    GreenDuration1_ref = axeT['TT_sen_phytomer1'] - axeT['TT_em_phytomer1']
    phenT = phenT.sort(['id_phen', 'index_phytomer'])
    dTTsen_ref = phenT['dTT_sen_phytomer']
    dTTem_ref = phenT['dTT_em_phytomer']

    # Modify fits

    # HS_fit

    # petit commentaire : scale_HS determine ligulation rate + emergence rate
    # la duree emergence-ligulation est impactee du fait de ce changement (inevitable si on impose leaf_rate)
    # mais aussi en raison de scale_leafRate(non souhaite => compensation ci dessous)
    HS_ref = HSfit.a_cohort
    leafDuration_ref = adel_pars['leafDuration']
    HSfit.a_cohort /= scale_HS
    # on compense en decalant l'emergence des plante
    HSfit.TT_hs_0 += (1 -
                      adel_pars['fracLeaf']) / HS_ref * leafDuration_ref * (
                          float(scale_HS) / scale_leafRate - 1)

    # Modify leaf dimension and growth rate

    adel_pars['leafDuration'] = ((scale_leafDim_length*scale_leafDim_width) / scale_HS)* \
                                (leafDuration_ref / scale_leafRate)
    Dimfit.scale['L_blade'] *= scale_leafDim_length
    Dimfit.scale['W_blade'] *= scale_leafDim_width

    # Modify stem dimension and growth rate
    stemDuration_ref = adel_pars['stemDuration']
    adel_pars['stemDuration'] = (scale_stemDim / scale_HS)* \
                                (stemDuration_ref / scale_stemRate)
    Dimfit.scale['L_internode'] *= scale_stemDim

    # Scale GL : GL flag, bolting and start_senescence : apply factor
    # TEST EXTREME WITH LEAF RATE
    #GLfit.GL_bolting *= scale_leafSenescence
    #GLfit.GL_flag *= scale_leafSenescence
    #GLfit.n0 *= scale_leafSenescence

    # Modify  green leaf durations and falling rate
    pgen = pgen_ext.PlantGen(HSfit=HSfit,
                             GLfit=GLfit,
                             Dimfit=Dimfit,
                             adel_pars=adel_pars)
    axeT, dimT, phenT = pgen.adelT(plants)
    axeT = axeT.sort(['id_plt', 'id_cohort', 'N_phytomer'])
    phenT = phenT.sort(['id_phen', 'index_phytomer'])

    # Modify senescence
    axeT['TT_sen_phytomer1'] = axeT[
        'TT_em_phytomer1'] + scale_leafSenescence * GreenDuration1_ref
    phenT['dTT_sen_phytomer'] = dTTsen_ref + (phenT['dTT_em_phytomer'] -
                                              dTTem_ref)
    devT = devCsv(axeT, dimT, phenT)

    leaves = leafshape_fits(**parameters)[variety]
    bins_ref = leaves.bins
    bins_ref[-1] = 21.
    bins = [
        x * scale_HS / scale_fallingRate if i_x != 0 else x * scale_HS
        for i_x, x in enumerate(bins_ref)
    ]
    leaves.bins = bins

    return AdelWheat(nplants=nplants,
                     nsect=nsect,
                     devT=devT,
                     stand=stand,
                     seed=seed,
                     sample='sequence',
                     leaves=leaves,
                     run_adel_pars=adel_pars)
Ejemplo n.º 8
0
fungus_name = "lesion_tutorial"

# Create our own emitting lesion for this example
class LesionTutoDispersal(Lesion):
    def __init__(self, mutable=False):
        super(LesionTutoDispersal, self).__init__()
        self.fungus_name = fungus_name

    def emission(*args, **kwds):
        return 10000

fungus = Fungus(Lesion=LesionTutoDispersal, parameters={"name":fungus_name})
source_lesion = fungus.lesion()

# create wheat canopy 
adel= AdelWheat(nplants=20, nsect=7)
g = adel.setup_canopy(1500)
# plot
# adel.plot(g)

# choose source leaf
leaf_ids = [id for id, label in g.property("label").iteritems() if label.startswith("LeafElement")]
source_leaf = g.node(leaf_ids[1])

# Alternatively, pick a leaf based on ist position in the canopy
vid, hmax = get_source_leaf_and_max_height(g)
source_leaf = g.node(vid)

# inoculate this leaf
source_lesion.is_sporulating = True # Required for Popdrops usage
source_leaf.lesions = [source_lesion]
Ejemplo n.º 9
0
def test_static(age=100):
    nplants = 1
    adel = AdelWheat(nplants=nplants)
    g = adel.setup_canopy(age=100)
    assert len(g.vertices()) > 20
    assert g.property('geometry').values()[0].isValid()
Ejemplo n.º 10
0
from alinea.adel.astk_interface import AdelWheat
from alinea.astk.Weather import sample_weather


seq, weather = sample_weather()
wdata = weather.get_weather(seq)

adel = AdelWheat(nsect=2)

g = adel.setup_canopy(100)
adel.grow(g, wdata)
            mesh = mesh.geometry

        if colors:
            shape = Shape(mesh, Material(Color3(* colors.get(vid, [0,0,0]) )))

        shape.id = vid
        scene.add(shape)

    for vid, mesh in geometries.iteritems():
        geom2shape(vid, mesh, scene)
    pgl.Viewer.display(scene)
    return scene


# 1. Get a sample scene from adel and create a mtg
adel = AdelWheat()
g = adel.setup_canopy(600)

# 2. Run light with default PARs (quickest call)
geom = g.property('geometry')
light_star, light_exposed_area = caribu_star(geom)

# 3. Update mtg with light_star
g.properties()['light_star'] = light_star

# 4. Add a color property to the mtg and view the result on a plot 3D
g = colormap(g, 'light_star', cmap='jet', lognorm=True)
plot3d(g)

# 5. Configure the light sources (zenith, side, diffuse)
Ejemplo n.º 12
0
from alinea.adel.astk_interface import AdelWheat
from alinea.astk.Weather import sample_weather

seq, weather = sample_weather()
wdata = weather.get_weather(seq)

adel = AdelWheat(nsect=2)

g = adel.setup_canopy(100)
adel.grow(g, wdata)
Ejemplo n.º 13
0
def test_rain_and_light():
    wheat = AdelWheat()
    g, _ = new_canopy(wheat, age=100)
    rain_and_light_star(g)
    return g
Ejemplo n.º 14
0
from alinea.caribu.caribu_star import *
from alinea.adel.astk_interface import AdelWheat
from alinea.astk.plant_interface import *
from alinea.astk.plantgl_utils import *


wheat = AdelWheat()
g,_ = new_canopy(wheat, age=550)
geom = g.property('geometry')
areas, normals = get_area_and_normal(geom)
energie, emission, direction, elevation, azimuth = turtle.turtle(sectors=1, energy=1) 
sources = zip(energie,direction)
out = run_caribu(sources, geom, output_by_triangle=False)

rain_fraction, rain_exposition = exposed_surface(geom)
light_fraction, light_exposition = exposed_surface(geom, '16')

#one mature length
leaf_id=32
elt_id = 34
#leaf_id=8
#elt_id = 10
length = g[leaf_id]['length']
vlength = g[leaf_id]['visible_length']
w=g[leaf_id]['shape_max_width']
area_adel = g[elt_id]['area']
area_pgl = sum(areas[elt_id])
area_caribu = out['Area'][elt_id]
area_exposition = rain_exposition[elt_id] / rain_fraction[elt_id] /0.01**2
print area_adel, area_pgl, area_caribu, area_exposition