diff --git a/matlab/src/classes/@MatMust/MatMust.m b/matlab/src/classes/@MatMust/MatMust.m index fc0cc6fc5291675f29dd157aa639c6b934e137c5..1c3403ab3003a1ed39d74ef2cfcaa8e62df268a9 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 9b5e1b851a075bb49f14a76ac251fe0d4fa6cb30..1c3403ab3003a1ed39d74ef2cfcaa8e62df268a9 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