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