diff --git a/matlab/TCV/gdat_tcv.m b/matlab/TCV/gdat_tcv.m index deae6b52e1482d482299c7737f3818a3fc2ad9cc..a6118f64c65737d25943d7f4ca4bed810cb82bea 100644 --- a/matlab/TCV/gdat_tcv.m +++ b/matlab/TCV/gdat_tcv.m @@ -1740,7 +1740,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.ec.ec_data = ec_data; filled_successfully = true; %set flag to true catch ME - warning(ME.identifier,'Problem retrieving TORAY data. \nError message: %s',ME.message); + warning('Problem retrieving TORAY data. \nError message: %s',ME.message); + getReport(ME) % without ; to get output % try to identify cause of the error if ~check_nodes_filled(shot,'toray') if ~any(ec_inputs.launchers_active.data,1) @@ -3308,17 +3309,20 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - case {'sxr', 'mpx'} + case {'sxr', 'mpx', 'radcam'} - if strcmp(data_request_eff,'mpx') - data_request_eff = 'mpx'; % mpx chosen through parameter 'source' within 'sxr' - gdat_data.data_request = data_request_eff; - gdat_data.gdat_params.source = 'mpx'; + if any(contains(data_request_eff,{'mpx','radcam'})) + % effective source chosen through parameter 'source' within 'sxr' + gdat_data.gdat_params.source = data_request_eff; end % sxr from dmpx by default or xtomo if 'camera','xtomo' is provided if ~isfield(gdat_data.gdat_params,'source') || isempty(gdat_data.gdat_params.source) - gdat_data.gdat_params.source = 'mpx'; - elseif ~strcmp(lower(gdat_data.gdat_params.source),'xtomo') && ~strcmp(lower(gdat_data.gdat_params.source),'mpx') + if shot < 70144 + gdat_data.gdat_params.source = 'mpx'; + else + gdat_data.gdat_params.source = 'radcam'; + end + elseif ~any(contains(lower(gdat_data.gdat_params.source),{'xtomo','mpx','radcam'})) if gdat_data.gdat_params.nverbose>=1 warning(['source = ' gdat_data.gdat_params.source ' not expected with data_request= ' data_request_eff]) end @@ -3339,10 +3343,125 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') num2str(time_interval(1)) ',' num2str(time_interval(2)) ']' char(10)]) end end + % at this stage 2 option for freq, raw data (fast, default), 10kHz or similar (slow) + freq_opt = 1; if ~isfield(gdat_data.gdat_params,'freq') - gdat_data.gdat_params.freq = 'slow'; + gdat_data.gdat_params.freq = 'fast'; + end + if strcmp(gdat_data.gdat_params.freq,'slow'); freq_opt = 0; end + % fit_tension for smoothing on slow timescale (radcam for example) + if ~isfield(gdat_data.gdat_params,'fit_tension') || isempty(gdat_data.gdat_params.fit_tension) + gdat_data.gdat_params.fit_tension = -1e2; end switch lower(gdat_data.gdat_params.source) + case {'radcam'} + gdat_data.gdat_params.source = 'radcam'; + gdat_data.camera_list = {'top', 'upper','equatorial','bottom'}; + gdat_data.channel_list = {[1:20],[21:40],[41:80], [81:100]}; + if ~isfield(gdat_data.gdat_params,'camera') || isempty(gdat_data.gdat_params.camera) + gdat_data.gdat_params.camera = {'equatorial'}; % default equatorial + disp(['loads all radcam cameras, each data also in subfield ' gdat_data.gdat_params.camera]) + else + if ischar(gdat_data.gdat_params.camera) || (isstring(gdat_data.gdat_params.camera) && numel(gdat_data.gdat_params.camera)==1) + gdat_data.gdat_params.camera = {char(gdat_data.gdat_params.camera)}; + end + if isnumeric(gdat_data.gdat_params.camera) && (min(gdat_data.gdat_params.camera)<5 && max(gdat_data.gdat_params.camera)>0) + ij = gdat_data.gdat_params.camera([gdat_data.gdat_params.camera>0 & gdat_data.gdat_params.camera<5]); + gdat_data.gdat_params.camera = gdat_data.camera_list(ij); + elseif any(startsWith(gdat_data.gdat_params.camera,gdat_data.camera_list).*endsWith(gdat_data.gdat_params.camera,gdat_data.camera_list)) + ij = startsWith(gdat_data.gdat_params.camera,gdat_data.camera_list).*endsWith(gdat_data.gdat_params.camera,gdat_data.camera_list); + gdat_data.gdat_params.camera = lower(gdat_data.gdat_params.camera(ij>0)); + if any(ij==0) + warning(['camera not defined: ' gdat_data.gdat_params.camera(ij==0)]); + disp(['list of cameras: ' gdat_data.camera_list]) + end + else + error(['camera: ' gdat_data.gdat_params.camera ' not in list: ' gdat_data.camera_list]) + end + end + if ~isfield(gdat_data.gdat_params,'channel') || isempty(gdat_data.gdat_params.channel) + for i=1:numel(gdat_data.gdat_params.camera) + gdat_data.gdat_params.(gdat_data.gdat_params.camera{i}).channel = ... + gdat_data.channel_list{[contains(gdat_data.camera_list,gdat_data.gdat_params.camera{i})]}; + gdat_data.gdat_params.channel{i} = gdat_data.gdat_params.(gdat_data.gdat_params.camera{i}).channel; + end + else + if isnumeric(gdat_data.gdat_params.channel) + gdat_data.gdat_params.channel = {gdat_data.gdat_params.channel}; + end + if numel(gdat_data.gdat_params.camera) ~= numel(gdat_data.gdat_params.channel) + gdat_data.gdat_params + error('expects same number of camera as number of channel group in each cell list') + end + all_channels = []; + for i=1:numel(gdat_data.gdat_params.camera) + all_channels(end+1:end+numel(gdat_data.gdat_params.channel{i})) = gdat_data.gdat_params.channel{i}; + end + % check camera and channel chosen are consistent within camera interval, just redistribute + icount = 0; + for i=1:numel(gdat_data.camera_list) + ij = intersect(gdat_data.channel_list{i},all_channels); + if ~isempty(ij) + icount = icount + 1; + camera{icount} = gdat_data.camera_list{i}; + channel{icount} = ij; + end + end + if ~isequal(sort(camera),sort(gdat_data.gdat_params.camera)) + disp('***************************************************************************') + warning(sprintf('channel nbs and camera did not match, camera chosen adapted: %s %s %s %s',camera{:})); + disp('***************************************************************************') + gdat_data.gdat_params.camera = camera; + end + if ~isequal(sort(cell2mat(channel)),sort(cell2mat(gdat_data.gdat_params.channel))) || ... + numel(gdat_data.gdat_params.channel) ~= numel(channel) + warning(sprintf('channel nbs and channel did not match, channel chosen adapted')); + gdat_data.gdat_params.channel = channel; + end + for i=1:numel(gdat_data.gdat_params.camera) + gdat_data.gdat_params.(gdat_data.gdat_params.camera{i}).channel = gdat_data.gdat_params.channel{i}; + end + end + gdat_data.x = []; + for i=1:numel(gdat_data.gdat_params.camera) + gdat_data.(gdat_data.gdat_params.camera{i}).x = gdat_data.gdat_params.(gdat_data.gdat_params.camera{i}).channel; + gdat_data.x(end+1:end+numel(gdat_data.(gdat_data.gdat_params.camera{i}).x)) = gdat_data.(gdat_data.gdat_params.camera{i}).x; + end + sxr = rc_load_diodes(shot,'diag_name',"sxr",'channels',gdat_data.x); % since all cameras with different channel number + if freq_opt == 1 + gdat_data.data = sxr.data'; + gdat_data.t = sxr.time; + else + gdat_data.t = linspace(sxr.time(1),sxr.time(end),round((sxr.time(end)-sxr.time(1))/1e-4)); + 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); + end + end + gdat_data.r_x = sxr.geometry.xchord(gdat_data.x,:); + gdat_data.z_x = sxr.geometry.ychord(gdat_data.x,:); + gdat_data.r_at_z0 = gdat_data.r_x(:,1) + ... + diff(gdat_data.r_x(:,:)')' .* (0-gdat_data.z_x(:,1))./(gdat_data.z_x(:,2)-gdat_data.z_x(:,1)); + gdat_data.z_at_r09 = gdat_data.z_x(:,1) + ... + diff(gdat_data.z_x(:,:)')' .* (0.9-gdat_data.r_x(:,1))./(gdat_data.r_x(:,2)-gdat_data.r_x(:,1)); + gdat_data.good_channels = sxr.good_channels; + gdat_data.data_fullpath = ['using rc_load_diodes(shot,''diag_name'',"sxr",...) with params in gdat_data.gdat_params']; + gdat_data.units = 'au'; + gdat_data.dim = {gdat_data.x, gdat_data.t}; + gdat_data.dimunits = {'channel', 's'}; + gdat_data.label = strtrim(sprintf('radcam %s %s %s %s %s',gdat_data.gdat_params.camera{:})); + for i=1:numel(gdat_data.gdat_params.camera) + ij = iround_os(sxr.channels,gdat_data.(gdat_data.gdat_params.camera{i}).x); + gdat_data.(gdat_data.gdat_params.camera{i}).data = gdat_data.data(:,ij)'; + gdat_data.(gdat_data.gdat_params.camera{i}).t = gdat_data.t; + gdat_data.(gdat_data.gdat_params.camera{i}).r_x = sxr.geometry.xchord(gdat_data.(gdat_data.gdat_params.camera{i}).x,:); + gdat_data.(gdat_data.gdat_params.camera{i}).z_x = sxr.geometry.ychord(gdat_data.(gdat_data.gdat_params.camera{i}).x,:); + gdat_data.(gdat_data.gdat_params.camera{i}).r_at_z0 = gdat_data.r_at_z0(ij); + gdat_data.(gdat_data.gdat_params.camera{i}).z_at_r09 = gdat_data.z_at_r09(ij); + gdat_data.(gdat_data.gdat_params.camera{i}).good_channels = intersect(gdat_data.(gdat_data.gdat_params.camera{i}).x,sxr.good_channels); + gdat_data.(gdat_data.gdat_params.camera{i}).label = sprintf('radcam %s nb chords: %d', ... + gdat_data.gdat_params.camera{i},numel(gdat_data.(gdat_data.gdat_params.camera{i}).x)); + end + case {'mpx', 'dmpx'} gdat_data.gdat_params.source = 'mpx'; if ~isfield(gdat_data.gdat_params,'camera') || isempty(gdat_data.gdat_params.camera) @@ -3356,8 +3475,6 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end return end - freq_opt = 0; - if strcmp(gdat_data.gdat_params.freq,'fast'); freq_opt = 1; end t_int = [0 10]; % starts from 0 otherwise mpxdata gives data from t<0 if ~isempty(time_interval); t_int = time_interval; end gdat_data.top.data = []; @@ -3474,7 +3591,6 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'transp'} % read transp netcdf output file provided in source parameter and generate substructure with all variables diff --git a/matlab/TCV/tcv_help_parameters.m b/matlab/TCV/tcv_help_parameters.m index 2c6c74c0b91bc015c0558a43e33af1c0f98ec3c0..15de8984169996ffdd2c5f1ea0e1b99a310aaa33 100644 --- a/matlab/TCV/tcv_help_parameters.m +++ b/matlab/TCV/tcv_help_parameters.m @@ -29,7 +29,8 @@ help_struct_all.cxrs_time_interval = ['cxrs: (time_interval can have several nbs ' as well']; help_struct_all.fit_tension = ['smoothing value used in interpos fitting routine, -30 means ''30 times default value'', thus -1 often a' ... ' good value' char(10) ... - 'cxrs: if numeric, default for all cases, if structure, default for non given fields']; + 'cxrs: if numeric, default for all cases, if structure, default for non given fields' char(10) ... + 'radcam: tension for interpos smoothing of data to have lower time samples']; help_struct_all.time = 'eqdsk: time(s) value(s) requested, by default time=1.0s (see time_out for other requests)'; help_struct_all.time_out = ['requested time for output: data points within interval if time_out=[t1 t2], otherwise assumes series of points, uses linear interpolation in that case (default [-Inf Inf])'... char(10) 'for sxr, mpx: only time interval provided in time_out is relevant']; @@ -56,17 +57,19 @@ help_struct_all.error_bar = sprintf('%s\n','for ids: choice of nodes fill in and '''delta'' (default): only upper fill in with the abs(value) to add or subtract to data to get upper and lower values (symmetric)', ... '''delta_with_lower'': same as delta but fill in lower node as well (with delta as well, same as upper)', ... '''added'': add the delta values (old cpo style), so upper=data+error_bar and lower=data+error_bar'); -help_struct_all.camera = ['sxr: for MPX: ''central'', ''top'' (default), ''bottom'' or ''both'' ; ' ... - ' for XTOMO: ''central'' (a central chord only), defaults if empty, [1 3 5] if only camera 1, 3 and 5 are desired']; -help_struct_all.freq = '''slow'', default, lower sampling; ''fast'' full samples for both mpx and xtomo'; +help_struct_all.camera = sprintf('%s\n%s\n%s', ... + 'sxr: for radcam: 1 to 4 or ''top'' (default), ''upper'', ''equatorial'', ''bottom'' array or cell array ok as well;', ... + ' for MPX: ''central'', ''top'' (default), ''bottom'' or ''both'' ;', ... + ' for XTOMO: ''central'' (a central chord only), defaults if empty, [1 3 5] if only camera 1, 3 and 5 are desired'); +help_struct_all.channel = sprintf('%s\n%s\n%s', ... + 'radcam: chord to choose within camera interval, or simply chords, then it is re-distributed to correct camera'); +help_struct_all.freq = '''slow'', default, lower sampling (for radcam smoothing on dt=0.1ms); ''fast'' full samples for radcam, mpx and xtomo'; help_struct_all.max_adcs = 'rtc: source=''adcs'' maximum nb of adc channels loaded for each board in each active node'; help_struct_all.nfft = '512 (default) changes time resolution in spectrogram in gdat_plot for ''mhd'' request'; help_struct_all.map_eqdsk_psirz = 'eqdsk: if time array provided, maps all psi(R,Z,t) on same R,Zmesh in .data (1) or not (0, default)'; help_struct_all.write = 'eqdsk: write eqdsk while loading data (1, default) or not (0)'; %help_struct_all. = ''; - - if ~exist('parameter_list') || isempty(parameter_list) help_struct = help_struct_all; return diff --git a/matlab/TCV/tcv_requests_mapping.m b/matlab/TCV/tcv_requests_mapping.m index ad1bc170dab3bea172e5cffe6628196f901c8e63..04dcc1f5c8e483714b1882bb15b8e965bb07ed20 100644 --- a/matlab/TCV/tcv_requests_mapping.m +++ b/matlab/TCV/tcv_requests_mapping.m @@ -458,7 +458,7 @@ switch lower(data_request) mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=''tcv_eq("surf","LIUQE.M")'';' ... 'gdat_tmp=gdat_tcv(shot,params_eff); gdat_tmp.dim = {gdat_tmp.t}; gdat_tmp.x=[]; gdat_tmp.data= gdat_tmp.data(end,:);' ... 'gdat_tmp.dimunits{1}=''s'';gdat_tmp.help=''toroidal surface of LCFS'';']; - case 'sxr' + case {'sxr', 'mpx', 'radcam'} mapping.timedim = 1; mapping.gdat_timedim = 2; mapping.method = 'switchcase'; @@ -583,10 +583,6 @@ switch lower(data_request) % $$$ mapping.method = 'tdiliuqe'; % $$$ % mapping.expression = '\results::thomson:psiscatvol:foo'; % $$$ mapping.expression = '\results::thomson:psiscatvol'; - case 'mpx' - mapping.timedim = 1; - mapping.gdat_timedim = 2; - mapping.method = 'switchcase'; case {'profnerho','profterho'} mapping.timedim = 1; mapping.label = data_request; diff --git a/matlab/TCV_IMAS/ids2database.m b/matlab/TCV_IMAS/ids2database.m index 40f83746b8524a2b3f38cf770fcba6147ae7ace2..eb2c2ed7f0275d6700c482f8c6f3a1a4727d2fae 100644 --- a/matlab/TCV_IMAS/ids2database.m +++ b/matlab/TCV_IMAS/ids2database.m @@ -1,4 +1,4 @@ -function [ids_put_status] = ids2database(shot,run,occurence,ids2put,tree_user,tree_tokamak,tree_majorversion,varargin); +function [ids_put_status] = ids2database(shot,run,occurence,ids2put,tree_user,tree_tokamak,tree_majorversion,imas_backend,varargin); % % [ids_put_status] = ids2database(shot,run,occurence,ids2put,varargin); % @@ -7,6 +7,7 @@ function [ids_put_status] = ids2database(shot,run,occurence,ids2put,tree_user,tr % tree_name: getenv('USER') by default, can be 'public' % tree_tokamak: 'tcv' by default % tree_majorversion: '3' by default +% imas_backend: "MDSplus" or "HDF5" % % varargin{1}: tbd % @@ -16,6 +17,7 @@ ids_put_status = 0; tree_user_default = getenv('USER'); tree_tokamak_default = 'tcv'; tree_majorversion_default = '3'; +imas_backend_default = 'MDSplus'; % initialize input parser p = inputParser; @@ -28,6 +30,7 @@ p.addOptional('ids2put', struct([]), @(x) (isstruct(x))); p.addOptional('tree_user', tree_user_default, @(x) (isempty(x) || ischar(x))); p.addOptional('tree_tokamak', tree_tokamak_default, @(x) (isempty(x) || ischar(x))); p.addOptional('tree_majorversion', tree_majorversion_default, @(x) (ischar(x))); +p.addOptional('imas_backend', imas_backend_default, @(x) (isempty(x) || ischar(x))); p.parse; defaults_ids2database = p.Results; % to keep track of defaults @@ -53,8 +56,11 @@ elseif nargin==6 elseif nargin==7 p.parse(shot,run,occurence,ids2put,tree_user,tree_tokamak,tree_majorversion); params = p.Results; -elseif nargin>=8 - p.parse(shot,run,occurence,ids2put,tree_user,tree_tokamak,tree_majorversion,varargin{:}); +elseif nargin==8 + p.parse(shot,run,occurence,ids2put,tree_user,tree_tokamak,tree_majorversion,imas_backend); + params = p.Results; +elseif nargin>=9 + p.parse(shot,run,occurence,ids2put,tree_user,tree_tokamak,tree_majorversion,imas_backend,varargin{:}); params = p.Results; else p.parse; @@ -100,6 +106,19 @@ if isempty(ids_names_ok) return end +if ~ismember(params_ids2database.imas_backend, {'MDSplus', 'HDF5'}) + warning(['Unknown imas_backend: ', imas_backend, ', selecting default: ',imas_backend_default]); + params_ids2database.imas_backend = imas_backend_default; +end + +% Get IMAS backend ID +switch params_ids2database.imas_backend + case "HDF5" + backendid=13; + case "MDSplus" + backendid=12; +end + try %% Initialize the three shot_is_new = 1; % seems only create is ok even if does already exist @@ -109,10 +128,9 @@ try shot_is_new = 0; end if shot_is_new - idx = imas_create_env('ids',shot,run,0,0,params_ids2database.tree_user,params_ids2database.tree_tokamak, ... - params_ids2database.tree_majorversion); % + idx = imas_create_env_backend(shot, run, params_ids2database.tree_user,params_ids2database.tree_tokamak, params_ids2database.tree_majorversion, backendid) else - idx = imas_open_env('ids',shot,run,params_ids2database.tree_user,params_ids2database.tree_tokamak,params_ids2database.tree_majorversion); % + idx = imas_open_env_backend(shot,run,params_ids2database.tree_user,params_ids2database.tree_tokamak,params_ids2database.tree_majorversion,backendid); % end %% Put the field diff --git a/matlab/TCV_IMAS/tcv2ids2database.m b/matlab/TCV_IMAS/tcv2ids2database.m index 9166d42d3cb3b839076f7e15aa0bd33d158735a2..664175a4313b51c1194f1b54980d78155a6777d9 100644 --- a/matlab/TCV_IMAS/tcv2ids2database.m +++ b/matlab/TCV_IMAS/tcv2ids2database.m @@ -10,6 +10,7 @@ function [ids_from_tcv,varargout] = tcv2ids2database(shot,run_out,varargin); % varargin: 'occurence': occurence value % varargin: 'ids_names': cell, ids to load, by default all defined so far (if empty or empty string or not given) % see tcv_available_ids for the list of IDSs available for TCV +% varargin: 'imas_backend': "MDSplus" or "HDF5" % varargin: 'error_bar': type (string) % 'delta' or empty (default): meaning difference in upper is set (standard error_bar % 'added': errorbar is added: upper=data+delta and lower=data-delta @@ -27,6 +28,7 @@ function [ids_from_tcv,varargout] = tcv2ids2database(shot,run_out,varargin); % example: % ids_from_tcv = tcv2ids2database(62745,9999,'ids_names',{'pf_active'},'error_bar','added'); % to test only one ids % ids_from_tcv = tcv2ids2database(62745,9999,'error_bar','added'); % to get all default ids's and old errorbar type +% ids_from_tcv = tcv2ids2database(62745,9999,'ids_names',{'summary'},'imas_backend','HDF5'); % Save data in imas HDF5 backend instead of MDSplus % ids_from_tcv = []; @@ -50,6 +52,7 @@ p.addOptional('run_out', [], @(x) (isnumeric(x) && isscalar(x) && (x == round(x) p.addOptional('occurence', 0, @(x) isempty(x) || (isnumeric(x) && isscalar(x) && (x == round(x)))); % integer ids_names = tcv_available_ids; p.addOptional('ids_names', ids_names, @(x) isempty(x) || iscell(x)); % char or cell array +p.addOptional('imas_backend', 'MDSplus', @(x) isempty(x) || ischar(x)); p.addOptional('error_bar', 'delta', @(x) isempty(x) || ischar(x) ); % char or cell array p.addOptional('tree_user', getenv('USER'), @(x) isempty(x) || ischar(x) ); % char p.addOptional('tree_tokamak', 'tcv', @(x) isempty(x) || ischar(x) ); % char @@ -101,8 +104,9 @@ for i=1:length(params.ids_names) end params.ids_names = ids_names_ok; params_tcv2ids2database = params; -params_not_in_tcv2ids = {'run_out','occurence','tree_user','tree_tokamak','tree_majorversion'}; +params_not_in_tcv2ids = {'run_out','occurence','tree_user','tree_tokamak','tree_majorversion','imas_backend'}; params_tcv2ids = rmfield(params_tcv2ids2database,params_not_in_tcv2ids); + [ids_from_tcv,idsok] = tcv2ids(shot,params_tcv2ids); ids_from_tcv.params_tcv2ids2database = params_tcv2ids2database; @@ -128,7 +132,8 @@ end %% [ids_put_status] = ids2database(shot,run_out,ids_from_tcv.params_tcv2ids2database.occurence,ids_from_tcv, ... - params_tcv2ids2database.tree_user,params_tcv2ids2database.tree_tokamak,params_tcv2ids2database.tree_majorversion); + params_tcv2ids2database.tree_user,params_tcv2ids2database.tree_tokamak,params_tcv2ids2database.tree_majorversion, ... + params_tcv2ids2database.imas_backend); ids_from_tcv.ids_put_status = ids_put_status; diff --git a/matlab/subcall_all2str.m b/matlab/subcall_all2str.m index 6e5d1ee125d25ccaad650eb1ba91d844a6c8ebd4..8966d184da44bc48e0c6973f93e9f0c7e8742ab0 100644 --- a/matlab/subcall_all2str.m +++ b/matlab/subcall_all2str.m @@ -56,11 +56,7 @@ for i_in=1:length(varargin) elseif ischar(var_to_treat) subcall = [subcall ',''' var_to_treat '''']; elseif iscell(var_to_treat) - subcall = [subcall ',{''' var_to_treat{1} '''']; - for i=2:length(var_to_treat) - subcall = [subcall ',''' var_to_treat{i} '''']; - end - subcall = [subcall '}']; + subcall = [subcall ',' cell2str(var_to_treat,3) '']; else warning('in subcall_all2str: case not foreseen'); end diff --git a/matlab/tests/test_requestnames.m b/matlab/tests/test_requestnames.m index 63595919b38cbbbedf2ad19c8636348badc1df83..557144ccdb55fdc352bb83cf17315892f15429ad 100644 --- a/matlab/tests/test_requestnames.m +++ b/matlab/tests/test_requestnames.m @@ -1,48 +1,63 @@ classdef (SharedTestFixtures={... check_mds,check_gdatpaths}) ... test_requestnames < matlab.unittest.TestCase - + properties (Abstract) Machine; end - + properties(TestParameter,Abstract) % parameters that will vary during tests shot; requests_fast; % placeholders requests_slow; end - + methods(Static) function test_gdat_call(testCase,shot,request) % actual function to test gdat call testCase.assertTrue(isnumeric(str2double(shot))); testCase.assertTrue(ischar(request)); - + % gdat call gdat_call = sprintf(['gdat_' lower(testCase.Machine) '(%s,''%s'')'],shot,request); do_gdat_call = 1; - + switch request case 'eqdsk' % avoid writing files in /tmp, may not be allowed gdat_call = sprintf(['gdat_%s(%s,''%s'',''write'',0)'],lower(testCase.Machine),shot,request); + case 'radcam' + % need a newer shot for tcv radcam + shot = 81102; + gdat_call = sprintf(['gdat_' lower(testCase.Machine) '(%s,''%s'')'],shot,request); end - + % logging fprintf('Testing gdat call: %s\n',gdat_call); - + if do_gdat_call gdat_out = eval(gdat_call); %#ok<NASGU> else gdat_out = struct([]); end - + % in some future: check for warnings %gdat_out = verifyWarningFree(testCase,eval(gdat_call),... % 'Warning issued from gdat call:\n %s\n',gdat_call); - + % (add optional sanity checks of gdat_out here) + gdat_out + switch request + case {'ece', 'expcode', 'ids', 'ni', 'ti', 'transp'} + % tests not yet fully implemented and empty + case 'rtc' + % in this case .data is empty, all in .scd_mems + testCase.assertTrue(isfield(gdat_out,'scd_mems') && isstruct(gdat_out.scd_mems)); + % testCase.assertTrue(isstruct(gdat_out.scd_mems)); + otherwise + testCase.assertTrue(isnumeric(gdat_out.data) & numel(gdat_out.data)>0); + end end end -end \ No newline at end of file +end diff --git a/matlab/tests/test_requestnames_tcv.m b/matlab/tests/test_requestnames_tcv.m index f40ecbfa9348473a86ef5552e37e9ad0340510a7..6941e96ddac1f9ae3cc07d32ee0dc76e58b0c5d5 100644 --- a/matlab/tests/test_requestnames_tcv.m +++ b/matlab/tests/test_requestnames_tcv.m @@ -11,17 +11,17 @@ classdef (TestTags={'tcv'})test_requestnames_tcv < test_requestnames requests_fast = get_all_gdat_requests('TCV','fast'); requests_slow = get_all_gdat_requests('TCV','slow'); end - + methods(Test,TestTags = {'fast'}) function test_gdat_call_fast(testCase,shot,requests_fast) testCase.test_gdat_call(testCase,shot,requests_fast); end end - + methods(Test,TestTags = {'slow'}) function test_gdat_call_slow(testCase,shot,requests_slow) testCase.test_gdat_call(testCase,shot,requests_slow); end end - + end