From cd563c7d2529958847b735589739468ae9853044 Mon Sep 17 00:00:00 2001 From: Christian Fournier Date: Wed, 7 Mar 2018 10:43:02 +0100 Subject: [PATCH 1/7] add todo --- src/alinea/adel/mtg_editions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/alinea/adel/mtg_editions.py b/src/alinea/adel/mtg_editions.py index 49162fa6..793b5a98 100644 --- a/src/alinea/adel/mtg_editions.py +++ b/src/alinea/adel/mtg_editions.py @@ -10,6 +10,7 @@ # # ============================================================================== """ new mtg edition function (should be integrated in new mtg""" +# TODO add to adel dressdyn from openalea.mtg.traversal import iter_mtg from alinea.adel.newmtg import internode_elements, sheath_elements, blade_elements, convert, properties_from_dict, adel_metamer from openalea.mtg import MTG, fat_mtg From 8b6d9e201cc55c49ffb489fef26fb161d461f5ba Mon Sep 17 00:00:00 2001 From: RomainB Date: Wed, 7 Mar 2018 10:45:15 +0100 Subject: [PATCH 2/7] Add new function add_tiller --- src/alinea/adel/adel_dynamic.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/alinea/adel/adel_dynamic.py b/src/alinea/adel/adel_dynamic.py index bc33c893..3c19e8c3 100644 --- a/src/alinea/adel/adel_dynamic.py +++ b/src/alinea/adel/adel_dynamic.py @@ -1,7 +1,7 @@ """ Prototype adel model that uses mtg edition functions""" from openalea.mtg import MTG from alinea.adel.astk_interface import AdelWheat -from alinea.adel.mtg_editions import find_metamers, add_plant, add_vegetative_metamer, new_mtg_factory, update_organ_elements +from alinea.adel.mtg_editions import find_metamers, add_axe, add_plant, add_vegetative_metamer, new_mtg_factory, update_organ_elements from alinea.adel.AdelR import plantSample from alinea.adel.mtg_interpreter import mtg_interpreter, transform_geom @@ -26,6 +26,11 @@ def build_stand(self): axis_properties=ms_properties) return g + def add_tiller(self, g, label='T1', plant_number=1): + add_axe(g, label, plant_number) + return g + + def add_metamer(self, g, plant=1, axe='MS'): vid_plant, vid_axe, metamers = find_metamers(g, plant, axe) nff = g.property('nff')[vid_axe] From 232e1c7c19be32da6617a864fc5c3278f56dc27d Mon Sep 17 00:00:00 2001 From: mngauthier Date: Thu, 8 Mar 2018 11:09:35 +0100 Subject: [PATCH 3/7] CR coding Sprint 180307 --- CR coding sprint 07-03-18.docx | Bin 0 -> 15608 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 CR coding sprint 07-03-18.docx diff --git a/CR coding sprint 07-03-18.docx b/CR coding sprint 07-03-18.docx new file mode 100644 index 0000000000000000000000000000000000000000..007443d51d9556b270674281b1cfa3195538f6a3 GIT binary patch literal 15608 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 BN@)N9 literal 0 HcmV?d00001 From b2d541d76c9fd4c1dd39a3c2681f32e18b1c0dfb Mon Sep 17 00:00:00 2001 From: Christian Fournier Date: Thu, 8 Mar 2018 13:49:06 +0100 Subject: [PATCH 4/7] add index_relative_to_MS_phytomer to metamer properties --- src/alinea/adel/adel_dynamic.py | 13 +++++++++++++ src/alinea/adel/astk_interface.py | 10 ++++++++++ src/alinea/adel/mtg_editions.py | 4 +++- src/alinea/adel/newmtg.py | 4 +++- 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/alinea/adel/adel_dynamic.py b/src/alinea/adel/adel_dynamic.py index bc33c893..e9d56dd7 100644 --- a/src/alinea/adel/adel_dynamic.py +++ b/src/alinea/adel/adel_dynamic.py @@ -1,4 +1,6 @@ """ Prototype adel model that uses mtg edition functions""" +import pandas + from openalea.mtg import MTG from alinea.adel.astk_interface import AdelWheat from alinea.adel.mtg_editions import find_metamers, add_plant, add_vegetative_metamer, new_mtg_factory, update_organ_elements @@ -33,6 +35,17 @@ def add_metamer(self, g, plant=1, axe='MS'): df = self.phytoT(axe) m = df.loc[df['n'] == num_metamer, :].to_dict('list') metamer_properties = {'L_shape': m['Ll'][0]} + if 'index_relative_to_MS_phytomer' in self.devT['dimT']: + dfd = pandas.DataFrame(self.devT['axeT']).merge( + pandas.DataFrame(self.devT['dimT'])).loc[:, ( + 'id_plt', 'id_axis', 'index_phytomer', + 'index_relative_to_MS_phytomer')] + metamer_properties.update({'index_relative_to_MS_phytomer': + dfd.set_index(['id_plt', 'id_axis', + 'index_phytomer']).loc[ + (plant, axe, + num_metamer), 'index_relative_to_MS_phytomer']}) + ntop = nff - num_metamer + 1 shape_key = None lctype = int(m['Lindex'][0]) diff --git a/src/alinea/adel/astk_interface.py b/src/alinea/adel/astk_interface.py index abd5cd52..61f6661d 100644 --- a/src/alinea/adel/astk_interface.py +++ b/src/alinea/adel/astk_interface.py @@ -1,6 +1,7 @@ """ Class instanciating a wheat canopy and complying to astk canopy interface """ +import pandas from alinea.adel.AdelR import setAdel, RunAdel, genGeoAxe, checkAxeDyn, getAxeT, \ getPhenT, getPhytoT, saveRData @@ -101,6 +102,15 @@ def setup_canopy(self, age=10): if self.duplicate is None: canopy = RunAdel(age, self.pars, adelpars=self.run_adel_pars) + # add index_relative_to_MS_phytomer to parameters + if 'index_relative_to_MS_phytomer' in self.devT['dimT']: + dfd = pandas.DataFrame(self.devT['axeT']).merge( + pandas.DataFrame(self.devT['dimT'])).loc[:, ( + 'id_plt', 'id_axis', 'index_phytomer', + 'index_relative_to_MS_phytomer')] + canopy = pandas.DataFrame(canopy).merge(dfd.rename( + columns={'id_plt': 'plant', 'id_axis': 'axe_id', + 'index_phytomer': 'numphy'})).to_dict('list') stand = zip(self.positions, self.plant_azimuths) g = self.build_mtg(canopy, stand, aborting_tiller_reduction=self.aborting_tiller_reduction) diff --git a/src/alinea/adel/mtg_editions.py b/src/alinea/adel/mtg_editions.py index 793b5a98..9a32e2a9 100644 --- a/src/alinea/adel/mtg_editions.py +++ b/src/alinea/adel/mtg_editions.py @@ -514,7 +514,9 @@ def new_mtg_factory(parameters, metamer_factory=adel_metamer, leaf_sectors=1, components = metamer_factory(Lsect=leaf_sectors, shape_key=xysr_key, elongation=elongation, leaves=leaves[species], **args) - args = {'L_shape': args.get('L_shape')} + args = {'L_shape': args.get('L_shape'), + 'index_relative_to_MS_phytomer': args.get( + 'index_relative_to_MS_phytomer')} # metamer_properties = args internode, sheath, blade = None, None, None diff --git a/src/alinea/adel/newmtg.py b/src/alinea/adel/newmtg.py index c7029dd8..046f8c6c 100644 --- a/src/alinea/adel/newmtg.py +++ b/src/alinea/adel/newmtg.py @@ -537,7 +537,9 @@ def mtg_factory(parameters, metamer_factory=adel_metamer, leaf_sectors=1, components = metamer_factory(Lsect=leaf_sectors, shape_key=xysr_key, elongation=elongation, leaves=leaves[species], **args) - args = {'L_shape': args.get('L_shape')} + args = {'L_shape': args.get('L_shape'), + 'index_relative_to_MS_phytomer': args.get( + 'index_relative_to_MS_phytomer')} # label = 'metamer' + str(num_metamer) new_metamer = g.add_component(vid_axe, edge_type='/', label=label, From dc4ea080362f3bfab6c7512e5b075461537d5058 Mon Sep 17 00:00:00 2001 From: Christian Fournier Date: Thu, 8 Mar 2018 14:16:20 +0100 Subject: [PATCH 5/7] use age = last col + 300 as default in setup_canopy --- src/alinea/adel/astk_interface.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/alinea/adel/astk_interface.py b/src/alinea/adel/astk_interface.py index 61f6661d..0c28d5c3 100644 --- a/src/alinea/adel/astk_interface.py +++ b/src/alinea/adel/astk_interface.py @@ -96,7 +96,26 @@ def timing(delay, steps, weather, start_date): dt=delay) if not i % delay else TimeControlSet( dt=0) for i in range(steps)) - def setup_canopy(self, age=10): + def setup_canopy(self, age=None): + """ Create a canopy of a given age + + Args: + age: thermal time age of the canopy (simce emergence 1). + If None (default) a full grown canopy is returned (TT = last + ligulation + 300) + + Returns: + + """ + + if age is None: + axT = pandas.DataFrame(self.devT['axeT']) + phenT = pandas.DataFrame(self.devT['phenT']) + axT = axT.loc[axT['TT_stop_axis'] == 'NA'] + axT = axT.merge(phenT) + TT_last_col = (axT['TT_col_phytomer1'] + axT['dTT_col_phytomer']).max() + age = TT_last_col + 300 + self.new_stand(age=age) From 6d9c029bfd4fbe0510b8884301b6b6e2c855291f Mon Sep 17 00:00:00 2001 From: Christian Fournier Date: Thu, 8 Mar 2018 15:49:06 +0100 Subject: [PATCH 6/7] add arg to indicate devT units --- src/alinea/adel/astk_interface.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/alinea/adel/astk_interface.py b/src/alinea/adel/astk_interface.py index 0c28d5c3..c39f89ce 100644 --- a/src/alinea/adel/astk_interface.py +++ b/src/alinea/adel/astk_interface.py @@ -21,7 +21,7 @@ def __init__(self, devT=None, sample='random', thermal_time_model=None, aborting_tiller_reduction=1.0, ssipars=None, nplants=1, duplicate=None, species=None, nsect=1, leaves=None, stand=None, aspect='smart', split=False, - face_up=False, classic=False, scene_unit='cm', + face_up=False, classic=False, devT_unit='cm', scene_unit='cm', age=None, seed=None, leaf_db=None, positions=None, @@ -32,6 +32,14 @@ def __init__(self, devT=None, sample='random', thermal_time_model=None, if devT is None: devT = adel_data.devT() + devT_unit = 'cm' + + if devT_unit != scene_unit: + convert = self.conv_units[devT_unit] / self.conv_units[scene_unit] + for x in ('L_internode', 'W_internode', 'W_sheath', 'W_blade', 'L_sheath', + 'L_blade'): + devT['dimT'][x] *= convert + self.devT = devT self.ref_plants = list(set(self.devT['axeT']['id_plt'])) From bff7e88de5b4c207bdc1e6a52085d503ecaafb77 Mon Sep 17 00:00:00 2001 From: Christian Fournier Date: Wed, 21 Mar 2018 15:35:14 +0100 Subject: [PATCH 7/7] remove docx (content has been added to Dynamic tillering project on GitHub) --- CR coding sprint 07-03-18.docx | Bin 15608 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 CR coding sprint 07-03-18.docx diff --git a/CR coding sprint 07-03-18.docx b/CR coding sprint 07-03-18.docx deleted file mode 100644 index 007443d51d9556b270674281b1cfa3195538f6a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15608 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 BN@)N9