Source code for openalea.colzette.simulation

import pandas as pd

from openalea.colzette.light import light_interception
from openalea.colzette.scene import sowing_map_monocrop, sowing_map_intercrop, get_domain, create_scene
from openalea.colzette.geometry import phenotype_fababean, phenotype_rapeseed, phenotype_camelina, phenotype_lentil
from openalea.colzette.population import generate_population, generate_mixture_population

[docs] def run_static_simulation(das, PlantAge, RG_daily, TLA, option_plants, density, dict_params, type_simul="monocrop_aviso", species='Rapeseed', ustride=9, vstride=2, light_direction = (0, 0, -1)): dict_params = dict_params[species] if option_plants == "single": sowing_pattern = pd.DataFrame({'x': [0.0], 'y': [0.0], 'species': [species]}) else: sowing_pattern = sowing_map_monocrop(1.0, 1.0, density, species) nplants = len(sowing_pattern) if species == 'Rapeseed': phenotype = phenotype_rapeseed elif species == 'Fababean': phenotype = phenotype_fababean elif species == 'Camelina': phenotype = phenotype_camelina elif species == 'Lentil': phenotype = phenotype_lentil if TLA == 0.0: vec_Eabs = [0] * nplants final_scene = None caribu_scene = None raw = None agg = None else: domain = get_domain(density, nplants) list_of_MTGs, list_of_positions = generate_population(sowing_pattern, dict_params, TLA, PlantAge, phenotype, species= species) final_scene, shapes_indexer = create_scene(list_of_MTGs, list_of_positions, sowing_pattern, ustride=ustride, vstride=vstride) caribu_scene, vec_Eabs, raw, agg = light_interception(final_scene, shapes_indexer, list_of_MTGs, RG_daily, domain, light_direction=light_direction) vec_das = [das] * nplants vec_TT = [PlantAge] * nplants sub_dat = pd.DataFrame({'DAS': vec_das, 'TT': vec_TT, 'Plant': range(0, nplants), 'Eabs': vec_Eabs}) return (final_scene, caribu_scene, sub_dat, raw, agg)
[docs] def run_static_mixture_simulation(das, RG_daily, density, dict_params, TLA_brassica, TLA_legume, PlantAge_brassica, PlantAge_legume, species_brassica = 'Rapeseed', species_legume = 'Fababean', sowing_option = 'rows', Type_simul="intercrop_aviso_RRF", ustride=9, vstride=2, light_direction = (0, 0, -1)): dict_params_brassica = dict_params[species_brassica] dict_params_legume = dict_params[species_legume] sowing_pattern = sowing_map_intercrop(1.0, 1.0, density, species_brassica, species_legume, sowing_option) nplants = len(sowing_pattern) if TLA_brassica == 0.0 and TLA_legume == 0.0: vec_Eabs = [0] * nplants final_scene = None caribu_scene = None raw = None agg = None else: domain = get_domain(density, nplants) list_of_MTGs, list_of_positions = generate_mixture_population(sowing_pattern, dict_params_brassica, dict_params_legume, TLA_brassica, TLA_legume, PlantAge_brassica, PlantAge_legume) final_scene, shapes_indexer = create_scene(list_of_MTGs, list_of_positions, sowing_pattern, ustride=ustride, vstride=vstride) caribu_scene, vec_Eabs, raw, agg = light_interception(final_scene, shapes_indexer, list_of_MTGs, RG_daily, domain, light_direction = light_direction) vec_das = [das] * nplants vec_TT_brassica = [PlantAge_brassica] * nplants vec_TT_legume = [PlantAge_legume] * nplants sub_dat = pd.DataFrame({'DAS': vec_das, 'TT_brassica': vec_TT_brassica, 'TT_legume': vec_TT_legume, 'Plant': range(0, nplants), 'Eabs': vec_Eabs}) return (final_scene, caribu_scene, sub_dat, raw, agg)