From 0bedde178ce41ecb66cd9910902c259c05964cb7 Mon Sep 17 00:00:00 2001
From: Francesco Carpanese <francesco.carpanese@epfl.ch>
Date: Mon, 20 Jun 2016 17:21:18 +0000
Subject: [PATCH] Add gdat(#shotnum, 'rtc')

git-svn-id: https://spcsvn.epfl.ch/repos/TCV/gdat/trunk@5975 d63d8f72-b253-0410-a779-e742ad2e26cf
---
 crpptbx/TCV/gdat_tcv.m | 383 +++++++++++++++++++++++++++++++++++------
 1 file changed, 329 insertions(+), 54 deletions(-)

diff --git a/crpptbx/TCV/gdat_tcv.m b/crpptbx/TCV/gdat_tcv.m
index 6fc82f4b..1a190742 100644
--- a/crpptbx/TCV/gdat_tcv.m
+++ b/crpptbx/TCV/gdat_tcv.m
@@ -193,7 +193,7 @@ if (nargin>=ivarargin_first_char)
     for i=1:2:nargin-ivarargin_first_char+1
       if ischar(varargin_eff{i})
         % enforce lower case for any character driven input
-        if ischar(varargin_eff{i+1})
+        if ischar(varargin_eff{i+1}) && ~strcmp('path',varargin_eff{i})
           gdat_params.(lower(varargin_eff{i})) = lower(varargin_eff{i+1});
         else
           gdat_params.(lower(varargin_eff{i})) = varargin_eff{i+1};
@@ -1151,7 +1151,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     else
       for i=1:length(gdat_data.gdat_params.source)
         gdat_data.gdat_params.source{i} = lower(gdat_data.gdat_params.source{i});
-        if ~any(strmatch(gdat_data.gdat_params.source{i},lower(sources_avail)))
+        if ~any(strmatch(gdat_data.gdat_params.sourc{i},elower(sources_avail)))
           if gdat_data.gdat_params.nverbose>=1
             warning(['source = ' gdat_data.gdat_params.source{i} ' not expected with data_request= ' data_request_eff])
           end
@@ -1385,67 +1385,342 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         [qfit,~,~,phi]=interpos(q_rho.dim{1}(ij).^2,q_rho.data(ij,it),rhoequal.^2);
         dataeff = sqrt(phi .* psi_axis.data(it) ./ b0tpsi(it) ./ pi) ; % Delta_psi = -psi_axis
       else
-        dataeff = NaN;
+          dataeff = NaN;
       end
       if strcmp(data_request_eff,'rhotor_edge')
-        gdat_data.data(it) = dataeff(end);
+          gdat_data.data(it) = dataeff(end);
       elseif strcmp(data_request_eff,'rhotor')
-        gdat_data.data(:,it) = dataeff./dataeff(end);
-        gdat_data.rhotor_edge(it) = dataeff(end);
+          gdat_data.data(:,it) = dataeff./dataeff(end);
+          gdat_data.rhotor_edge(it) = dataeff(end);
       end
       gdat_data.b0 = b0tpsi(it);
     end
     
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-   case {'rhovol','volume_rho','volume'}
-    % volume_rho = vol(rho); volume = vol(LCFS) = vol(rho=1);
-    % rhovol = sqrt(vol(rho)/vol(rho=1));
-    nodenameeff='\results::psitbx:vol';
-    if liuqe_version==-1
-      nodenameeff=[begstr 'vol' substr_liuqe];
-    end
-    tracetdi=tdi(nodenameeff);
-    if isempty(tracetdi.data) || isempty(tracetdi.dim) 
-      % try to run psitbxput
-      psitbxput_version = 1.3;
-      psitbxput(psitbxput_version,shot);
-      ishot = mdsopen(shot);
-      tracetdi=tdi(nodenameeff);
-      if isempty(tracetdi.data) || isempty(tracetdi.dim)
-        return
-      end
-    end
-    gdat_data.units = tracetdi.units;
-    if strcmp(data_request_eff,'volume')
-      gdat_data.data = tracetdi.data(end,:);
-      gdat_data.dim{1} = tracetdi.dim{2};
-      gdat_data.data_fullpath=['\results::psitbx:vol(end,:)'];
-      gdat_data.dimunits{1} = tracetdi.dimunits{2};
-      gdat_data.request_description = 'volume(LCFS)=volume(rhopol=1)';
-    else
-      gdat_data.data = tracetdi.data;
-      gdat_data.dim = tracetdi.dim;
-      gdat_data.x = gdat_data.dim{1};
-      gdat_data.dimunits = tracetdi.dimunits;
-      if strcmp(data_request_eff,'volume_rho')
-        gdat_data.data_fullpath=['\results::psitbx:vol'];
-        gdat_data.request_description = 'volume(rho)';
-      elseif strcmp(data_request_eff,'rhovol')
-        gdat_data.volume_edge = gdat_data.data(end,:);
-        gdat_data.data = sqrt(gdat_data.data./repmat(reshape(gdat_data.volume_edge,1,size(gdat_data.data,2)),size(gdat_data.data,1),1));
-        gdat_data.data_fullpath='sqrt(\results::psitbx:vol/vol_edge)';
-        gdat_data.request_description = 'sqrt(volume(rho)/volume(edge))';
-      else
-         if (gdat_params.nverbose>=1)
-           disp(['should not be here in vol cases with data_request = ' data_request_eff]);
-         end
-        return
-      end
-    end
-    gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim};
+      case {'rhovol','volume_rho','volume'}
+          % volume_rho = vol(rho); volume = vol(LCFS) = vol(rho=1);
+          % rhovol = sqrt(vol(rho)/vol(rho=1));
+          nodenameeff='\results::psitbx:vol';
+          if liuqe_version==-1
+              nodenameeff=[begstr 'vol' substr_liuqe];
+          end
+          tracetdi=tdi(nodenameeff);
+          if isempty(tracetdi.data) || isempty(tracetdi.dim)
+              % try to run psitbxput
+              psitbxput_version = 1.3;
+              psitbxput(psitbxput_version,shot);
+              ishot = mdsopen(shot);
+              tracetdi=tdi(nodenameeff);
+              if isempty(tracetdi.data) || isempty(tracetdi.dim)
+                  return
+              end
+          end
+          gdat_data.units = tracetdi.units;
+          if strcmp(data_request_eff,'volume')
+              gdat_data.data = tracetdi.data(end,:);
+              gdat_data.dim{1} = tracetdi.dim{2};
+              gdat_data.data_fullpath=['\results::psitbx:vol(end,:)'];
+              gdat_data.dimunits{1} = tracetdi.dimunits{2};
+              gdat_data.request_description = 'volume(LCFS)=volume(rhopol=1)';
+          else
+              gdat_data.data = tracetdi.data;
+              gdat_data.dim = tracetdi.dim;
+              gdat_data.x = gdat_data.dim{1};
+              gdat_data.dimunits = tracetdi.dimunits;
+              if strcmp(data_request_eff,'volume_rho')
+                  gdat_data.data_fullpath=['\results::psitbx:vol'];
+                  gdat_data.request_description = 'volume(rho)';
+              elseif strcmp(data_request_eff,'rhovol')
+                  gdat_data.volume_edge = gdat_data.data(end,:);
+                  gdat_data.data = sqrt(gdat_data.data./repmat(reshape(gdat_data.volume_edge,1,size(gdat_data.data,2)),size(gdat_data.data,1),1));
+                  gdat_data.data_fullpath='sqrt(\results::psitbx:vol/vol_edge)';
+                  gdat_data.request_description = 'sqrt(volume(rho)/volume(edge))';
+              else
+                  if (gdat_params.nverbose>=1)
+                      disp(['should not be here in vol cases with data_request = ' data_request_eff]);
+                  end
+                  return
+              end
+          end
+          gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim};
+          
+          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+      case {'rtc'}
+
+          addpath('~/rtccode/development/tools/io_defs')
+          % load all real-time memory signals for various nodes
+          
+          %Get the data from mds and fill the data structure defined by
+          %define_simulink_signals
+          
+          sources_avail = {'all','defined','combined'};
+      
+          %Check if varargins match source_avail
+          if ~isfield(gdat_data.gdat_params,'path')  
+              path = '~/rtccode/development/models/R2015a/algorithms/SCD06advancedcontrol1/define_mem_list.m'
+          else
+              %              path = gdat_data.gdat_params.path;
+              path = gdat_data.gdat_params.path
+          end
     
-    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-   case {'sxr', 'mpx'}
+
+          %Check if varargins match source_avail
+          if ~isfield(gdat_data.gdat_params,'source') || isempty(gdat_data.gdat_params.source) % with no specifications all, defined, combined are taken
+              gdat_data.gdat_params.source = sources_avail;
+              
+          elseif ~iscell(gdat_data.gdat_params.source)
+              if ischar(gdat_data.gdat_params.source)
+                  gdat_data.gdat_params.source = lower(gdat_data.gdat_params.source);
+                  if ~any(strmatch(gdat_data.gdat_params.source,lower(sources_avail)))
+                      if (gdat_params.nverbose>=1)
+                          warning(['source= ' gdat_data.gdat_params.source ' is not part of the available sources: ' sprintf('''%s'' ',sources_avail{:})]);
+                      end
+                      return
+                  else
+                      gdat_data.gdat_params.source = {gdat_data.gdat_params.source};
+                  end
+              else
+                  if (gdat_params.nverbose>=1); warning([' source parameter not compatible with: ' sprintf('''%s'' ',sources_avail{:})]); end
+                  return
+              end
+          else
+              tmp = {};
+              for i=1:length(gdat_data.gdat_params.source)
+                  gdat_data.gdat_params.source{i} = lower(gdat_data.gdat_params.source{i}); %put vargin in params
+                  
+                  if ~any(strmatch(gdat_data.gdat_params.source{i},lower(sources_avail)))
+                      if gdat_data.gdat_params.nverbose>=1
+                          warning(['source = ' gdat_data.gdat_params.source{i} ' not expected with data_request= ' data_request_eff])
+                      end
+                  else
+                      tmp{end+1} = gdat_data.gdat_params.source{i};
+                  end
+              end
+              gdat_data.gdat_params.source = tmp;
+          end
+
+            
+
+                      
+          % Get data for the source requested
+          for ii=1:numel(gdat_data.gdat_params.source)
+              switch gdat_data.gdat_params.source{ii}
+                  case 'defined'
+                      mdsconnect('scd');
+                      mdsopen('rtc', shot);
+
+
+                      DS = read_from_memlist(path); %Read from memlist in SVN repository
+
+                      % Default signals initialization
+                      %DS = init_default_signals();
+                      
+                      
+                      % Put signals in standard data strucure (SDS)
+                      SDS_DS = define_simulink_signals(DS);
+                      
+                      % Add the .data and .t structure
+                      for ii=1:numel(SDS_DS) %iter over node
+                          node = ii;
+                          for jj=1:numel(SDS_DS{ii}) %iter over threads
+                              thread = jj;
+                              fieldnameslist = fieldnames(SDS_DS{ii}{jj});
+                              
+                              if numel(SDS_DS{ii})>1
+                                  is_with_threads = 1;
+                              else
+                                  is_with_threads = 0;
+                              end
+                              
+                              for kk=1:numel(fieldnameslist) %iter over fieldnames
+                                  
+                                  indices = SDS_DS{ii}{jj}.(fieldnameslist{kk}).ind;
+                                  SDS_DS{ii}{jj}.(fieldnameslist{kk}).data = {};
+                                  SDS_DS{ii}{jj}.(fieldnameslist{kk}).t = {};
+                                  for zz=1:numel(indices) %iter over indices
+                                      ind = indices(zz);
+                                      
+                                      % data expression
+                                      if is_with_threads ==0
+                                          expression =  sprintf('\\top.crpprt%.2d.mems.mem_%.2d',node,ind);
+                                      else
+                                          expression =  sprintf('\\top.crpprt%.2d.thread%.1d.mems.mem_%.3d',node,thread,ind);
+                                      end
+                                      
+                                      tmp = tdi(expression);
+                                      
+                                      if isnumeric(tmp.data)
+                                          SDS_DS{ii}{jj}.(fieldnameslist{kk}).data{zz} =  tmp.data;
+                                          
+                                          SDS_DS{ii}{jj}.(fieldnameslist{kk}).t{zz} =  tmp.dim{1};
+                                      else
+                                          fprintf('Warning node: %d   thread: %d   signal: %s   ind %d not available\n', ii,jj,fieldnameslist{kk}, zz );
+                                      end
+                                      
+                                      
+                                  end
+                              end
+             
+                          end
+                      end
+                      
+                      gdat_data.rtc_defined = SDS_DS;
+                      mdsclose;
+                      mdsdisconnect;
+                      
+                  case 'all'
+                      mdsconnect('scd');
+                      mdsopen('rtc', shot);
+                      
+                      %[node, threads, #number of signals for each thread of the node]
+                      global_node_thread_signals = ...
+                          [1,1,32;
+                          2,1,32;
+                          3,1,32;
+                          6,4,256;
+                          7,2,32];
+                      
+                      % Default signals initialization
+                      AS = init_all_signals(global_node_thread_signals);
+                      
+                      % Put signals in standard data strucure (SDS)
+                      SDS_AS = define_simulink_signals(AS);
+                      
+                      % Add the .data and .t structure
+                      for ii=1:numel(SDS_AS) %iter over node
+                          node = ii;
+                          for jj=1:numel(SDS_AS{ii}) %iter over threads
+                              thread = jj;
+                              fieldnameslist = fieldnames(SDS_AS{ii}{jj});
+                              
+                              if numel(SDS_AS{ii})>1
+                                  is_with_threads = 1;
+                              else
+                                  is_with_threads = 0;
+                              end
+                              
+                              for kk=1:numel(fieldnameslist) %iter over fieldnames
+                                  
+                                  indices = SDS_AS{ii}{jj}.(fieldnameslist{kk}).ind;
+                                  SDS_AS{ii}{jj}.(fieldnameslist{kk}).data = {};
+                                  SDS_AS{ii}{jj}.(fieldnameslist{kk}).t = {};
+                                  for zz=1:numel(indices) %iter over indices
+                                      ind = indices(zz);
+                                      
+                                      % data expression
+                                      if is_with_threads ==0
+                                          expression =  sprintf('\\top.crpprt%.2d.mems.mem_%.2d',node,ind);
+                                      else
+                                          expression =  sprintf('\\top.crpprt%.2d.thread%.1d.mems.mem_%.3d',node,thread,ind);
+                                      end
+                                      
+                                      tmp = tdi(expression);
+                                      
+                                      
+                                      if isnumeric(tmp.data)
+                                          SDS_AS{ii}{jj}.(fieldnameslist{kk}).data{zz} =  tmp.data;
+                                          
+                                          SDS_AS{ii}{jj}.(fieldnameslist{kk}).t{zz} =  tmp.dim{1};
+                                          
+                                      else
+                                          fprintf('Warning node: %d   thread: %d   signal: %s   ind %d not available\n', ii,jj,fieldnameslist{kk}, zz );
+                                      end
+                                      
+                                      
+                                  end
+                              end
+                              
+                          end
+                      end
+                      
+                      gdat_data.rtc_all = SDS_AS;
+                      mdsclose;
+                      mdsdisconnect;
+                      
+                  case 'combined'
+                      mdsconnect('scd');
+                      mdsopen('rtc', shot);
+                      
+                      %[node, threads, #number of signals for each thread of the node]
+                      global_node_thread_signals = ...
+                          [1,1,32;
+                          2,1,32;
+                          3,1,32;
+                          6,4,256;
+                          7,2,32];
+                      
+                      % Defined signalds initialization
+                      DS = read_from_memlist(path); %Read from memlist in SVN repository
+
+                      % Combined signals initialization
+                      CS = init_combined_signals(DS,global_node_thread_signals);
+                      
+                      % Put signals in standard data strucure (SDS)
+                      SDS_CS = define_simulink_signals(CS);
+                      
+                      % Add the .data and .t structure
+                      for ii=1:numel(SDS_CS) %iter over node
+                          node = ii;
+                          for jj=1:numel(SDS_CS{ii}) %iter over threads
+                              thread = jj;
+                              fieldnameslist = fieldnames(SDS_CS{ii}{jj});
+                              
+                              if numel(SDS_CS{ii})>1
+                                  is_with_threads = 1;
+                              else
+                                  is_with_threads = 0;
+                              end
+                              
+                              for kk=1:numel(fieldnameslist) %iter over fieldnames
+                                  
+                                  indices = SDS_CS{ii}{jj}.(fieldnameslist{kk}).ind;
+                                  SDS_CS{ii}{jj}.(fieldnameslist{kk}).data = {};
+                                  SDS_CS{ii}{jj}.(fieldnameslist{kk}).t = {};
+                                  for zz=1:numel(indices) %iter over indices
+                                      ind = indices(zz);
+                                      
+                                      % data expression
+                                      if is_with_threads ==0
+                                          expression =  sprintf('\\top.crpprt%.2d.mems.mem_%.2d',node,ind);
+                                      else
+                                          expression =  sprintf('\\top.crpprt%.2d.thread%.1d.mems.mem_%.3d',node,thread,ind);
+                                      end
+                                      
+                                      tmp = tdi(expression);
+                                      
+                                      
+                                      if isnumeric(tmp.data)
+                                          SDS_CS{ii}{jj}.(fieldnameslist{kk}).data{zz} =  tmp.data;
+                                          
+                                          SDS_CS{ii}{jj}.(fieldnameslist{kk}).t{zz} =  tmp.dim{1};
+                                          
+                                      else
+                                          fprintf('Warning node: %d   thread: %d   signal: %s   ind %d not available\n', ii,jj,fieldnameslist{kk}, zz );
+                                      end
+                                      
+                                      
+                                  end
+                              end
+                              
+                          end
+                      end
+                      
+                      gdat_data.rtc_combined = SDS_CS;
+                      mdsclose;
+                      mdsdisconnect;
+                  otherwise
+                      %to be added
+              end
+          end
+          
+          
+
+
+
+          
+          
+          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+      case {'sxr', 'mpx'}
 
     if strcmp(data_request_eff,'mpx')
       data_request_eff = 'mpx'; % mpx chosen through parameter 'source' within 'sxr'
-- 
GitLab