From a2e3e2f524b7e8489485449ad3eaf11b63519e2e Mon Sep 17 00:00:00 2001
From:  <carmelo@DESKTOP-KO7NNN3.localdomain>
Date: Wed, 9 Oct 2019 13:56:03 +0200
Subject: [PATCH] matmust bug fix for matlab 2019b

---
 matlab/src/classes/@MatMust/MatMust.m  |  2 +-
 matlab/test/classes/@MatMust/MatMust.m | 70 ++++++++++++++++++++------
 2 files changed, 55 insertions(+), 17 deletions(-)

diff --git a/matlab/src/classes/@MatMust/MatMust.m b/matlab/src/classes/@MatMust/MatMust.m
index fc0cc6f..1c3403a 100644
--- a/matlab/src/classes/@MatMust/MatMust.m
+++ b/matlab/src/classes/@MatMust/MatMust.m
@@ -56,7 +56,7 @@ classdef MatMust < handle
             % check if user is already logged in
             if f > 0
                 raw = fread(f,inf);
-                tockenfilejson = jsondecode(char(raw));
+                tockenfilejson = jsondecode(char(raw)');
                 if isfield(tockenfilejson,'token') &  isfield(tockenfilejson,'expiresAt')                 
                     if length(split(tockenfilejson.token,'.')) == 3 & datetime(datenum(tockenfilejson.expiresAt, 'yyyy-mm-dd HH:MM:SS'), 'ConvertFrom','datenum', 'TimeZone','utc') > datetime(datetime(now, 'ConvertFrom','datenum', 'TimeZone','local'), 'TimeZone','utc')
                         obj.loginstatus = true;
diff --git a/matlab/test/classes/@MatMust/MatMust.m b/matlab/test/classes/@MatMust/MatMust.m
index 9b5e1b8..1c3403a 100644
--- a/matlab/test/classes/@MatMust/MatMust.m
+++ b/matlab/test/classes/@MatMust/MatMust.m
@@ -1,12 +1,6 @@
 classdef MatMust < handle
     %MATMUST A library to get deal with ESA webmust REST API
-    % Follow indication in methods help.
-    %
-    % +++++++++++++++++++++++++++++++++++++
-    % Creator: Carmelo Magnafico IAPS/INAF
-    % date: 20/06/2019
-    %
-    % +++++++++++++++++++++++++++++++++++++
+    %   MATMUST embed the first 
     
     properties
        POSToptions
@@ -62,7 +56,7 @@ classdef MatMust < handle
             % check if user is already logged in
             if f > 0
                 raw = fread(f,inf);
-                tockenfilejson = jsondecode(char(raw));
+                tockenfilejson = jsondecode(char(raw)');
                 if isfield(tockenfilejson,'token') &  isfield(tockenfilejson,'expiresAt')                 
                     if length(split(tockenfilejson.token,'.')) == 3 & datetime(datenum(tockenfilejson.expiresAt, 'yyyy-mm-dd HH:MM:SS'), 'ConvertFrom','datenum', 'TimeZone','utc') > datetime(datetime(now, 'ConvertFrom','datenum', 'TimeZone','local'), 'TimeZone','utc')
                         obj.loginstatus = true;
@@ -139,6 +133,8 @@ classdef MatMust < handle
             % dateStart = 'yyyy-mm-dd HH:MM:SS' format date UTC time
             % dateStop = 'yyyy-mm-dd HH:MM:SS' format date UTC time
             %   'dump','plot' optional parameter to dump and plot the data
+            %   'calibrated' optional parameter that specify that you want
+            %   calibrated data
           
             % intialize data output
             data = [];
@@ -154,7 +150,8 @@ classdef MatMust < handle
                     return
                 end
             end
-               
+            
+            if any(ismember(varargin,'calibrated')) calibrate = 'true'; else calibrate = 'false'; end
 
             query = ['dataproviders/',ds,'/parameters/data'];
             obj.GEToptions.HeaderFields = {'Authorization', obj.tockenstruct.token};
@@ -167,7 +164,7 @@ classdef MatMust < handle
                     'values', (parname),...
                     'from', (dateStart),...
                     'to', (dateStop),...
-                    'calibrate', 'false',...
+                    'calibrate', calibrate,...
                     'mode', 'SIMPLE'};
 
             try
@@ -215,9 +212,29 @@ classdef MatMust < handle
                         data_par = data(i).data;
                         figure
                         title(sprintf('%s-%s: %s -> %s\n', data(i).subsystem, data(i).type, data(i).name, data(i).description ))
-                        plot([data_par.dateMAT], [data_par.value], '-x' );
+                        if strcmp(calibrate,'true')
+                            switch class(data_par(1).calibratedValue) 
+                                case 'char'
+                                    indx = [1,find(diff([data_par.value])~=0)]+1;
+                                    ylabels = string;
+                                    ylabels([unique([data_par.value],'stable')]) = replace({data_par(indx).calibratedValue},'_',' ');
+                                    plot([data_par.dateMAT], [data_par.value], '-x' );
+                                    set(gca,'ytick',unique([data_par.value],'sorted'))
+                                    set(gca,'yticklabel',ylabels)
+                                    if exist('dataFigShowUpdatefcn')==2
+                                        set(datacursormode(gcf),'UpdateFcn',@dataFigShowUpdatefcn)
+                                    end
+                                otherwise 
+                                    plot([data_par.dateMAT], [data_par.calibratedValue], '-x' );
+                            end
+                        else
+                            plot([data_par.dateMAT], [data_par.value], '-x' );
+                        end
                         xlabel('time');
-                        ylabel(data(i).unit);
+                        if isfield(data(i), 'unit')
+                            ylabel(data(i).unit);
+                        end
+                        title([data(i).description,' - ',data(i).name]);
                         datetick('x');
                         grid on
                     end
@@ -226,6 +243,21 @@ classdef MatMust < handle
 
         end
         function t = MatMust_searchTMparFromName(obj, namequery, dataproviders, varargin)
+            % +++ 
+            % MatMust_searchTMparFromName
+            % Search a parameter into the requested dataprovider (es. BEPICRUISE)
+            % MatMust_searchTMparFromName(obj, namequery, dataproviders, varargin)
+            % 
+            % dataproviders = dataprovider IdName. 
+            % namequery = The query to perform (ex. '*HGA' )
+            % varargin =  You can specify several options in varagin:
+            %   ex: 'dump' -> print to screen the parameters found
+            %   'Description' -> Extend search in Parameters Descriptions
+            %   'Id' -> Extend Search in Parameter Id
+            %   'Unit' -> Extend Search in Unit name space
+            %
+            
+            
             if obj.loginstatus
                 query = 'metadata/treesearch';
                 obj.GEToptions.HeaderFields = {'Authorization', obj.tockenstruct.token};
@@ -233,13 +265,20 @@ classdef MatMust < handle
                     dataproviders = char(join(dataproviders,','));
                 end
                 try
-                    response = webread([obj.url,obj.urlsub, query], 'field','name','text',namequery,'dataproviders', dataproviders ,obj.GEToptions);
+                    optindx = strcmp(varargin,'Description')+strcmp(varargin,'Unit')+strcmp(varargin,'Id');
+                    if any(find(optindx))
+                        field = join(varargin(find(optindx)),',');
+                        response = webread([obj.url,obj.urlsub, query], 'field',['name,',char(field)],'text',namequery,'dataproviders', dataproviders ,obj.GEToptions);
+                    else
+                        
+                        response = webread([obj.url,obj.urlsub, query], 'field','name','text',namequery,'dataproviders', dataproviders ,obj.GEToptions);
+                    end
                     t = response ;
                 catch ME
                     fprintf('+++ WARNING\n%s - %s\n', ME.identifier, ME.message)
                 end
                 if nargin > 3
-                    if strcmp(varargin{1},'dump')
+                    if any(find(strcmp(varargin,'dump')))
                         fprintf('+++++++++++++ PARAMETERS QUERY RESULT LIST +++++++++++++\n');
                         found = false;
                         for i = 1:numel(t)
@@ -259,7 +298,7 @@ classdef MatMust < handle
                 end
             end
         end
-        function [exit] = MatMust_login(obj, varargin )
+        function MatMust_login(obj, varargin )
             % login 
             %   https://bepicolombo.esac.esa.int/webclient-must/mustlink/api-docs/index.html#/Authentication/login
             % input:
@@ -317,7 +356,6 @@ classdef MatMust < handle
                 MatMust_getUserLinkedProjects(obj);
             
             else
-               exit = true;
                disp('user already loggen in')
             end
             
-- 
GitLab