From 041e82c7156cc82f38714fcecc39ecec51f930eb Mon Sep 17 00:00:00 2001
From: Olivier Sauter <olivier.sauter@epfl.ch>
Date: Thu, 31 Jan 2019 18:21:47 +0000
Subject: [PATCH] introduce loop and optional ids to be loaded, use gdat
 generic call

git-svn-id: https://spcsvn.epfl.ch/repos/TCV/gdat/trunk@11385 d63d8f72-b253-0410-a779-e742ad2e26cf
---
 crpptbx/TCV_IMAS/tcv2ids.m | 97 ++++++++++++++++++++++++++++----------
 1 file changed, 72 insertions(+), 25 deletions(-)

diff --git a/crpptbx/TCV_IMAS/tcv2ids.m b/crpptbx/TCV_IMAS/tcv2ids.m
index 2dd33b3d..1b5451d7 100644
--- a/crpptbx/TCV_IMAS/tcv2ids.m
+++ b/crpptbx/TCV_IMAS/tcv2ids.m
@@ -5,35 +5,82 @@ function [ids_saved,varargout] = tcv2ids(shot,run,varargin);
 % 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
-
+%
 % in another window do the tunnel: ssh -L 5555:tcvdata:8000 username@lac911.epfl.ch
 % addpath ~g2osaute/public/matlab9_11_2016
 % mdsconnect('localhost:5555')
+%
+% varargin{1}: ids to load, by default all defined so far
+%             {'equilibrium', 'magnetics', 'pf_active','wall'} or a subset
+%
+
+% initialize input parser
+p = inputParser;
+% no required inputs here so one can call with empty args and get defaults parameters
+% effectively required inputs should have defaults as empty
+p.addOptional('shot', [], @(x) (isnumeric(x) && isscalar(x) && (x == round(x)))); % integer
+p.addOptional('run', [], @(x) (isnumeric(x) && isscalar(x) && (x == round(x)))); % integer
+p.addOptional('ids_names', {'equilibrium', 'magnetics', 'pf_active','wall'}, @(x) (ischar(x) || iscell(x))); % char or cell array
+
+p.parse;
+defaults_tcv2ids = p.Results; % to keep track of defaults
+
+if nargin==1
+  p.parse(shot);
+  params = p.Results;
+elseif nargin==2
+  p.parse(shot,run);
+  params = p.Results;
+elseif nargin>=3
+  p.parse('shot',shot,'run',run,varargin{:});
+  params = p.Results;
+else
+  p.parse;
+  p.Results
+  return
+end
 
-%% Equilibrium
-equil_empty=ids_gen('equilibrium');
-[ids_equilibrium,ids_equilibrium_description]=tcv_get_ids_equilibrium(shot,equil_empty);
-ids_saved.equilibrium = ids_equilibrium;
-ids_saved.equilibrium_description = ids_equilibrium_description;
+% replace empty inputs with defaults
+names = fieldnames(params);
+mask = structfun(@isempty,params);
+if any(mask),
+  params = rmfield(params,unique([names(mask); p.UsingDefaults.']));
+end
 
-%% magnetics
-magnetics_empty=ids_gen('magnetics');
-[ids_magnetics,ids_magnetics_description]=tcv_get_ids_magnetics(shot,magnetics_empty);
-ids_saved.magnetics = ids_magnetics;
-ids_saved.magnetics_description = ids_magnetics_description;
+% check ids_names
+if ~isfield(params,'ids_names')
+  disp(['do not provide any ids_names or choose from : '])
+  ids_saved.ids_names_available = defaults_tcv2ids.ids_names;
+  defaults_tcv2ids.ids_names
+  return
+end
+if ischar(params.ids_names)
+  params.ids_names = {params.ids_names};
+end
+ids_names_ok = params.ids_names;
+for i=1:length(params.ids_names)
+  ij = strcmp(params.ids_names{i},defaults_tcv2ids.ids_names);
+  if ~any(ij)
+    disp(['ids name: ' params.ids_names{i} ' is not available yet, ask O. Sauter'])
+    ids_names_ok = setdiff(ids_names_ok,params.ids_names{i});
+  end
+end
+params.ids_names = ids_names_ok;
 
-%% pf_active
-pf_active_empty=ids_gen('pf_active');
-[ids_pf_active,ids_pf_active_description]=tcv_get_ids_pf_active(shot,pf_active_empty);
-ids_saved.pf_active = ids_pf_active;
-ids_saved.pf_active_description = ids_pf_active_description;
+params_tcv2ids = params;
 
-%% wall
-pf_wall_empty=ids_gen('wall');
-[ids_wall,ids_wall_description]=tcv_get_ids_wall(shot,pf_wall_empty);
-ids_saved.pf_wall = ids_wall;
-ids_saved.pf_wall_descrption = ids_wall_description;
+if isempty(params_tcv2ids.ids_names)
+  disp('no ids names available')
+  return
+end
 
+for i=1:length(params_tcv2ids.ids_names)
+  ids_to_get = params_tcv2ids.ids_names{i};
+  ids_empty=ids_gen(ids_to_get);
+  tmp = gdat(shot,'ids','source',ids_to_get);
+  ids_saved.(ids_to_get) = tmp.(ids_to_get);
+  ids_saved.([ids_to_get '_description']) = tmp.([ids_to_get '_description']);
+end
 
 %% Initialize the three
 shot_is_new = 1; % seems only create is ok even if does already exist
@@ -44,10 +91,10 @@ else
 end
 
 %% Put the field
-ids_put(idx,'equilibrium',ids_equilibrium);
-ids_put(idx, 'magnetics', ids_magnetics);
-ids_put(idx, 'pf_active', ids_pf_active);
-ids_put(idx, 'wall', ids_wall);
+for i=1:length(params_tcv2ids.ids_names)
+  ids_to_get = params_tcv2ids.ids_names{i};
+  ids_put(idx,ids_to_get,ids_saved.(ids_to_get));
+end
 
 %% Close the file
 imas_close(idx)
-- 
GitLab