From 0c887baf19cc57f95f2f7bd8ceed92099ff7d0da Mon Sep 17 00:00:00 2001
From: Olivier Sauter <olivier.sauter@epfl.ch>
Date: Mon, 25 Mar 2019 10:34:06 +0000
Subject: [PATCH] further tests from epfl to ipp, use startmds server on
 sxaug31, see help gdat_aug

git-svn-id: https://spcsvn.epfl.ch/repos/TCV/gdat/trunk@11635 d63d8f72-b253-0410-a779-e742ad2e26cf
---
 crpptbx/AUG/gdat_aug.m    |   5 ++
 crpptbx/AUG/geteqdskAUG.m |  12 ++---
 crpptbx/AUG/rdaAUG_eff.m  | 109 +++++++++++++++++++++++---------------
 3 files changed, 76 insertions(+), 50 deletions(-)

diff --git a/crpptbx/AUG/gdat_aug.m b/crpptbx/AUG/gdat_aug.m
index 61bf5d64..bb7f7210 100644
--- a/crpptbx/AUG/gdat_aug.m
+++ b/crpptbx/AUG/gdat_aug.m
@@ -65,6 +65,11 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_aug(shot,data_req
 %   >> mdsconnect('localhost:8001')
 %   >> mdsvalue('1+2') % should return 3 if correctly connected
 %
+% [Problems with mds server for integers, temporary fix, start an mds server on sxaug31 (or 32++?) thus need 2 other sessions:
+%   1) in one unix session do: ssh osauter@gate1.aug.ipp.mpg.de ; then connect to sxaug31: ssh -X sxaug31; then execute startmds and leave window
+%   2) in another unix session connect to mds server through gate1: ssh -losauter -L 8002:sxaug31.aug.ipp.mpg.de:8001 gate1.aug.ipp.mpg.de
+%   3) in your local session in matlab do: >> mdsconnect('localhost:8002') (and verify with >> mdsvalue('1+2')
+
 %
 % 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
diff --git a/crpptbx/AUG/geteqdskAUG.m b/crpptbx/AUG/geteqdskAUG.m
index 3ca27016..cfae4314 100644
--- a/crpptbx/AUG/geteqdskAUG.m
+++ b/crpptbx/AUG/geteqdskAUG.m
@@ -16,12 +16,12 @@ function [eqdskAUG, equil_all_t, equil_t_index]=geteqdskAUG(shot,time,zshift,var
 %
 
 
-if ~exist('shot') || isempty(shot); 
+if ~exist('shot') || isempty(shot);
   disp('requires a shot or equil structure from gdat(shot,''equil'',...) in geteqdskAUG')
   return
 end
 
-if ~exist('time'); 
+if ~exist('time');
   time_eff = 2.0;
 else
   time_eff = time;
@@ -58,7 +58,7 @@ else
 end
 
 if isnumeric(shot)
-  equil=gdat(shot,'equil','equil',equil_source,'extra_arg_sf2sig',extra_arg_sf2sig);
+  equil=gdat_aug(shot,'equil','equil',equil_source,'extra_arg_sf2sig',extra_arg_sf2sig);
 else
   equil = shot;
   shot = equil.shot;
@@ -108,7 +108,7 @@ eqdsk.ind1=1;
 psisign = sign(eqdsk.psimesh(end)-eqdsk.psimesh(1));
 [dum1,dum2,dum3,F2_05]=interpos(psisign.*eqdsk.psimesh,eqdsk.FFprime,-0.01);
 
-b0=gdat(shot,'b0');
+b0=gdat_aug(shot,'b0');
 [zz itb0]=min(abs(b0.t-time_eff));
 eqdsk.b0 = b0.data(itb0);
 eqdsk.r0 = 1.65;
@@ -116,10 +116,10 @@ fedge=eqdsk.r0.*eqdsk.b0;
 F2 = psisign.*2.*F2_05 + fedge.^2;
 eqdsk.F = sqrt(F2)*sign(eqdsk.b0);
 
-rmag=gdat(shot,'rmag','source',equilpar_source,'extra_arg_sf2sig',extra_arg_sf2sig);
+rmag=gdat_aug(shot,'rmag','source',equilpar_source,'extra_arg_sf2sig',extra_arg_sf2sig);
 [zz itrmag]=min(abs(rmag.t-time_eff));
 eqdsk.raxis = rmag.data(itrmag);
-zmag=gdat(shot,'zmag','source',equilpar_source,'extra_arg_sf2sig',extra_arg_sf2sig);
+zmag=gdat_aug(shot,'zmag','source',equilpar_source,'extra_arg_sf2sig',extra_arg_sf2sig);
 eqdsk.zaxis = zmag.data(itrmag) - eqdsk.zshift;
 
 % get plasma boundary
diff --git a/crpptbx/AUG/rdaAUG_eff.m b/crpptbx/AUG/rdaAUG_eff.m
index 0e76eeef..d1a0d91f 100644
--- a/crpptbx/AUG/rdaAUG_eff.m
+++ b/crpptbx/AUG/rdaAUG_eff.m
@@ -125,22 +125,30 @@ if usemdsplus
 % $$$     mdsconnect('localhost');
 % $$$   end
 
+  % extract if need raw
+  ij=strfind(extra_arg_sf2sig,'raw');
+  ask_raw = '';
+  if ~isempty(ij)
+    ask_raw = '"raw"';
+  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
+  if isempty(time_int)
+    tstart = '';
+    tend = '';
+  else
+    tstart = num2str(time_int(1));
+    tend = num2str(time_int(2));
+  end
   user=getenv('USER');
   if isempty(param_name) && isempty(param_set_name) && ~area_base && ~time_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
+    % use augsignal to get effective layout as in ISIS and sf2sig, for example for EQI/PFM
+    eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augsignal(' num2str(shot) ',"' diagname '","' sigtype '","' shotfile_exp ...
+            '",' ed_number ',' tstart ',' tend ',_oshot' user diagname ',_oed' user diagname ',' ask_raw ')'');']);
   elseif isempty(param_set_name) && ~area_base && ~time_base
     % use augparam
     eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augparam(' num2str(shot) ',"' diagname '","' sigtype '","' param_name '"' ...
@@ -154,7 +162,7 @@ if usemdsplus
     % area-base or time-base, can only get dim_of at this stage
     area_time_base_name = area_base_name;
     area_time_base_dimof = area_base_dimof;
-    if ~isempty(time_base_name); 
+    if ~isempty(time_base_name);
       area_time_base_name = time_base_name;
       area_time_base_dimof = time_base_dimof;
     end
@@ -197,13 +205,20 @@ if usemdsplus
   switch nbofdim
    case 1
     adata.data=reshape(adata.data,1,length(adata.data));
-    eval(['time=mdsvalue(''dim_of(_rdaeff' user diagname ',0)'');']);
+    idim0 = 0;
+    eval(['time=mdsvalue(''dim_of(_rdaeff' user diagname ',' num2str(idim0) ')'');']);
+    if numel(time) ~= numel(adata.data)
+      idim0 = 1;
+      eval(['time=mdsvalue(''dim_of(_rdaeff' user diagname ',' num2str(idim0) ')'');']);
+      if numel(time) ~= numel(adata.data)
+        warning(['problem with dim for: ' diagname ', ' sigtype])
+      end
+    end
     time = reshape(time,1,length(time));
     x=[];
     adata.dim = {time};
-    eval(['tunits=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',0))'');']);
+    eval(['tunits=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',' num2str(idim0) '))'');']);
     adata.dimunits = {tunits};
-
    case 2
     adata.data = adata.data';
     did_transpose = 1;
@@ -217,33 +232,33 @@ if usemdsplus
     eval(['tunits=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',0))'');']);
     adata.dimunits = {xunits, tunits};
 
-   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};
+% $$$    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
     itime = 1; % default
@@ -251,8 +266,10 @@ if usemdsplus
       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));']);
+      else
+          eval(['adata.dim{' num2str(i) '} = dimarray;']);
       end
-      eval(['adata.dimunits{' num2str(i) '}=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',' num2str(i-1) '))'');']);
+      eval(['adata.dimunits{' num2str(i) '}=deblank(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))};
@@ -263,8 +280,7 @@ if usemdsplus
   adata.t=time;
   adata.x=x;
   adata.hsig=hsig;
-  eval(['adata.units=mdsvalue(''units_of(_rdaeff' user diagname ')'');']);
-  adata.units=deblank(adata.units);
+  eval(['adata.units=deblank(mdsvalue(''units_of(_rdaeff' user diagname ')''));']);
   %mdsdisconnect;
 % $$$   if ~unix('test -d /home/duval/mdsplus')
 % $$$     rmpath('/home/duval/mdsplus')
@@ -289,8 +305,13 @@ else
       end
     else
       try
-        [adata,adata_time, adata_area]=sf2sig(diagname,shot,sigtype,[time_int(1);time_int(end)],'-exp',shotfile_exp);
-	adata.data = adata.value; % at this stage keep both but try to work only on .data (for adata which can be from sf2.. or mds)
+        if ~isempty(extra_arg_sf2sig) && ~strcmp(extra_arg_sf2sig,'[]')
+          eval(['[adata,adata_time, adata_area]=sf2sig(diagname,shot,sigtype,[' num2str(time_int(1)) ';' num2str(time_int(2)) ...
+                '] ,''-exp'',shotfile_exp,' extra_arg_sf2sig ');']);
+        else
+          [adata,adata_time, adata_area]=sf2sig(diagname,shot,sigtype,[time_int(1);time_int(end)],'-exp',shotfile_exp);
+        end
+          adata.data = adata.value; % at this stage keep both but try to work only on .data (for adata which can be from sf2.. or mds)
       catch ME
         throw(ME)
       end
-- 
GitLab