From fa569febaf1b92415a6ab4fb88e262165a4f4725 Mon Sep 17 00:00:00 2001
From: Olivier Sauter <olivier.sauter@epfl.ch>
Date: Fri, 22 Mar 2019 09:17:05 +0000
Subject: [PATCH] add remote mds get data for AUG, tested test_all_requestnames
 full, only remaining problem is Lpf thus all equilibrium, _rho related. Now
 ready to check on IPP part

git-svn-id: https://spcsvn.epfl.ch/repos/TCV/gdat/trunk@11623 d63d8f72-b253-0410-a779-e742ad2e26cf
---
 crpptbx/AUG/aug_requests_mapping.m |  30 +--
 crpptbx/AUG/gdat_aug.m             | 158 +++++++----
 crpptbx/AUG/rdaAUG_eff.m           | 407 +++++++++++++++++++++--------
 crpptbx/TCV/gdat_tcv.m             |  10 +
 crpptbx/TCV_IMAS/tcv2ids.m         |   9 +-
 crpptbx/gdat.m                     |  19 +-
 crpptbx/test_all_requestnames.m    |  21 +-
 7 files changed, 459 insertions(+), 195 deletions(-)

diff --git a/crpptbx/AUG/aug_requests_mapping.m b/crpptbx/AUG/aug_requests_mapping.m
index db44b860..247f29e8 100644
--- a/crpptbx/AUG/aug_requests_mapping.m
+++ b/crpptbx/AUG/aug_requests_mapping.m
@@ -72,19 +72,19 @@ switch lower(data_request)
   mapping.method = 'signal';
   mapping.expression = [{'TOT'},{'beta_N'}];
   % in many cases, in particular just after an experiment, betaN is not present in TOT, thus compute it from 2/3Wmhd/V /(B0^2/2mu0)
-  mapping.method = 'expression';
-  mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=[{''TOT''},{''beta_2N''},{''AUGD''}];' ...
-                    'gdat_tmp=gdat_aug(shot,params_eff); if isempty(gdat_tmp.data);' ...
-		    'params_eff.data_request=''ip'';gdat_ip=gdat_aug(shot,params_eff);' ...
-		    'params_eff.data_request=''b0'';gdat_b0=gdat_aug(shot,params_eff);' ...
-		    'params_eff.data_request=''a_minor'';gdat_aminor=gdat_aug(shot,params_eff);' ...
-		    'params_eff.data_request=''wmhd'';gdat_tmp=gdat_aug(shot,params_eff);' ...
-		    'params_eff.data_request=''volume'';gdat_vol=gdat_aug(shot,params_eff);' ...
-		    'tmp_data_ip=interp1(gdat_ip.t,gdat_ip.data,gdat_tmp.t,[],NaN);' ...
-		    'tmp_data_b0=interp1(gdat_b0.t,gdat_b0.data,gdat_tmp.t,[],NaN);' ...
-		    'tmp_data_a=interp1(gdat_aminor.t,gdat_aminor.data,gdat_tmp.t,[],NaN);' ...
-		    'tmp_data_vol=interp1(gdat_vol.t,gdat_vol.data,gdat_tmp.t,[],NaN);' ...
-		    'gdat_tmp.data = 100.*abs(2./3.*gdat_tmp.data./tmp_data_vol.*8e-7.*pi./tmp_data_b0.^2./tmp_data_ip.*1e6.*tmp_data_a.*tmp_data_b0);end;'];
+% $$$   mapping.method = 'expression';
+% $$$   mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=[{''TOT''},{''beta_2N''},{''AUGD''}];' ...
+% $$$                     'gdat_tmp=gdat_aug(shot,params_eff); if isempty(gdat_tmp.data);' ...
+% $$$ 		    'params_eff.data_request=''ip'';gdat_ip=gdat_aug(shot,params_eff);' ...
+% $$$ 		    'params_eff.data_request=''b0'';gdat_b0=gdat_aug(shot,params_eff);' ...
+% $$$ 		    'params_eff.data_request=''a_minor'';gdat_aminor=gdat_aug(shot,params_eff);' ...
+% $$$ 		    'params_eff.data_request=''wmhd'';gdat_tmp=gdat_aug(shot,params_eff);' ...
+% $$$ 		    'params_eff.data_request=''volume'';gdat_vol=gdat_aug(shot,params_eff);' ...
+% $$$ 		    'tmp_data_ip=interp1(gdat_ip.t,gdat_ip.data,gdat_tmp.t,[],NaN);' ...
+% $$$ 		    'tmp_data_b0=interp1(gdat_b0.t,gdat_b0.data,gdat_tmp.t,[],NaN);' ...
+% $$$ 		    'tmp_data_a=interp1(gdat_aminor.t,gdat_aminor.data,gdat_tmp.t,[],NaN);' ...
+% $$$ 		    'tmp_data_vol=interp1(gdat_vol.t,gdat_vol.data,gdat_tmp.t,[],NaN);' ...
+% $$$ 		    'gdat_tmp.data = 100.*abs(2./3.*gdat_tmp.data./tmp_data_vol.*8e-7.*pi./tmp_data_b0.^2./tmp_data_ip.*1e6.*tmp_data_a.*tmp_data_b0);end;'];
  case 'betap'
   mapping.timedim = 1;
   mapping.label = '\beta_p';
@@ -136,7 +136,7 @@ switch lower(data_request)
   mapping.expression = [{'TTH'},{'H/L-facs'},{'AUGD'}];
   mapping.method = 'expression';
   mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=[{''TTH''},{''H/L-facs''},{''AUGD''}];params_eff.source=''TTH'';' ...
-                    'gdat_tmp=gdat_aug(shot,params_eff);S = sf2ps(''TTH'',shot,''scal_par'');gdat_tmp.dimunits{1}=cellstr(S.items(end).value'');' ...
+                    'gdat_tmp=gdat_aug(shot,params_eff);S = rdaAUG_eff(shot,''TTH'',[],''AUGD'',[],[],''param-set:scal_par'');if isfield(S,''items'');gdat_tmp.dimunits{1}=cellstr(S.items(end).value'');end;' ...
                     'gdat_tmp.data = min(gdat_tmp.data,10.);'];
  case 'ioh'
   mapping.timedim = 1;
@@ -416,7 +416,7 @@ switch lower(data_request)
   mapping.label = data_request;
   mapping.method = 'signal'; % assume a full tracename is given, so just try with tdi (could check there are some ":", etc...)
   mapping.expression = data_request;
-  
+
 end
 
 if isempty(mapping.gdat_timedim)
diff --git a/crpptbx/AUG/gdat_aug.m b/crpptbx/AUG/gdat_aug.m
index 09da3e2e..43330947 100644
--- a/crpptbx/AUG/gdat_aug.m
+++ b/crpptbx/AUG/gdat_aug.m
@@ -2,7 +2,7 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_aug(shot,data_req
 %
 % function [gdat_data,gdat_params,error_status,varargout] = gdat(shot,data_request,varargin)
 %
-% Aim: get data from a given machine using full path or keywords. 
+% Aim: get data from a given machine using full path or keywords.
 %      data_request are and should be case independent (transformed in lower case in the function and outputs)
 %
 % If no inputs are provided, return the list of available pre-defined data_request in gdat_data and default parameters gdat_params
@@ -41,7 +41,7 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_aug(shot,data_req
 %
 % Examples:
 % (should add working examples for various machines (provides working shot numbers for each machine...))
-% 
+%
 %    [a1,a2]=gdat;
 %    a2.data_request = 'Ip';
 %    a3=gdat(32827,a2);  % gives input parameters as a structure, allows to call the same for many shots
@@ -55,7 +55,16 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_aug(shot,data_req
 %
 %    so any signal can be loaded by giving the diagnostic, signal name and experiment, etc
 %
-
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Remote data access for AUG
+% You need to make a "tunnel" in one unix session from the remote node using for example:
+%       ssh -losauter -L 8001:mdsplus.aug.ipp.mpg.de:8000 gate1.aug.ipp.mpg.de   % to create a tunnel to port 8001 to mds server mdsplus.aug.ipp.mpg.de
+%
+% Then in another unix session on the remote node, in matlab and with the appropriate mds path do:
+%   >> mdsconnect('localhost:8001')
+%   >> mdsvalue('1+2') % should return 3 if correctly connected
+%
 %
 % Comments for local developer:
 % This gdat is just a "header routine" calling the gdat for the specific machine gdat_`machine`.m which can be called
@@ -226,7 +235,7 @@ else
   ij=[];
 end
 
-if ~isempty(ij); 
+if ~isempty(ij);
   gdat_data.gdat_request = data_request_names_all{ij};
   if isfield(data_request_names.all.(data_request_names_all{ij}),'description') && ~isempty(data_request_names.all.(data_request_names_all{ij}).description)
     % copy description of keyword
@@ -342,6 +351,7 @@ if strcmp(mapping_for_aug.method,'signal')
     gdat_data.dim{mapping_for_aug.timedim} = gdat_data.t;
     gdat_data.dimunits{mapping_for_aug.timedim} = 'time [s]';
     nbdims = length(size(gdat_data.data));
+keyboard
     for i=1:nbdims
       if i~=mapping_for_aug.timedim
 	ieff=i;
@@ -354,7 +364,7 @@ if strcmp(mapping_for_aug.method,'signal')
   gdat_data.units = aatmp.units;
   if mapping_for_aug.gdat_timedim>0 && mapping_for_aug.gdat_timedim ~= mapping_for_aug.timedim
     % shift timedim to gdat_timedim data(i,j,...itime,k,...) -> data(i,inewtime,j,...,k,...)
-    % note that this means that gdat_data.x and gdat_data.t are same and correct, 
+    % note that this means that gdat_data.x and gdat_data.t are same and correct,
     % only .data, .dim and .dimunits need to be changed
     iprev=[1:nbdims];
     ij=find(dim_nontim>mapping_for_aug.gdat_timedim-1);
@@ -410,7 +420,7 @@ elseif strcmp(mapping_for_aug.method,'expression')
   ijdim=find(strcmp(tmp_fieldnames,'dim')==1);
   if ~isempty(ijdim)
     nbdims = length(gdat_data.dim);
-    if mapping_for_aug.timedim==-1; 
+    if mapping_for_aug.timedim==-1;
       mapping_for_aug.timedim = nbdims;
       if (size(gdat_data.data,nbdims)==1 && nbdims>1); mapping_for_aug.timedim = nbdims-1; end
     end
@@ -464,21 +474,36 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
     end
     % R, Z positions of measurements
     try
-      eval(['[r_time]=sf2ab(diag_name,shot,r_node,''-exp'',exp_name_eff' extra_arg_sf2sig_eff_string ');']);
+      % eval(['[r_time]=sf2ab(diag_name,shot,r_node,''-exp'',exp_name_eff' extra_arg_sf2sig_eff_string ');']);
+      % both for CEZ and CMZ Ti:1 is ok, otherwise introduce string above
+      [r_time,err]=rdaAUG_eff(shot,diag_name,r_node,exp_name_eff,[],extra_arg_sf2sig_eff_string,'area-base:Ti:1');
     catch ME_R_time
       % assume no shotfile
-      getReport(ME_R_time,'basic');
+      disp(getReport(ME_R_time))
       return
     end
-    gdat_data.r = r_time.value{1};
+    gdat_data.r = r_time.data;
     inotok=find(gdat_data.r<=0);
     gdat_data.r(inotok) = NaN;
-    eval(['[z_time]=sf2ab(diag_name,shot,z_node,''-exp'',exp_name_eff' extra_arg_sf2sig_eff_string ');']);
-    gdat_data.z = z_time.value{1};
-    inotok=find(gdat_data.z<=0);
-    gdat_data.z(inotok) = NaN;
-    eval(['[time]=sf2tb(diag_name,shot,''time'',''-exp'',exp_name_eff' extra_arg_sf2sig_eff_string ');']);
-    gdat_data.t = time.value;
+    try
+      % eval(['[z_time]=sf2ab(diag_name,shot,z_node,''-exp'',exp_name_eff' extra_arg_sf2sig_eff_string ');']);
+      [z_time,err]=rdaAUG_eff(shot,diag_name,z_node,exp_name_eff,[],extra_arg_sf2sig_eff_string,'area-base:Ti:1');
+      gdat_data.z = z_time.data;
+      inotok=find(gdat_data.z<=0);
+      gdat_data.z(inotok) = NaN;
+    catch ME_R_time
+      disp(getReport(ME_R_time))
+      return
+    end
+    try
+      % eval(['[time]=sf2tb(diag_name,shot,''time'',''-exp'',exp_name_eff' extra_arg_sf2sig_eff_string ');']);
+      %[time,err]=rdaAUG_eff(shot,diag_name,'time',exp_name_eff,[],extra_arg_sf2sig_eff_string,'time-base:Ti:0');
+      [time,err]=rdaAUG_eff(shot,diag_name,'time',exp_name_eff,[],extra_arg_sf2sig_eff_string,'area-base:Ti:0');
+      gdat_data.t = time.data;
+    catch ME_R_time
+      disp(getReport(ME_R_time))
+      return
+    end
     gdat_data.dim{1} = {gdat_data.r , gdat_data.z};
     gdat_data.dimunits{1} = 'R, Z [m]';
     gdat_data.dim{2} = gdat_data.t;
@@ -486,6 +511,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
     gdat_data.x = gdat_data.dim{1};
     % vrot
     [a,error_status]=rdaAUG_eff(shot,diag_name,'vrot',exp_name_eff,[],gdat_data.gdat_params.extra_arg_sf2sig);
+    a.name = 'vrot';
     if isempty(a.data) || isempty(a.t) || error_status>0
       if gdat_params.nverbose>=3;
 	a
@@ -502,6 +528,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
     %     [a,e]=rdaAUG_eff(shot,diag_name,'Ti',exp_name_eff);
     %     [aerr,e]=rdaAUG_eff(shot,diag_name,'err_Ti',exp_name_eff);
     [a,e]=rdaAUG_eff(shot,diag_name,'Ti_c',exp_name_eff,[],gdat_data.gdat_params.extra_arg_sf2sig);
+    a.name = 'Ti_c';
     [aerr,e]=rdaAUG_eff(shot,diag_name,'err_Ti_c',exp_name_eff,[],gdat_data.gdat_params.extra_arg_sf2sig);
     gdat_data.ti.data = a.data;
     gdat_data.data = a.data;
@@ -639,7 +666,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
 	end
       end
     end
-	
+
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'ece', 'eced', 'ece_rho', 'eced_rho'}
     nth_points = 13;
@@ -662,7 +689,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
     else
       gdat_data.gdat_params.match_rz_to_time = match_rz_to_time;
     end
-    time_interval = [-Inf +Inf];
+    time_interval = [];
     if isfield(gdat_data.gdat_params,'time_interval') && ~isempty(gdat_data.gdat_params.time_interval)
       time_interval = gdat_data.gdat_params.time_interval;
     else
@@ -778,7 +805,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
       gdat_data.rhos.rhovolnorm = rhovolnorm_out;
       gdat_data.rhos.t = gdat_data.rz.t;
     end
-	
+
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'eqdsk'}
     %
@@ -823,7 +850,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
       else
 	eqdsk_cocosout = eqdskAUG;
       end
-      % for several times, use array of structure for eqdsks, 
+      % for several times, use array of structure for eqdsks,
       % cannot use it for psi(R,Z) in .data and .x since R, Z might be different at different times,
       % so project psi(R,Z) on Rmesh, Zmesh of 1st time
       if length(time_eqdsks) > 1
@@ -853,7 +880,7 @@ elseif strcmp(mapping_for_aug.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'];
-    
+
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'equil'}
     % get equil params and time array in gdat_data.t
@@ -962,23 +989,23 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
 	  qfit = zeros(size(gdat_data.rhopolnorm(:,it)));
 	end
 	gdat_data.qvalue(:,it) = qfit;
-      end    
+      end
       % get rhotor values
       gdat_data.phi(:,it) = phi_tree.value(it,Lpf1:-1:1)';
       gdat_data.rhotornorm(:,it) = sqrt(abs(gdat_data.phi(:,it) ./ gdat_data.phi(end,it)));
       % get rhovol values
-      gdat_data.vol(:,it)=Vol.value(it,2*Lpf1-1:-2:1)'; 
+      gdat_data.vol(:,it)=Vol.value(it,2*Lpf1-1:-2:1)';
       gdat_data.dvoldpsi(:,it)=Vol.value(it,2*Lpf1:-2:2)'; % 2nd index are dV/dpsi
       gdat_data.rhovolnorm(:,it) = sqrt(abs(gdat_data.vol(:,it) ./ gdat_data.vol(end,it)));
-      gdat_data.area(:,it)=Area.value(it,2*Lpf1-1:-2:1)'; 
+      gdat_data.area(:,it)=Area.value(it,2*Lpf1-1:-2:1)';
       gdat_data.dareadpsi(:,it)=Area.value(it,2*Lpf1:-2:2)'; % 2nd index are dV/dpsi
       gdat_data.Rmesh(:,it) = Ri.value(it,1:M_Rmesh);
       gdat_data.Zmesh(:,it) = Zj.value(it,1:N_Zmesh);
       gdat_data.psi2D(1:M_Rmesh,1:N_Zmesh,it) = PFM_tree.value(1:M_Rmesh,1:N_Zmesh,it);
-      gdat_data.pressure(:,it)=Pres.value(it,2*Lpf1-1:-2:1)'; 
+      gdat_data.pressure(:,it)=Pres.value(it,2*Lpf1-1:-2:1)';
       gdat_data.dpressuredpsi(:,it)=Pres.value(it,2*Lpf1:-2:2)'; % 2nd index are dV/dpsi
       if ~isempty(Jpol.value)
-	gdat_data.jpol(:,it)=Jpol.value(it,2*Lpf1-1:-2:1)'; 
+	gdat_data.jpol(:,it)=Jpol.value(it,2*Lpf1-1:-2:1)';
 	gdat_data.djpolpsi(:,it)=Jpol.value(it,2*Lpf1:-2:2)'; % 2nd index are dV/dpsi
       else
 	gdat_data.jpol = [];
@@ -1041,7 +1068,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
     gdat_data.dim{2} = gdat_data.t;
     gdat_data.dimunits{1} = 'rhopolnorm';
     gdat_data.dimunits{2} = 'time [s]';
-    
+
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'ne','te'}
     exp_name_eff = gdat_data.gdat_params.exp_name;
@@ -1107,7 +1134,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
       gdat_data.(lower(node_child_nameeff_e)).z = [];
     end
     gdat_data.x=gdat_data.dim{1};
-    
+
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'ne_rho', 'te_rho', 'nete_rho'}
     if ~isfield(gdat_data.gdat_params,'fit') || isempty(gdat_data.gdat_params.fit) || ~isnumeric(gdat_data.gdat_params.fit)
@@ -1124,7 +1151,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
       return
     end
     % add rho coordinates
-    params_eff.data_request='equil'; 
+    params_eff.data_request='equil';
     [equil,params_equil,error_status]=gdat_aug(shot,params_eff);
     if error_status>0
       if gdat_params.nverbose>=3; disp(['problems with ' params_eff.data_request]); end
@@ -1343,8 +1370,8 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
 	end
       end
     end
-    
-    
+
+
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'pgyro'}
     extra_arg_sf2sig_eff_string = '';
@@ -1352,7 +1379,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
       extra_arg_sf2sig_eff_string = [',' gdat_data.gdat_params.extra_arg_sf2sig];
     end
     %  LOAD MULTI CHANNEL DATA ECS
-    %  powers, frequencies, etc 
+    %  powers, frequencies, etc
     params_eff = gdat_data.gdat_params;
     params_eff.data_request={'ECS','PECRH'};
     % pgyro tot in index=9
@@ -1384,7 +1411,9 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
 	end
       end
       try
-	eval(['a = sf2par(''ECS'',shot,''gyr_freq'',''P_sy1_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
+        [a,e]=rdaAUG_eff(shot,'ECS',['P_sy1_g' num2str(i)],gdat_data.gdat_params.exp_name,[], ...
+          gdat_data.gdat_params.extra_arg_sf2sig,['param:' 'gyr_freq']);
+        % eval(['a = sf2par(''ECS'',shot,''gyr_freq'',''P_sy1_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
       catch
 	% gyr_freq not present (old shots for example)
 	a=[];
@@ -1395,7 +1424,9 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
 	gdat_data.freq_ec(i) = a.value;
       end
       try
-	eval(['a = sf2par(''ECS'',shot,''GPolPos'',''P_sy1_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
+        [a,e]=rdaAUG_eff(shot,'ECS',['P_sy1_g' num2str(i)],gdat_data.gdat_params.exp_name,[], ...
+          gdat_data.gdat_params.extra_arg_sf2sig,['param:' 'GPolPos']);
+	% eval(['a = sf2par(''ECS'',shot,''GPolPos'',''P_sy1_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
       catch
 	% GPolPos not present
 	a=[];
@@ -1406,7 +1437,9 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
 	gdat_data.polpos_ec(i) = a.value;
       end
       try
-	eval(['a = sf2par(''ECS'',shot,''GTorPos'',''P_sy1_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
+        [a,e]=rdaAUG_eff(shot,'ECS',['P_sy1_g' num2str(i)],gdat_data.gdat_params.exp_name,[], ...
+          gdat_data.gdat_params.extra_arg_sf2sig,['param:' 'GTorPos']);
+	% eval(['a = sf2par(''ECS'',shot,''GTorPos'',''P_sy1_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
       catch
 	a=[];
       end
@@ -1428,7 +1461,9 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
 	end
       end
       try
-	eval(['a = sf2par(''ECS'',shot,''gyr_freq'',''P_sy2_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
+        [a,e]=rdaAUG_eff(shot,'ECS',['P_sy2_g' num2str(i)],gdat_data.gdat_params.exp_name,[], ...
+          gdat_data.gdat_params.extra_arg_sf2sig,['param:' 'gyr_freq']);
+	% eval(['a = sf2par(''ECS'',shot,''gyr_freq'',''P_sy2_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
       catch
 	a=[];
       end
@@ -1438,7 +1473,9 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
 	gdat_data.freq_ec(i+4) = a.value;
       end
       try
-	eval(['a = sf2par(''ECS'',shot,''GPolPos'',''P_sy2_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
+        [a,e]=rdaAUG_eff(shot,'ECS',['P_sy2_g' num2str(i)],gdat_data.gdat_params.exp_name,[], ...
+          gdat_data.gdat_params.extra_arg_sf2sig,['param:' 'GPolPos']);
+	% eval(['a = sf2par(''ECS'',shot,''GPolPos'',''P_sy2_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
       catch
 	a=[];
       end
@@ -1448,7 +1485,9 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
 	gdat_data.polpos_ec(i+4) = a.value;
       end
       try
-	eval(['a = sf2par(''ECS'',shot,''GTorPos'',''P_sy2_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
+        [a,e]=rdaAUG_eff(shot,'ECS',['P_sy2_g' num2str(i)],gdat_data.gdat_params.exp_name,[], ...
+          gdat_data.gdat_params.extra_arg_sf2sig,['param:' 'GTorPos']);
+	% eval(['a = sf2par(''ECS'',shot,''GTorPos'',''P_sy2_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']);
       catch
 	a=[];
       end
@@ -1611,6 +1650,8 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
       try
 	nbi=gdat_aug(shot,params_eff);
       catch
+        nbi.data = [];
+        nbi.dim = [];
       end
       if ~isempty(nbi.data) && ~isempty(nbi.dim)
 	for i=1:length(fields_to_copy)
@@ -1643,6 +1684,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
 	gdat_data.label{end+1}='P_{ic}';
       end
     end
+    index_prad = [];
     if any(strmatch('rad',gdat_data.gdat_params.source))
       % radiated power
       params_eff.data_request='prad';
@@ -1658,16 +1700,18 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
 	end
         % add to main with linear interpolation and 0 for extrapolated values
 	gdat_data.data(:,end+1) = interpos(-21,gdat_data.rad.t,gdat_data.rad.data,gdat_data.t);
+        index_prad = size(gdat_data.data,2); % to not add for ptot
 	gdat_data.x(end+1) =gdat_data.x(end)+1;
 	gdat_data.label{end+1}='P_{rad}';
       end
     end
     % add tot power
-    gdat_data.data(:,end+1) = sum(gdat_data.data,2);
-    gdat_data.label{end+1}='P_{tot}';
+    index_noprad = setdiff([1:size(gdat_data.data,2)],index_prad);
+    gdat_data.data(:,end+1) = sum(gdat_data.data(:,index_noprad),2);
+    gdat_data.label{end+1}='P_{tot,h}';
     gdat_data.x(end+1) =gdat_data.x(end)+1;
     gdat_data.dim{2} = gdat_data.x; gdat_data.dimunits{2} = '';
-    gdat_data.data_fullpath = 'tot powers from each sources, and total power in .data(:,end)';
+    gdat_data.data_fullpath = 'tot powers from each sources, and total heating power in .data(:,end)';
 
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'q_rho'}
@@ -1728,12 +1772,12 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
 	  qfit = zeros(size(gdat_data.rhopolnorm(:,it)));
 	end
 	gdat_data.qvalue(:,it) = qfit;
-      end    
+      end
       % get rhotor values
       phi_it = phi_tree.value(it,Lpf1:-1:1)';
       gdat_data.rhotornorm(:,it) = sqrt(abs(phi_it ./ phi_it(end)));
       % get rhovol values
-      vol_it=Vol.value(it,2*Lpf1-1:-2:1)'; 
+      vol_it=Vol.value(it,2*Lpf1-1:-2:1)';
       gdat_data.rhovolnorm(:,it) = sqrt(abs(vol_it ./ vol_it(end)));
       % Qpsi and similar data is on (time,radius) with radius being: LCFS..Lpf_points dummy LCFS..SOL part
       % change it to (radial,time) and use only Lpf+1 points up to LCFS
@@ -1789,7 +1833,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
       gdat_data.dim{1} = gdat_data.t;
       gdat_data.dimunits{1} = 'time [s]';
       for it=1:NTIME
-	Lpf1 = Lpf1_t(it);
+	Lpf1 =min(Lpf1_t(it),size(psi_tree.value,2));
 	psi_it=psi_tree.value(it,Lpf1:-1:1)';
 	if strcmp(data_request_eff,'psi_axis')
 	  gdat_data.data(it)= psi_it(1);
@@ -1804,7 +1848,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
 
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'raptor'}
-    sources_avail = {'observer','predictive'}; 
+    sources_avail = {'observer','predictive'};
     for i=1:length(sources_avail)
       gdat_data.(sources_avail{i}).data = [];
       gdat_data.(sources_avail{i}).units = [];
@@ -1908,7 +1952,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
     gdat_data.units = gdat_data.(source_promoted).units;
     gdat_data.dim = gdat_data.(source_promoted).dim;
     gdat_data.dimunits = gdat_data.(source_promoted).dimunits;
-      
+
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'rhotor', 'rhotor_edge', 'rhotor_norm', 'rhovol', 'volume_rho'}
     if strcmp(upper(gdat_data.gdat_params.equil),'FPG')
@@ -1947,7 +1991,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
 	psi_axis(it)= psi_it(1);
 	psi_lcfs(it)= psi_it(end);
 	gdat_data.x(:,it) = sqrt(abs((psi_it-psi_axis(it)) ./(psi_lcfs(it)-psi_axis(it))));
-	gdat_data.vol(:,it)=Vol.value(it,2*Lpf1-1:-2:1)'; 
+	gdat_data.vol(:,it)=Vol.value(it,2*Lpf1-1:-2:1)';
 	% gdat_data.dvoldpsi(:,it)=Vol.value(it,2*Lpf1:-2:2)'; % 2nd index are dV/dpsi
 	gdat_data.rhovolnorm(:,it) = sqrt(abs(gdat_data.vol(:,it) ./ gdat_data.vol(end,it)));
       end
@@ -2066,7 +2110,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
     exp_name_eff = 'AUGD';
     icount = 0;
     nnth = 1;
-    if isnumeric(gdat_data.gdat_params.freq) && gdat_data.gdat_params.freq>1; 
+    if isnumeric(gdat_data.gdat_params.freq) && gdat_data.gdat_params.freq>1;
       nnth = floor(gdat_data.gdat_params.freq+0.5);
       gdat_data.gdat_params.freq = nnth;
     end
@@ -2115,14 +2159,14 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
 
 	end
       else
-	% add fields not yet defined in case all cases have empty data 
+	% add fields not yet defined in case all cases have empty data
       end
     end
     gdat_data.chords = chords_ok_nb;
     if length(gdat_data.dim)>=1
       gdat_data.x = gdat_data.dim{1};
     end
-    
+
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case {'transp'}
     extra_arg_sf2sig_eff_string = '';
@@ -2161,7 +2205,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
       end
     end
     % copy TIME to .t
-    if isfield(gdat_data,'TIME') && isfield(gdat_data.TIME,'value')
+    if isfield(gdat_data,'TIME') && isfield(gdat_data.TIME,'value') && ~isempty(gdat_data.TIME.value)
       gdat_data.t = gdat_data.TIME.value;
       gdat_data.dim{1} = gdat_data.t;
       gdat_data.dimunits{1} = gdat_data.TIME.unit;
@@ -2172,7 +2216,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase')
     error_status=901;
     return
   end
-  
+
 else
   if (gdat_params.nverbose>=1); warning(['AUG method=' mapping_for_AUG.method ' not known yet, contact Olivier.Sauter@epfl.ch']); end
   error_status=602;
@@ -2202,11 +2246,17 @@ shot=gdat_data.shot;
 exp_name_eff = gdat_data.gdat_params.exp_name;
 gdat_data.gdat_params.equil = upper(gdat_data.gdat_params.equil);
 DIAG = gdat_data.gdat_params.equil; % 'EQI' by default at this stage, should become EQH?
-eval(['M_Rmesh_par = sf2par(DIAG,shot,''M'',''PARMV''' extra_arg_sf2sig_eff_string ');']);
+% eval(['M_Rmesh_par = sf2par(DIAG,shot,''M'',''PARMV''' extra_arg_sf2sig_eff_string ');']);
+[M_Rmesh_par,e]=rdaAUG_eff(shot,DIAG,'PARMV',gdat_data.gdat_params.exp_name,[], ...
+          extra_arg_sf2sig_eff_string,['param:' 'M']);
 M_Rmesh = M_Rmesh_par.value + 1; % nb of points
-eval(['N_Zmesh_par = sf2par(DIAG,shot,''N'',''PARMV''' extra_arg_sf2sig_eff_string ');']);
+% eval(['N_Zmesh_par = sf2par(DIAG,shot,''N'',''PARMV''' extra_arg_sf2sig_eff_string ');']);
+[N_Zmesh_par,e]=rdaAUG_eff(shot,DIAG,'PARMV',gdat_data.gdat_params.exp_name,[], ...
+          extra_arg_sf2sig_eff_string,['param:' 'N']);
 N_Zmesh = N_Zmesh_par.value + 1; % nb of points
-eval(['NTIME_par = sf2par(DIAG,shot,''NTIME'',''PARMV''' extra_arg_sf2sig_eff_string ');']);
+% eval(['NTIME_par = sf2par(DIAG,shot,''NTIME'',''PARMV''' extra_arg_sf2sig_eff_string ');']);
+[NTIME_par,e]=rdaAUG_eff(shot,DIAG,'PARMV',gdat_data.gdat_params.exp_name,[], ...
+          extra_arg_sf2sig_eff_string,['param:' 'NTIME']);
 NTIME = NTIME_par.value; % nb of points
 Lpf_par = rdaAUG_eff(shot,DIAG,'Lpf',exp_name_eff,[],gdat_data.gdat_params.extra_arg_sf2sig);
 % since June, nb of time points in EQ results is not consistent with NTIME and time
diff --git a/crpptbx/AUG/rdaAUG_eff.m b/crpptbx/AUG/rdaAUG_eff.m
index 6a5d1424..c6fb2eb9 100644
--- a/crpptbx/AUG/rdaAUG_eff.m
+++ b/crpptbx/AUG/rdaAUG_eff.m
@@ -1,5 +1,9 @@
 function [adata,error]=rdaAUG_eff(shot,diagname,sigtype,shotfile_exp,varargin);
 %
+% [adata,error]=rdaAUG_eff(shot,diagname,sigtype,shotfile_exp,varargin);
+%
+% inputs: shot,diagname,sigtype,shotfile_exp are mandatory, so specify default shotfile_exp before for example
+%
 % gets data using sf2sig or mdsplus (when mdsplus will be available)
 % 1D arrays: assumes dimension is time
 % 2D arrays: assumes data vs (x,time)
@@ -8,20 +12,50 @@ function [adata,error]=rdaAUG_eff(shot,diagname,sigtype,shotfile_exp,varargin);
 % varargin{1}: time interval or timevalue, will get data closest to that time or within that time interval
 % varargin{2}: extra args for sf2sig like '-raw'
 %
+% varargin{3}: 'param:xxx' means get parameter (instead of signal) with xxx as parameter to get
+%              'param-set:xxx' means get parameter-set (at this stage available only with sf2ps)
+%              'area-base:yy:i' means it's an area-base type signal and if known from yy dim_of(i)
+%
+%     for mds usage, calls: augparam (_shot, _diag, _psetname, _parameter, _experiment, _edition, _oshot, _oedition)
+%     for sf2 usage: help sf2par or sf2ps on ipp relevant node
+%            : [] empty means get signal (default),
+%     for mds usage: augdiag (_shot, _diag, _signame, _experiment, _edition, _t1, _t2, _oshot, _oedition)
+%     for sf2 usage: help sf2sig on ipp relevant node
+%
 % examples:
 %          [data,error]=rdaAUG_eff(15133,'MAG','Ipi');
 %          [data,error]=rdaAUG_eff(15133,'MAG','Ipi',[1 5]);
 %
 % set global variable: usemdsplus to decide if sf2sig or mdsplus is used:
-%    >> global usemdsplus
-%    >> usemdsplus=1 % means use mds to get data
-%    >> usemdsplus=0 % means use sf2sig  (default if not defined)
-%       if ~exist('usemdsplus'); usemdsplus=0; end
+%     usemdsplus=1 except if sf2sig is a function, then usemdsplus=0
+%    (----begin of old comments: >> global usemdsplus
+%        >> usemdsplus=1 % means use mds to get data
+%        >> usemdsplus=0 % means use sf2sig  (default if not defined)
+%       if ~exist('usemdsplus'); usemdsplus=0; end   -----end of old comments)
 %
-
-global usemdsplus
+%
+% return: 1D array and dimensions as 1xN
+%         2D array transposed (assumed were changed from C origin, this way gets usually time as 2nd)
+%
+%global usemdsplus
+usemdsplus = ~[exist('sf2sig')==2];
 if ~exist('usemdsplus') || isempty(usemdsplus); usemdsplus=0; end
-error=1;
+error=999;
+adata.data = [];
+adata.value = [];
+adata.units = [];
+adata.dim = [];
+adata.dimunits = [];
+adata.t = [];
+adata.x = [];
+adata_time.data = [];
+adata_time.value = [];
+adata_area = [];
+adata.time_aug = adata_time;
+adata.area = adata_area;
+adata.exp = shotfile_exp;
+adata.edition_in = [];
+adata.edition_out = [];
 
 time_int=[];
 if nargin>=5 & ~isempty(varargin{1})
@@ -32,8 +66,38 @@ if nargin>=6 & ~isempty(varargin{2})
   extra_arg_sf2sig=varargin{2};
 end
 
-if usemdsplus
+param_name=[];
+param_set_name=[];
+area_base=false;
+area_base_name=[];
+area_base_dimof=[];
+if nargin>=7 && ~isempty(varargin{3}) && ischar(varargin{3}) ...
+           && length(varargin{3})>=7 && strcmp(lower(varargin{3}(1:6)),'param:')
+  param_name=varargin{3}(7:end);
+end
+if nargin>=7 && ~isempty(varargin{3}) && ischar(varargin{3}) ...
+           && length(varargin{3})>=11 && strcmp(lower(varargin{3}(1:10)),'param-set:')
+  param_set_name=varargin{3}(11:end);
+end
+if nargin>=7 && ~isempty(varargin{3}) && ischar(varargin{3}) ...
+           && length(varargin{3})>=9 && strcmp(lower(varargin{3}(1:9)),'area-base')
+  area_base = true;
+  ij=findstr(varargin{3},':');
+  if length(ij)==2
+    area_base_name=varargin{3}(ij(1)+1:ij(2)-1);
+    area_base_dimof = str2num(varargin{3}(ij(2)+1:end));
+  elseif length(ij)==1
+    area_base_name=varargin{3}(ij(1)+1:end);
+  end
+end
 
+if usemdsplus
+  % a_remote=mdsremotelist; does not seem sufficient if connection broken, test with 1+2
+  is3 = mdsvalue('1+2');
+  if is3 ~= 3
+    warning('not connected to an mds server, cannot use mds to get data')
+    return
+  end
   % use mdsplus
 
 % $$$   if ~unix('test -d /home/duval/mdsplus')
@@ -46,42 +110,135 @@ if usemdsplus
 % $$$     mdsconnect('localhost');
 % $$$   end
 
+  % extract edition number if provided as '-ed',value in extra_arg_sf2sig
+  ij=strfind(extra_arg_sf2sig,'-ed');
+  ed_number = '';
+  if ~isempty(ij)
+    ed_number = num2str(sscanf(extra_arg_sf2sig(ij+5:end),'%d'));
+  end
   user=getenv('USER');
-  if nargin>=5 & ~isempty(varargin{1})
-    ['[data,error]=mdsvalue(''_rdaeff' user diagname '=augsignal(' num2str(shot) ',"' diagname '","' sigtype '",,,' ...
-          num2str(varargin{1}(1),'%.14f') ',' num2str(varargin{1}(end),'%.14f') ')'');']
-    eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augsignal(' num2str(shot) ',"' diagname '","' sigtype '",,,' ...
-          num2str(varargin{1}(1),'%.14f') ',' num2str(varargin{1}(end),'%.14f') ')'');']);
+  if isempty(param_name) && isempty(param_set_name) && ~area_base
+    % use augdiag
+    if nargin>=5 & ~isempty(varargin{1})
+      eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augdiag(' num2str(shot) ',"' diagname '","' sigtype '","' shotfile_exp ...
+            '",' ed_number ',' num2str(varargin{1}(1),'%.14f') ',' num2str(varargin{1}(end),'%.14f') ')'');']);
+    else
+      eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augdiag(' num2str(shot) ',"' diagname '","' sigtype '","' shotfile_exp ...
+            '",' ed_number ',,,_oshot' user diagname ',_oed' user diagname ')'');']);
+    end
+  elseif isempty(param_set_name) && ~area_base
+    % use augparam
+    eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augparam(' num2str(shot) ',"' diagname '","' sigtype '","' param_name '"' ...
+          ',"' shotfile_exp '",' ed_number ',_oshot' user diagname ',_oed' user diagname ')'');']);
+  elseif ~area_base
+    % param-set, cannot get this yet with mdsvalue
+    disp(['cannot get param-set with mds yet (only sf2ps): ' param_set_name])
+    data = [];
+    error = 11;
   else
-    eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augsignal(' num2str(shot) ',"' diagname '","' sigtype '")'');']);
+    % area-base, can only get dim_of at this stage
+    if ~isempty(area_base_name)
+      if nargin>=5 & ~isempty(varargin{1})
+        eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augdiag(' num2str(shot) ',"' diagname '","' area_base_name '","' shotfile_exp ...
+              '",' ed_number ',' num2str(varargin{1}(1),'%.14f') ',' num2str(varargin{1}(end),'%.14f') ')'');']);
+      else
+        eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augdiag(' num2str(shot) ',"' diagname '","' area_base_name '","' shotfile_exp ...
+              '",' ed_number ',,,_oshot' user diagname ',_oed' user diagname ')'');']);
+      end
+      if ~isempty(area_base_dimof)
+        eval(['data=mdsvalue(''dim_of(_rdaeff' user diagname ',' num2str(area_base_dimof) ')'');']);
+      else
+        for j=1:length(size(data))
+          eval(['dataj=mdsvalue(''dim_of(_rdaeff' user diagname ',' num2str(j) ')'');']);
+          if (prod(size(dataj))~=length(dataj))
+            data = dataj;
+            area_base_dimof = j;
+            break
+          end
+        end
+      end
+    end
+
+  end
+  if error < 10
+    adata.data=data;
+    adata.edition_in = str2num(ed_number);
+    adata.edition_out = mdsvalue(['_oed' user diagname]);
+  else
+    if error~=11 && mod(error,2)==1; keyboard; end
   end
-  adata.data=data;
+  %
   hsig=[];
   ss=size(data);
   nbofdim=length(ss);
   if prod(ss)==length(data); nbofdim=1; end
   nbofdim=max(nbofdim,1);
   switch nbofdim
-  case 1
+   case 1
+    adata.data=reshape(adata.data,1,length(adata.data));
     eval(['time=mdsvalue(''dim_of(_rdaeff' user diagname ',0)'');']);
+    time = reshape(time,1,length(time));
     x=[];
+    adata.dim = {time};
+    eval(['tunits=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',0))'');']);
+    adata.dimunits = {tunits};
 
-  case 2
-    eval(['x=mdsvalue(''dim_of(_rdaeff' user diagname ',0)'');']);
-    eval(['time=mdsvalue(''dim_of(_rdaeff' user diagname ',1)'');']);
+   case 2
+    adata.data = adata.data';
+    did_transpose = 1;
+    % transposed because of C relation and backward compatibility with sf2sig part
+    eval(['x=mdsvalue(''dim_of(_rdaeff' user diagname ',1)'');']);
+    if prod(size(x))==length(x); x = reshape(x,1,length(x)); end
+    eval(['time=mdsvalue(''dim_of(_rdaeff' user diagname ',0)'');']);
+    time = reshape(time,1,length(time));
+    adata.dim = {x, time};
+    eval(['xunits=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',1))'');']);
+    eval(['tunits=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',0))'');']);
+    adata.dimunits = {xunits, tunits};
 
-  case 3
+   case 3
     eval(['x=mdsvalue(''dim_of(_rdaeff' user diagname ',0)'');']);
+    if prod(size(x))==length(x); x = reshape(x,1,length(x)); end
     eval(['time=mdsvalue(''dim_of(_rdaeff' user diagname ',1)'');']);
+    time = reshape(time,1,length(time));
     disp('3rd dimension in hsig!!!!!!!!!!!!!!!!!!!!!!!!!')
     eval(['hsig=mdsvalue(''dim_of(_rdaeff' user diagname ',2)'');']);
+    if prod(size(hsig))==length(hsig); hsig = reshape(hsig,1,length(hsig)); end
+    adata.dim = {x, time, hsig};
+    eval(['xunits=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',0))'');']);
+    eval(['tunits=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',1))'');']);
+    eval(['hsigunits=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',2))'');']);
+    adata.dimunits = {xunits, tunits, hsigunits};
+    [zz,itime] = max(size(adata.data));
+    for i=1:nbofdim
+      if strcmp(adata.dimunits{i},'s'); itime = i; end
+    end
+    ix = min(setdiff([1:2],itime));
+    ihsig = setdiff([1:nbofdim],[ix itime])
+    x = adata.dim{ix};
+    time = adata.dim{itime};
+    hsig = adata.dim{ihsig};
+    adata.dim = {x, time, hsig};
+    xunits = adata.dimunits{ix};
+    tunits = adata.dimunits{itime};
+    hsigunits = adata.dimunits{ihsig};
+    adata.dimunits = {xunits, tunits, hsigunits};
 
-  otherwise
-    disp([' more than 3 dimensions for ' num2str(shot) ' ; ' sigtype '/' diagname])
-    error('in rdaAUG_eff')
-
+   otherwise
+    itime = 1; % default
+    for i=1:nbofdim
+      eval(['dimarray=mdsvalue(''dim_of(_rdaeff' user diagname ',' num2str(i-1) ')'');']);
+      if prod(size(dimarray)) == length(dimarray)
+        eval(['adata.dim{' num2str(i) '}=reshape(dimarray,1,length(dimarray));']);
+      end
+      eval(['adata.dimunits{' num2str(i) '}=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',' num2str(i-1) '))'');']);
+      if strcmp(adata.dimunits{i},'s'); itime = i; end
+    end
+    x = adata.dim{min(setdiff([1:2],itime))};
+    time = adata.dim{itime};
   end
 
+  adata.value = adata.data; % for backward compatibility might need to keep .value, to be checked later, .data for sure
   adata.t=time;
   adata.x=x;
   adata.hsig=hsig;
@@ -93,104 +250,140 @@ if usemdsplus
 % $$$   end
 
 else
-  % use sf2sig
-  if isempty(time_int)
-    try
-      if ~strcmp(extra_arg_sf2sig,'[]')
-	eval(['[adata,adata_time, adata_area]=sf2sig(diagname,shot,sigtype,''-exp'',shotfile_exp,' extra_arg_sf2sig ');']);
-      else
-	[adata,adata_time, adata_area]=sf2sig(diagname,shot,sigtype,'-exp',shotfile_exp);
+  % use sf2sig or sf2par
+  adata_time.data = [];
+  adata_area = [];
+  if isempty(param_name) && isempty(param_set_name) && ~area_base
+    % use sf2sig
+    if isempty(time_int)
+      try
+        if ~strcmp(extra_arg_sf2sig,'[]')
+          eval(['[adata,adata_time, adata_area]=sf2sig(diagname,shot,sigtype,''-exp'',shotfile_exp,' extra_arg_sf2sig ');']);
+        else
+          [adata,adata_time, adata_area]=sf2sig(diagname,shot,sigtype,'-exp',shotfile_exp);
+        end
+      catch ME
+        throw(ME)
+      end
+    else
+      try
+        [adata,adata_time, adata_area]=sf2sig(diagname,shot,sigtype,[time_int(1);time_int(end)],'-exp',shotfile_exp);
+      catch ME
+        throw(ME)
       end
-    catch
-      adata.value = [];
-      adata.data = [];
-      adata.dim = [];
-      adata.t = [];
-      adata_time.data = [];
-      adata_area = [];
-    end
-  else
-    try
-      [adata,adata_time, adata_area]=sf2sig(diagname,shot,sigtype,[time_int(1);time_int(end)],'-exp',shotfile_exp);
-    catch
-      adata.value = [];
-      adata.data = [];
-      adata.dim = [];
-      adata.t = [];
-      adata_time.data = [];
-      adata_area = [];
     end
-  end
-
-  adata.units = [];
-
-  if isempty(adata.value)
-    return
-  end
 
-  % special checks
-  if strcmp(upper(diagname),'SXB')
-    % time missing one point
-    if length(adata.value) == length(adata_time.value)+1
-      adata_time.value=linspace(adata_time.range(1),adata_time.range(2),length(adata.value));
-      adata_time.index(2) = length(adata.value);
-    end
-  end
-  %
-  if strcmp(upper(sigtype),'PNIQ')
-    % transform 4x2 PINIs in 1:8 PINIs and total in index=9
-    if (prod(size(adata.value))/length(adata_time.value) == 8)
-      tmp(:,1:4) = adata.value(:,:,1);
-      tmp(:,5:8) = adata.value(:,:,2);
-      tmp(:,9) = sum(tmp,2);
-      adata.value = tmp'; % transpose since will be transposed afterwards
-      adata.dimunits = {'s','8 sources;total'};
-    else
-      disp('expects 8 sources in PNIQ');
+    if isempty(adata.value)
       return
     end
-  end
 
-  adata.time_aug = adata_time;
+    %%%%%%%%%%%%%%%%%%%%%%%% NEED TO DO THESE AFTER EITHER MDSPLUS or SF2SIG, after data and dims obtained %%%%%%%%%%%%%%%%%%%%%%%
+    % special checks
+    if strcmp(upper(diagname),'SXB')
+      % time missing one point
+      if length(adata.value) == length(adata_time.value)+1
+        adata_time.value=linspace(adata_time.range(1),adata_time.range(2),length(adata.value));
+        adata_time.index(2) = length(adata.value);
+      end
+    end
+    %
+% $$$     if strcmp(upper(sigtype),'PNIQ')
+% $$$       % transform 4x2 PINIs in 1:8 PINIs and total in index=9
+% $$$       if (prod(size(adata.value))/length(adata_time.value) == 8)
+% $$$         tmp(:,1:4) = adata.value(:,:,1);
+% $$$         tmp(:,5:8) = adata.value(:,:,2);
+% $$$         tmp(:,9) = sum(tmp,2);
+% $$$         adata.value = tmp'; % transpose since will be transposed afterwards
+% $$$         adata.dimunits = {'s','8 sources;total'};
+% $$$       else
+% $$$         disp('expects 8 sources in PNIQ');
+% $$$         return
+% $$$       end
+% $$$     end
 
-  adata.area = adata_area;
+    adata.time_aug = adata_time;
 
-  adata.exp = shotfile_exp;
-  if (prod(size(adata.value))==length(adata.value))
-    % only time signal
-    adata.x = [];
-    adata.value=reshape(adata.value,1,length(adata.value));
-    if ~isempty(adata.time_aug)
-      adata.t=adata.time_aug.value;
+    adata.area = adata_area;
+
+    adata.exp = shotfile_exp;
+    if (prod(size(adata.value))==length(adata.value))
+      % only time signal
+      adata.x = [];
+      adata.value=reshape(adata.value,1,length(adata.value));
+      if ~isempty(adata.time_aug)
+        adata.t=adata.time_aug.value;
+      else
+        adata.t=[1:size(adata.value,2)];
+      end
     else
-      adata.t=[1:size(adata.value,2)];
+      if length(size(adata.value))<=2; adata.value = adata.value'; end % cannot transpose Nd>2 matrix
+      if ~isempty(adata.time_aug)
+        if length(size(adata.value))<=2;
+          adata.x=[1:prod(size(adata.value))/length(adata_time.value)];
+        else
+          adata.x = [];
+        end
+        adata.t=adata.time_aug.value;
+      else
+        adata.x=[1:size(adata.value,1)];
+        adata.t=[1:size(adata.value,2)];
+      end
+    end
+    adata.units = adata.unit;
+    %  % transpose data as output in C format, reversed from Fortran and matlab standard
+    %  ss=size(a);
+    %  nbofdim=length(ss);
+    %  if ss(end)==1; nbofdim=nbofdim-1; end
+    %  nbofdim=max(nbofdim,1);
+    %  if nbofdim==1
+    %    data=a;
+    %  else
+    %    data=a';
+    %  end
+  elseif isempty(param_set_name) && ~area_base
+    % use sf2par
+    try
+      eval(['[adata]=sf2par(diagname,shot,param_name,sigtype,''-exp'',shotfile_exp,' extra_arg_sf2sig ');']);
+    catch ME
+      trhow(ME)
+    end
+  elseif ~area_base
+    % use sf2ps
+    try
+      eval(['[adata]=sf2ps(diagname,shot,param_set_name,sigtype,''-exp'',shotfile_exp,' extra_arg_sf2sig ');']);
+    catch ME
+      trhow(ME)
     end
   else
-    if length(size(adata.value))<=2; adata.value = adata.value'; end % cannot transpose Nd>2 matrix
-    if ~isempty(adata.time_aug)
-      if length(size(adata.value))<=2;
-	adata.x=[1:prod(size(adata.value))/length(adata_time.value)];
+    % area-base
+    try
+      if ~strcmp(extra_arg_sf2sig,'[]')
+        eval(['[adata]=sf2ab(diagname,shot,sigtype,''-exp'',shotfile_exp,' extra_arg_sf2sig ');']);
       else
-	adata.x = [];
+        [adata]=sf2ab(diagname,shot,sigtype,'-exp',shotfile_exp);
       end
-      adata.t=adata.time_aug.value;
-    else
-      adata.x=[1:size(adata.value,1)];
-      adata.t=[1:size(adata.value,2)];
+      adata.data = adata.value{1};
+    catch ME
+      throw(ME)
     end
   end
-  adata.data=adata.value;
-  adata.units = adata.unit;
-  %  % transpose data as output in C format, reversed from Fortran and matlab standard
-  %  ss=size(a);
-  %  nbofdim=length(ss);
-  %  if ss(end)==1; nbofdim=nbofdim-1; end
-  %  nbofdim=max(nbofdim,1);
-  %  if nbofdim==1
-  %    data=a;
-  %  else
-  %    data=a';
-  %  end
+end
+
+if strcmp(upper(sigtype),'PNIQ')
+  % transform 4x2 PINIs in 1:8 PINIs and total in index=9
+  if (prod(size(adata.data))/length(adata.t) == 8)
+    tmp(:,1:4) = adata.data(:,:,1);
+    tmp(:,5:8) = adata.data(:,:,2);
+    tmp(:,9) = sum(tmp,2);
+    adata.data = tmp;
+    adata.value = adata.data;
+    adata.x = [1:9];
+    adata.dim = {adata.t, adata.x};
+    adata.dimunits = {'s','8 sources;total'};
+  else
+    disp('expects 8 sources in PNIQ');
+    return
+  end
 end
 
 error=0;
diff --git a/crpptbx/TCV/gdat_tcv.m b/crpptbx/TCV/gdat_tcv.m
index 09b2693a..fe0cb061 100644
--- a/crpptbx/TCV/gdat_tcv.m
+++ b/crpptbx/TCV/gdat_tcv.m
@@ -58,6 +58,15 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_tcv(shot,data_req
 %    a7 = gdat(48836,'static("r_m")[$1]'',''001'); % note first and last quote of tdi argument added by gdat
 %    a7 = gdat(48836,'tcv_eq(''''psi'''',''''liuqe.m'''')'); % do not use double quote char so 'liuqe',11 will work
 %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Remote data access for TCV
+% You need to make a "tunnel" in one unix session from the remote node using for example:
+%               ssh -L 5555:tcvdata.epfl.ch:8000 sauter@lac911.epfl.ch   % to create a tunnel to port 5555
+%
+% Then in another unix session on the remote node, in matlab and with the appropriate mds path do:
+%   >> mdsconnect('localhost:5555')
+%   >> mdsvalue('1+2') % should return 3 if correctly connected
+%
 
 %
 % Comments for local developer:
@@ -1147,6 +1156,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     if ~isfield(gdat_data.gdat_params,'trialindx') || gdat_data.gdat_params.trialindx < 0
       gdat_data.gdat_params.trialindx = [];
     end
+
     if ~isfield(gdat_data.gdat_params,'source') || isempty(gdat_data.gdat_params.source)
       gdat_data.gdat_params.source = sources_avail;
     elseif ~iscell(gdat_data.gdat_params.source)
diff --git a/crpptbx/TCV_IMAS/tcv2ids.m b/crpptbx/TCV_IMAS/tcv2ids.m
index be4ab90d..ee492985 100644
--- a/crpptbx/TCV_IMAS/tcv2ids.m
+++ b/crpptbx/TCV_IMAS/tcv2ids.m
@@ -2,7 +2,7 @@ function [ids_from_tcv,varargout] = tcv2ids(shot,varargin);
 %
 %   [ids_from_tcv,varargout] = tcv2ids(shot,varargin);
 %
-% Assumes you have done: 
+% Assumes you have done:
 % >> addpath ~g2osaute/public/matlab9_11_2016 (on the gateway)
 % >> mdsconnect('localhost:5555') % using the tunnel made in another session like: ssh -L 5555:tcvdata:8000 username@lac911.epfl.ch
 %
@@ -80,7 +80,12 @@ end
 
 for i=1:length(params_tcv2ids.ids_names)
   ids_to_get = params_tcv2ids.ids_names{i};
-  ids_empty=ids_gen(ids_to_get);
+  if exist('ids_gen')==2
+    ids_empty=ids_gen(ids_to_get);
+  else
+    gdat_ids_empty=gdat([],'ids','source',ids_to_get);
+  end
+  ids_empty = gdat_ids_empty.(ids_to_get);
   tmp = gdat(shot,'ids','source',ids_to_get,'machine','tcv');
   ids_from_tcv.(ids_to_get) = tmp.(ids_to_get);
   ids_from_tcv.([ids_to_get '_description']) = tmp.([ids_to_get '_description']);
diff --git a/crpptbx/gdat.m b/crpptbx/gdat.m
index e54cb69c..45798f79 100644
--- a/crpptbx/gdat.m
+++ b/crpptbx/gdat.m
@@ -2,7 +2,7 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat(shot,data_request
 %
 % function [gdat_data,gdat_params,error_status,varargout] = gdat(shot,data_request,varargin)
 %
-% Aim: get data from a given machine using full path or keywords. 
+% Aim: get data from a given machine using full path or keywords.
 %      Keywords should be the same for different machines, otherwise add "_machinname" to the keyword if specific
 %      Keywords are and should be case independent (transformed in lower case in the function and outputs)
 %
@@ -40,23 +40,28 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat(shot,data_request
 % eg.: param1 in gdat_params.param1 and help in gdat_params.help.param1
 %
 % Examples:
-% 
+%
 %    [gd,gp] = gdat; display(gd.gdat_request); % lists all available keywords
 %    gp.data_request = 'Ip'; gd = gdat(48836,gp);  % give input parameters as a structure
 %    gd = gdat('opt1',123,'opt2',[1 2 3],'shot',48832,'data_request','Ip','opt3','aAdB'); % give all inputs in pairs
 %
 %    gd = gdat(shot,'ip'); % standard call
 %    gd = gdat(shot,'ip','Opt1',123,'Doplot',1,'opt2','Abc'); % standard call with a few options (all lowercase in output)
-%    
+%
 %    gd = gdat(48836,'ip','doplot',1,'machine','TCV'); % working call for TCV
 %    gd = gdat(35345,'ip','doplot',1,'machine','AUG'); % working call for AUG
 %
 %    gd = gdat; to get all available data_requests for the default machine
 %    gd = gdat('machine',machine); to get all available data_requests for a given machine
 %
-%    more detailed examples for specific machine: 
+%    more detailed examples for specific machine:
 %        help gdat_tcv; help gdat_aug; help gdat_jet; etc
 %
+% Remote data access:
+%
+% For most machines we have mdsplus data access, therefore remote data access relatively easily
+% Look at help gdat_tcv; help gdat_aug; or help gdat_jet for remote data access for AUG, JET and TCV
+%
 
 %
 % Comments for local developer:
@@ -137,7 +142,7 @@ if isempty(which(subfunction)),
   addpath(fullfile(gdat_path,upper(machine_eff)));
 end
 % NOTE: we could also check if it matches the path to the main function.
-    
+
 % copy gdat present call:
 gdat_call = [];
 if nargin_eff==0
@@ -177,7 +182,7 @@ try
     args = {};
   elseif nargin_eff==1
     args = {shot};
-  elseif nargin_eff==2  
+  elseif nargin_eff==2
     args = {shot,data_request};
   else
     args = [{shot,data_request},varargin_eff];
@@ -194,7 +199,7 @@ catch ME_gdat
   end
   return
 end
-  
+
 gdat_data.gdat_call = gdat_call;
 
 if gdat_data.gdat_params.doplot
diff --git a/crpptbx/test_all_requestnames.m b/crpptbx/test_all_requestnames.m
index 6d0f440b..0c53ba39 100644
--- a/crpptbx/test_all_requestnames.m
+++ b/crpptbx/test_all_requestnames.m
@@ -1,10 +1,10 @@
-function [pass,request_list,err,telaps,skipped] = test_all_requestnames(varargin)
+function [pass,request_list,err,telaps,skipped,gdat_results] = test_all_requestnames(varargin)
 %
-% [pass,request_list,err,telaps,skipped] = test_all_requestnames(varargin);
+% [pass,request_list,err,telaps,skipped,gdat_results] = test_all_requestnames(varargin);
 %
 % test function to run all requestnames
-%  pass = test_gdat_AUG; % default test
-%  pass = test_gdat_AUG('param1',value1,'param2',value2,...); %
+%  pass = test_all_requestnames; % default test
+%  pass = test_all_requestnames('param1',value1,'param2',value2,...); %
 %    INPUT PARAMETERS (optional)
 %       machine: string of machine name (e.g. 'aug'). (default: gdat internal default)
 %       testmode: depth of test: 'reduced' or 'full' (default: 'reduced')
@@ -65,13 +65,13 @@ gdat_call = cell(Nreq,1);
 %% call gdat requests in a loop
 for ireq = 1:Nreq
   myrequest = request_list{ireq};
-  
+
   if ~ismember(myrequest,skip)
     % build request string
     gdat_call{ireq} = sprintf(['gdat_' machine '(%d,''%s'',''doplot'',%d)'],shot,myrequest,doplot);
-    
+
     % eval call
-    [err(ireq),telaps(ireq)] = do_gdat_call(gdat_call{ireq},nverbose);
+    [err(ireq),telaps(ireq),gdat_results{ireq}] = do_gdat_call(gdat_call{ireq},nverbose);
     skipped(ireq) = false;
     pause(0.1)
   else
@@ -116,17 +116,18 @@ switch upper(machine)
   skip = '';
 end
 
-function [err,telaps] = do_gdat_call(gdat_call,nverbose)
+function [err,telaps,gdat_result] = do_gdat_call(gdat_call,nverbose)
 if nverbose
   fprintf('\n calling %s...\n',gdat_call);
 end
 
 tic
 try
-  [~,~,err] = eval(gdat_call);
+  [gdat_result,~,err] = eval(gdat_call);
 catch ME
   warning('Caught matlab error. Report:\n\n%s',getReport(ME,'extended'));
   err = -1;
+  gdat_result.data = [];
 end
 telaps = toc; % elapsed time
 
@@ -144,7 +145,7 @@ if any(err==0)
   end
 end
 
-if any(skipped) 
+if any(skipped)
   fprintf('\n\n  SKIPPED:\n')
   print_header();
   for ireq=1:Nreq
-- 
GitLab