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 % % % varargin options: % % '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 % '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 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.'])); p.parse(params); params = p.Results; end params_ids_generic = params; ids_generic = ids_in; % % ids_properties % subcall=''; ids_generic.ids_properties.comment = params_ids_generic.comment; 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 %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]; 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') 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;