From bd57ee548481d6a8f334370962b41a3fdf0f473f Mon Sep 17 00:00:00 2001
From: Cristian Galperti <cristian.galperti@epfl.ch>
Date: Thu, 21 Nov 2019 12:51:16 +0100
Subject: [PATCH] Add warning for MDS parameter errors in matlab

---
 code/classes/SCDclass_mdspar.m                | 13 ++++++++++---
 code/classes/SCDclass_mdspar3Dmatrix.m        |  1 +
 code/classes/SCDclass_mdsparfixdimvector.m    |  3 ++-
 code/classes/SCDclass_mdsparfixdimvectorint.m |  3 ++-
 code/classes/SCDclass_mdsparmatrix.m          |  1 +
 code/classes/SCDclass_mdsparscalar.m          |  1 +
 code/classes/SCDclass_mdsparscalarint.m       |  1 +
 code/classes/SCDclass_mdsparscalartaridx.m    |  1 +
 code/classes/SCDclass_mdsparvector.m          |  1 +
 9 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/code/classes/SCDclass_mdspar.m b/code/classes/SCDclass_mdspar.m
index 656e6f1..a89b0f8 100644
--- a/code/classes/SCDclass_mdspar.m
+++ b/code/classes/SCDclass_mdspar.m
@@ -34,6 +34,7 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous
         caststring          % actualizedata specific
         
         unlinked            % unlinked parameter, no actualization will be performed (this is set via an empty MDS source path)
+        actualizable        % true if after MDS data retrieval phase the parameter is actualizable
     end
     
     properties 
@@ -106,7 +107,8 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous
                obj.mdsconnect(shot);
                % Checking if data can be retrieved, updating get command
                [obj, obj.value]=obj.getdata(shot);
-
+               if ~obj.actualizable, return; end
+               
                pointspos=strfind(obj.modelparam,'.');
                baseparam=obj.modelparam(1:pointspos(1)-1);
                structparam=obj.modelparam(pointspos(1):end); 
@@ -133,9 +135,14 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous
         
         function [obj,value]=getdatacommon(obj, shot)
             obj=obj.actualizegetcmd('mdsvalue(''%s'')', shot);
+            
             value=eval(obj.getcommand);
-            str=sprintf('MDS+ error for parameter %s: %s', obj.modelparam, value);
-            assert(isnumeric(value), str); 
+            if(~isnumeric(value))
+                warning('SCDclass_mdspar:MDSerror','MDS+ error for parameter %s: %s. Actualization skipped.',obj.modelparam, value);
+                obj.actualizable=false;
+            else
+                obj.actualizable=true;
+            end
         end
         
         function obj=actualizegetcmd(obj, cmdstring, shot)
diff --git a/code/classes/SCDclass_mdspar3Dmatrix.m b/code/classes/SCDclass_mdspar3Dmatrix.m
index bc8b2ce..7287fb0 100644
--- a/code/classes/SCDclass_mdspar3Dmatrix.m
+++ b/code/classes/SCDclass_mdspar3Dmatrix.m
@@ -17,6 +17,7 @@ classdef SCDclass_mdspar3Dmatrix < SCDclass_mdspar
         
         function actualizedata(obj, shot)                           
               obj=obj.preactualizecommon(shot);
+              if ~obj.actualizable, return; end
               obj.caststring=sprintf('%s=single(%s);',obj.assignvar,obj.assignvar);
               obj.postactualizecommon(shot);
         end
diff --git a/code/classes/SCDclass_mdsparfixdimvector.m b/code/classes/SCDclass_mdsparfixdimvector.m
index aa3518a..2229910 100644
--- a/code/classes/SCDclass_mdsparfixdimvector.m
+++ b/code/classes/SCDclass_mdsparfixdimvector.m
@@ -21,7 +21,8 @@ classdef SCDclass_mdsparfixdimvector < SCDclass_mdspar
         
         function actualizedata(obj, shot)            
             obj=obj.preactualizecommon(shot);
-   
+            if ~obj.actualizable, return; end
+            
             numelements=numel(obj.value);
             if(numelements<obj.dimension)
                 localgetcommand=sprintf('[%s; zeros(%d,1)]',obj.getcommand, obj.dimension-numelements);
diff --git a/code/classes/SCDclass_mdsparfixdimvectorint.m b/code/classes/SCDclass_mdsparfixdimvectorint.m
index 197d4d4..810b25c 100644
--- a/code/classes/SCDclass_mdsparfixdimvectorint.m
+++ b/code/classes/SCDclass_mdsparfixdimvectorint.m
@@ -22,7 +22,8 @@ classdef SCDclass_mdsparfixdimvectorint < SCDclass_mdspar
         
         function actualizedata(obj, shot)                        
             obj=obj.preactualizecommon(shot);
-   
+            if ~obj.actualizable, return; end
+                        
             numelements=numel(obj.value);
             if(numelements<obj.dimension)
                 localgetcommand=sprintf('[%s; zeros(%d,1)]',obj.getcommand, obj.dimension-numelements);
diff --git a/code/classes/SCDclass_mdsparmatrix.m b/code/classes/SCDclass_mdsparmatrix.m
index 63b9c40..c62e0b3 100644
--- a/code/classes/SCDclass_mdsparmatrix.m
+++ b/code/classes/SCDclass_mdsparmatrix.m
@@ -17,6 +17,7 @@ classdef SCDclass_mdsparmatrix < SCDclass_mdspar
         
         function actualizedata(obj, shot)
             obj=obj.preactualizecommon(shot);
+            if ~obj.actualizable, return; end
             obj.caststring=sprintf('%s=single(%s);',obj.assignvar,obj.assignvar);
             obj.postactualizecommon(shot);
         end
diff --git a/code/classes/SCDclass_mdsparscalar.m b/code/classes/SCDclass_mdsparscalar.m
index bc59931..22f7658 100644
--- a/code/classes/SCDclass_mdsparscalar.m
+++ b/code/classes/SCDclass_mdsparscalar.m
@@ -17,6 +17,7 @@ classdef SCDclass_mdsparscalar < SCDclass_mdspar
 
         function actualizedata(obj, shot) 
               obj=obj.preactualizecommon(shot);
+              if ~obj.actualizable, return; end
               obj.caststring=sprintf('%s=single(%s);',obj.assignvar,obj.assignvar);
               obj.postactualizecommon(shot);
         end
diff --git a/code/classes/SCDclass_mdsparscalarint.m b/code/classes/SCDclass_mdsparscalarint.m
index af6ac78..ce8d503 100644
--- a/code/classes/SCDclass_mdsparscalarint.m
+++ b/code/classes/SCDclass_mdsparscalarint.m
@@ -16,6 +16,7 @@ classdef SCDclass_mdsparscalarint < SCDclass_mdspar
         
         function actualizedata(obj, shot) 
              obj=obj.preactualizecommon(shot);
+             if ~obj.actualizable, return; end
              obj.caststring=sprintf('%s=int32(%s);',obj.assignvar,obj.assignvar);
              obj.postactualizecommon(shot);
         end
diff --git a/code/classes/SCDclass_mdsparscalartaridx.m b/code/classes/SCDclass_mdsparscalartaridx.m
index e67b8d5..3835533 100644
--- a/code/classes/SCDclass_mdsparscalartaridx.m
+++ b/code/classes/SCDclass_mdsparscalartaridx.m
@@ -19,6 +19,7 @@ classdef SCDclass_mdsparscalartaridx < SCDclass_mdspar
         
         function actualizedata(obj, shot) 
             obj=obj.preactualizecommon(shot);
+            if ~obj.actualizable, return; end
             obj.assignstring=sprintf('%s(%d)=%s;',obj.assignvar,obj.targetidx,obj.getcommand);
             obj.caststring=sprintf('%s=single(%s);',obj.assignvar,obj.assignvar);
             obj.postactualizecommon(shot);       
diff --git a/code/classes/SCDclass_mdsparvector.m b/code/classes/SCDclass_mdsparvector.m
index 8eed939..7819247 100644
--- a/code/classes/SCDclass_mdsparvector.m
+++ b/code/classes/SCDclass_mdsparvector.m
@@ -17,6 +17,7 @@ classdef SCDclass_mdsparvector < SCDclass_mdspar
         
         function actualizedata(obj, shot)             
             obj=obj.preactualizecommon(shot);
+            if ~obj.actualizable, return; end
             obj.caststring=sprintf('%s=single(%s);',obj.assignvar,obj.assignvar);
             obj.postactualizecommon(shot);
         end
-- 
GitLab