From ceadcebd8d18d16a46db557a6956b344ebd2349d Mon Sep 17 00:00:00 2001 From: Olivier Sauter <Olivier.Sauter@epfl.ch> Date: Mon, 17 Jan 2022 15:22:09 +0100 Subject: [PATCH] add gas to AUG, add Tags to gdat_plot --- matlab/AUG/aug_requests_mapping.m | 3 ++ matlab/AUG/gdat_aug.m | 80 +++++++++++++++++++++++++++++++ matlab/gdat_plot.m | 40 ++++++++++++++-- 3 files changed, 118 insertions(+), 5 deletions(-) diff --git a/matlab/AUG/aug_requests_mapping.m b/matlab/AUG/aug_requests_mapping.m index 9b4e16ae..4112db7b 100644 --- a/matlab/AUG/aug_requests_mapping.m +++ b/matlab/AUG/aug_requests_mapping.m @@ -130,6 +130,9 @@ switch lower(data_request) mapping.gdat_timedim = 2; mapping.method = 'switchcase'; % could use function make_eqdsk directly? mapping.expression = ''; + case {'gas', 'gas_valve'} + mapping.gdat_timedim = 2; + mapping.method = 'switchcase'; case 'halpha' mapping.timedim = 1; mapping.label = 'Halpha'; diff --git a/matlab/AUG/gdat_aug.m b/matlab/AUG/gdat_aug.m index 3cc7d982..58d292a6 100644 --- a/matlab/AUG/gdat_aug.m +++ b/matlab/AUG/gdat_aug.m @@ -1297,6 +1297,86 @@ elseif strcmp(mapping_for_aug.method,'switchcase') gdat_data.dimunits{1} = 'rhopolnorm'; gdat_data.dimunits{2} = 'time [s]'; + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + case {'gas', 'gas_valve', 'gas_valves'} + % + uvs_signals_source = [{'D_tot','Sum of calibrated D2 gas-fluxes (= D/s)'}; ... + {'N_tot','Sum of calibrated N2 gas-fluxes (= N*7/s)'}; ... + {'H_tot','Sum of calibrated H gas-fluxes (= H/s)'}; ... + {'He_tot','Sum of calibrated He gas-fluxes (= He*2/s)'}; ... + {'Ne_tot','Sum of calibrated Ne gas-fluxes (= Ne*10/s)'}; ... + {'Ar_tot','Sum of calibrated Ar gas-fluxes (= Ar*18/s)'}]; + for i=1:size(uvs_signals_source,1) + uvs_signals.(uvs_signals_source{i,1}) = gdat_aug(shot,{'UVS',uvs_signals_source{i,1}}); + if isempty(gdat_data.t) && prod(isfinite(uvs_signals.(uvs_signals_source{i,1}).t)) && isvector(uvs_signals.(uvs_signals_source{i,1}).t) ... + && numel(uvs_signals.(uvs_signals_source{i,1}).t)>10 + gdat_data.t = uvs_signals.(uvs_signals_source{i,1}).t; % all have same time base, could use time signal + end + if prod(isfinite(uvs_signals.(uvs_signals_source{i,1}).data)) && isvector(uvs_signals.(uvs_signals_source{i,1}).data) ... + && numel(uvs_signals.(uvs_signals_source{i,1}).data) == numel(gdat_data.t); + gdat_data.data(i,:) = uvs_signals.(uvs_signals_source{i,1}).data; % all have same time base + else + gdat_data.data(i,:) = NaN; + end + gdat_data.units{i} = uvs_signals_source{i,2}; + end + gdat_data.data_fullpath = 'from UVS and uvs_signals_source'; + gdat_data.uvs_signals_source = uvs_signals_source; + gdat_data.label = uvs_signals_source(:,1)'; + gdat_data.dim{2} = gdat_data.t; + gdat_data.dimunits{2} = 's'; + gdat_data.dim{1} = [1:size(gdat_data.data,1)]; + gdat_data.dimunits{1} = 'uvs_signals_source index'; + gdat_data.x = gdat_data.dim{1}; + gdat_data.mapping_for.aug.timedim = 1; + + % note also available in UVS, not commented the same way on ISIS + uvd_signals_source=[{'CFCu01T','PV01','empty comment'}; ... + {'CFCo02A','PV02','valve flux, normally for prefill'}; ... + {'CFFo02A','PV03','valve flux,'}; ... + {'CFA13B','PV04','valve flux, in-vessel pipe for gas imaging'}; ... + {'CFA03B','PV05','valve flux,'}; ... + {'CFFo07A','PV06','valve flux,'}; ... + {'CFDu05X','PV07','valve flux, normally with N2'}; ... + {'CFDu05B','PV08','valve flux, normally with D2'}; ... + {'CFCo10A','PV09','valve flux, in-vessel pipe into ICRH limiter'}; ... + {'CFDu01B','PV10','valve flux, normally with D2'}; ... + {'CFDu09B','PV11','valve flux, normally with D2'}; ... + {'CFFo10A','PV12','valve flux,'}; ... + {'CFFo14A','PV13','valve flux,'}; ... + {'CFA03C','PV14','valve flux, short feeding pipe for rare gases'}; ... + {'CFA13A','PV15','valve flux,'}; ... + {'CFA03A','PV16','valve flux,'}; ... + {'CFDu09X','PV17','valve flux, normally with N2'}; ... + {'CFDu13X','PV18','valve flux, normally with N2'}; ... + {'CFDu13B','PV19','valve flux, normally with D2'}; ... + {'CFDu01X','PV20','valve flux, normally with N2'}]; + gdat_data.pvxx.t = []; + gdat_data.pvxx.t = []; + + for i=1:size(uvd_signals_source,1) + uvd_signals.(uvd_signals_source{i,2}) = gdat_aug(shot,{'UVD',uvd_signals_source{i,1}}); + if isempty(gdat_data.pvxx.t) && prod(isfinite(uvd_signals.(uvd_signals_source{i,2}).t)) && isvector(uvd_signals.(uvd_signals_source{i,2}).t) ... + && numel(uvd_signals.(uvd_signals_source{i,2}).t)>10 + gdat_data.pvxx.t = uvd_signals.(uvd_signals_source{i,2}).t; % all have same time base + end + if prod(isfinite(uvd_signals.(uvd_signals_source{i,2}).data)) && isvector(uvd_signals.(uvd_signals_source{i,2}).data) ... + && numel(uvd_signals.(uvd_signals_source{i,2}).data) == numel(gdat_data.pvxx.t); + gdat_data.pvxx.data(i,:) = uvd_signals.(uvd_signals_source{i,2}).data; % all have same time base + else + gdat_data.pvxx.data(i,:) = NaN; + end + gdat_data.pvxx.units{i} = [uvd_signals_source{i,2} ': ' uvd_signals_source{i,3}]; + end + gdat_data.pvxx.data_fullpath = 'from UVD and uvd_signals_source'; + gdat_data.pvxx.uvd_signals_source = uvd_signals_source; + gdat_data.pvxx.label = uvd_signals_source(:,2)'; + gdat_data.pvxx.dim{2} = gdat_data.t; + gdat_data.pvxx.dimunits{2} = 's'; + gdat_data.pvxx.dim{1} = [1:size(gdat_data.pvxx.data,1)]; + gdat_data.pvxx.dimunits{1} = 'PVxx index'; + gdat_data.pvxx.x = gdat_data.dim{1}; + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'ids'} params_eff = gdat_data.gdat_params; diff --git a/matlab/gdat_plot.m b/matlab/gdat_plot.m index aba5eacf..acd7768c 100644 --- a/matlab/gdat_plot.m +++ b/matlab/gdat_plot.m @@ -37,6 +37,7 @@ elseif isfield(gdat_data,'gdat_params') && isfield(gdat_data.gdat_params,'doplot end end if doplot==0; return; end +redo_legend_from_Tags = 0; if all(isfield(gdat_data,{'data','t'})) && ~isempty(gdat_data.data) && ~isempty(gdat_data.t) fighandle = get(0,'CurrentFigure'); @@ -106,25 +107,54 @@ if all(isfield(gdat_data,{'data','t'})) && ~isempty(gdat_data.data) && ~isempty( else hylabel=ylabel(ylabel_eff,'interpreter','none'); end - if iscell(gdat_data.label) && length(gdat_data.label)>=2; - ab=get(gca,'children'); + 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}]); + 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)}); end - else + elseif numel(ab)==numel(gdat_data.label) hhhleg=legend(gdat_data.label); end - set(hhhleg,'Interpreter','none'); + if exist('hhhleg'), set(hhhleg,'Interpreter','none'); end + 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)]); + else + set(ab(1),'Tag',[num2str(gdat_data.shot) ' ' gdat_data.label{1}(1:min(10,numel(gdat_data.label{1})))]); + 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 any(strcmp(gdat_data.gdat_params.data_request,'powers')) && length(ab)==length(gdat_data.label) + if redo_legend_from_Tags || any(strcmp(gdat_data.gdat_params.data_request,'powers')) || (numel(ab)==numel(gdat_data.label) && numel(ab)>1) % keep legend from label else for i=1:numel(linehandles) -- GitLab