From cfc2edcb15cbe2e62964bdec214cd9bc5fe4bced Mon Sep 17 00:00:00 2001 From: Federico Felici <federico.felici@epfl.ch> Date: Wed, 24 Nov 2021 12:07:08 +0100 Subject: [PATCH] Speed up and clean up parameter addition --- code/classes/SCDclass_algo.m | 19 +++++++++++++++++-- code/classes/SCDclass_expcode.m | 1 - code/classes/SCDclass_mdsobjcontainer.m | 24 +++++------------------- code/classes/SCDclass_mdspar.m | 7 ++++++- 4 files changed, 28 insertions(+), 23 deletions(-) diff --git a/code/classes/SCDclass_algo.m b/code/classes/SCDclass_algo.m index df9ccb7..468a794 100644 --- a/code/classes/SCDclass_algo.m +++ b/code/classes/SCDclass_algo.m @@ -475,8 +475,22 @@ classdef SCDclass_algo %% MDS container methods forwarders function obj = addparameter(obj, param) - obj.mdscontainer=obj.mdscontainer.addparameter(param); - obj.mdscontainer=obj.mdscontainer.bindlastparameter(obj.modelname, obj.datadictionary, obj.exportedtps); + % bind parameter(s) to algoobj's name, dictionary and last + % exported tp + + % assume this parameter is bound to last exported tp on the list + if ~isempty(obj.exportedtps), tpname = obj.exportedtps{end}; + else, tpname = ''; + end + + for ii=1:numel(param) + param(ii).bind(obj.modelname, obj.datadictionary, tpname); + end + obj.mdscontainer=obj.mdscontainer.addparameter(param); + end + + function obj = bindparameters(obj) + obj.mdscontainer=obj.mdscontainer.bindparameters(obj.modelname, obj.datadictionary, obj.exportedtps); end function obj = printparameters(obj) @@ -622,6 +636,7 @@ classdef SCDclass_algo % an algorithm block diagram % should pass ctrl-d (instandalone opening) % after this call + obj.bindparameters; % bind mds parameters obj.updatetemplatetp; obj.buildworkspacetpstruct; SCDconf_setConf('sim'); diff --git a/code/classes/SCDclass_expcode.m b/code/classes/SCDclass_expcode.m index 17dc92b..f69343e 100644 --- a/code/classes/SCDclass_expcode.m +++ b/code/classes/SCDclass_expcode.m @@ -583,7 +583,6 @@ classdef SCDclass_expcode D = digraph(A); % directed graph % topological sorting, maintaining index order where possible isort = toposort(D,'Order','stable'); - obj.algoobjlist = obj.algoobjlist(isort); % sort the init obj list end diff --git a/code/classes/SCDclass_mdsobjcontainer.m b/code/classes/SCDclass_mdsobjcontainer.m index 7a550b5..fd1b6b9 100644 --- a/code/classes/SCDclass_mdsobjcontainer.m +++ b/code/classes/SCDclass_mdsobjcontainer.m @@ -29,13 +29,9 @@ classdef SCDclass_mdsobjcontainer end function obj = addparameter(obj, param) - % Adds a parameter object - if obj.numparams==0 - obj.mdsparams=param; - else - obj.mdsparams=[obj.mdsparams; param]; - end - obj.numparams=obj.numparams+1; + % Adds one or more parameter objects to list of params + obj.mdsparams = [obj.mdsparams; param]; + obj.numparams = obj.numparams + numel(param); end function obj = printparameters(obj) @@ -64,6 +60,7 @@ classdef SCDclass_mdsobjcontainer end function obj = bindparameters(obj, modelname, datadictionary, exportedtps) + % bind mds parameters to their model, data dictionary and tunable parameter if obj.numparams>0 for ii=1:obj.numparams obj.mdsparams(ii)=obj.mdsparams(ii).setmodelname(modelname); @@ -76,18 +73,7 @@ classdef SCDclass_mdsobjcontainer end end end - - function obj = bindlastparameter(obj, modelname, datadictionary, exportedtps) - if obj.numparams>0 - obj.mdsparams(end)=obj.mdsparams(end).setmodelname(modelname); - obj.mdsparams(end)=obj.mdsparams(end).setdatadictionary(datadictionary); - if numel(exportedtps)>0 - obj.mdsparams(end)=obj.mdsparams(end).setparamstructure(exportedtps{end}); - end - end - - end - + function obj = addwavegen(obj, wavegen) % adds a wavegen object if obj.numwavegens==0 diff --git a/code/classes/SCDclass_mdspar.m b/code/classes/SCDclass_mdspar.m index 8050f10..e0bb098 100644 --- a/code/classes/SCDclass_mdspar.m +++ b/code/classes/SCDclass_mdspar.m @@ -226,6 +226,12 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous end + function obj = bind(obj,modelname,datadictionary,exportedtp) + obj.setmodelname(modelname); + obj.setdatadictionary(datadictionary); + obj.setparamstructure(exportedtp); + end + function out = gettargetparam(obj) out = obj.modelparam; end @@ -262,7 +268,6 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous obj.datadictionary = ddname; end end - end methods -- GitLab