From f19ac3277ddcca73d8092ad593d3371d7bd53a37 Mon Sep 17 00:00:00 2001 From: Olivier Sauter <olivier.sauter@epfl.ch> Date: Tue, 18 Mar 2025 23:31:04 +0100 Subject: [PATCH 1/7] add status_mds and help more systematically --- matlab/TCV/gdat_tcv.m | 171 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 138 insertions(+), 33 deletions(-) diff --git a/matlab/TCV/gdat_tcv.m b/matlab/TCV/gdat_tcv.m index 8acfc6f3..93226dcb 100644 --- a/matlab/TCV/gdat_tcv.m +++ b/matlab/TCV/gdat_tcv.m @@ -117,6 +117,8 @@ gdat_data.shot = []; gdat_data.gdat_request = []; gdat_data.gdat_params = gdat_params; gdat_data.data_fullpath = []; +gdat_data.help = ''; +gdat_data.status_mds = 2; % Treat inputs: @@ -505,10 +507,13 @@ if strcmp(mapping_for_tcv.method(1:3),'tdi') strdata=sprintf('%s',abc{:}); eval(['aatmp.data = bbtmp.data(' strdata num2str(gdat_data.gdat_params.trialindx+1) ');']); aatmp.help = [bbtmp.help ' :trial(...,trialindx=' num2str(gdat_data.gdat_params.trialindx) ')']; + keyboard end end end - if isempty(aatmp.data) || (isempty(aatmp.dim) && ischar(aatmp.data) && ~isempty(strfind(lower(aatmp.data),'no data')) ) % || ischar(aatmp.data) (to add?) + gdat_data.help = aatmp.help; + gdat_data.status_mds = aatmp.status; + if mod(gdat_data.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' eval_expr ' for data_request= ' data_request_eff]); end if (gdat_params.nverbose>=3); disp('check .gdat_request list'); end return @@ -592,7 +597,6 @@ if strcmp(mapping_for_tcv.method(1:3),'tdi') else gdat_data.label=[mapping_for_tcv.expression]; end - if isfield(mapping_for_tcv,'help') && ~isempty(mapping_for_tcv.help) gdat_data.help = mapping_for_tcv.help; else @@ -673,18 +677,18 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if liuqe_matlab==0 nodenameeff=['tcv_eq("r_max_psi","' psitbx_str '")']; rmaxpsi=tdi(nodenameeff); - ijnan = find(isnan(rmaxpsi.data)); - if isempty(rmaxpsi.data) || isempty(rmaxpsi.dim) || ischar(rmaxpsi.data) || ... - ( ~isempty(ijnan) && prod(size(ijnan))==prod(size(rmaxpsi.data)) ) + gdat_data.help = rmaxpsi.help; + gdat_data.status_mds = rmaxpsi.status; + if mod(gdat_data.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end return end nodenameeff2=['tcv_eq("r_min_psi","' psitbx_str '")']; rminpsi=tdi(nodenameeff2); - ijnan = find(isnan(rminpsi.data)); - if isempty(rminpsi.data) || isempty(rminpsi.dim) || ... - ( ~isempty(ijnan) && prod(size(ijnan))==prod(size(rminpsi.data)) ) + gdat_data.help = rminpsi.help; + gdat_data.status_mds = rminpsi.status; + if mod(gdat_data.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff2 ' for data_request= ' data_request_eff]); end if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end return @@ -743,6 +747,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') return end aatmp = tdi(nodenameeff); + gdat_data.help = aatmp.help; + gdat_data.status_mds = aatmp.status; if strcmp(data_request_eff(end-3:end),'_rho') aatmp2 = tdi(nodenameeff2); if strcmp(data_request_eff,'a_minor_rho') @@ -784,7 +790,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') nodenameeff=['tcv_eq("z_edge","' psitbx_str '")']; end zcontour=tdi(nodenameeff); - if isempty(zcontour.data) || isempty(zcontour.dim) % || ischar(zcontour.data) (to add?) + gdat_data.help = zcontour.help; + gdat_data.status_mds = zcontour.status; + if mod(gdat_data.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end return @@ -844,7 +852,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.data = tracetdi.data .* added_correction; end end - if isempty(tracetdi.data) || isempty(tracetdi.dim) % || ischar(tracetdi.data) (to add?) + gdat_data.help = tracetdi.help; + gdat_data.status_mds = tracetdi.status; + if mod(gdat_data.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end return end @@ -869,13 +879,13 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'bfields'} params_eff = gdat_data.gdat_params; - + try if params_eff.liuqe == 1 % load LIUQE data [L,LY] = mds2meq(gdat_data.shot,'LIUQE.M',[],'ifield',true); % flag to allow field computation LY = meqreprocess(L,LY); % compute fields etc, since not directly loaded from mds2meq - datapath = 'Outputs from [L,LY]=mds2meq(gdat_data.shot,''LIUQE.M'',[],''ifield'',true); LY = meqreprocess(L,LY);'; + datapath = 'Outputs from [L,LY]=mds2meq(gdat_data.shot,''LIUQE.M'',[],''ifield'',true); LY = meqreprocess(L,LY);'; Br = permute(LY.Brx,[2,1,3]); % permute for (Z,R)->(R,Z) Bz = permute(LY.Bzx,[2,1,3]); Btor = permute(LY.Btx,[2,1,3]); @@ -890,10 +900,10 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') Bz = B.z; Btor = B.phi; dim_in = {coord.R,coord.z,time}; - time_in = time; + time_in = time; x_in = {coord.R,coord.z}; end - + gdat_data.data_fullpath = datapath; % radial magnetic field @@ -925,7 +935,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.Btor.x = x_in; gdat_data.Btor.data_fullpath = datapath; gdat_data.Btor.label = 'Toroidal magnetic field map in (R,Z)'; - + % total magnetic field gdat_data.Btot.data = sqrt(gdat_data.Btor.data.^2 + gdat_data.Bz.data.^2 + gdat_data.Br.data.^2); gdat_data.Btot.units = 'T'; @@ -935,7 +945,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.Btot.x = x_in; gdat_data.Btot.data_fullpath = datapath; gdat_data.Btot.label = 'Total magnetic field map in (R,Z)'; - + gdat_data.data = gdat_data.Btot.data; gdat_data.units = 'T'; gdat_data.dim = dim_in; @@ -976,6 +986,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.dim = beta.dim; gdat_data.t = beta.dim{1}; gdat_data.data = beta.data; + gdat_data.help = beta.help; + gdat_data.status_mds = beta.status_mds; if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out) % should already have all data at times time_out since called gdat_tcv above end @@ -1086,7 +1098,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') inb_times = length(cxrs_profiles.Times); gdat_data.cxrs_params = cxrs_profiles.param; if isempty(cxrs_profiles.Times) || ~isfield(cxrs_profiles,'proffit') - if (gdat_params.nverbose>=1); warning(['problems loading data with CXRS_get_profiles for data_request= ' data_request_eff]); end + gdat_data.status_mds = 2; + gdat_data.help = ['problems loading data with CXRS_get_profiles for data_request= ' data_request_eff]; + if (gdat_params.nverbose>=1); warning(gdat_data.help); end for i=1:length(sub_nodes) sub_eff_out = sub_nodes_out{i}; gdat_data.(sub_eff_out).fit.data = []; @@ -1157,6 +1171,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end gdat_data.dimunits{1} = ''; gdat_data.dimunits{2} = 's'; + gdat_data.help = ''; + gdat_data.status_mds = 1; % add grids_1d to have rhotor, etc if cxrs_rho was asked for if strcmp(data_request_eff,'cxrs_rho') gdat_data = get_grids_1d(gdat_data,2,1,gdat_params.nverbose); @@ -1207,6 +1223,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') return; end end + gdat_data.help = ''; + gdat_data.status_mds = 2; time=1.; % default time if isfield(gdat_data.gdat_params,'time') && ~isempty(gdat_data.gdat_params.time) time = gdat_data.gdat_params.time; @@ -1364,6 +1382,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.dimunits = {'m','m','s'}; gdat_data.request_description = ['data=psi, x=(R,Z), eqdsk contains eqdsk structure with which ' ... 'plot_eqdsk, write_eqdsk, read_eqdsk can be used']; + gdat_data.status_mds = 1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'gas', 'gas_flux', 'gas_request', 'gas_feedforward','gas_valve', 'gas_fluxes'} @@ -1375,6 +1394,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end gasflux = gdat_tcv(gdat_data.shot,params_eff); gdat_data.gas_flux = gasflux; + gdat_data.help = gasflux.help; + gdat_data.status_mds = gasflux.status_mds; params_eff.data_request = '\hybrid::mat_m_signals:output_019'; gasrequest = gdat_tcv(gdat_data.shot,params_eff); gdat_data.gas_request_volt = gasrequest; @@ -1446,6 +1467,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end end case {'gas_fluxes'} + gdat_data.help = 'cell array'; + gdat_data.status_mds = 2; try if shot > 82186 for i=1:20 @@ -1491,6 +1514,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') elseif ~isfield(gdat_data.gdat_params,'time_out') gdat_data.gdat_params.time_out = []; end + gdat_data.status_mds = 1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'halphas'} @@ -1509,8 +1533,12 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.t = halphas.t; end gdat_data.data(channels(i),:) = halphas.data; + gdat_data.help = halphas.help; + gdat_data.status_mds = halphas.status_mds; catch - disp([params_eff.data_request ' not ok']); + gdat_data.help = [params_eff.data_request ' not ok']; + gdat_data.status_mds = 2; + disp(halphas.help); end end gdat_data.label = ['\base::pd:pd_' num2str(min(channels),'%.3d') ' to ' num2str(max(channels),'%.3d')]; @@ -1531,11 +1559,15 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') ids_empty_path = fullfile(fileparts(mfilename('fullpath')),'..','TCV_IMAS','ids_empty'); params_eff = gdat_data.gdat_params; + gdat_data.help = ''; + gdat_data.status_mds = 2; if isfield(params_eff,'source') && ~isempty(params_eff.source) ids_top_name = params_eff.source; else ids_top_name = []; - warning('gdat:EmptyIDSName','Need an ids name in ''source'' parameter\n check substructure gdat_params.sources_available for an ids list'); + gdat_data.help = ['gdat:EmptyIDSName','Need an ids name in ''source'' parameter\n check substructure ', ... + 'gdat_params.sources_available for an ids list']; + warning(gdat_data.help); addpath(ids_empty_path); assert(~~exist('ids_list_all','file'),'could not find ids_list_all.m in %s',ids_empty_path); gdat_data.gdat_params.sources_available = ids_list_all; % avoid adding ids_list.m which would override ids_list from IMAS @@ -1618,6 +1650,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.([ids_top_name '_description']) = getReport(ME_tcv_get_ids); rethrow(ME_tcv_get_ids) end + gdat_data.status_mds = 1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'ec_data', 'aux', 'h_cd', 'nbi_data', 'ic_data', 'lh_data','ohm_data', 'bs_data'} @@ -1638,6 +1671,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if ~isempty(gdat_data.gdat_params.trialindx) && gdat_data.gdat_params.trialindx < 0 gdat_data.gdat_params.trialindx = []; end + gdat_data.help = ''; + gdat_data.status_mds = 2; % specific parameters check and default settings if ~isfield(gdat_data.gdat_params,'source') || isempty(gdat_data.gdat_params.source) switch data_request_eff @@ -1911,10 +1946,12 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if filled_successfully if isempty(ec_data.cd_tot.data) || isempty(ec_data.cd_tot.t) || ischar(ec_data.cd_tot.data) if (gdat_params.nverbose>=1) + gdat_data.status_mds = 2; warning(['problems loading data for ' source_icd.ec ... ' for data_request= ' data_request_eff]); end else + gdat_data.status_mds = 1; % now default is icdtot, will depend on request and data_out param of some kind data_fullpath = ['from toray nodes using astra_tcv_EC_exp(shot), all results in .ec_data, subfield=' field_for_main_data ... 'in ec.data, .x, .t, .dim, .dimunits, .label, .units']; @@ -2229,6 +2266,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') aaHFSz0_sect11=tdi('\atlas::DT196_MHD_002:channel_038'); gdat_data.n1_HFS=aaHFSz0_sect3; gdat_data.n1_HFS.data = gdat_data.n1_HFS.data - aaHFSz0_sect11.data; + gdat_data.n1_HFS.help = aaHFSz0_sect3.help; + gdat_data.n1_HFS.status_mds = aaHFSz0_sect3.status; gdat_data.n2_HFS=aaHFSz0_sect3; gdat_data.n2_HFS.data = gdat_data.n2_HFS.data + aaHFSz0_sect11.data; gdat_data.data_fullpath=['\atlas::DT196_MHD_001:channel_083 -+ \atlas::DT196_MHD_001:channel_091 for n=1,2, LFS_sect3/11, z=0cm; _HFS' ... @@ -2288,6 +2327,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if shot>= 50926 gdat_data.label = {'n odd','n even'}; % can be used in legend(gdat_data.label) end + gdat_data.help = n1.help; + gdat_data.status_mds = n1.status; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -2503,8 +2544,10 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') trialindx = []; end tracetdi=tdi(nodenameeff); + gdat_data.help = tracetdi.help; + gdat_data.status_mds = tracetdi.status; if isempty(trialindx) - if ~isempty(tracetdi.data) && ~isempty(tracetdi.dim) && ~ischar(tracetdi.data) + if mod(gdat_data.status_mds,2) == 1 gdat_data.fit.data = tracetdi.data; else if gdat_params.nverbose>=1 @@ -2545,8 +2588,12 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.fit.help = '.x is rhopol coordinate'; tmp = tdi(def_rhotornorm); gdat_data.fit.rhotornorm = tmp.data; + gdat_data.fit.rhotornorm_help = tracetdi.help; + gdat_data.fit.rhotornorm_status_mds = tracetdi.status; tmp = tdi(def_rhovolnorm); gdat_data.fit.rhovolnorm = tmp.data; + gdat_data.fit.rhovolnorm_help = tmp.help; + gdat_data.fit.rhovolnorm_status_mds = tmp.status; % do te as well if nete asked for if strcmp(data_request_eff(1:4),'nete') for subfields={'data','x','t','units','help','rhotornorm','rhovolnorm','data_fullpath'} @@ -2567,6 +2614,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end if ~isempty(trialindx); nodenameeff=[nodenameeff ':trial']; end tracetdi=tdi(nodenameeff); + gdat_data.fit.te.help = tracetdi.help; + gdat_data.fit.te.status_mds = tracetdi.status; if isempty(trialindx) gdat_data.fit.te.data = tracetdi.data; else @@ -2634,6 +2683,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') case {'powers'} % note: same time array for all main, ec, ohm, nbi, ... % At this stage fill just ech, later add nbi + gdat_data.help = ''; + gdat_data.status_mds = 2; sources_avail = {'ohm','ec','nbi1','nbi2','dnbi','rad'}; % note should allow ech, nbh, ohmic in parameter sources % create empty structures for all, so in return one always have same substructres for i=1:length(sources_avail) @@ -2678,7 +2729,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') % thus should take it from conf if present mdsopen(shot); ptot_ohm = tdi('\results::conf:ptot_ohm'); - if ~isempty(ptot_ohm.data) && ~ischar(ptot_ohm.data) && ~isempty(ptot_ohm.dim) && any(~isnan(ptot_ohm.data)) + gdat_data.ohm.help = ptot_ohm.help; + gdat_data.ohm.status_mds = ptot_ohm.status; + if mod(gdat_data.ohm.status_mds,2) == 1 gdat_data.ohm.data = ptot_ohm.data; gdat_data.ohm.t = ptot_ohm.dim{1}; gdat_data.ohm.dim = ptot_ohm.dim; @@ -2720,7 +2773,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') % EC nodenameeff='\results::toray.input:p_gyro'; tracetdi=tdi(nodenameeff); - if isempty(tracetdi.data) || isempty(tracetdi.dim) || ischar(tracetdi.data) + gdat_data.ec.help = tracetdi.help; + gdat_data.ec.status_mds = tracetdi.status; + if mod(gdat_data.ec.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end else ij=[~isfinite(tracetdi.data)]; tracetdi.data(ij)=0.; @@ -2746,7 +2801,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') nodenameeff = '\results::NBH:POWR_TCV'; end nbh_data_tdi = tdi(nodenameeff); - if ~isempty(nbh_data_tdi.data) && ~ischar(nbh_data_tdi.data) && ~isempty(nbh_data_tdi.dim) + gdat_data.nbi1.help = tracetdi.help; + gdat_data.nbi1.status_mds = tracetdi.status; + if mod(gdat_data.nbi1.status_mds,2) == 1 nbi_neutral_power_tot = nbh_data_tdi.data.*1e6; % in W ij = nbi_neutral_power_tot<100; nbi_neutral_power_tot(ij) = 0.; @@ -2791,7 +2848,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') nodenameeff='\results::bolo_u:prad'; if shot< 71076, nodenameeff='\results::bolo:prad:total'; end tracetdi=tdi(nodenameeff); - if isempty(tracetdi.data) || isempty(tracetdi.dim) || ischar(tracetdi.data) + gdat_data.rad.help = tracetdi.help; + gdat_data.rad.status_mds = tracetdi.status; + if mod(gdat_data.rad.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end else gdat_data.rad.data = tracetdi.data*1e3; % at this stage bolo is in kW' @@ -2814,7 +2873,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') % NB2 nodenameeff = '\results::NB2:POWR_TCV'; nb2_data_tdi = tdi(nodenameeff); - if ~isempty(nb2_data_tdi.dim) && ~ischar(nb2_data_tdi.data) && ~isempty(nb2_data_tdi.dim) + gdat_data.nbi2.help = nb2_data_tdi.help; + gdat_data.nbi2.status_mds = nb2_data_tdi.status; + if mod(gdat_data.nbi2.status_mds,2) == 1 nbi_neutral_power_tot = nb2_data_tdi.data.*1e6; % in W ij = nbi_neutral_power_tot<100; nbi_neutral_power_tot(ij) = 0.; @@ -2854,7 +2915,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') % NB2 nodenameeff = '\RESULTS::DNBI:POWR_TCV'; nb2_data_tdi = tdi(nodenameeff); - if ~isempty(nb2_data_tdi.data) && ~ischar(nb2_data_tdi.data) && ~isempty(nb2_data_tdi.dim) + gdat_data.dnbi.help = nb2_data_tdi.help; + gdat_data.dnbi.status_mds = nb2_data_tdi.status; + if mod(gdat_data.dnbi.status_mds,2) == 1 nbi_neutral_power_tot = nb2_data_tdi.data.*1e6; % in W ij = nbi_neutral_power_tot<100; nbi_neutral_power_tot(ij) = 0.; @@ -2900,6 +2963,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') elseif ~isfield(gdat_data.gdat_params,'time_out') gdat_data.gdat_params.time_out = []; end + gdat_data.status_mds = 1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'q_rho'} @@ -2913,6 +2977,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') nodenameeff=[begstr 'q_psi' substr_liuqe]; end tracetdi=tdi(nodenameeff); + gdat_data.help = tracetdi.help; + gdat_data.status_mds = tracetdi.status; if liuqe_matlab==1 && liuqe_version_eff==-1 % may have problems with dim{1} being indices instead of rhopol if max(tracetdi.dim{1}) > 2 @@ -2923,7 +2989,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end end end - if isempty(tracetdi.data) || isempty(tracetdi.dim) % || ischar(tracetdi.data) (to add?) + if mod(gdat_data.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end return @@ -2964,7 +3030,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') return end tracetdi=tdi(nodenameeff); - if isempty(tracetdi.data) || isempty(tracetdi.dim) % || ischar(tracetdi.data) (to add?) + gdat_data.help = tracetdi.help; + gdat_data.status_mds = tracetdi.status; + if mod(gdat_data.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end return @@ -3004,8 +3072,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') else phi_tor.data = []; phi_tor.units = 'Wb'; + phi_tor.status = 2; end - if ~any(any(isfinite(phi_tor.data))) || ischar(phi_tor.data) + if mod(phi_tor.status,2) == 0 % no phi_tor, compute it from q profile q_rho = tdi(['tcv_eq("' liuqefortran2liuqematlab('q',1,liuqe_matlab) '","' psitbx_str '")']); if liuqe_matlab==0 @@ -3013,6 +3082,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end phi_tor.dim = q_rho.dim; phi_tor.dimunits = q_rho.dimunits; + phi_tor.help = q_rho.help; + phi_tor.status = q_rho.status; params_eff.data_request='psi_axis'; % psi_edge=0 with LIUQE psi_axis=gdat_tcv(shot,params_eff); if isnumeric(q_rho.data) @@ -3086,6 +3157,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.dim = phi_tor.dim; gdat_data.dimunits = phi_tor.dimunits; gdat_data.units = phi_tor.units; + gdat_data.help = phi_tor.help; + gdat_data.status_mds = phi_tor.status; if (length(gdat_data.dim)>=mapping_for_tcv.gdat_timedim); gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim}; end if (length(gdat_data.dim)>0); gdat_data.x = gdat_data.dim{1}; end if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out) @@ -3118,6 +3191,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.dimunits = tracetdi.dimunits; gdat_data.units = tracetdi.units; gdat_data.request_description = 'pprime=dp/dpsi'; + gdat_data.help = tracetdi.help; + gdat_data.status_mds = tracetdi.status; if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out) [gdat_data] = gdat2time_out(gdat_data,1); elseif ~isfield(gdat_data.gdat_params,'time_out') @@ -3145,6 +3220,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.dimunits = tracetdi.dimunits; gdat_data.units = tracetdi.units; gdat_data.request_description = 'pressure'; + gdat_data.help = tracetdi.help; + gdat_data.status_mds = tracetdi.status; if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out) [gdat_data] = gdat2time_out(gdat_data,1); elseif ~isfield(gdat_data.gdat_params,'time_out') @@ -3206,6 +3283,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.data_fullpath=nodenameeff; gdat_data.dimunits = tracetdi.dimunits; gdat_data.units = tracetdi.units; + gdat_data.help = tracetdi.help; + gdat_data.status_mds = tracetdi.status; if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out) [gdat_data] = gdat2time_out(gdat_data,1); elseif ~isfield(gdat_data.gdat_params,'time_out') @@ -3314,6 +3393,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') params_eff.data_request='b0'; b0=gdat_tcv([],params_eff); gdat_data.t = phi_tor.t; + gdat_data.help = phi_tor.help; + gdat_data.status_mds = phi_tor.status_mds; ij=find(isfinite(b0.data)); if length(gdat_data.t) > 0 gdat_data.b0 = interpos(b0.t(ij),b0.data(ij),gdat_data.t); @@ -3383,7 +3464,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end end end - if isempty(tracetdi.data) || isempty(tracetdi.dim) || ischar(tracetdi.data) + gdat_data.help = tracetdi.help; + gdat_data.status_mds = tracetdi.status; + if mod(gdat_data.status_mds,2) == 0 return end gdat_data.units = tracetdi.units; @@ -3447,6 +3530,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') % If the rtccode/tools not in paths use sauter's link % need: get_scd_mems.m % + gdat_data.help = ''; + gdat_data.status_mds = 2; aaa=which('get_scd_mems'); if isempty(aaa) error('no path for get_scd_mems') @@ -3460,16 +3545,18 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end end gdat_data.data_fullpath = sprintf('used %s with patterns specified in source gdat_params',aaa); + gdat_data.status_mds = 1; catch % to make sure close and disconnect even if error, since connects to scd end mdsclose; - mdsdisconnect; - + mdsdisconnect; % because connected to rtc/scd %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'sxr', 'mpx', 'radcam'} + gdat_data.help = ''; + gdat_data.status_mds = 2; if any(contains(data_request_eff,{'mpx','radcam'})) % effective source chosen through parameter 'source' within 'sxr' gdat_data.gdat_params.source = data_request_eff; @@ -3656,8 +3743,11 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') 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 + gdat_data.status_mds = 1; case {'mpx', 'dmpx'} + gdat_data.help = ''; + gdat_data.status_mds = 2; gdat_data.gdat_params.source = 'mpx'; if ~isfield(gdat_data.gdat_params,'camera') || isempty(gdat_data.gdat_params.camera) gdat_data.gdat_params.camera = 'top'; @@ -3719,8 +3809,11 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') char(10) gdat_data.data_fullpath]; gdat_data.x = gdat_data.dim{1}; end + gdat_data.status_mds = 1; case 'xtomo' + gdat_data.help = ''; + gdat_data.status_mds = 2; % so far allow string and array as 'camera' choices: % camera = [] (default, thus get XTOMOGetData defaults), 'central', [3 6] (camera numbers) camera_xtomo = []; @@ -3782,12 +3875,15 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if gdat_data.gdat_params.nverbose>=1 warning(['camera = ' gdat_data.gdat_params.camera ' not expected with data_request= ' data_request_eff]) end + gdat_data.status_mds = 1; return end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'transp'} + gdat_data.help = ''; + gdat_data.status_mds = 2; % read transp netcdf output file provided in source parameter and generate substructure with all variables if ~isfield(gdat_data.gdat_params,'source') || isempty(gdat_data.gdat_params.source) || ~exist(gdat_data.gdat_params.source,'file') warning([char(10) 'requires a netcdf file in ''source'' parameter' char(10)]) @@ -3815,6 +3911,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end gdat_data.data_fullpath = ['.transp structure obtained from cdf2mat(gdat_data.gdat_params.source)']; gdat_data.help='Can use transp_gui(gdat_data.transp) to browse and plot'; + gdat_data.status_mds = 1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'ttprime', 'ttprime_rho'} @@ -3839,6 +3936,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.dimunits = tracetdi.dimunits; gdat_data.units = tracetdi.units; gdat_data.request_description = 'ttprime=t*dt/dpsi'; + gdat_data.help = tracetdi.help; + gdat_data.status_mds = tracetdi.status; if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out) [gdat_data] = gdat2time_out(gdat_data,1); elseif ~isfield(gdat_data.gdat_params,'time_out') @@ -3902,6 +4001,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') elseif ~isfield(gdat_data.gdat_params,'time_out') gdat_data.gdat_params.time_out = []; end + gdat_data.help = tracetdi.help; + gdat_data.status_mds = tracetdi.status; otherwise if (gdat_params.nverbose>=1); warning(['switchcase= ' data_request_eff ' not known in gdat_tcv']); end @@ -4000,8 +4101,10 @@ end % try time=mdsdata('\results::thomson:times'); + gdat_data.status_mds = 1; catch gdat_data.error_bar = []; + gdat_data.status_mds = 2; if strcmp(data_request_eff(1:2),'ne') tracefirrat_data = []; gdat_data.firrat=tracefirrat_data; @@ -4047,7 +4150,9 @@ for is = 1:nsys nodenameeff = ['\results::thomson' edge_str ':' data_request_eff(1:2)]; tracetdi=tdi(nodenameeff); - if isempty(tracetdi.data) || ischar(tracetdi.data) || isempty(tracetdi.dim) + data_tmp(is).help = tracetdi.help; + data_tmp(is).status_mds = tracetdi.status; + if mod(data_tmp(is).status_mds,2) == 0 data_tmp(is).data = []; data_tmp(is).error_bar = []; data_tmp(is).data_fullpath = ''; -- GitLab From 99a0b58d1d54b3a0da92b13819d557189ff90baa Mon Sep 17 00:00:00 2001 From: Olivier Sauter <olivier.sauter@epfl.ch> Date: Tue, 18 Mar 2025 23:33:54 +0100 Subject: [PATCH 2/7] rm remaining keyboard --- matlab/TCV/gdat_tcv.m | 1 - 1 file changed, 1 deletion(-) diff --git a/matlab/TCV/gdat_tcv.m b/matlab/TCV/gdat_tcv.m index 93226dcb..a3d6a4bf 100644 --- a/matlab/TCV/gdat_tcv.m +++ b/matlab/TCV/gdat_tcv.m @@ -507,7 +507,6 @@ if strcmp(mapping_for_tcv.method(1:3),'tdi') strdata=sprintf('%s',abc{:}); eval(['aatmp.data = bbtmp.data(' strdata num2str(gdat_data.gdat_params.trialindx+1) ');']); aatmp.help = [bbtmp.help ' :trial(...,trialindx=' num2str(gdat_data.gdat_params.trialindx) ')']; - keyboard end end end -- GitLab From 3002122d3e900398dd935a6a54e96c6d90302647 Mon Sep 17 00:00:00 2001 From: Olivier Sauter <olivier.sauter@epfl.ch> Date: Wed, 19 Mar 2025 07:41:13 +0100 Subject: [PATCH 3/7] correct typo --- matlab/TCV/gdat_tcv.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/matlab/TCV/gdat_tcv.m b/matlab/TCV/gdat_tcv.m index a3d6a4bf..d254b260 100644 --- a/matlab/TCV/gdat_tcv.m +++ b/matlab/TCV/gdat_tcv.m @@ -2800,8 +2800,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') nodenameeff = '\results::NBH:POWR_TCV'; end nbh_data_tdi = tdi(nodenameeff); - gdat_data.nbi1.help = tracetdi.help; - gdat_data.nbi1.status_mds = tracetdi.status; + gdat_data.nbi1.help = nbh_data_tdi.help; + gdat_data.nbi1.status_mds = nbh_data_tdi.status; if mod(gdat_data.nbi1.status_mds,2) == 1 nbi_neutral_power_tot = nbh_data_tdi.data.*1e6; % in W ij = nbi_neutral_power_tot<100; -- GitLab From 2e035da42df19e4130522d0e52e9f76448f83b8c Mon Sep 17 00:00:00 2001 From: Olivier Sauter <olivier.sauter@epfl.ch> Date: Wed, 19 Mar 2025 10:36:45 +0100 Subject: [PATCH 4/7] do not rely on warning for test, since might be off use status_mds newly defined --- matlab/tests/test_tcv_get_ids.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/matlab/tests/test_tcv_get_ids.m b/matlab/tests/test_tcv_get_ids.m index 110f1dbe..e0f9cac1 100644 --- a/matlab/tests/test_tcv_get_ids.m +++ b/matlab/tests/test_tcv_get_ids.m @@ -12,7 +12,8 @@ classdef (TestTags={'tcv_imas'},SharedTestFixtures={... methods(Test) function test_get_ids_list(testCase,shot) - gg = testCase.assertWarning(@() gdat(shot,'ids'),'gdat:EmptyIDSName'); + gg = gdat(shot,'ids'); + testCase.assertTrue(mod(gg.status_mds,2)==0); testCase.assertTrue(iscell(gg.gdat_params.sources_available)); end -- GitLab From 453999094353a0ddd03c61f033950aeb93f574d6 Mon Sep 17 00:00:00 2001 From: Olivier Sauter <olivier.sauter@epfl.ch> Date: Sun, 30 Mar 2025 18:28:25 +0200 Subject: [PATCH 5/7] start adding gdat.status using error_status, output arg of gdat --- matlab/TCV/gdat_tcv.m | 298 +++++++++++++++++++++++++++----- matlab/tests/test_tcv_get_ids.m | 2 +- 2 files changed, 259 insertions(+), 41 deletions(-) diff --git a/matlab/TCV/gdat_tcv.m b/matlab/TCV/gdat_tcv.m index d254b260..e3767928 100644 --- a/matlab/TCV/gdat_tcv.m +++ b/matlab/TCV/gdat_tcv.m @@ -80,7 +80,7 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_tcv(shot,data_req % Prepare some variables, etc varargout{1}=cell(1,1); -error_status=1; +error_status=-1; % construct main default parameters structure % parameters and defaults related to a specific request should be defined in the relevant switch case section @@ -119,6 +119,7 @@ gdat_data.gdat_params = gdat_params; gdat_data.data_fullpath = []; gdat_data.help = ''; gdat_data.status_mds = 2; +gdat_data.status = error_status; % Treat inputs: @@ -181,6 +182,7 @@ if nargin>=1 else if gdat_params.nverbose>=1; warning('type of 1st argument unexpected, should be numeric or char'); end error_status=2; + gdat_data.status = error_status; return end if nargin==1 @@ -198,6 +200,7 @@ if nargin>=2 && ivarargin_first_char~=1 if ~isfield(data_request,'data_request') if gdat_params.nverbose>=1; warning('expects field data_request in input parameters structure'); end error_status=3; + gdat_data.status = error_status; return end data_request_eff = data_request.data_request; @@ -250,12 +253,14 @@ if (nargin>=ivarargin_first_char) else if gdat_params.nverbose>=1; warning(['input argument nb: ' num2str(i) ' is incorrect, expects a character string']); end error_status=401; + gdat_data.status = error_status; return end end else if gdat_params.nverbose>=1; warning('number of input arguments incorrect, cannot make pairs of parameters'); end error_status=402; + gdat_data.status = error_status; return end end @@ -285,6 +290,7 @@ end if ~isfield(gdat_params,'data_request') || isempty(gdat_params.data_request) % warning('input for ''data_request'' missing from input arguments') % might be correct, asking for list of requests error_status=5; + gdat_data.status = error_status; return end gdat_data.gdat_params = gdat_params; % This means that before here it is gdat_params which should be updated @@ -293,6 +299,7 @@ gdat_data.gdat_params = gdat_params; % This means that before here it is gdat_pa shot = gdat_data.shot; data_request_eff = gdat_data.gdat_params.data_request; error_status = 6; % at least reached this level +gdat_data.status = error_status; mapping_for_tcv = tcv_requests_mapping(data_request_eff,shot); gdat_data.label = mapping_for_tcv.label; @@ -442,6 +449,7 @@ if strcmp(mapping_for_tcv.method(1:3),'tdi') else % empty or wrong expression error_status=701; + gdat_data.status = error_status; return end else @@ -512,9 +520,13 @@ if strcmp(mapping_for_tcv.method(1:3),'tdi') end gdat_data.help = aatmp.help; gdat_data.status_mds = aatmp.status; + error_status = 0; + gdat_data.status = error_status; if mod(gdat_data.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' eval_expr ' for data_request= ' data_request_eff]); end if (gdat_params.nverbose>=3); disp('check .gdat_request list'); end + error_status = 7; + gdat_data.status = error_status; return end gdat_data.data = aatmp.data; @@ -614,6 +626,7 @@ elseif strcmp(mapping_for_tcv.method,'expression') if isempty(gdat_tmp) || (~isstruct(gdat_tmp) & ~isobject(gdat_tmp)) if (gdat_params.nverbose>=1); warning(['expression does not create a gdat_tmp structure: ' mapping_for_tcv.expression]); end error_status=801; + gdat_data.status = error_status; return end tmp_fieldnames = setdiff(fieldnames(gdat_tmp),{'gdat_request','label'}); % could/should also remove label in any case @@ -678,9 +691,13 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') rmaxpsi=tdi(nodenameeff); gdat_data.help = rmaxpsi.help; gdat_data.status_mds = rmaxpsi.status; + error_status = 0; + gdat_data.status = error_status; if mod(gdat_data.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end + error_status = 90; + gdat_data.status = error_status; return end nodenameeff2=['tcv_eq("r_min_psi","' psitbx_str '")']; @@ -690,6 +707,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if mod(gdat_data.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff2 ' for data_request= ' data_request_eff]); end if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end + error_status = 91; + gdat_data.status = error_status; return end ij=find(rmaxpsi.data<0.5 | rmaxpsi.data>1.2); % points outside TCV vessel @@ -710,6 +729,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.data_fullpath=[nodenameeff ' + ' nodenameeff2 ' /2']; else if (gdat_params.nverbose>=1); warning(['should not be in this case with data_request_eff = ' data_request_eff]); end + error_status = 92; + gdat_data.status = error_status; return end if strcmp(data_request_eff(end-3:end),'_rho') @@ -748,8 +769,18 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') aatmp = tdi(nodenameeff); gdat_data.help = aatmp.help; gdat_data.status_mds = aatmp.status; + error_status = 0; + gdat_data.status = error_status; + if mod(gdat_data.status_mds,2) == 0 + error_status = 101; + gdat_data.status = error_status; + end if strcmp(data_request_eff(end-3:end),'_rho') aatmp2 = tdi(nodenameeff2); + if mod(aatmp2.status_mds,2) == 0 + error_status = 102; + gdat_data.status = error_status; + end if strcmp(data_request_eff,'a_minor_rho') gdat_data.data = 0.5.*(aatmp.data-aatmp2.data); elseif strcmp(data_request_eff,'rgeom_rho') @@ -791,9 +822,13 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') zcontour=tdi(nodenameeff); gdat_data.help = zcontour.help; gdat_data.status_mds = zcontour.status; + error_status = 0; + gdat_data.status = error_status; if mod(gdat_data.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end + error_status = 111; + gdat_data.status = error_status; return end if strcmp(data_request_eff,'zgeom') @@ -803,6 +838,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.dimunits{1} = zcontour.dimunits{2}; else if (gdat_params.nverbose>=1); warning(['should not be in this case with data_request_eff = ' data_request_eff]); end + error_status = 112; + gdat_data.status = error_status; return end gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim}; @@ -853,8 +890,12 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end gdat_data.help = tracetdi.help; gdat_data.status_mds = tracetdi.status; + error_status = 0; + gdat_data.status = error_status; if mod(gdat_data.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end + error_status =121; + gdat_data.status = error_status; return end gdat_data.data_fullpath=[added_correction_str nodenameeff]; @@ -952,6 +993,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.t = time_in; gdat_data.x = x_in; gdat_data.label = 'Total magnetic field map in (R,Z)'; + gdat_data.status_mds = 1; + error_status = 0; + gdat_data.status = error_status; catch @@ -960,6 +1004,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.Br = []; gdat_data.Bz = []; gdat_data.Btot = []; + error_status = 151; + gdat_data.status = error_status; end @@ -980,13 +1026,18 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') % use beta as time base if isempty(b0.data) || isempty(b0.dim) || isempty(ip.data) || isempty(ip.dim) || isempty(a_minor.data) || isempty(a_minor.dim) || isempty(beta.data) || isempty(beta.dim) if (gdat_params.nverbose>=1); warning(['problems loading data for data_request= ' data_request_eff]); end + gdat_data.status_mds = 2; + error_status = 161; + gdat_data.status = error_status; return end gdat_data.dim = beta.dim; gdat_data.t = beta.dim{1}; gdat_data.data = beta.data; gdat_data.help = beta.help; - gdat_data.status_mds = beta.status_mds; + gdat_data.status_mds = 1; + error_status = 0; + gdat_data.status = error_status; if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out) % should already have all data at times time_out since called gdat_tcv above end @@ -998,6 +1049,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') ip_t = ip.data(ij); else warning('no valid data for ip, cannot fit') + error_status = 162; + gdat_data.status = error_status; return end ij=find(isfinite(b0.data)); @@ -1007,6 +1060,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') b0_t = b0.data(ij); else warning('no valid data for b0, cannot fit') + error_status = 163; + gdat_data.status = error_status; return end ij=find(isfinite(a_minor.data)); @@ -1016,6 +1071,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') a_minor_t = a_minor.data(ij); else warning('no valid data for a_minor, cannot fit') + error_status = 164; + gdat_data.status = error_status; return end gdat_data.data = 100.*beta.data ./ abs(ip_t).*1.e6 .* abs(b0_t) .* a_minor_t; @@ -1098,6 +1155,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.cxrs_params = cxrs_profiles.param; if isempty(cxrs_profiles.Times) || ~isfield(cxrs_profiles,'proffit') gdat_data.status_mds = 2; + error_status = 171; + gdat_data.status = error_status; gdat_data.help = ['problems loading data with CXRS_get_profiles for data_request= ' data_request_eff]; if (gdat_params.nverbose>=1); warning(gdat_data.help); end for i=1:length(sub_nodes) @@ -1172,6 +1231,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.dimunits{2} = 's'; gdat_data.help = ''; gdat_data.status_mds = 1; + error_status = 0; + gdat_data.status = error_status; % add grids_1d to have rhotor, etc if cxrs_rho was asked for if strcmp(data_request_eff,'cxrs_rho') gdat_data = get_grids_1d(gdat_data,2,1,gdat_params.nverbose); @@ -1213,6 +1274,10 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'eqdsk'} % + gdat_data.help = ''; + gdat_data.status_mds = 2; + error_status = 181; + gdat_data.status = error_status; if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out) if isfield(gdat_data.gdat_params,'time') && ~isempty(gdat_data.gdat_params.time) disp('time_out parameter not used for eqdsk, uses time') @@ -1222,8 +1287,6 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') return; end end - gdat_data.help = ''; - gdat_data.status_mds = 2; time=1.; % default time if isfield(gdat_data.gdat_params,'time') && ~isempty(gdat_data.gdat_params.time) time = gdat_data.gdat_params.time; @@ -1290,6 +1353,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if gdat_params.nverbose>=1; warning(['could not create eqdsk file from read_results_for_chease with data_request= ' data_request_eff]); end + error_status = 182; + gdat_data.status = error_status; return end ii = regexpi(fnames_readresults{4},'eqdsksigns'); @@ -1297,6 +1362,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') eqdskval=read_eqdsk(fnames_readresults{4},cocos_read_results_for_chease,0,[],[],1); % read_results now has relevant cocos LIUQE= 17 else disp('wrong name check order of eqdsk outputs') + error_status = 183; + gdat_data.status = error_status; return end for i=1:length(fnames_readresults) @@ -1382,6 +1449,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.request_description = ['data=psi, x=(R,Z), eqdsk contains eqdsk structure with which ' ... 'plot_eqdsk, write_eqdsk, read_eqdsk can be used']; gdat_data.status_mds = 1; + error_status = 0; + gdat_data.status = error_status; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'gas', 'gas_flux', 'gas_request', 'gas_feedforward','gas_valve', 'gas_fluxes'} @@ -1395,6 +1464,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.gas_flux = gasflux; gdat_data.help = gasflux.help; gdat_data.status_mds = gasflux.status_mds; + error_status = 0; % since many options below, mark error if problem below + gdat_data.status = error_status; params_eff.data_request = '\hybrid::mat_m_signals:output_019'; gasrequest = gdat_tcv(gdat_data.shot,params_eff); gdat_data.gas_request_volt = gasrequest; @@ -1468,6 +1539,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') case {'gas_fluxes'} gdat_data.help = 'cell array'; gdat_data.status_mds = 2; + error_status = 191; + gdat_data.status = error_status; try if shot > 82186 for i=1:20 @@ -1502,7 +1575,10 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') catch end otherwise - error('gas option not defined') + gdat_data.status_mds = 2; + error_status = 192; + gdat_data.status = error_status; + error('gas option not defined') end if ~strcmp(data_request_eff,'gas_valve') gdat_data.dim{1} = gdat_data.t; @@ -1513,7 +1589,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') elseif ~isfield(gdat_data.gdat_params,'time_out') gdat_data.gdat_params.time_out = []; end - gdat_data.status_mds = 1; + error_status = 0; + gdat_data.status = error_status; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'halphas'} @@ -1540,6 +1617,12 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') disp(halphas.help); end end + if mod(gdat_data.status_mds,2) == 0 + error_status = 211; + else + error_status = 0; + end + gdat_data.status = error_status; gdat_data.label = ['\base::pd:pd_' num2str(min(channels),'%.3d') ' to ' num2str(max(channels),'%.3d')]; gdat_data.x = channels; gdat_data.dim{1} = gdat_data.x; @@ -1560,6 +1643,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') params_eff = gdat_data.gdat_params; gdat_data.help = ''; gdat_data.status_mds = 2; + error_status = 221; + gdat_data.status = error_status; if isfield(params_eff,'source') && ~isempty(params_eff.source) ids_top_name = params_eff.source; else @@ -1650,6 +1735,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') rethrow(ME_tcv_get_ids) end gdat_data.status_mds = 1; + error_status = 0; + gdat_data.status = error_status; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'ec_data', 'aux', 'h_cd', 'nbi_data', 'ic_data', 'lh_data','ohm_data', 'bs_data'} @@ -1672,6 +1759,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end gdat_data.help = ''; gdat_data.status_mds = 2; + error_status = 1; + gdat_data.status = error_status; % specific parameters check and default settings if ~isfield(gdat_data.gdat_params,'source') || isempty(gdat_data.gdat_params.source) switch data_request_eff @@ -1691,12 +1780,16 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if (gdat_params.nverbose>=1) warning(['source= ' gdat_data.gdat_params.source ' is not part of the available sources: ' sprintf('''%s'' ',sources_avail{:})]); end + error_status = 231; + gdat_data.status = error_status; return else gdat_data.gdat_params.source = {gdat_data.gdat_params.source}; end else if (gdat_params.nverbose>=1); warning([' source parameter not compatible with: ' sprintf('''%s'' ',sources_avail{:})]); end + error_status = 232; + gdat_data.status = error_status; return end else @@ -1946,11 +2039,15 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if isempty(ec_data.cd_tot.data) || isempty(ec_data.cd_tot.t) || ischar(ec_data.cd_tot.data) if (gdat_params.nverbose>=1) gdat_data.status_mds = 2; + error_status = 233; + gdat_data.status = error_status; warning(['problems loading data for ' source_icd.ec ... ' for data_request= ' data_request_eff]); end else gdat_data.status_mds = 1; + error_status = 0; + gdat_data.status = error_status; % now default is icdtot, will depend on request and data_out param of some kind data_fullpath = ['from toray nodes using astra_tcv_EC_exp(shot), all results in .ec_data, subfield=' field_for_main_data ... 'in ec.data, .x, .t, .dim, .dimunits, .label, .units']; @@ -1999,6 +2096,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') ec_data.cd_dens_doublewidth_label = []; ec_data.rho_tor_norm = []; gdat_data.ec.ec_data = ec_data; + error_status = 234; + gdat_data.status = error_status; return end @@ -2179,6 +2278,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') elseif ~isfield(gdat_data.gdat_params,'time_out') gdat_data.gdat_params.time_out = []; end + error_status = 0; + gdat_data.status = error_status; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'mhd'} @@ -2194,6 +2295,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') % load n=1, 2 and 3 Bdot from magnetic measurements n3.data = []; mhd_source_list = {'0', '0full', '23', '23full', '-23', 'ltcc', 'ltcc-dbpol', 'ltcc-dbrad', 'ltcc-dbtor'}; + gdat_data.status_mds = 2; + error_status = 1; + gdat_data.status = error_status; if shot< 50926 n1=tdi('abs(mhdmode("LFS",1,1))'); n2=tdi('abs(mhdmode("LFS",2,1))'); @@ -2207,6 +2311,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') t2=sprintf('''%s'', ',mhd_source_list{1:end-1}); t3=sprintf('or ''%s''',mhd_source_list{end}); fprintf('%s %s %s\n',t1,t2,t3); + error_status = 241; + gdat_data.status = error_status; return end else @@ -2304,6 +2410,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') n3.data = []; else disp('should not be here in ''mhd'', ask O. Sauter') + error_status = 242; + gdat_data.status = error_status; return end end @@ -2329,6 +2437,12 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.help = n1.help; gdat_data.status_mds = n1.status; end + if mod(gdat_data.status_mds,2) == 0 + error_status = 243; + else + error_status = 0; + end + gdat_data.status = error_status; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'ne','te'} @@ -2338,6 +2452,12 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.gdat_params.systems = {'all'}; end [gdat_data] = get_thomson_raw_data(shot,data_request_eff,gdat_data,gdat_data.gdat_params.systems,gdat_params.nverbose,0); + if mod(gdat_data.status_mds,2) == 0 + error_status = 1; + else + error_status = 0; + end + gdat_data.status = error_status; if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out) [gdat_data] = gdat2time_out(gdat_data,1,{'error_bar'}); elseif ~isfield(gdat_data.gdat_params,'time_out') @@ -2376,6 +2496,13 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') ab_r = gdat_tcv(gdat_data.shot,'\diagz::fir_array:radii'); gdat_data.r_center_chord = ab_r.data(ab_index.data+1); end + if mod(gdat_data.status_mds,2) == 0 + error_status = 1; + else + error_status = 0; + end + gdat_data.status = error_status; + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'ne_rho', 'te_rho', 'nete_rho'} % if nete_rho, do first ne, then Te later (so fir stuff already done) @@ -2519,6 +2646,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') disp('should not be in switch gdat_data.gdat_params.fit_type') disp('ask olivier.sauter@epfl.ch') end + error_status = 251; + gdat_data.status = error_status; return end if strcmp(gdat_data.gdat_params.fit_type,'conf') @@ -2558,6 +2687,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') else gdat_data.fit.data_fullpath = [nodenameeff ' is empty']; end + error_status = 252; + gdat_data.status = error_status; return end else @@ -2568,6 +2699,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') disp([nodenameeff ' with trialindx=' num2str(trialindx) ' is empty, thus no fits, check hldsi(shot) and may need to run anaprofs?']) end gdat_data.fit.data_fullpath = [nodenameeff ' with trialindx=' num2str(trialindx) ' is empty']; + error_status = 253; + gdat_data.status = error_status; return end end @@ -2621,6 +2754,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if ~isempty(tracetdi.data) && size(tracetdi.data,3)>=trialindx+1 gdat_data.fit.te.data = tracetdi.data(:,:,trialindx+1); else + error_status = 254; + gdat_data.status = error_status; return end end @@ -2677,6 +2812,12 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') elseif ~isfield(gdat_data.gdat_params,'time_out') gdat_data.gdat_params.time_out = []; end + if mod(gdat_data.status_mds,2) == 0 + error_status = 255; + else + error_status = 0; + end + gdat_data.status = error_status; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'powers'} @@ -2684,6 +2825,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') % At this stage fill just ech, later add nbi gdat_data.help = ''; gdat_data.status_mds = 2; + error_status = 1; + gdat_data.status = error_status; sources_avail = {'ohm','ec','nbi1','nbi2','dnbi','rad'}; % note should allow ech, nbh, ohmic in parameter sources % create empty structures for all, so in return one always have same substructres for i=1:length(sources_avail) @@ -2705,12 +2848,16 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if (gdat_params.nverbose>=1) warning(['source= ' gdat_data.gdat_params.source ' is not part of the available sources: ' sprintf('''%s'' ',sources_avail{:})]); end + error_status = 261; + gdat_data.status = error_status; return else gdat_data.gdat_params.source = {gdat_data.gdat_params.source}; end else if (gdat_params.nverbose>=1); warning([' source parameter not compatible with: ' sprintf('''%s'' ',sources_avail{:})]); end + error_status = 262; + gdat_data.status = error_status; return end else @@ -2730,6 +2877,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') ptot_ohm = tdi('\results::conf:ptot_ohm'); gdat_data.ohm.help = ptot_ohm.help; gdat_data.ohm.status_mds = ptot_ohm.status; + gdat_data.ohm.status = 1 - mod(gdat_data.ohm.status_mds,2); if mod(gdat_data.ohm.status_mds,2) == 1 gdat_data.ohm.data = ptot_ohm.data; gdat_data.ohm.t = ptot_ohm.dim{1}; @@ -2774,6 +2922,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') tracetdi=tdi(nodenameeff); gdat_data.ec.help = tracetdi.help; gdat_data.ec.status_mds = tracetdi.status; + gdat_data.ec.status = 1 - mod(gdat_data.ec.status_mds,2); if mod(gdat_data.ec.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end else @@ -2802,6 +2951,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') nbh_data_tdi = tdi(nodenameeff); gdat_data.nbi1.help = nbh_data_tdi.help; gdat_data.nbi1.status_mds = nbh_data_tdi.status; + gdat_data.nbi1.status = 1 - mod(gdat_data.nbi1.status_mds,2); if mod(gdat_data.nbi1.status_mds,2) == 1 nbi_neutral_power_tot = nbh_data_tdi.data.*1e6; % in W ij = nbi_neutral_power_tot<100; @@ -2849,6 +2999,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') tracetdi=tdi(nodenameeff); gdat_data.rad.help = tracetdi.help; gdat_data.rad.status_mds = tracetdi.status; + gdat_data.rad.status = 1 - mod(gdat_data.rad.status_mds,2); if mod(gdat_data.rad.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end else @@ -2874,6 +3025,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') nb2_data_tdi = tdi(nodenameeff); gdat_data.nbi2.help = nb2_data_tdi.help; gdat_data.nbi2.status_mds = nb2_data_tdi.status; + gdat_data.nbi2.status = 1 - mod(gdat_data.nbi2.status_mds,2); if mod(gdat_data.nbi2.status_mds,2) == 1 nbi_neutral_power_tot = nb2_data_tdi.data.*1e6; % in W ij = nbi_neutral_power_tot<100; @@ -2916,6 +3068,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') nb2_data_tdi = tdi(nodenameeff); gdat_data.dnbi.help = nb2_data_tdi.help; gdat_data.dnbi.status_mds = nb2_data_tdi.status; + gdat_data.dnbi.status = 1 - mod(gdat_data.dnbi.status_mds,2); if mod(gdat_data.dnbi.status_mds,2) == 1 nbi_neutral_power_tot = nb2_data_tdi.data.*1e6; % in W ij = nbi_neutral_power_tot<100; @@ -2963,6 +3116,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.gdat_params.time_out = []; end gdat_data.status_mds = 1; + error_status = 0; + gdat_data.status = error_status; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'q_rho'} @@ -2978,6 +3133,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') tracetdi=tdi(nodenameeff); gdat_data.help = tracetdi.help; gdat_data.status_mds = tracetdi.status; + gdat_data.status = 1 - mod(gdat_data.status_mds,2); if liuqe_matlab==1 && liuqe_version_eff==-1 % may have problems with dim{1} being indices instead of rhopol if max(tracetdi.dim{1}) > 2 @@ -2991,6 +3147,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if mod(gdat_data.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end + error_status = 271; + gdat_data.status = error_status; return end gdat_data.data = tracetdi.data; @@ -3020,20 +3178,28 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') % R*Bphi(rho,t) from F from FFprime if liuqe_matlab==0 fprintf('\n***** not yet implemented for liuqe fortran ******\n'); + error_status = 281; + gdat_data.status = error_status; return else nodenameeff=['tcv_eq("rbtor_rho","' psitbx_str '")']; end if liuqe_version_eff==-1 disp('not yet implemented for fbte') + error_status = 282; + gdat_data.status = error_status; return end tracetdi=tdi(nodenameeff); gdat_data.help = tracetdi.help; gdat_data.status_mds = tracetdi.status; + error_status = 0; + gdat_data.status = error_status; if mod(gdat_data.status_mds,2) == 0 if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end + error_status = 283; + gdat_data.status = error_status; return end gdat_data.data = tracetdi.data; @@ -3058,6 +3224,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') elseif ~isfield(gdat_data.gdat_params,'time_out') gdat_data.gdat_params.time_out = []; end + case {'phi_tor', 'phitor', 'toroidal_flux'} % Phi(LCFS) = int(Bphi dSphi), can use Eq.(11) of "Tokamak coordinate conventions: COCOS" paper: % O. Sauter, S.Yu. Medvedev, Comput. Phys. Commun. 184 (2013) 293???302 @@ -3065,6 +3232,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') % q = -dPhi/dpsi => Phi = - int(q*dpsi) which should always have the sign of B0 % need to get q_rho but to avoid loop for rhotor in grids_1d, get q_rho explicitely here params_eff = gdat_data.gdat_params; + gdat_data.status_mds = 2; + error_status = 1; + gdat_data.status = error_status; if liuqe_matlab==1 nodenameeff = ['tcv_eq("tor_flux_tot","' psitbx_str '")']; phi_tor = tdi(nodenameeff); @@ -3114,11 +3284,15 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') % assume same dimensions, check. Note data dims can be different from dim{} when there is a problem with liuqe run if numel(phi_tor.data) ~= numel(q_rho.data) || numel(psi_axis.data) ~= numel(phi_tor.dim{2}) warning(['problems in gdat_tcv with ' data_request_eff ' with unexpected dimensions']) + error_status =291; + gdat_data.status = error_status; return; end % check time sizes since can happen problems with old liuqe runs if size(q_rho.data,2) ~= size(phi_tor.data,2) warning(['time sizes between q_rho and phi_tor do not match: ' num2str(size(q_rho.data,2)) ' and ' num2str(size(phi_tor.data,2))]); + error_status =292; + gdat_data.status = error_status; return end if size(q_rho.data,2) ~= length(psi_axis.data) @@ -3131,10 +3305,14 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') num2str(length(psi_axis.data))]); disp('WARNING: should have been caught, so probably q_rho.dim not the same as data(:,:) dims') disp('should run: >> liuqe_default_run_sequence(shot)') + error_status =293; + gdat_data.status = error_status; return end if size(q_rho.data,1) ~= size(phi_tor.data,1) warning(['radial sizes between q_rho and phi_tor do not match: ' num2str(size(q_rho.data,1)) ' and ' num2str(size(phi_tor.data,1))]); + error_status = 294; + gdat_data.status = error_status; return end for it=1:size(q_rho.data,2) @@ -3158,6 +3336,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.units = phi_tor.units; gdat_data.help = phi_tor.help; gdat_data.status_mds = phi_tor.status; + gdat_data.status = 1 - mod(gdat_data.status_mds,2); + error_status = gdat_data.status; if (length(gdat_data.dim)>=mapping_for_tcv.gdat_timedim); gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim}; end if (length(gdat_data.dim)>0); gdat_data.x = gdat_data.dim{1}; end if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out) @@ -3197,6 +3377,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') elseif ~isfield(gdat_data.gdat_params,'time_out') gdat_data.gdat_params.time_out = []; end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'pressure', 'pressure_rho', 'p_rho'} if liuqe_matlab==0 nodenameeff = ['tcv_eq("' liuqefortran2liuqematlab('p_rho',1,0) '","' psitbx_str '")']; @@ -3221,6 +3403,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.request_description = 'pressure'; gdat_data.help = tracetdi.help; gdat_data.status_mds = tracetdi.status; + gdat_data.status = 1 - mod(gdat_data.status_mds,2); + error_status = gdat_data.status; if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out) [gdat_data] = gdat2time_out(gdat_data,1); elseif ~isfield(gdat_data.gdat_params,'time_out') @@ -3232,37 +3416,10 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') % psi at edge, 0 by construction in Liuqe, thus not given % add surface_psi from surface_flux and d(surface_flux)/dt = vloop warning('now psi_edge expression in tcv_requests_mapping, so should not come here') - keyboard - nodenameeff=['\results::psi_axis' substr_liuqe]; - if liuqe_version_eff==-1 - nodenameeff=[begstr 'q_psi' substr_liuqe]; - end - tracetdi=tdi(nodenameeff); - if isempty(tracetdi.data) || isempty(tracetdi.dim) || ~any(isfinite(tracetdi.data)) % || ischar(tracetdi.data) (to add?) - if (gdat_params.nverbose>=1); warning(['problems loading data for ' nodenameeff ' for data_request= ' data_request_eff]); end - if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end - return - end - gdat_data.data = tracetdi.data.*0; - gdat_data.dim = tracetdi.dim; - gdat_data.t = gdat_data.dim{1}; - gdat_data.data_fullpath=[' zero ']; - gdat_data.dimunits = tracetdi.dimunits; - gdat_data.units = tracetdi.units; - gdat_data.request_description = '0 since LIUQE construct psi to be zero at LCFS'; - % - params_eff.data_request='\results::surface_flux'; - surface_psi=gdat_tcv([],params_eff); - ij=[isfinite(surface_psi.data)]; - [aa,vsurf] = interpos(63,surface_psi.t(ij),surface_psi.data(ij),-3); - gdat_data.surface_psi = surface_psi.data; - gdat_data.vsurf = vsurf; - gdat_data.vsurf_description = ['time derivative from surface_psi, obtained from \results::surface_flux']; - if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out) - [gdat_data] = gdat2time_out(gdat_data,1); - elseif ~isfield(gdat_data.gdat_params,'time_out') - gdat_data.gdat_params.time_out = []; - end + gdat_data.status_mds = 2; + gdat_data.status = -1; + error_status = gdat_data.status; + return %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'r_contour_edge', 'z_contour_edge'} @@ -3284,6 +3441,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.units = tracetdi.units; gdat_data.help = tracetdi.help; gdat_data.status_mds = tracetdi.status; + gdat_data.status = 1 - mod(gdat_data.status_mds,2); + error_status = gdat_data.status; if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out) [gdat_data] = gdat2time_out(gdat_data,1); elseif ~isfield(gdat_data.gdat_params,'time_out') @@ -3298,6 +3457,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') % q = -dPhi/dpsi => Phi = - int(q*dpsi) which should always have the sign of B0 % need to get q_rho but to avoid loop for rhotor in grids_1d, get q_rho explicitely here params_eff = gdat_data.gdat_params; + gdat_data.status_mds = 2; + gdat_data.status = 1 - mod(gdat_data.status_mds,2); + error_status = gdat_data.status; if liuqe_matlab==0 nodenameeff=['tcv_eq("q_psi","' psitbx_str '")']; if liuqe_version_eff==-1 @@ -3307,6 +3469,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if isempty(q_rho.data) || isempty(q_rho.dim) % || ischar(q_rho.data) (to add?) if (gdat_params.nverbose>=1); warning(['problems loading data for q_rho for data_request= ' data_request_eff]); end if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end + error_status = 301; + gdat_data.status = error_status; return end rhopol_eff = ones(size(q_rho.dim{1})); @@ -3319,6 +3483,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') 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 + error_status = 302; + gdat_data.status = error_status; return end rhoequal = linspace(0,1,length(q_rho.dim{1})); @@ -3360,6 +3526,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.psi_axis = reshape(psi_axis.data,length(psi_axis.data),1); if length(gdat_data.psi_axis) ~= length(gdat_data.t) disp('problems of time between qrho and psi_axis?') + error_status = 303; + gdat_data.status = error_status; return end gdat_data.b0 = b0tpsi; @@ -3380,6 +3548,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.data(:,it) = dataeff; else disp(['problem in gdat_tcv rhotor with unknown data_request_eff = ' data_request_eff]); + error_status = 304; + gdat_data.status = error_status; return end end @@ -3421,6 +3591,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.data_fullpath=['rhotor=sqrt(Phi/pi/B0) from phi_tor']; else disp(['data_request_eff = ' data_request_eff ' not defined within rhotor block in gdat_tcv.m']); + error_status = 305; + gdat_data.status = error_status; return end else @@ -3428,6 +3600,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.rhotor_edge = []; end end + gdat_data.status = 1 - mod(gdat_data.status_mds,2); + error_status = gdat_data.status; if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out) % nothing to do since above uses gdat call getting reduced time already end @@ -3440,7 +3614,9 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if liuqe_matlab==0 nodenameeff=['\results::psitbx:vol']; if liuqe_version_eff > 1 - disp('needs to construct volume'); + disp('needs liuqe_version_eff > 1 to construct volume'); + error_status = 311; + gdat_data.status = error_status; return end else @@ -3466,6 +3642,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.help = tracetdi.help; gdat_data.status_mds = tracetdi.status; if mod(gdat_data.status_mds,2) == 0 + error_status = 312; + gdat_data.status = error_status; return end gdat_data.units = tracetdi.units; @@ -3502,10 +3680,14 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if (gdat_params.nverbose>=1) disp(['should not be here in vol cases with data_request = ' data_request_eff]); end + error_status = 313; + gdat_data.status = error_status; return end end gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim}; + gdat_data.status = 1 - mod(gdat_data.status_mds,2); + error_status = gdat_data.status; if isfield(gdat_data.gdat_params,'time_out') && ~isempty(gdat_data.gdat_params.time_out) [gdat_data] = gdat2time_out(gdat_data,1,{'volume_edge'}); elseif ~isfield(gdat_data.gdat_params,'time_out') @@ -3548,6 +3730,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') catch % to make sure close and disconnect even if error, since connects to scd end + gdat_data.status = 1 - mod(gdat_data.status_mds,2); + error_status = gdat_data.status; mdsclose; mdsdisconnect; % because connected to rtc/scd @@ -3571,6 +3755,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if gdat_data.gdat_params.nverbose>=1 warning(['source = ' gdat_data.gdat_params.source ' not expected with data_request= ' data_request_eff]) end + error_status = 321; + gdat_data.status = error_status; return end % time_out: times at which to provide output data, if 2 values provided, return all values within that time interval @@ -3743,6 +3929,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.gdat_params.camera{i},numel(gdat_data.(gdat_data.gdat_params.camera{i}).x)); end gdat_data.status_mds = 1; + gdat_data.status = 1 - mod(gdat_data.status_mds,2); + error_status = gdat_data.status; case {'mpx', 'dmpx'} gdat_data.help = ''; @@ -3757,6 +3945,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if gdat_data.gdat_params.nverbose>=3 disp(['liuqe_version = ' liuqe_version ' not supported for data_request= ' data_request_eff]); end + error_status = 331; + gdat_data.status = error_status; return end t_int = [0 10]; % starts from 0 otherwise mpxdata gives data from t<0 @@ -3774,6 +3964,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if gdat_data.gdat_params.nverbose>=1 warning('problem with mpxdata') end + error_status = 332; + gdat_data.status = error_status; return end gdat_data.units = {'au'}; % not known at this stage @@ -3809,6 +4001,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.x = gdat_data.dim{1}; end gdat_data.status_mds = 1; + gdat_data.status = 1 - mod(gdat_data.status_mds,2); + error_status = gdat_data.status; case 'xtomo' gdat_data.help = ''; @@ -3849,6 +4043,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if gdat_data.gdat_params.nverbose>=1 warning('problem with XTOMOGetData, no data') end + error_status = 341; + gdat_data.status = error_status; return end gdat_data.t = t; @@ -3869,12 +4065,17 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.dimunits = {'chords where floor(dim{1}/10) gives camera nb and mod(dim{1},10) chord nb'; 's'}; end gdat_data.dim = {gdat_data.x; gdat_data.t}; + gdat_data.status_mds = 1; + gdat_data.status = 1 - mod(gdat_data.status_mds,2); + error_status = gdat_data.status; otherwise if gdat_data.gdat_params.nverbose>=1 warning(['camera = ' gdat_data.gdat_params.camera ' not expected with data_request= ' data_request_eff]) end - gdat_data.status_mds = 1; + gdat_data.status_mds = 2; + error_status = 351; + gdat_data.status = error_status; return end @@ -3911,6 +4112,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.data_fullpath = ['.transp structure obtained from cdf2mat(gdat_data.gdat_params.source)']; gdat_data.help='Can use transp_gui(gdat_data.transp) to browse and plot'; gdat_data.status_mds = 1; + gdat_data.status = 1 - mod(gdat_data.status_mds,2); + error_status = gdat_data.status; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'ttprime', 'ttprime_rho'} @@ -3942,6 +4145,8 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') elseif ~isfield(gdat_data.gdat_params,'time_out') gdat_data.gdat_params.time_out = []; end + gdat_data.status = 1 - mod(gdat_data.status_mds,2); + error_status = gdat_data.status; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'profnerho','profterho'} @@ -4002,16 +4207,20 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end gdat_data.help = tracetdi.help; gdat_data.status_mds = tracetdi.status; + gdat_data.status = 1 - mod(gdat_data.status_mds,2); + error_status = gdat_data.status; otherwise if (gdat_params.nverbose>=1); warning(['switchcase= ' data_request_eff ' not known in gdat_tcv']); end - error_status=901; + error_status = 901; + gdat_data.status = error_status; return end else if (gdat_params.nverbose>=1); warning(['TCV method=' mapping_for_tcv.method ' not known yet, contact Olivier.Sauter@epfl.ch']); end error_status=602; + gdat_data.status = error_status; return end @@ -4021,6 +4230,7 @@ gdat_data.gdat_params.help = tcv_help_parameters(fieldnames(gdat_data.gdat_param gdat_data.mapping_for.tcv = mapping_for_tcv; gdat_params = gdat_data.gdat_params; error_status=0; +gdat_data.status = error_status; return @@ -4104,6 +4314,8 @@ try catch gdat_data.error_bar = []; gdat_data.status_mds = 2; + error_status = 1001; + gdat_data.status = error_status; if strcmp(data_request_eff(1:2),'ne') tracefirrat_data = []; gdat_data.firrat=tracefirrat_data; @@ -4122,6 +4334,8 @@ if isempty(time) || ischar(time) warning('!!!!!!!!!!!!!!!!!!!!!!!!!\results::thomson:times is empty? Check') disp(['!!!!!!!!!!!!!!!!!!!!!!!!! cannot continue with ' data_request_eff]) end + error_status = 1002; + gdat_data.status = error_status; return end @@ -4144,6 +4358,8 @@ for is = 1:nsys otherwise warning('Unrecognised thomson scattering system name: %s',systems{is}); disp(['!!!!!!!!!!!!!!!!!!!!!!!!! cannot continue with ' data_request_eff]) + error_status = 1003; + gdat_data.status = error_status; return end @@ -4212,6 +4428,8 @@ if strcmp(data_request_eff(1:2),'ne') disp('***********************************************************************') end end +gdat_data.status = 1 - mod(gdat_data.status_mds,2); +error_status = gdat_data.status; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [psiscatvol,psi_max] = get_thomson_psiscatvol(shot,systems,substr_liuqe,nverbose) diff --git a/matlab/tests/test_tcv_get_ids.m b/matlab/tests/test_tcv_get_ids.m index e0f9cac1..a187d5f8 100644 --- a/matlab/tests/test_tcv_get_ids.m +++ b/matlab/tests/test_tcv_get_ids.m @@ -13,7 +13,7 @@ classdef (TestTags={'tcv_imas'},SharedTestFixtures={... methods(Test) function test_get_ids_list(testCase,shot) gg = gdat(shot,'ids'); - testCase.assertTrue(mod(gg.status_mds,2)==0); + testCase.assertTrue(gg.status~=0); testCase.assertTrue(iscell(gg.gdat_params.sources_available)); end -- GitLab From f12465f09889f211b84360d2a695e6e0efe9cc1d Mon Sep 17 00:00:00 2001 From: Olivier Sauter <olivier.sauter@epfl.ch> Date: Sun, 30 Mar 2025 18:31:44 +0200 Subject: [PATCH 6/7] add status if not yet field from non-TCV cases --- matlab/gdat.m | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/matlab/gdat.m b/matlab/gdat.m index 99271c74..7a0458e8 100644 --- a/matlab/gdat.m +++ b/matlab/gdat.m @@ -206,6 +206,14 @@ try % needed since some substructure have machine name like mapping_for gdat_data.gdat_params.machine = lower(gdat_data.gdat_params.machine); end + if ~isfield(gdat_data,'status') + if exist('error_status','var') + gdat_data.status = error_status; + else + error_status = 0; + gdat_data.status = error_status; + end + end catch ME_gdat warning(['problems calling gdat_' lower(machine_eff)]); -- GitLab From 1a48951c8299ea4b57e8b5ffa2292ec315be6d10 Mon Sep 17 00:00:00 2001 From: Olivier Sauter <olivier.sauter@epfl.ch> Date: Sun, 30 Mar 2025 22:33:35 +0200 Subject: [PATCH 7/7] correct tdi.status --- matlab/TCV/gdat_tcv.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matlab/TCV/gdat_tcv.m b/matlab/TCV/gdat_tcv.m index e3767928..d8977c80 100644 --- a/matlab/TCV/gdat_tcv.m +++ b/matlab/TCV/gdat_tcv.m @@ -777,7 +777,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end if strcmp(data_request_eff(end-3:end),'_rho') aatmp2 = tdi(nodenameeff2); - if mod(aatmp2.status_mds,2) == 0 + if mod(aatmp2.status,2) == 0 error_status = 102; gdat_data.status = error_status; end -- GitLab