diff --git a/matlab/TCV/gdat_tcv.m b/matlab/TCV/gdat_tcv.m index 5d9df8d1eca297aa97050aa2317bf87fe965fcf3..d11039a7680b9feddec3c0ed2585b11640582d53 100644 --- a/matlab/TCV/gdat_tcv.m +++ b/matlab/TCV/gdat_tcv.m @@ -2600,8 +2600,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.dimunits{1} = 's'; gdat_data.units = 'W'; tension = -1e5; - vloop_smooth=interpos(-63,vloop.t,vloop.data,gdat_data.ohm.t,tension); - ip_t = interpos(21,ip.t,ip.data,gdat_data.ohm.t); + vloop_smooth=interpos_nan(-63,vloop.t,vloop.data,gdat_data.ohm.t,tension); + ip_t = interpos_nan(21,ip.t,ip.data,gdat_data.ohm.t); gdat_data.ohm.data = -vloop_smooth.*ip_t; % TCV has wrong sign for Vloop gdat_data.ohm.raw_data = -vloop.data.*ip_t; gdat_data.ohm.data_fullpath = 'from vloop*Ip, smoothed vloop in data, unsmoothed in raw_data'; @@ -2637,7 +2637,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.ec.label='P_{EC}'; gdat_data.ec.help = tracetdi.help; % add to main with linear interpolation and 0 for extrapolated values - gdat_data.data(:,end+1) = interpos(-21,gdat_data.ec.t,gdat_data.ec.data(:,end),gdat_data.t); + gdat_data.data(:,end+1) = interpos_nan(-21,gdat_data.ec.t,gdat_data.ec.data(:,end),gdat_data.t); gdat_data.x(end+1) = size(gdat_data.data,2); gdat_data.label{end+1}=gdat_data.ec.label; end @@ -2706,7 +2706,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.rad.label='P_{RAD}'; gdat_data.rad.help = tracetdi.help; % add to main with linear interpolation and 0 for extrapolated values - gdat_data.data(:,end+1) = interpos(-21,gdat_data.rad.t,gdat_data.rad.data(:,end),gdat_data.t); + gdat_data.data(:,end+1) = interpos_nan(-21,gdat_data.rad.t,gdat_data.rad.data(:,end),gdat_data.t); index_rad = size(gdat_data.data,2); gdat_data.x(end+1) = size(gdat_data.data,2); gdat_data.label{end+1}=gdat_data.rad.label; @@ -3141,7 +3141,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') psi_axis=gdat_tcv(shot,params_eff); params_eff.data_request='b0'; b0=gdat_tcv(shot,params_eff); - b0tpsi = interpos(21,b0.t,b0.data,psi_axis.t); %q_rho on same time base as psi_axis + b0tpsi = interpos_nan(21,b0.t,b0.data,psi_axis.t); %q_rho on same time base as psi_axis if isempty(psi_axis.data) || isempty(psi_axis.dim) || isempty(q_rho.data) || isempty(q_rho.dim) if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end return @@ -3532,7 +3532,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end % compute interpolation with tension provided for i=1:size(sxr.data,2) - gdat_data.data(i,:) = interpos(sxr.time,sxr.data(:,i),gdat_data.t,gdat_data.gdat_params.fit_tension); + gdat_data.data(i,:) = interpos_nan(sxr.time,sxr.data(:,i),gdat_data.t,gdat_data.gdat_params.fit_tension); end end gdat_data.r_x = sxr.geometry.xchord(gdat_data.x,:); @@ -3597,7 +3597,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') % invert index of time and channel (rho) gdat_data.data = mpx.(gdat_data.gdat_params.camera(1:3)).signal.data'; gdat_data.t = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{1}; - gdat_data.dim{1} = interpos(21,mpx.top.rho.time,mpx.top.rho.rhopsi,gdat_data.t)'; + gdat_data.dim{1} = interp1(mpx.top.rho.time,mpx.top.rho.rhopsi,gdat_data.t)'; gdat_data.dim{2} = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{1}; gdat_data.x = gdat_data.dim{1}; gdat_data.(gdat_data.gdat_params.camera).data = gdat_data.data; @@ -3608,14 +3608,14 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') else gdat_data.data = mpx.signal.data'; gdat_data.t = mpx.signal.dim{1}; - gdat_data.dim{1} = interpos(21,mpx.top.rho.time,mpx.top.rho.rhopsi,gdat_data.t); + gdat_data.dim{1} = interpos_nan(21,mpx.top.rho.time,mpx.top.rho.rhopsi,gdat_data.t); gdat_data.dim{2} = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{1}; % gdat_data.top.data = mpx.top.signal.data'; gdat_data.top.x = gdat_data.dim{1}; gdat_data.top.channel = mpx.top.signal.dim{2}; gdat_data.bottom.data = mpx.bot.signal.data; - gdat_data.bottom.x = interpos(21,mpx.bot.rho.time,mpx.bot.rho.rhopsi,gdat_data.t); + gdat_data.bottom.x = interpos_nan(21,mpx.bot.rho.time,mpx.bot.rho.rhopsi,gdat_data.t); gdat_data.bottom.channel = mpx.bottom.signal.dim{2}; gdat_data.(gdat_data.gdat_params.camera).channel = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{2}; gdat_data.data_fullpath = ['MPX for ' gdat_data.gdat_params.camera ' camera in .data, "rho" in .x between [-1,1]' ... @@ -3886,7 +3886,7 @@ end if ~isempty(tracefirrat.data) && ~ischar(tracefirrat.data) && any(isfinite(tracefirrat.data)) ... && ~isempty(tracefirrat.dim) && ~isempty(tracefirrat.dim{1}) - firthomratio = interpos(21,tracefirrat.dim{1},tracefirrat.data,timebase); + firthomratio = interpos_nan(21,tracefirrat.dim{1},tracefirrat.data,timebase); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -4099,7 +4099,7 @@ switch numel(zshifteff) case 1 zshifteff=zshifteff * ones(size(t_th)); case numel(t_psi) - zshifteff=interpos(21,t_psi,zshifteff,t_th); + zshifteff=interpos_nan(21,t_psi,zshifteff,t_th); case numel(t_th) % ok otherwise diff --git a/matlab/TCV/tcv_requests_mapping.m b/matlab/TCV/tcv_requests_mapping.m index bb06a26e6cd56ae3b6a1daea08d45fa499d6e879..ce8a01441a5d585848dde445379a870f69c3b106 100644 --- a/matlab/TCV/tcv_requests_mapping.m +++ b/matlab/TCV/tcv_requests_mapping.m @@ -602,7 +602,7 @@ switch lower(data_request) mapping.method = 'tdiliuqe'; mapping.expression = '\results::te_x_a[*,12]'; mapping.method = 'expression'; - mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=''\results::te_x_a[*,12]''; ' ... + mapping.expression = ['if shot > 78662, disp(''no XTE anymore'');gdat_tmp.data=[];return;end;params_eff = gdat_data.gdat_params;params_eff.data_request=''\results::te_x_a[*,12]''; ' ... 'gdat_tmp=gdat_tcv([],params_eff); ' ... 'params_eff = gdat_data.gdat_params;params_eff.data_request=''\magnetics::iplasma:trapeze''; ' ... 'aa=gdat_tcv([],params_eff);it=find(abs(aa.data)<10e3);it2=iround_os(gdat_tmp.t,aa.t(it));gdat_tmp.data(it2)=NaN;' ... diff --git a/matlab/interpos_nan.m b/matlab/interpos_nan.m new file mode 100644 index 0000000000000000000000000000000000000000..396b06b3ce1c00e2f9d89a07d9900530c8afed24 --- /dev/null +++ b/matlab/interpos_nan.m @@ -0,0 +1,56 @@ +function [varargout] = interpos_nan(var1, var2, var3, varargin); +% +% see help interpos for details +% +% pre-exclude NaNs from either xin or yin before calling interpos +% +nverbose = 1; % warnings +% +if nargin < 3 + error('xin and yin required'); +else + if isscalar(var1) + xin = var2; + yin = var3; + kopt_provided = 1; + else + xin = var1; + yin = var2; + kopt_provided = 0; + end + if nverbose >= 1 && (any(isnan(xin)) || any(isnan(yin))), warning('NaNs removed by interpos_nan'); end +end + +ij = find(~isnan(xin) & ~isnan(yin)); +if ~isempty(ij) + xin_eff = xin(ij); + yin_eff = yin(ij); + if kopt_provided == 1 + switch nargout + case 1 + [varargout{1}] = interpos(var1, xin_eff, yin_eff, varargin{:}); + case 2 + [varargout{1},varargout{2}] = interpos(var1, xin_eff, yin_eff, varargin{:}); + case 3 + [varargout{1},varargout{2},varargout{3}] = interpos(var1, xin_eff, yin_eff, varargin{:}); + otherwise + [varargout{1},varargout{2},varargout{3},varargout{4}] = interpos(var1, xin_eff, yin_eff, varargin{:}); + end + else + switch nargout + case 1 + [varargout{1}] = interpos(xin_eff, yin_eff, var3, varargin{:}); + case 2 + [varargout{1},varargout{2}] = interpos(xin_eff, yin_eff, var3, varargin{:}); + case 3 + [varargout{1},varargout{2},varargout{3}] = interpos(xin_eff, yin_eff, var3, varargin{:}); + otherwise + [varargout{1},varargout{2},varargout{3},varargout{4}] = interpos(xin_eff, yin_eff, var3, varargin{:}); + end + end +else + if nargout > 0 + varargout = cell(nargout,1); + warning('Only NaNs in xin/yin'); + end +end diff --git a/matlab/tests/test_requestnames.m b/matlab/tests/test_requestnames.m index ad90fca1fcc34a3b6183b6e78c7a9326aae116d1..b8fae2bb9ccac94caaa5ce578c70c194bca90eeb 100644 --- a/matlab/tests/test_requestnames.m +++ b/matlab/tests/test_requestnames.m @@ -36,6 +36,10 @@ classdef (SharedTestFixtures={... % need a newer shot for tcv radcam shot = 81102; gdat_call = sprintf(['gdat_' lower(testCase.Machine) '(%s,''%s'')'],shot,request); + case {'mpx', 'xte'} + % need a older shot + shot = 65555; + gdat_call = sprintf(['gdat_' lower(testCase.Machine) '(%s,''%s'')'],shot,request); end % logging diff --git a/matlab/tests/test_requestnames_tcv.m b/matlab/tests/test_requestnames_tcv.m index 6941e96ddac1f9ae3cc07d32ee0dc76e58b0c5d5..872f12c547cfb4325f968844ab22fd351572c39e 100644 --- a/matlab/tests/test_requestnames_tcv.m +++ b/matlab/tests/test_requestnames_tcv.m @@ -7,7 +7,7 @@ classdef (TestTags={'tcv'})test_requestnames_tcv < test_requestnames properties(TestParameter) % parameters that will vary during tests - shot = {'65565'}; + shot = {'82913'}; requests_fast = get_all_gdat_requests('TCV','fast'); requests_slow = get_all_gdat_requests('TCV','slow'); end diff --git a/matlab/tests_matlab.m b/matlab/tests_matlab.m index 1b141e0299da1138327e8dddfca745d3410418a0..a2055fcc858b9e117b3461abf2aef6c3e23f8dd1 100644 --- a/matlab/tests_matlab.m +++ b/matlab/tests_matlab.m @@ -2,7 +2,6 @@ function tests_matlab(test_case) try fprintf('\n Running test file: %s\n',mfilename('fullpath')); fprintf(' Time: %s\n',datestr(now)); - passed = run_gdat_tests(test_case); % call to your test script here, with optional test_case input exit_code = int32(~passed); % convert to bash shell convention catch ME