From 5f54d62fd39aac4df2a8adfa0259b07400e6b464 Mon Sep 17 00:00:00 2001
From: galperti <cristian.galperti@epfl.ch>
Date: Tue, 21 Jun 2022 11:39:06 +0200
Subject: [PATCH] shot optional parameter added

---
 algos/template/algoobj_template.m |  2 +-
 classes/SCDclass_mdswg.m          | 50 ++++++++++++++++++++++---------
 2 files changed, 37 insertions(+), 15 deletions(-)

diff --git a/algos/template/algoobj_template.m b/algos/template/algoobj_template.m
index 142dc15..b153552 100644
--- a/algos/template/algoobj_template.m
+++ b/algos/template/algoobj_template.m
@@ -22,7 +22,7 @@ obj=obj.addparameter(SCDclass_mdsparnumeric('kv2','colvect'         ,'srcsrv','s
 obj=obj.addparameter(SCDclass_mdsparnumeric('km1','matrix'          ,'srcsrv','spcpc171.epfl.ch','srctree','martetest','shot',parshot));
 
 %% Wavegens
-obj=obj.addwavegen(SCDclass_mdswgsigsingle( 'wg1','ai.ch001'        ,'srcsrv','spcpc171.epfl.ch','srctree','martetest','shot',parshot));
+obj=obj.addwavegen(SCDclass_mdswgsigsingle( 'ai.ch001','wg1'        ,'srcsrv','spcpc171.epfl.ch','srctree','martetest','shot',parshot));
 
 %% Buses
 obj = obj.addbus('algo_template_inBus', 'algo_template_inBus_def' );
diff --git a/classes/SCDclass_mdswg.m b/classes/SCDclass_mdswg.m
index c936c0d..ba89bf4 100644
--- a/classes/SCDclass_mdswg.m
+++ b/classes/SCDclass_mdswg.m
@@ -25,6 +25,9 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous
         
         mdshelpstr          % MDS help string used in tree autopopulation
         mdsvalidationstr    % MDS validation string used in autopopulation
+        
+        overrideshot        % =1 if instantiated with overridden shot number, in this case this shot number will be always used during actualization
+        overrideshotn       % shot number in case of overridden shot number
     end
     
     properties 
@@ -43,6 +46,7 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous
             addParameter(obj.cparser,'modelname','',@(x) ischar(x));
             addParameter(obj.cparser,'mdshelp','',@(x) ischar(x));
             addParameter(obj.cparser,'mdsvalid','1',@(x) ischar(x));
+            addParameter(obj.cparser,'shot',NaN,@(x) isnumeric(x) && isscalar(x));
             
             obj.verbose=1;
             obj.wavegenbasestruct='';
@@ -50,14 +54,22 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous
         
         function obj=parseconstructor(obj, srctdi, destwavegen, varargin)
             parse(obj.cparser,srctdi,destwavegen,varargin{:}{:});
-           
-            obj.mdsserver=obj.cparser.Results.srcsrv;
-            obj.mdstree=obj.cparser.Results.srctree;
-            obj.tdiexpr=obj.cparser.Results.srctdi;
-            obj.wavegentarget=obj.cparser.Results.destwavegen;
-            obj.modelname=obj.cparser.Results.modelname;
-            obj.mdshelpstr=obj.cparser.Results.mdshelp;
-            obj.mdsvalidationstr=obj.cparser.Results.mdsvalid;
+            P=obj.cparser.Results;
+            
+            obj.mdsserver=P.srcsrv;
+            obj.mdstree=P.srctree;
+            obj.tdiexpr=P.srctdi;
+            obj.wavegentarget=P.destwavegen;
+            obj.modelname=P.modelname;
+            obj.mdshelpstr=P.mdshelp;
+            obj.mdsvalidationstr=P.mdsvalid;
+            
+            if isnan(P.shot)
+                obj.overrideshot=0;
+            else
+                obj.overrideshot=1;
+                obj.overrideshotn=P.shot;
+            end  
         end    
         
     end
@@ -76,10 +88,23 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous
     % Not abstract methods common to all child classes
     methods
         function mdsconnect(obj, shot)
+           assert(~~exist('mdsconnect','file'),...
+           'SCD:NoMDS','mdsconnect not found, are the mds matlab tools installed?')
+           % If the class has been declared with a 'shot' parameter, then
+           % the shotnumber used for param loading is overridden by this
+           % parameter, otherwise it is taken from the global shot number
+           % given to the actualize command
+           if obj.overrideshot == 1
+             localshot = obj.overrideshotn;
+           else
+             localshot = shot;
+           end 
            mdsconnect(obj.mdsserver);
-           s=mdsopen(obj.mdstree, shot);
-           str=sprintf('SCDclass_mdswavegen (%s), failed opening MDS+ tree', obj.wavegentarget);
-           assert(s==shot, str);
+           [~,s] = mdsopen(obj.mdstree, localshot);
+           if ~rem(s,2)
+             warning('SCDclass_mdspar:MDSerror','MDS+ tree open error for parameter %s. Actualization skipped.',obj.modelparam);
+             obj.actualizable=false;
+           end
         end
         
         function printinfo(obj)
@@ -226,9 +251,6 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous
         % Generate MARTe2 configuration entry
         entrystring = genMARTe2entry(obj, shot)
         
-        % Prints the parameter info summary
-        printinfo(obj)
-        
         % Populates the corresponding MDS node with workspace values
         autopopulatemds(obj, shot)
 
-- 
GitLab