diff --git a/matlab/src/classes/@MatMust/MatMust.m b/matlab/src/classes/@MatMust/MatMust.m index e93bf77747daa447ed509d26b4a617c69f732f84..3f5fae783dc589b874848c8aef92d6b7eeebfc14 100644 --- a/matlab/src/classes/@MatMust/MatMust.m +++ b/matlab/src/classes/@MatMust/MatMust.m @@ -168,35 +168,51 @@ classdef MatMust < handle 'mode', 'SIMPLE'}; try - data = webread([obj.url,obj.urlsub, query], args{:} ,obj.GEToptions); + response = webread([obj.url,obj.urlsub, query], args{:} ,obj.GEToptions); catch ME fprintf('+++ WARNING\n%s - %s\n', ME.identifier, ME.message) return end - + + if isa(response,'struct') + data{1} = response; + else + data = response; + end + %refine date string to adapt MATLAB date format - for i=1:numel(data) - data_par = data(i).data; + 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) + continue + end + data_par = data{1}(i).data; t = num2cell(datenum(datetime('1970-01-01', 'TimeZone','utc'))+(str2num(str2mat(data_par.date))/1000/86400)); - [data(i).data.dateMAT] = deal(t{:}); + [data{1}(i).data.dateMAT] = deal(t{:}); clear t end if nargin > 5 if any(ismember(varargin,'dump')) fprintf('+++++++++++++ DATA RESULT LIST +++++++++++++\n'); - for i=1:numel(data) - data_par = data(i).data; - fprintf('%s-%s: %s -> %s\n', data(i).subsystem, data(i).type, data(i).name, data(i).description ); + for i=1:numel(data{1}) + if isempty(data{i}(i).data) + continue + end + data_par = data{i}.data; + fprintf('%s-%s: %s -> %s\n', data{1}(i).subsystem, data{1}(i).type, data{1}(i).name, data{1}(i).description ); %TODO filter for several kind of dataType 'DOUBLE', %'SIGNED_SMALL_INT', 'STRING' - switch data(i).dataType + switch data{1}(i).dataType case 'DOUBLE' format = '%f'; - case 'SIGNED_SMALL_INT' + case {'SIGNED_SMALL_INT', 'UNSIGNED_INT'} format = '%i'; case 'STRING' format = '%s'; + otherwise + format = '%s'; + end format = ['%s - ',format,'\n']; for i = 1:numel(data_par) @@ -208,19 +224,22 @@ classdef MatMust < handle fprintf('+++++++++++++++++++++++++++++++++++++++++\n'); end if any(ismember(varargin,'plot')) - for i=1:numel(data) - data_par = data(i).data; + for i=1:numel(data{1}) + if isempty(data{1}(i).data) + continue + end + data_par = data{1}(i).data; figure - title(sprintf('%s-%s: %s -> %s\n', data(i).subsystem, data(i).type, data(i).name, data(i).description )) + title(sprintf('%s-%s: %s -> %s\n', data{1}(i).subsystem, data{1}(i).type, data{1}(i).name, data{1}(i).description )) if strcmp(calibrate,'true') switch class(data_par(1).calibratedValue) case 'char' indx = [1,find(diff([data_par.value])~=0)]+1; - [ylabels,charind ] = unique(replace({data_par(indx).calibratedValue},'_',' '),'stable'); + 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')); - [~,si] = sort([data_par(indx(charind)).value]); - set(gca,'yticklabel', ylabels(si) ); + set(gca,'ytick',unique([data_par.value],'sorted')) + set(gca,'yticklabel',ylabels) if exist('dataFigShowUpdatefcn')==2 set(datacursormode(gcf),'UpdateFcn',@dataFigShowUpdatefcn) end @@ -231,10 +250,10 @@ classdef MatMust < handle plot([data_par.dateMAT], [data_par.value], '-x' ); end xlabel('time'); - if isfield(data(i), 'unit') - ylabel(data(i).unit); + if isfield(data{1}(i), 'unit') + ylabel(data{1}(i).unit); end - title([data(i).description,' - ',data(i).name]); + title([data{1}(i).description,' - ',data{1}(i).name]); datetick('x'); grid on end @@ -249,11 +268,12 @@ classdef MatMust < handle % MatMust_searchTMparFromName(obj, namequery, dataproviders, varargin) % % dataproviders = dataprovider IdName. - % namequery = The query to perform (ex. '*HGA' or 'HGA+.+state' ) + % 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 % @@ -264,10 +284,10 @@ classdef MatMust < handle dataproviders = char(join(dataproviders,',')); end try - optindx = strcmp(varargin,'Description')+strcmp(varargin,'Id')+strcmp(dataproviders,'name'); + 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',[char(field)],'text',namequery,'dataproviders', dataproviders ,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', dataproviders ,obj.GEToptions);