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