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] 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