Commit a2e3e2f5 authored by 's avatar
Browse files

matmust bug fix for matlab 2019b

parent d8a65630
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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;
+54 −16
Original line number Diff line number Diff line
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 = [];
@@ -155,6 +151,7 @@ classdef MatMust < handle
                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 ))
                        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');
                        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
                    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