diff --git a/.gitignore b/.gitignore index f3b31452e51a9cf21c0e2234b6a3050b7788c840..6f21bc39fbc24b05038a772147395a090aa51a52 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ # remove Auth file matlab/test/auth.json - +matlab/test/credentials.json diff --git a/matlab/src/classes/@MatMust/MatMust.m b/matlab/src/classes/@MatMust/MatMust.m index 2bc392a8aff59ca547aa9dc8c105a02c40e95bb8..cabd9bf1c0c3e6c625a8b6d586c003c1301a462e 100644 --- a/matlab/src/classes/@MatMust/MatMust.m +++ b/matlab/src/classes/@MatMust/MatMust.m @@ -22,8 +22,8 @@ classdef MatMust < handle methods function obj = MatMust(varargin) % Initialize the values - obj.POSToptions = weboptions('RequestMethod', 'POST', 'ArrayFormat', 'json', 'Timeout',30, 'MediaType','application/json'); - obj.GEToptions = weboptions('RequestMethod', 'GET', 'ArrayFormat', 'repeating', 'Timeout',30, 'MediaType','application/x-www-form-urlencoded'); + obj.POSToptions = weboptions('RequestMethod', 'POST', 'ArrayFormat', 'json', 'Timeout',180, 'MediaType','application/json'); + obj.GEToptions = weboptions('RequestMethod', 'GET', 'ArrayFormat', 'repeating', 'Timeout',180, 'MediaType','application/x-www-form-urlencoded'); obj.url = 'https://bepicolombo.esac.esa.int/webclient-must/'; obj.urlsub = 'mustlink/'; obj.tockenfilename = 'auth.json'; @@ -175,20 +175,20 @@ classdef MatMust < handle end if isa(response,'struct') - data{1} = response; + data = arrayfun(@(x) x, response, 'UniformOutput', false); else data = response; end %refine date string to adapt MATLAB date format - for i=1:numel(data{1}) - if isempty(data{1}(i).data) + for i=1:numel(data) + if isempty(data{i}.data) fprintf('+++ WARNING\n%s for %s\n', 'No Data existing in time span', data{1}.name) continue end - data_par = data{1}(i).data; + data_par = data{i}.data; t = num2cell(datenum(datetime('1970-01-01', 'TimeZone','utc'))+(str2num(str2mat(data_par.date))/1000/86400)); - [data{1}(i).data.dateMAT] = deal(t{:}); + [data{i}.data.dateMAT] = deal(t{:}); clear t end @@ -224,19 +224,23 @@ classdef MatMust < handle fprintf('+++++++++++++++++++++++++++++++++++++++++\n'); end if any(ismember(varargin,'plot')) - for i=1:numel(data{1}) - if isempty(data{1}(i).data) + for i=1:numel(data) + if isempty(data{i}.data) continue end - data_par = data{1}(i).data; + data_par =data{i}.data; figure - title(sprintf('%s-%s: %s -> %s\n', data{1}(i).subsystem, data{1}(i).type, data{1}(i).name, data{1}(i).description )) + if isfield('subsystem', data{i}) + title(sprintf('%s-%s: %s -> %s\n', data{i}.subsystem,data{i}.type, data{i}.name, data{i}.description )) + else + title(sprintf('%s: %s -> %s\n', data{i}.type, data{i}.name, data{i}.description )) + end 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},'_',' '); + ylabels([unique([data_par.value],'stable')]) = unique(replace({data_par(indx).calibratedValue},'_',' '),'stable'); plot([data_par.dateMAT], [data_par.value], '-x' ); set(gca,'ytick',unique([data_par.value],'sorted')) set(gca,'yticklabel',ylabels) @@ -250,12 +254,15 @@ classdef MatMust < handle plot([data_par.dateMAT], [data_par.value], '-x' ); end xlabel('time'); - if isfield(data{1}(i), 'unit') - ylabel(data{1}(i).unit); + if isfield(data{i}, 'unit') + ylabel(data{i}.unit); end - title([data{1}(i).description,' - ',data{1}(i).name]); + title([data{i}.description,' - ',data{i}.name]); datetick('x'); grid on + if exist('dataFigShowUpdatefcn')==2 + set(datacursormode(gcf),'UpdateFcn',@dataFigShowUpdatefcn) + end end end end diff --git a/matlab/test/classes/@MatMust/MatMust.m b/matlab/test/classes/@MatMust/MatMust.m index afa3b7076fea6220350e947e31357a4ca7979533..cabd9bf1c0c3e6c625a8b6d586c003c1301a462e 100644 --- a/matlab/test/classes/@MatMust/MatMust.m +++ b/matlab/test/classes/@MatMust/MatMust.m @@ -22,8 +22,8 @@ classdef MatMust < handle methods function obj = MatMust(varargin) % Initialize the values - obj.POSToptions = weboptions('RequestMethod', 'POST', 'ArrayFormat', 'json', 'Timeout',30, 'MediaType','application/json'); - obj.GEToptions = weboptions('RequestMethod', 'GET', 'ArrayFormat', 'repeating', 'Timeout',30, 'MediaType','application/x-www-form-urlencoded'); + obj.POSToptions = weboptions('RequestMethod', 'POST', 'ArrayFormat', 'json', 'Timeout',180, 'MediaType','application/json'); + obj.GEToptions = weboptions('RequestMethod', 'GET', 'ArrayFormat', 'repeating', 'Timeout',180, 'MediaType','application/x-www-form-urlencoded'); obj.url = 'https://bepicolombo.esac.esa.int/webclient-must/'; obj.urlsub = 'mustlink/'; obj.tockenfilename = 'auth.json'; @@ -175,20 +175,20 @@ classdef MatMust < handle end if isa(response,'struct') - data{1} = response; + data = arrayfun(@(x) x, response, 'UniformOutput', false); else data = response; end %refine date string to adapt MATLAB date format - for i=1:numel(data{1}) - if isempty(data{1}(i).data) - fprintf('+++ WARNING\n%s for %s\n', 'No Data existing in time span', data.name) + for i=1:numel(data) + if isempty(data{i}.data) + fprintf('+++ WARNING\n%s for %s\n', 'No Data existing in time span', data{1}.name) continue end - data_par = data{1}(i).data; + data_par = data{i}.data; t = num2cell(datenum(datetime('1970-01-01', 'TimeZone','utc'))+(str2num(str2mat(data_par.date))/1000/86400)); - [data{1}(i).data.dateMAT] = deal(t{:}); + [data{i}.data.dateMAT] = deal(t{:}); clear t end @@ -224,19 +224,23 @@ classdef MatMust < handle fprintf('+++++++++++++++++++++++++++++++++++++++++\n'); end if any(ismember(varargin,'plot')) - for i=1:numel(data{1}) - if isempty(data{1}(i).data) + for i=1:numel(data) + if isempty(data{i}.data) continue end - data_par = data{1}(i).data; + data_par =data{i}.data; figure - title(sprintf('%s-%s: %s -> %s\n', data{1}(i).subsystem, data{1}(i).type, data{1}(i).name, data{1}(i).description )) + if isfield('subsystem', data{i}) + title(sprintf('%s-%s: %s -> %s\n', data{i}.subsystem,data{i}.type, data{i}.name, data{i}.description )) + else + title(sprintf('%s: %s -> %s\n', data{i}.type, data{i}.name, data{i}.description )) + end 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},'_',' '); + ylabels([unique([data_par.value],'stable')]) = unique(replace({data_par(indx).calibratedValue},'_',' '),'stable'); plot([data_par.dateMAT], [data_par.value], '-x' ); set(gca,'ytick',unique([data_par.value],'sorted')) set(gca,'yticklabel',ylabels) @@ -250,18 +254,21 @@ classdef MatMust < handle plot([data_par.dateMAT], [data_par.value], '-x' ); end xlabel('time'); - if isfield(data{1}(i), 'unit') - ylabel(data{1}(i).unit); + if isfield(data{i}, 'unit') + ylabel(data{i}.unit); end - title([data{1}(i).description,' - ',data{1}(i).name]); + title([data{i}.description,' - ',data{i}.name]); datetick('x'); grid on + if exist('dataFigShowUpdatefcn')==2 + set(datacursormode(gcf),'UpdateFcn',@dataFigShowUpdatefcn) + end end end end end - function o = MatMust_searchTMparFromName(obj, namequery, dataproviders, varargin) + function t = MatMust_searchTMparFromName(obj, namequery, dataproviders, varargin) % +++ % MatMust_searchTMparFromName % Search a parameter into the requested dataprovider (es. BEPICRUISE) @@ -281,18 +288,16 @@ classdef MatMust < handle query = 'metadata/treesearch'; obj.GEToptions.HeaderFields = {'Authorization', obj.tockenstruct.token}; if isa(dataproviders,'cell') - dataprovidersstr = char(join(dataproviders,',')); - else - dataprovidersstr = dataproviders; + 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', dataprovidersstr ,obj.GEToptions); + 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', dataprovidersstr ,obj.GEToptions); + response = webread([obj.url,obj.urlsub, query], 'field','name','text',namequery,'dataproviders', dataproviders ,obj.GEToptions); end t = response ; catch ME @@ -318,26 +323,6 @@ classdef MatMust < handle end end end - % output only requested ds - if isa(dataproviders,'cell') - c = 0; - for i = 1:numel(t) - for j = 1:numel(dataproviders) - if strcmp(t(i).type, [dataproviders(j), ' params'] ) - c = c+1; - o(c) = t(i); - end - end - end - else - c = 0; - for i = 1:numel(t) - if strcmp(t(i).type, [dataproviders, ' params'] ) - c = c+1; - o(c) = t(i); - end - end - end end function MatMust_login(obj, varargin ) % login diff --git a/matlab/test/credentials.json b/matlab/test/credentials.json new file mode 100644 index 0000000000000000000000000000000000000000..a9dea5fa7a30591341bea1697cec968bbab4bc34 --- /dev/null +++ b/matlab/test/credentials.json @@ -0,0 +1,4 @@ +{ + "username":"ygagarin", + "password":":YG_password" +} \ No newline at end of file diff --git a/matlab/test/test.m b/matlab/test/test.m index 4857b24fdcc88213d5f9edf1004038bc20634fb1..5acc867b432d9d25e293deb0de5a5251acf87ccb 100644 --- a/matlab/test/test.m +++ b/matlab/test/test.m @@ -16,8 +16,12 @@ close all addpath('./classes/'); M = MatMust; +credentials = jsondecode(fileread('credentials.json')); + + % for info type help "MatMust_login" -MatMust_login(M, jsondecode('{"username": "ajejebrazorv", "password": "123456%!", "maxDuration": false}')); +opts = struct("username", credentials.username, "password", credentials.password ,"maxDuration", false); +MatMust_login(M, opts); % Ask for the Projects available to the user @@ -37,11 +41,23 @@ proj_list = M.MatMust_getUserLinkedProjects('dump'); % +++++++++++++++++ act_proj = 'BEPICRUISE'; +dataStart = '2018-11-26 13:00:00'; +dataStop = '2018-11-26 13:40:00'; + + % for info type "help MatMust_getDataFromName" % MatMust_getDataFromName(obj, ds, parname, dateStart, dateStop, options ) -data = M.MatMust_getDataFromName('BEPICRUISE', 'NSA03016', '2018-11-26 13:00:00', '2018-11-26 13:40:00'); +data = M.MatMust_getDataFromName('BEPICRUISE', 'NSA03016', dataStart, dataStop); % or if you want to plot -data = M.MatMust_getDataFromName('BEPICRUISE', 'NSA03016', '2018-11-26 13:00:00', '2018-11-26 13:40:00', 'plot'); +data = M.MatMust_getDataFromName('BEPICRUISE', 'NSA03016', dataStart, dataStop, 'plot'); + +%search a mnemonic in +data = M.MatMust_searchTMparFromName('Est sc ang rate', act_proj,'dump','Description'); + +%you can get more than a variable a time +data = M.MatMust_getDataFromName('BEPICRUISE', {'NCAD09A1','NCAD09A2','NCAD09A3'}, dataStart , dataStop, 'plot'); + +