From 6cda450686995569a38a3940b489c65f84031e47 Mon Sep 17 00:00:00 2001 From: Cristian Galperti <cristian.galperti@epfl.ch> Date: Wed, 10 Apr 2019 12:12:13 +0200 Subject: [PATCH] actualize method of expcode can filter model name modified SCDclass objects to enable actualization of single models --- code/classes/SCDclass_expcode.m | 44 +++++++++++++++++-------- code/classes/SCDclass_mdsobjcontainer.m | 19 +++++++++-- code/classes/SCDclass_mdspar.m | 4 +++ code/classes/SCDclass_mdswg.m | 10 ++++-- code/classes/SCDclass_task.m | 3 ++ code/classes/SCDclass_taskcontainer.m | 19 +++++++++-- 6 files changed, 76 insertions(+), 23 deletions(-) diff --git a/code/classes/SCDclass_expcode.m b/code/classes/SCDclass_expcode.m index aff051c..7475572 100644 --- a/code/classes/SCDclass_expcode.m +++ b/code/classes/SCDclass_expcode.m @@ -5,18 +5,18 @@ classdef SCDclass_expcode % with all templates algorithms properties (Access = private) - activenodes % numerical list of configured active nodes - activecpus % numerical list of configured CPUs - %nodeddlist % list of data dictionaries at node level - wrapperlist % list of configured wrappers - algoobjlist % list of loaded algorithm objects - algonamelist % List of loaded algorithm names - algoddlist % list of data dictionaries at algorithm level - mdscontainer % container class for MDS+ interface objects - taskcontainer % container class for generic init and term task objects - exportedtps % list of tunable parameters variable to be exported - stdinits % list of standard inits scripts - + activenodes % numerical list of configured active nodes + activecpus % numerical list of configured CPUs + %nodeddlist % list of data dictionaries at node level + wrapperlist % list of configured wrappers + algoobjlist % list of loaded algorithm objects + algonamelist % List of loaded algorithm names + algoddlist % list of data dictionaries at algorithm level + mdscontainer % container class for MDS+ interface objects + taskcontainer % container class for generic init and term task objects + exportedtps % list of tunable parameters variable to be exported + stdinits % list of standard inits scripts + modeltoactualize % name of the algorithm to actualize ('all' means all coonfigured) end properties @@ -428,9 +428,23 @@ classdef SCDclass_expcode obj.buildworkspacetpstruct; end - function actualize(obj, shot) + function actualize(obj, shot, varargin) + p=inputParser; + % if a model name is given, operations will be performed + % only on it, otherwise they will be performed on all + % configured models + addParameter(p,'model','',@(x) ischar(x)); + parse(p,varargin{:}); + + if(isempty(p.Results.model)) + obj.modeltoactualize='all'; + else + obj.modeltoactualize=p.Results.model; + end + obj.actualizedata(shot); - fprintf('Actualizing expcode %d, ''%s'', performing tasks ...\n',obj.maincode,obj.name); + fprintf('Actualizing expcode %d, ''%s'', performing tasks ...\n',obj.maincode,obj.name); + obj.taskcontainer.modeltoexecute=obj.modeltoactualize; obj.taskcontainer.exectasksoninit(shot); end @@ -463,10 +477,12 @@ classdef SCDclass_expcode end function actualizeparameters(obj,shot) + obj.mdscontainer.modeltoactualize=obj.modeltoactualize; obj.mdscontainer.actualizeparameters(shot); end function actualizewavegens(obj,shot) + obj.mdscontainer.modeltoactualize=obj.modeltoactualize; obj.mdscontainer.actualizewavegens(shot); end diff --git a/code/classes/SCDclass_mdsobjcontainer.m b/code/classes/SCDclass_mdsobjcontainer.m index 23b317b..738fdd9 100644 --- a/code/classes/SCDclass_mdsobjcontainer.m +++ b/code/classes/SCDclass_mdsobjcontainer.m @@ -15,6 +15,7 @@ classdef SCDclass_mdsobjcontainer mdswavegens % wavegens objects array simstructlist % list of names of simstructs to be transferred to % base workspace upon expcode setup + modeltoactualize % model name to actualize ('all' for all) end methods @@ -75,7 +76,13 @@ classdef SCDclass_mdsobjcontainer % naive version with a mds acces for every parameter if obj.numparams>0 for ii=1:obj.numparams - obj.mdsparams(ii).actualizedata(shot); + if(strcmp(obj.modeltoactualize,'all')) + obj.mdsparams(ii).actualizedata(shot); + else + if(strcmp(obj.modeltoactualize,obj.mdsparams(ii).getmodelname)) + obj.mdsparams(ii).actualizedata(shot); + end + end end end end @@ -145,11 +152,17 @@ classdef SCDclass_mdsobjcontainer % naive version, a mds connection is called for every object if obj.numwavegens>0 for ii=1:obj.numwavegens - obj.mdswavegens(ii).actualizedata(shot); + if(strcmp(obj.modeltoactualize,'all')) + obj.mdswavegens(ii).actualizedata(shot); + else + if(strcmp(obj.modeltoactualize,obj.mdswavegens(ii).getmodelname)) + obj.mdswavegens(ii).actualizedata(shot); + end + end end end end - + function obj = cleanwavegens(obj) % clean wavegens leaving a consistent (with model buses) % empty timeseries data structure diff --git a/code/classes/SCDclass_mdspar.m b/code/classes/SCDclass_mdspar.m index bf736f6..6b4a37a 100644 --- a/code/classes/SCDclass_mdspar.m +++ b/code/classes/SCDclass_mdspar.m @@ -65,6 +65,10 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous obj.modeltpstruct=obj.cparser.Results.modeltpstruct; end + function name=getmodelname(obj) + name=obj.modelname; + end + end % Not abstract methods common to all child classes diff --git a/code/classes/SCDclass_mdswg.m b/code/classes/SCDclass_mdswg.m index 41f313b..46b8c59 100644 --- a/code/classes/SCDclass_mdswg.m +++ b/code/classes/SCDclass_mdswg.m @@ -4,8 +4,8 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous % building of lists of mixed kind parameters in the % expcode configuration (and later in C++ code) - %properties (Access = protected) - properties + properties (Access = protected) + %properties mdsserver % The MDS+ server hosting the parameter mdstree % The MDS+ Tree hosting the parameter tdiexpr % TDI expression to retrieve data @@ -14,7 +14,7 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous value % commandile output of the wavegen datadictionary % data dictionary hosting the parameter, if empty base workspace modelname % name of the Simulink model using the parameter - getcommand % full command for getting the value (callable by matlab eval) + getcommand % full command for getting the value (callablSCDalgo_f4ealgoe by matlab eval) classname % class name for logging cparser % constructor parameters parser @@ -106,6 +106,10 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous end + function name=getmodelname(obj) + name=obj.modelname; + end + end diff --git a/code/classes/SCDclass_task.m b/code/classes/SCDclass_task.m index 7e39a4c..28d77a2 100644 --- a/code/classes/SCDclass_task.m +++ b/code/classes/SCDclass_task.m @@ -59,6 +59,9 @@ classdef SCDclass_task < matlab.mixin.Heterogeneous obj.verbose=1; end + function name=getmodelname(obj) + name=obj.modelname; + end end diff --git a/code/classes/SCDclass_taskcontainer.m b/code/classes/SCDclass_taskcontainer.m index 708f036..fecf970 100644 --- a/code/classes/SCDclass_taskcontainer.m +++ b/code/classes/SCDclass_taskcontainer.m @@ -8,6 +8,7 @@ classdef SCDclass_taskcontainer properties numtasks % number of configured tasks tasks % tasks list + modeltoexecute % model name whose tasks will be executed 'all' for all end methods @@ -34,12 +35,18 @@ classdef SCDclass_taskcontainer end end end - + function obj = exectasksoninit(obj, shot) % execs the init method of all configurted task if obj.numtasks>0 for ii=1:obj.numtasks - obj.tasks(ii).init(shot); + if(strcmp(obj.modeltoexecute,'all')) + obj.tasks(ii).init(shot); + else + if(strcmp(obj.modeltoexecute,obj.tasks(ii).getmodelname)) + obj.tasks(ii).init(shot); + end + end end end end @@ -48,7 +55,13 @@ classdef SCDclass_taskcontainer % execs the term method of all configurted task if obj.numtasks>0 for ii=1:obj.numtasks - obj.tasks(ii).term(shot); + if(strcmp(obj.modeltoexecute,'all')) + obj.tasks(ii).term(shot); + else + if(strcmp(obj.modeltoexecute,obj.tasks(ii).modelname)) + obj.tasks(ii).term(shot); + end + end end end end -- GitLab