diff --git a/matlab/TCV_IMAS/tcv_get_ids_core_profiles.m b/matlab/TCV_IMAS/tcv_get_ids_core_profiles.m index a3ddde2490987680f1566b787e7a72c3f701bd95..b0d2703e37833f1a3148aceb4bf929c2ee43978b 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_core_profiles.m +++ b/matlab/TCV_IMAS/tcv_get_ids_core_profiles.m @@ -21,7 +21,11 @@ machine = 'tcv'; tens_time = -1; tens_rho = -0.1; -[ids_core_profiles, params_cores_profiles] = tcv_ids_headpart(shot,ids_equil_empty,'cores_profiles',varargin{:}); +if exist('gdat_params') + [ids_core_profiles, params_cores_profiles] = tcv_ids_headpart(shot,ids_equil_empty,'cores_profiles','gdat_params',gdat_params,varargin{:}); +else + [ids_core_profiles, params_cores_profiles] = tcv_ids_headpart(shot,ids_equil_empty,'cores_profiles',varargin{:}); +end ids_core_profiles_description = []; % base all from times fro nete_rho (which should be conf by default) @@ -269,11 +273,20 @@ for ir=1:length(temp_1d.q.x) q_cpt(ir,:) = interpos(temp_1d.q.t,temp_1d.q.data(ir,:),ids_core_profiles.time,tens_time); end for it=1:length(ids_core_profiles.time) - [ids_core_profiles.profiles_1d{it}.q] = interpos(temp_1d.q.x,q_cpt(:,it),temp_1d.fit.te_rho.grids_1d.rhopolnorm, ... + ij=isfinite(q_cpt(:,it)); + if sum(ij) >= 5 + [ids_core_profiles.profiles_1d{it}.q] = interpos(temp_1d.q.x(ij),q_cpt(ij,it),temp_1d.fit.te_rho.grids_1d.rhopolnorm, ... tens_rho,[1 0],[0 0]); - [qfit,dqdrhotor] = interpos(ids_core_profiles.profiles_1d{it}.grid.rho_tor,ids_core_profiles.profiles_1d{it}.q,tens_rho,[1 0],[0 0]); - ids_core_profiles.profiles_1d{it}.magnetic_shear = ids_core_profiles.profiles_1d{it}.grid.rho_tor./ids_core_profiles.profiles_1d{it}.q ... - .* dqdrhotor; + [qfit,dqdrhotor] = interpos(ids_core_profiles.profiles_1d{it}.grid.rho_tor,ids_core_profiles.profiles_1d{it}.q,tens_rho,[1 0],[0 0]); + ids_core_profiles.profiles_1d{it}.magnetic_shear = ids_core_profiles.profiles_1d{it}.grid.rho_tor./ids_core_profiles.profiles_1d{it}.q ... + .* dqdrhotor; + elseif sum(ij) > 0 + ids_core_profiles.profiles_1d{it}.q = interp1(temp_1d.q.x(ij),q_cpt(ij,it),temp_1d.fit.te_rho.grids_1d.rhopolnorm); + ids_core_profiles.profiles_1d{it}.magnetic_shear = -9.e40; + else + ids_core_profiles.profiles_1d{it}.q = -9.e40; + ids_core_profiles.profiles_1d{it}.magnetic_shear = -9.e40; + end end if nargin <= 2 diff --git a/matlab/TCV_IMAS/tcv_get_ids_ec_antennas.m b/matlab/TCV_IMAS/tcv_get_ids_ec_antennas.m index b7a15132d0318a4b31cb5f23d800f140648c5a13..353aac4a4297d8535fcd268c6295e25c666c9311 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_ec_antennas.m +++ b/matlab/TCV_IMAS/tcv_get_ids_ec_antennas.m @@ -6,7 +6,12 @@ function [ids_ec_antennas,ids_ec_antennas_description,varargout] = tcv_get_ids_e % gdat_params: gdat_data.gdat_params to get all params passed from original call, in particular error_bar options % -[ids_ec_antennas, params_ec_antennas] = tcv_ids_headpart(shot,ids_ec_antennas_empty,'ec_antennas','homogeneous_time',0,varargin{:}); +if exist('gdat_params') + [ids_ec_antennas, params_ec_antennas] = tcv_ids_headpart(shot,ids_ec_antennas_empty,'ec_antennas','homogeneous_time',0, ... + 'gdat_params',gdat_params,varargin{:}); +else + [ids_ec_antennas, params_ec_antennas] = tcv_ids_headpart(shot,ids_ec_antennas_empty,'ec_antennas','homogeneous_time',0,varargin{:}); +end % 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/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m b/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m index f283c6db2fc4f83ad4f61baee71d83d28055312c..54b00bb674f42512b1435499bd4b77e8fac7e2a3 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m +++ b/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m @@ -6,7 +6,11 @@ function [ids_equilibrium,ids_equilibrium_description,varargout] = tcv_get_ids_e % gdat_params: gdat_data.gdat_params to get all params passed from original call, in particular error_bar and cocos_out options % -[ids_equilibrium, params_equilibrium] = tcv_ids_headpart(shot,ids_equil_empty,'equilibrium',varargin{:}); +if exist('gdat_params') + [ids_equilibrium, params_equilibrium] = tcv_ids_headpart(shot,ids_equil_empty,'equilibrium','gdat_params',gdat_params,varargin{:}); +else + [ids_equilibrium, params_equilibrium] = tcv_ids_headpart(shot,ids_equil_empty,'equilibrium',varargin{:}); +end % 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: @@ -352,7 +356,6 @@ for it=1:numel(ids_equilibrium.time) global_quantities.psi_boundary.data(it); end - % make arrays not filled in empty: ids_equilibrium.grids_ggd = {}; for it=1:numel(ids_equilibrium.time_slice) @@ -373,6 +376,26 @@ for it=1:numel(ids_equilibrium.time_slice) ids_equilibrium.time_slice{it}.constraints.x_point = {}; end +% special test matrix cocos transform +% $$$ ldim1=129; +% $$$ ldim2=257; +% $$$ it=1; +% $$$ ids_equilibrium.time_slice{it}.coordinate_system.grid_type.index = 13; +% $$$ ids_equilibrium.time_slice{it}.coordinate_system.grid.dim1 = linspace(0,1,ldim1)'; +% $$$ ids_equilibrium.time_slice{it}.coordinate_system.grid.dim2 = linspace(0,2*pi,ldim2); +% $$$ ids_equilibrium.time_slice{it}.coordinate_system.tensor_contravariant = 2.*ones(ldim1,ldim2,3,3); +% $$$ ids_equilibrium.time_slice{it}.coordinate_system.tensor_covariant = 0.5*ones(ldim1,ldim2,3,3); +% $$$ ids_equilibrium.time_slice{it}.coordinate_system.g11_contravariant = 11.*ones(ldim1,ldim2,3,3); +% $$$ ids_equilibrium.time_slice{it}.coordinate_system.g13_contravariant = 13.*ones(ldim1,ldim2,3,3); +% $$$ for it=3:10 +% $$$ ids_equilibrium.time_slice{it}.profiles_2d{2}.grid_type.name = profiles_2d.grid_type.name; +% $$$ ids_equilibrium.time_slice{it}.profiles_2d{2}.grid_type.index = 11; +% $$$ ids_equilibrium.time_slice{it}.profiles_2d{2}.grid_type.description = profiles_2d.grid_type.description; +% $$$ ids_equilibrium.time_slice{it}.profiles_2d{2}.grid.dim1 = linspace(0,1,ldim1)'; +% $$$ ids_equilibrium.time_slice{it}.profiles_2d{2}.grid.dim2 = linspace(0,2*pi,ldim2); +% $$$ ids_equilibrium.time_slice{it}.profiles_2d{2}.psi(:,:) = 11.*ones(ldim1,ldim2); +% $$$ end + % cocos automatic transform if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2 [ids_equilibrium,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_equilibrium,'equilibrium',gdat_params.cocos_in, ... diff --git a/matlab/TCV_IMAS/tcv_get_ids_magnetics.m b/matlab/TCV_IMAS/tcv_get_ids_magnetics.m index cecb76c60ba8cc90f38bd7e31aa4d6a264ad6e6c..bf1ea8506afb6c81b1628d6c971a7d8ab5e3e251 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_magnetics.m +++ b/matlab/TCV_IMAS/tcv_get_ids_magnetics.m @@ -5,7 +5,12 @@ function [ids_magnetics,ids_magnetics_description,varargout] = tcv_get_ids_magne % gdat_params: gdat_data.gdat_params to get all params passed from original call, in particular error_bar options % -[ids_magnetics, params_magnetics] = tcv_ids_headpart(shot, ids_magnetics_empty,'magnetics','homogeneous_time',0,varargin{:}); +if exist('gdat_params') + [ids_magnetics, params_magnetics] = tcv_ids_headpart(shot, ids_magnetics_empty,'magnetics','homogeneous_time',0, ... + 'gdat_params',gdat_params,varargin{:}); +else + [ids_magnetics, params_magnetics] = tcv_ids_headpart(shot, ids_magnetics_empty,'magnetics','homogeneous_time',0,varargin{:}); +end [ids_magnetics.bpol_probe,ids_magnetics_description.bpol_probe]= tcv_ids_bpol_probe(params_magnetics.shot, ids_magnetics.bpol_probe(1),gdat_params); [ids_magnetics.flux_loop,ids_magnetics_description.flux_loop]= tcv_ids_flux_loop(params_magnetics.shot, ids_magnetics.flux_loop(1),gdat_params); diff --git a/matlab/TCV_IMAS/tcv_get_ids_nbi.m b/matlab/TCV_IMAS/tcv_get_ids_nbi.m index b4c5e644df21a911fcac62a9a5f976c12a0adb62..8da3b80b1ea51f7b4d7517e3bb8b66b8a3f91cf2 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_nbi.m +++ b/matlab/TCV_IMAS/tcv_get_ids_nbi.m @@ -6,7 +6,12 @@ function [ids_nbi,ids_nbi_description,varargout] = tcv_get_ids_nbi(shot,ids_nbi_ % gdat_params: gdat_data.gdat_params to get all params passed from original call, in particular error_bar options % -[ids_nbi, params_nbi] = tcv_ids_headpart(shot,ids_nbi_empty,'nbi','homogeneous_time',0,varargin{:}); +if exist('gdat_params') + [ids_nbi, params_nbi] = tcv_ids_headpart(shot,ids_nbi_empty,'nbi','homogeneous_time',0,'gdat_params',gdat_params,varargin{:}); +else + [ids_nbi, params_nbi] = tcv_ids_headpart(shot,ids_nbi_empty,'nbi','homogeneous_time',0,varargin{:}); +end + ids_nbi_description=''; % 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: @@ -15,7 +20,6 @@ ids_nbi_description=''; nb_units = 2; % assume 2 units: 1st NBH and DNBI -nb_units = 1; % assume 2 units: 1st NBH and DNBI ids_nbi.unit(1:nb_units) = ids_nbi.unit(1); % copy empty structure for all units, then fill in % create lists of what is different for each units so that can scan through units diff --git a/matlab/TCV_IMAS/tcv_get_ids_pf_active.m b/matlab/TCV_IMAS/tcv_get_ids_pf_active.m index 4ffa647cf27ac53292c1e347d2f052fae3a34d7b..8d3ef3e202727699fa1c69d1efac9a0c95b26705 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_pf_active.m +++ b/matlab/TCV_IMAS/tcv_get_ids_pf_active.m @@ -4,7 +4,11 @@ function [ids_pf_active,ids_pf_active_description,varargout] = tcv_get_ids_pf_ac % % Input pharser -[ids_pf_active, params] = tcv_ids_headpart(shot, ids_pf_active_empty,'pf_active','homogeneous_time',0,varargin{:}); +if exist('gdat_params') + [ids_pf_active, params] = tcv_ids_headpart(shot, ids_pf_active_empty,'pf_active','homogeneous_time',0,'gdat_params',gdat_params,varargin{:}); +else + [ids_pf_active, params] = tcv_ids_headpart(shot, ids_pf_active_empty,'pf_active','homogeneous_time',0,varargin{:}); +end % Get subfield [ids_pf_active.coil,ids_pf_active_description.coil]= tcv_ids_coil(params.shot, ids_pf_active.coil(1),gdat_params); diff --git a/matlab/TCV_IMAS/tcv_get_ids_tf.m b/matlab/TCV_IMAS/tcv_get_ids_tf.m index 03650ac456ddda72224002ca71afb7ab3f808d6c..2a5774ecd3226078e50257ea1b4ff6bce80dc160 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_tf.m +++ b/matlab/TCV_IMAS/tcv_get_ids_tf.m @@ -11,7 +11,11 @@ function [ids_tf,ids_tf_description] = tcv_get_ids_tf(shot, ids_tf_empty, gdat_ ids_tf = ids_tf_empty; -[ids_tf, params_tf] = tcv_ids_headpart(shot, ids_tf_empty,'tf','homogeneous_time',0,varargin{:}); +if exist('gdat_params') + [ids_tf, params_tf] = tcv_ids_headpart(shot, ids_tf_empty,'tf','homogeneous_time',0,'gdat_params',gdat_params,varargin{:}); +else + [ids_tf, params_tf] = tcv_ids_headpart(shot, ids_tf_empty,'tf','homogeneous_time',0,varargin{:}); +end tmp = gdat_tcv(shot, 'b0'); if ~ischar(tmp.data) diff --git a/matlab/TCV_IMAS/tcv_get_ids_wall.m b/matlab/TCV_IMAS/tcv_get_ids_wall.m index 506dc5c7e38fcc0216e2dc165aee550d7f84681c..fca0dfa25bd300b2886cc4ea871e46cbf696c6d2 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_wall.m +++ b/matlab/TCV_IMAS/tcv_get_ids_wall.m @@ -5,7 +5,11 @@ function [ids_wall,ids_wall_description,varargout] = tcv_get_ids_wall(shot, ids_ % % Input pharser -[ids_wall, params] = tcv_ids_headpart(shot, ids_wall_empty,'wall','homogeneous_time',0,varargin{:}); +if exist('gdat_params') + [ids_wall, params] = tcv_ids_headpart(shot, ids_wall_empty,'wall','homogeneous_time',0,'gdat_params',gdat_params,varargin{:}); +else + [ids_wall, params] = tcv_ids_headpart(shot, ids_wall_empty,'wall','homogeneous_time',0,varargin{:}); +end % Get data of outline [ids_wall.description_2d,ids_wall_description.description_2d]= tcv_ids_wall_description_2d(params.shot, ids_wall.description_2d(1)); diff --git a/matlab/TCV_IMAS/tcv_ids_bpol_probe.m b/matlab/TCV_IMAS/tcv_ids_bpol_probe.m index e0aede173023ea5c16009e8d4a2c9ef037ed0f8d..5027b8e8587199df5b610575f29a27adfc2f10a3 100644 --- a/matlab/TCV_IMAS/tcv_ids_bpol_probe.m +++ b/matlab/TCV_IMAS/tcv_ids_bpol_probe.m @@ -53,7 +53,7 @@ for ii=1:Nprobes sub_ids_struct_out{ii}.toroidal_angle = 0.; % to see if should match sector 3 (bpol003) aa = gdat_tcv( shot, ['static("ANG_M")[$1]'',''' sub_ids_struct_out{ii}.name '']); - sub_ids_struct_out{ii}.poloidal_angle = aa.data; + sub_ids_struct_out{ii}.poloidal_angle = -aa.data; ij=strmatch(names{ii},probes_name); sub_ids_struct_out{ii}.area = probes_area(ij); sub_ids_struct_out{ii}.length = probes_length(ij); @@ -68,8 +68,8 @@ switch error_bar case 'delta' for ii=1:Nprobes sub_ids_struct_out{ii}.field.data_error_upper = fixed_error.*ones(size(sub_ids_struct_out{ii}.field.data));% TO BE FOUND; - sub_ids_struct_out_description{ii}.field_data_error_upper = ['from fixed error value in case ' error_bar]; - sub_ids_struct_out_description{ii}.field_data_error_lower = ['not provided since symmetric']; + sub_ids_struct_out_description{ii}.field_data_error_upper = ['from fixed error value in case ' error_bar]; + sub_ids_struct_out_description{ii}.field_data_error_lower = ['not provided since symmetric']; end case 'delta_with_lower' for ii=1:Nprobes diff --git a/matlab/TCV_IMAS/tcv_ids_headpart.m b/matlab/TCV_IMAS/tcv_ids_headpart.m index 90914a7aeb4e19dd31e87ff9761b732a0ae57efd..911f2bafd2baa9ea6b2dea4425dfd8060b4aff2a 100644 --- a/matlab/TCV_IMAS/tcv_ids_headpart.m +++ b/matlab/TCV_IMAS/tcv_ids_headpart.m @@ -7,8 +7,9 @@ function [ids_generic, params_ids_generic] = tcv_ids_headpart(shot,ids_in,ids_na % % varargin options: % -% 'comment': comment to include in ids_properties +% '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: @@ -23,7 +24,8 @@ p = inputParser; 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.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); @@ -39,6 +41,8 @@ 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; @@ -48,8 +52,55 @@ ids_generic = ids_in; % % ids_properties % +subcall=''; +% $$$ if nargin>=5 && ~isempty(varargin) +% $$$ for i=1:length(varargin) +% $$$ if ~isempty(varargin{i}) +% $$$ if ischar(varargin{i}) +% $$$ subcall_add = [',' varargin{i}]; +% $$$ elseif isnumeric(varargin{i}) +% $$$ subcall_add = [',' num2str(varargin{i})]; +% $$$ elseif isstruct(varargin{i}) +% $$$ subcall_add = [',' 'struct_in']; +% $$$ elseif iscell(varargin{i}) +% $$$ subcall_add = [',' 'cell_in']; +% $$$ end +% $$$ else +% $$$ subcall_add = [',[]']; +% $$$ end +% $$$ subcall(end+1:end+length(subcall_add)) = subcall_add; +% $$$ end +% $$$ subcall(end+1:end+2) = '; '; +% $$$ end 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 + +ids_generic.ids_properties.provider = ['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 + warning('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; + else + warning('cocos_in and cocos_out expected to be fields of gdat_params') + 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.provider = ['tcv_get_ids_' ids_name]; ids_generic.ids_properties.creation_date = date;