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)
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)
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)
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
# 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)
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)
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)
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]
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()
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)
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)
def test_rain_and_light(): wheat = AdelWheat() g, _ = new_canopy(wheat, age=100) rain_and_light_star(g) return g
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