Newer
Older
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
%

Olivier Sauter
committed
% 'comment': comment to include in ids_properties, using gdat_params for example cocos_in and cocos_out
% 'homogeneous_time': homogeneous_time in ids_properties: 1 (default) if the whole ids has same time, 0 otherwise

Olivier Sauter
committed
% 'gdat_params': gdat params structure
% 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

Olivier Sauter
committed
p.addOptional('gdat_params', [], @(x) (isempty(x) || isstruct(x))); % char
p.addOptional('comment', '', @(x) isempty(x) || ischar(x)); % char
p.addOptional('homogeneous_time', 1, @(x) (isnumeric(x) && isscalar(x) && (x == round(x))));
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.']));

Olivier Sauter
committed
p.parse(params);
params = p.Results;
end
params_ids_generic = params;
ids_generic = ids_in;
%
% ids_properties
%

Olivier Sauter
committed
subcall='';

Olivier Sauter
committed
ids_generic.ids_properties.comment = params_ids_generic.comment;

Olivier Sauter
committed
if ~isempty(subcall)
add_to_comment = ['varargin: ' subcall];
if isempty(ids_generic.ids_properties.comment)
ids_generic.ids_properties.comment = add_to_comment;
else
ids_generic.ids_properties.comment(end+1:end+length(add_to_comment)+2) = ['; ' add_to_comment];
end
end

Olivier Sauter
committed
%get gdat version
[abcpath,abcfile,abcext]=fileparts(mfilename('fullpath'));
[aa1,aa2]=unix(['cd ' abcpath '; git describe --tags --first-parent --abbrev=11 --long --dirty --always']);
git_release_hash='gdat git hash not found';
if aa1==0; git_release_hash = aa2(1:end-1); end % avoid newline
ids_generic.ids_properties.provider = ['gdat_git: ' git_release_hash '; tcv_get_ids_' ids_name];

Olivier Sauter
committed
if ~isempty(params_ids_generic.gdat_params)
if isfield(params_ids_generic.gdat_params,'cocos_in') && isfield(params_ids_generic.gdat_params,'cocos_out')
comment_add = ['from TCV cocos_in=' num2str(params_ids_generic.gdat_params.cocos_in) ' transformed to cocos_out=' num2str(params_ids_generic.gdat_params.cocos_out)];
if isempty(ids_generic.ids_properties.comment)
ids_generic.ids_properties.comment = comment_add;
else
ids_generic.ids_properties.comment(end+1:end+length(comment_add)+2) = ['; ' comment_add];
end
else
disp('cocos_in and cocos_out expected to be fields of gdat_params')

Olivier Sauter
committed
end
if isfield(params_ids_generic.gdat_params,'error_bar')
provider_add = ['; error_bar option: ' params_ids_generic.gdat_params.error_bar];
ids_generic.ids_properties.provider(end+1:end+length(provider_add)) = provider_add;
end
end
ids_generic.ids_properties.homogeneous_time = params_ids_generic.homogeneous_time;
ids_generic.ids_properties.source = ['TCV shot #' num2str(params_ids_generic.shot)];
ids_generic.ids_properties.creation_date = date;