From 66ccf4d05046c14a39650a76bc347200a14195f2 Mon Sep 17 00:00:00 2001 From: Federico Felici <federico.felici@epfl.ch> Date: Wed, 24 Nov 2021 13:24:12 +0100 Subject: [PATCH] Also vectorize wavegen addition and improve binding --- code/classes/SCDclass_algo.m | 18 +++++++++--------- code/classes/SCDclass_expcode.m | 2 +- code/classes/SCDclass_mdsobjcontainer.m | 8 -------- code/classes/SCDclass_mdspar.m | 14 ++++++++------ code/classes/SCDclass_mdswg.m | 13 ++++++++++++- 5 files changed, 30 insertions(+), 25 deletions(-) diff --git a/code/classes/SCDclass_algo.m b/code/classes/SCDclass_algo.m index 8a72158..7e24487 100644 --- a/code/classes/SCDclass_algo.m +++ b/code/classes/SCDclass_algo.m @@ -474,19 +474,17 @@ classdef SCDclass_algo %% MDS container methods forwarders - function obj = addparameter(obj, param) - % bind parameter(s) to algoobj's name, dictionary and last - % exported tp - + function obj = addparameter(obj, params) % 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) = param(ii).bind(obj.modelname, obj.datadictionary, tpname); - end - obj.mdscontainer=obj.mdscontainer.addparameter(param); + % bind parameter(s) to algoobj's name, dictionary and exportedtp + params = params.bind(obj.modelname, obj.datadictionary, tpname); + + % add params to mdscontainer + obj.mdscontainer=obj.mdscontainer.addparameter(params); end function obj = printparameters(obj) @@ -498,8 +496,10 @@ classdef SCDclass_algo end function obj = addwavegen(obj, wavegen) + for ii=1:numel(wavegen) + wavegen(ii) = wavegen(ii).bind(obj.modelname,obj.datadictionary,obj.timing); + end obj.mdscontainer=obj.mdscontainer.addwavegen(wavegen); - obj.mdscontainer=obj.mdscontainer.bindlastwavegen(obj.modelname, obj.datadictionary, obj.timing); end function obj = printwavegens(obj) diff --git a/code/classes/SCDclass_expcode.m b/code/classes/SCDclass_expcode.m index 55baaa0..4a371a3 100644 --- a/code/classes/SCDclass_expcode.m +++ b/code/classes/SCDclass_expcode.m @@ -379,7 +379,7 @@ classdef SCDclass_expcode for ii=1:numel(obj.exportedtps), fprintf(' ''%s''\n', char(obj.exportedtps{ii})); end end fprintf('* Configured MDS tunparams objects: %d (use printparameters method for details)\n', obj.mdscontainer.getnumparams); - fprintf('* Configured MDS wavegens objects: %d (use printwavegens method for details)\n', obj.mdscontainer.numwavegens); + fprintf('* Configured MDS wavegens objects: %d (use printwavegens method for details)\n', obj.mdscontainer.getnumwavegens); fprintf('* Configured general purpose tasks: %d (use printtasks method for details)\n', obj.taskcontainer.numtasks); fprintf('* Configured init scripts: %d (use printinits method for details)\n', numel(obj.algoobjlist)); end diff --git a/code/classes/SCDclass_mdsobjcontainer.m b/code/classes/SCDclass_mdsobjcontainer.m index 9198a32..904efe4 100644 --- a/code/classes/SCDclass_mdsobjcontainer.m +++ b/code/classes/SCDclass_mdsobjcontainer.m @@ -59,14 +59,6 @@ classdef SCDclass_mdsobjcontainer obj.mdswavegens=[obj.mdswavegens; wavegen]; end - function obj = bindlastwavegen(obj, modelname, datadictionary, timingsrc) - if obj.getnumwavegens>0 - obj.mdswavegens(end)=obj.mdswavegens(end).setmodelname(modelname); - obj.mdswavegens(end)=obj.mdswavegens(end).setdatadictionary(datadictionary); - obj.mdswavegens(end)=obj.mdswavegens(end).settiminginfo(timingsrc); - end - end - function obj = setwavegenbasestruct(obj, basestruct) if obj.getnumwavegens>0 for ii=1:obj.getnumwavegens diff --git a/code/classes/SCDclass_mdspar.m b/code/classes/SCDclass_mdspar.m index 9797b84..484bc29 100644 --- a/code/classes/SCDclass_mdspar.m +++ b/code/classes/SCDclass_mdspar.m @@ -226,12 +226,6 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous end - function obj = bind(obj,modelname,datadictionary,exportedtp) - obj = obj.setmodelname(modelname); - obj = obj.setdatadictionary(datadictionary); - obj = obj.setparamstructure(exportedtp); - end - function [mdsserver] = getMDSserver(obj) mdsserver = obj.mdsserver; end @@ -278,6 +272,14 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous out = {obj.modelparammarte}'; end end + + function obj = bind(obj,modelname,datadictionary,exportedtp) + for ii=1:numel(obj) + obj(ii) = obj.setmodelname(modelname); + obj(ii) = obj.setdatadictionary(datadictionary); + obj(ii) = obj.setparamstructure(exportedtp); + end + end end methods diff --git a/code/classes/SCDclass_mdswg.m b/code/classes/SCDclass_mdswg.m index 8ed0d10..6fd2072 100644 --- a/code/classes/SCDclass_mdswg.m +++ b/code/classes/SCDclass_mdswg.m @@ -62,6 +62,17 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous end + % Sealed methods for heterogeneous arrays + methods(Sealed) + function obj = bind(obj,modelname,datadictionary,timingsrc) + for ii=1:numel(obj) + obj(ii) = obj(ii).setmodelname(modelname); + obj(ii) = obj(ii).setdatadictionary(datadictionary); + obj(ii) = obj(ii).settiminginfo(timingsrc); + end + end + end + % Not abstract methods common to all child classes methods function mdsconnect(obj, shot) @@ -77,7 +88,7 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous fprintf(' MDS+ source server: ''%s'', Tree: ''%s''\n', obj.mdsserver, obj.mdstree); fprintf(' MDS+ TDI expression: ''%s''\n',obj.tdiexpr); end - + function obj = settiminginfo(obj, timeinfo) obj.timebasestart=timeinfo.t_start; obj.timebasedt=timeinfo.dt; -- GitLab