Skip to content
Snippets Groups Projects
Commit 77a983e1 authored by Olivier Sauter's avatar Olivier Sauter
Browse files

add option array of shot

parent 4468902f
No related branches found
No related tags found
1 merge request!153Add multi shot
Pipeline #195844 failed
......@@ -187,10 +187,21 @@ try
else
args = [{shot,data_request},varargin_eff];
end
[gdat_data,gdat_params,error_status,varargout] = feval(['gdat_' lower(machine_eff)],args{:});
% because data request can be an actual detailed tree related signal, upper and lower case need to be kept, but other places remain with lower case when case insensitive
% needed since some substructure have machine name like mapping_for
gdat_data.gdat_params.machine = lower(gdat_data.gdat_params.machine);
% treat multiple shot numbers
if exist('shot') && isnumeric(args{1})
args_in = args;
for i=1:numel(shot)
args{1} = shot(i);
[gdat_data_i,gdat_params,error_status(i),varargout] = feval(['gdat_' lower(machine_eff)],args{:});
gdat_data_i.gdat_params.machine = lower(gdat_data_i.gdat_params.machine);
gdat_data(i) = gdat_data_i;
end
else
[gdat_data,gdat_params,error_status,varargout] = feval(['gdat_' lower(machine_eff)],args{:});
% because data request can be an actual detailed tree related signal, upper and lower case need to be kept, but other places remain with lower case when case insensitive
% needed since some substructure have machine name like mapping_for
gdat_data.gdat_params.machine = lower(gdat_data.gdat_params.machine);
end
catch ME_gdat
warning(['problems calling gdat_' lower(machine_eff)]);
......@@ -204,9 +215,11 @@ catch ME_gdat
return
end
gdat_data.gdat_call = gdat_call;
for i=1:numel(gdat_data)
gdat_data(i).gdat_call = gdat_call;
end
if gdat_data.gdat_params.doplot
if gdat_data(1).gdat_params.doplot
try
% plot gdat_data versus 1st dim by default, if nb_dims<=2, otherwise do not plot
hhh = gdat_plot(gdat_data); % return handle to figure
......
......@@ -31,180 +31,186 @@ end
doplot=1;
if isfield(gdat_plot_params,'doplot') && ~isempty(gdat_plot_params.doplot)
doplot = gdat_plot_params.doplot;
elseif isfield(gdat_data,'gdat_params') && isfield(gdat_data.gdat_params,'doplot') && ~isempty(gdat_data.gdat_params.doplot)
if gdat_data.gdat_params.doplot~=0 % assume one does not call gdat_plot not to plot
doplot = gdat_data.gdat_params.doplot;
elseif isfield(gdat_data(1),'gdat_params') && isfield(gdat_data(1).gdat_params,'doplot') && ~isempty(gdat_data(1).gdat_params.doplot)
if gdat_data(1).gdat_params.doplot~=0 % assume one does not call gdat_plot not to plot
doplot = gdat_data(1).gdat_params.doplot;
end
end
if doplot==0; return; end
redo_legend_from_Tags = 0;
do_legend = 1;
if all(isfield(gdat_data,{'data','t'})) && ~isempty(gdat_data.data) && ~isempty(gdat_data.t)
fighandle = get(0,'CurrentFigure');
if doplot == 1
fighandle = figure;
elseif doplot > 1
fighandle = figure(doplot);
clf;
elseif doplot == -1
hold all
elseif doplot < -1
fighandle = figure(abs(doplot));
hold all
end
if isfield(gdat_data,'gdat_request') && ischar(gdat_data.gdat_request) ...
&& strcmp(gdat_data.gdat_request,'eqdsk')
% special case, plot contours of first equil
endstr = '';
if iscell(gdat_data.eqdsk); endstr = '{1}'; end
eval(['contour(gdat_data.eqdsk' endstr '.rmesh,gdat_data.eqdsk' endstr '.zmesh,gdat_data.eqdsk' endstr '.psi'',100);'])
hold on
eval(['linehandles{end+1} = plot(gdat_data.eqdsk' endstr '.rplas,gdat_data.eqdsk' endstr '.zplas,''k'');'])
eval(['linehandles{end+1} = plot(gdat_data.eqdsk' endstr '.rlim,gdat_data.eqdsk' endstr '.zlim,''k'');'])
axis equal;
title(eval(['gdat_data.eqdsk' endstr '.stitle']));
do_legend = 0;
elseif any(find(size(gdat_data.data)==length(gdat_data.t)))
try
if length(size(gdat_data.data))<=2
if isnumeric(gdat_data.t)
linehandles{end+1} = plot(gdat_data.t,gdat_data.data);
elseif iscell(gdat_data.t)
linehandles{end+1} = plot(str2num(cell2mat(gdat_data.t)),gdat_data.data);
for ishot=1:numel(gdat_data)
if all(isfield(gdat_data(ishot),{'data','t'})) && ~isempty(gdat_data(ishot).data) && ~isempty(gdat_data(ishot).t)
fighandle = get(0,'CurrentFigure');
if numel(gdat_data) > 1 && gdat_data(1).gdat_params.doplot==1
% assume that for a series of shot, need doplot=-1 after 1st plot if doplot was 1 in request
doplot = -1;
end
if doplot == 1
fighandle = figure;
elseif doplot > 1
fighandle = figure(doplot);
clf;
elseif doplot == -1
hold all
elseif doplot < -1
fighandle = figure(abs(doplot));
hold all
end
if isfield(gdat_data(ishot),'gdat_request') && ischar(gdat_data(ishot).gdat_request) ...
&& strcmp(gdat_data(ishot).gdat_request,'eqdsk')
% special case, plot contours of first equil
endstr = '';
if iscell(gdat_data(ishot).eqdsk); endstr = '{1}'; end
eval(['contour(gdat_data(ishot).eqdsk' endstr '.rmesh,gdat_data(ishot).eqdsk' endstr '.zmesh,gdat_data(ishot).eqdsk' endstr '.psi'',100);'])
hold on
eval(['linehandles{end+1} = plot(gdat_data(ishot).eqdsk' endstr '.rplas,gdat_data(ishot).eqdsk' endstr '.zplas,''k'');'])
eval(['linehandles{end+1} = plot(gdat_data(ishot).eqdsk' endstr '.rlim,gdat_data(ishot).eqdsk' endstr '.zlim,''k'');'])
axis equal;
title(eval(['gdat_data(ishot).eqdsk' endstr '.stitle']));
do_legend = 0;
elseif any(find(size(gdat_data(ishot).data)==length(gdat_data(ishot).t)))
try
if length(size(gdat_data(ishot).data))<=2
if isnumeric(gdat_data(ishot).t)
linehandles{end+1} = plot(gdat_data(ishot).t,gdat_data(ishot).data);
elseif iscell(gdat_data(ishot).t)
linehandles{end+1} = plot(str2num(cell2mat(gdat_data(ishot).t)),gdat_data(ishot).data);
end
else
disp('WARNING')
disp(['size(gdat_data(ishot).data) = ' num2str(size(gdat_data(ishot).data)) ', >2D thus do not try to plot'])
disp(' ')
return
end
catch ME
if exist('ME','var')
disp('Problem in gdat_plot')
rethrow(ME)
end
else
disp('WARNING')
disp(['size(gdat_data.data) = ' num2str(size(gdat_data.data)) ', >2D thus do not try to plot'])
disp(' ')
return
end
catch ME
if exist('ME','var')
disp('Problem in gdat_plot')
rethrow(ME)
if ~isfield(gdat_data(ishot),'shot'); return; end % allows to plot if just .t and .data exist
if doplot < 0
title([gdat_data(ishot).gdat_params.machine]);
else
title([gdat_data(ishot).gdat_params.machine ' #' num2str(gdat_data(ishot).shot)]);
end
return
end
if ~isfield(gdat_data,'shot'); return; end % allows to plot if just .t and .data exist
if doplot < 0
title([gdat_data.gdat_params.machine]);
else
title([gdat_data.gdat_params.machine ' #' num2str(gdat_data.shot)]);
end
if isfield(gdat_data,'mapping_for')
dimunits_x = gdat_data.dimunits{gdat_data.mapping_for.(gdat_data.gdat_params.machine).gdat_timedim};
if ischar(dimunits_x)
xlabel(['time [' dimunits_x ']']);
if isfield(gdat_data(ishot),'mapping_for')
dimunits_x = gdat_data(ishot).dimunits{gdat_data(ishot).mapping_for.(gdat_data(ishot).gdat_params.machine).gdat_timedim};
if ischar(dimunits_x)
xlabel(['time [' dimunits_x ']']);
else
xlabel(['time']);
end
else
xlabel(['time']);
end
else
xlabel(['time']);
end
ylabel_eff = gdat_data.label;
if iscell(gdat_data.label) && length(gdat_data.label)>=2; ylabel_eff = gdat_data.label{end}; end
if ~isempty(gdat_data.units)
hylabel=ylabel([ylabel_eff '[' gdat_data.units ']'],'interpreter','none');
else
hylabel=ylabel(ylabel_eff,'interpreter','none');
end
ab=get(gca,'children');
if iscell(gdat_data.label) && numel(gdat_data.label) > 1;
if numel(ab)==numel(gdat_data.label) || mod(numel(ab),numel(gdat_data.label))==0
% Assumes a single shot with several lines and labels, if mod==0 then this is a new shot, only Tag present lines
for iab=1:numel(gdat_data.label)
set(ab(iab),'Tag',[num2str(gdat_data.shot) ' ' gdat_data.label{end-iab+1}]);
ylabel_eff = gdat_data(ishot).label;
if iscell(gdat_data(ishot).label) && length(gdat_data(ishot).label)>=2; ylabel_eff = gdat_data(ishot).label{end}; end
if ~isempty(gdat_data(ishot).units)
hylabel=ylabel([ylabel_eff '[' gdat_data(ishot).units ']'],'interpreter','none');
else
hylabel=ylabel(ylabel_eff,'interpreter','none');
end
ab=get(gca,'children');
if iscell(gdat_data(ishot).label) && numel(gdat_data(ishot).label) > 1;
if numel(ab)==numel(gdat_data(ishot).label) || mod(numel(ab),numel(gdat_data(ishot).label))==0
% Assumes a single shot with several lines and labels, if mod==0 then this is a new shot, only Tag present lines
for iab=1:numel(gdat_data(ishot).label)
set(ab(iab),'Tag',[num2str(gdat_data(ishot).shot) ' ' gdat_data(ishot).label{end-iab+1}]);
end
if numel(ab)>numel(gdat_data(ishot).label), redo_legend_from_Tags = 1; end
end
if iscell(gdat_data(ishot).label) && length(ab) < length(gdat_data(ishot).label)
if length(ab) == 1
% assume combine label is best
tempaaa = sprintf('%s/',gdat_data(ishot).label{:});
hhhleg=legend(tempaaa(1:end-1));
set(ab(1),'Tag',[num2str(gdat_data(ishot).shot) ' ' tempaaa(1:min(10,numel(tempaaa)-1))]);
else
% not sure why would get there
hhhleg=legend(gdat_data(ishot).label{1:length(ab)});
end
elseif numel(ab)==numel(gdat_data(ishot).label)
hhhleg=legend(gdat_data(ishot).label);
end
if exist('hhhleg','var'), set(hhhleg,'Interpreter','none'); end
else
% assume one line per call
if isempty(gdat_data(ishot).label)
set(ab(1),'Tag',[num2str(gdat_data(ishot).shot)]);
elseif ischar(gdat_data(ishot).label)
% assume one signal, take max 10 chars
set(ab(1),'Tag',[num2str(gdat_data(ishot).shot) ' ' gdat_data(ishot).label(1:min(10,numel(gdat_data(ishot).label)))]);
elseif iscell(gdat_data(ishot).label) && numel(gdat_data(ishot).label) == 1
if isempty(gdat_data(ishot).label{1})
set(ab(1),'Tag',[num2str(gdat_data(ishot).shot)]);
else
set(ab(1),'Tag',[num2str(gdat_data(ishot).shot) ' ' gdat_data(ishot).label{1}(1:min(10,numel(gdat_data(ishot).label{1})))]);
end
end
if numel(ab)>numel(gdat_data.label), redo_legend_from_Tags = 1; end
end
if iscell(gdat_data.label) && length(ab) < length(gdat_data.label)
if length(ab) == 1
% assume combine label is best
tempaaa = sprintf('%s/',gdat_data.label{:});
hhhleg=legend(tempaaa(1:end-1));
set(ab(1),'Tag',[num2str(gdat_data.shot) ' ' tempaaa(1:min(10,numel(tempaaa)-1))]);
else
% not sure why would get there
hhhleg=legend(gdat_data.label{1:length(ab)});
if redo_legend_from_Tags
for iab=1:numel(ab)
% Use Tag for DisplayName, when overlay plots of multiple data at this stage
set(ab(iab),'DisplayName',strrep(get(ab(iab),'Tag'),'_','\_'));
end
elseif numel(ab)==numel(gdat_data.label)
hhhleg=legend(gdat_data.label);
end
if exist('hhhleg','var'), set(hhhleg,'Interpreter','none'); end
zoom on;
end
maxnblines = 1;
if ~exist('ab','var'), ab=get(gca,'children'); end
if do_legend==0 || redo_legend_from_Tags || any(strcmp(gdat_data(ishot).gdat_params.data_request,'powers')) ...
|| (numel(ab)==numel(gdat_data(ishot).label) && numel(ab)>1)
% keep legend as is
else
% assume one line per call
if isempty(gdat_data.label)
set(ab(1),'Tag',[num2str(gdat_data.shot)]);
elseif ischar(gdat_data.label)
% assume one signal, take max 10 chars
set(ab(1),'Tag',[num2str(gdat_data.shot) ' ' gdat_data.label(1:min(10,numel(gdat_data.label)))]);
elseif iscell(gdat_data.label) && numel(gdat_data.label) == 1
if isempty(gdat_data.label{1})
set(ab(1),'Tag',[num2str(gdat_data.shot)]);
for i=1:numel(linehandles)
maxnblines = max(maxnblines,numel(linehandles{i}));
if numel(linehandles{i}) == 1
set(linehandles{i},'DisplayName',[num2str(gdat_data(ishot).shot)]);
else
set(ab(1),'Tag',[num2str(gdat_data.shot) ' ' gdat_data.label{1}(1:min(10,numel(gdat_data.label{1})))]);
for j=1:numel(linehandles{i})
set(linehandles{i}(j),'DisplayName',[num2str(gdat_data(ishot).shot) ',' num2str(j)]);
end
end
end
end
if redo_legend_from_Tags
for iab=1:numel(ab)
% Use Tag for DisplayName, when overlay plots of multiple data at this stage
set(ab(iab),'DisplayName',strrep(get(ab(iab),'Tag'),'_','\_'));
end
end
zoom on;
end
maxnblines = 1;
if ~exist('ab','var'), ab=get(gca,'children'); end
if do_legend==0 || redo_legend_from_Tags || any(strcmp(gdat_data.gdat_params.data_request,'powers')) ...
|| (numel(ab)==numel(gdat_data.label) && numel(ab)>1)
% keep legend as is
else
for i=1:numel(linehandles)
maxnblines = max(maxnblines,numel(linehandles{i}));
if numel(linehandles{i}) == 1
set(linehandles{i},'DisplayName',[num2str(gdat_data.shot)]);
if do_legend==1 && maxnblines==1; legend show; end
if strcmp(gdat_data(ishot).gdat_request,'mhd')
% special case, add legend instead of ylabel
delete(hylabel);
legend(gdat_data(ishot).label);
% add spectrogram per signal
mhd_sum_data = 0.;
if isfield(gdat_data(ishot).gdat_params,'nfft') && ~isempty(gdat_data(ishot).gdat_params.nfft)
nfft = gdat_data(ishot).gdat_params.nfft;
else
for j=1:numel(linehandles{i})
set(linehandles{i}(j),'DisplayName',[num2str(gdat_data.shot) ',' num2str(j)]);
end
nfft=512;
end
end
end
if do_legend==1 && maxnblines==1; legend show; end
if strcmp(gdat_data.gdat_request,'mhd')
% special case, add legend instead of ylabel
delete(hylabel);
legend(gdat_data.label);
% add spectrogram per signal
mhd_sum_data = 0.;
if isfield(gdat_data.gdat_params,'nfft') && ~isempty(gdat_data.gdat_params.nfft)
nfft = gdat_data.gdat_params.nfft;
else
nfft=512;
end
tmhdm=mean(reshape(gdat_data.t(1:nfft*fix(length(gdat_data.t)/nfft)),nfft,fix(length(gdat_data.t)/nfft)));
for i=1:size(gdat_data.data,2)
[B,F,T]=specgram(gdat_data.data(:,i),nfft,1/mean(diff(gdat_data.t)),hanning(nfft),nfft/2);
tmhdm=mean(reshape(gdat_data(ishot).t(1:nfft*fix(length(gdat_data(ishot).t)/nfft)),nfft,fix(length(gdat_data(ishot).t)/nfft)));
for i=1:size(gdat_data(ishot).data,2)
[B,F,T]=specgram(gdat_data(ishot).data(:,i),nfft,1/mean(diff(gdat_data(ishot).t)),hanning(nfft),nfft/2);
figure;
imagesc(T+tmhdm(1),F/1e3,20*log10(abs(B)));axis xy;colormap jet;
ylabel('freq [kHz]')
xlabel(gdat_data(ishot).dimunits{1})
ylabel_eff = gdat_data(ishot).label;
if iscell(gdat_data(ishot).label) && length(gdat_data(ishot).label)>=i; ylabel_eff = gdat_data(ishot).label{i}; end
title([upper(gdat_data(ishot).gdat_params.machine) '#' num2str(gdat_data(ishot).shot) ' ' ylabel_eff])
mhd_sum_data = mhd_sum_data + gdat_data(ishot).data(:,i);
end
[B,F,T]=specgram(mhd_sum_data./size(gdat_data(ishot).data,2),nfft,1/mean(diff(gdat_data(ishot).t)),hanning(nfft),nfft/2);
figure;
imagesc(T+tmhdm(1),F/1e3,20*log10(abs(B)));axis xy;colormap jet;
ylabel('freq [kHz]')
xlabel(gdat_data.dimunits{1})
ylabel_eff = gdat_data.label;
if iscell(gdat_data.label) && length(gdat_data.label)>=i; ylabel_eff = gdat_data.label{i}; end
title([upper(gdat_data.gdat_params.machine) '#' num2str(gdat_data.shot) ' ' ylabel_eff])
mhd_sum_data = mhd_sum_data + gdat_data.data(:,i);
xlabel(gdat_data(ishot).dimunits{1})
ylabel_eff = gdat_data(ishot).label;
if iscell(gdat_data(ishot).label); ylabel_eff = sprintf('%s ',gdat_data(ishot).label{:}); end
title([upper(gdat_data(ishot).gdat_params.machine) '#' num2str(gdat_data(ishot).shot) ' sum of ' ylabel_eff])
end
[B,F,T]=specgram(mhd_sum_data./size(gdat_data.data,2),nfft,1/mean(diff(gdat_data.t)),hanning(nfft),nfft/2);
figure;
imagesc(T+tmhdm(1),F/1e3,20*log10(abs(B)));axis xy;colormap jet;
ylabel('freq [kHz]')
xlabel(gdat_data.dimunits{1})
ylabel_eff = gdat_data.label;
if iscell(gdat_data.label); ylabel_eff = sprintf('%s ',gdat_data.label{:}); end
title([upper(gdat_data.gdat_params.machine) '#' num2str(gdat_data.shot) ' sum of ' ylabel_eff])
else
disp(['cannot plot gdat_data(' num2str(ishot) '), has empty data or t field'])
end
else
disp('cannot plot gdat_data, has empty data or t field')
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment