From eea947672be6ab34149c71cf61966ae917f63f23 Mon Sep 17 00:00:00 2001 From: Olivier Sauter <olivier.sauter@epfl.ch> Date: Thu, 31 Jan 2019 13:30:17 +0000 Subject: [PATCH] add generic ids_properties and input parser tcv_ids_headpart.m git-svn-id: https://spcsvn.epfl.ch/repos/TCV/gdat/trunk@11378 d63d8f72-b253-0410-a779-e742ad2e26cf --- crpptbx/TCV_IMAS/tcv_get_ids_equilibrium.m | 55 +--------------------- crpptbx/TCV_IMAS/tcv_ids_headpart.m | 47 ++++++++++++++++++ 2 files changed, 49 insertions(+), 53 deletions(-) create mode 100644 crpptbx/TCV_IMAS/tcv_ids_headpart.m diff --git a/crpptbx/TCV_IMAS/tcv_get_ids_equilibrium.m b/crpptbx/TCV_IMAS/tcv_get_ids_equilibrium.m index 0e50d6db..7697080e 100644 --- a/crpptbx/TCV_IMAS/tcv_get_ids_equilibrium.m +++ b/crpptbx/TCV_IMAS/tcv_get_ids_equilibrium.m @@ -1,61 +1,10 @@ -function [ids_equilibrium,ids_equilibrium_description,varargout] = tcv_get_ids_equilibrium(shot,varargin); +function [ids_equilibrium,ids_equilibrium_description,varargout] = tcv_get_ids_equilibrium(shot,ids_equil_empty,varargin); % % [ids_equilibrium,ids_equilibrium_description,varargout] = get_ids_equilibrium_fixed_boundary(shot,varargin); % % -ids_equilibrium = struct([]); -ids_equilibrium_description = struct([]); - -% 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) isempty(x) || (isnumeric(x) && isscalar(x) && (x == round(x)))); % integer -p.addOptional('empty_struct', -1, @(x) isstruct(x)); -p.addOptional('comment', 'default comment', @(x) isempty(x) || ischar(x)); % char - -p.parse; -defaults_equilibrium = p.Results; % to keep track of defaults - -if nargin==1 - p.parse(shot); - params = p.Results; -elseif nargin>=2 - p.parse(shot,varargin{:}); - params = p.Results; -else - p.parse; - if nargout>=3; varargout{1} = rmfield(p.Results,'shot'); end - return -end -% replace empty inputs with defaults -names = fieldnames(params); -mask = structfun(@isempty,params); -if any(mask), - params = rmfield(params,unique([names(mask); p.UsingDefaults.'])); - if ~isfield(params, 'shot') || isnan(params.shot) - warning('No shot entered'); - return - end - p.parse(params.shot,rmfield(params,'shot')); - params = p.Results; -end -if nargout>=3; varargout{1} = rmfield(p.Results,'shot'); end - -params_equilibrium = params; - -ids_equilibrium = params_equilibrium.empty_struct; -clear ids_equilibrium_description % so can add new subfields - -% -% ids_properties -% -ids_equilibrium.ids_properties.comment = params_equilibrium.comment; -ids_equilibrium.ids_properties.homogeneous_time = 1; -ids_equilibrium.ids_properties.source = ['TCV shot #' num2str(params_equilibrium.shot)]; -ids_equilibrium.ids_properties.provider = 'get_ids_equilibrium_fixed_boundary'; -ids_equilibrium.ids_properties.creation_date = date; +[ids_equilibrium, params_equilibrium] = tcv_ids_headpart(shot,ids_equil_empty,'equilibrium',varargin{:}); % As a general rule, for a new substructure under the main ids, construct a local structure like: % "global_quantities" with subfields being the relevant data to get and a local structure: diff --git a/crpptbx/TCV_IMAS/tcv_ids_headpart.m b/crpptbx/TCV_IMAS/tcv_ids_headpart.m new file mode 100644 index 00000000..2b49b353 --- /dev/null +++ b/crpptbx/TCV_IMAS/tcv_ids_headpart.m @@ -0,0 +1,47 @@ +function [ids_generic, params_ids_generic] = tcv_ids_headpart(shot,ids_in,ids_name,varargin); +% +% [ids_generic, params_ids_generic] = tcv_ids_headpart(shot,ids_in,ids_name,varargin); +% +% parses inputs and fill in ids_properties +% +% example: +% [ids_equilibrium, params_ids_equilibrium] = tcv_ids_headpart(shot,ids_equil_empty,'equilibrium','comment','your comment'); +% +% + +% 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('ids_in', struct([]), @(x) (isstruct(x))); +p.addOptional('ids_name', '', @(x) (ischar(x))); % char +p.addOptional('comment', 'default comment', @(x) isempty(x) || ischar(x)); % char + +p.parse(shot,ids_in,ids_name); +defaults_ids_generic = p.Results; % to keep track of defaults +params = p.Results; +if nargin >= 4 + p.parse(shot,'ids_in',ids_in,'ids_name',ids_name,varargin{:}); + params = p.Results; +end + +% replace empty inputs with defaults +names = fieldnames(params); +mask = structfun(@isempty,params); +if any(mask), + params = rmfield(params,unique([names(mask); p.UsingDefaults.'])); +end + +params_ids_generic = params; + +ids_generic = ids_in; + +% +% ids_properties +% +ids_generic.ids_properties.comment = params_ids_generic.comment; +ids_generic.ids_properties.homogeneous_time = 1; +ids_generic.ids_properties.source = ['TCV shot #' num2str(params_ids_generic.shot)]; +ids_generic.ids_properties.provider = ['tcv_get_ids_' ids_name]; +ids_generic.ids_properties.creation_date = date; -- GitLab