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