diff --git a/crpptbx/TCV_IMAS/tcv2ids.m b/crpptbx/TCV_IMAS/tcv2ids.m index 69df85e4b1f42577e231a41cca9fcd4dbf7b868a..becc3cd8aa54e01278363b11ebda0843d9225666 100644 --- a/crpptbx/TCV_IMAS/tcv2ids.m +++ b/crpptbx/TCV_IMAS/tcv2ids.m @@ -10,9 +10,14 @@ function [ids_from_tcv,varargout] = tcv2ids(shot,varargin); % addpath ~g2osaute/public/matlab9_11_2016 % mdsconnect('localhost:5555') % -% varargin{1}: ids to load, by default all defined so far (if empty or empty string or not given) +% varargin: 'ids_names': cell, idss to load, by default all defined so far (if empty or empty string or not given) % {'equilibrium', 'magnetics', 'pf_active','wall','core_profiles'} or a subset +% varargin{2}: 'error_bar': type (string) +% empty or 'delta' (default): meaning difference in upper is set (standard error_bar +% 'added': errorbar is added: upper=data+delta and lower=data-delta +% 'delta_with_lower': as 'delta' but lower also set % +% Outputs % varargout{1}: return also the ids in array of structure with the names, to allow easy use of plotallids % @@ -21,8 +26,8 @@ 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_names', {'equilibrium', 'magnetics', 'pf_active','wall', 'tf','core_profiles'}, @(x) isempty(x) | (ischar(x) || iscell(x))); % char or cell array - +p.addOptional('ids_names', {'equilibrium', 'magnetics', 'pf_active','wall', 'tf','core_profiles'}, @(x) isempty(x) | iscell(x) ); % char or cell array +p.addOptional('error_bar', 'delta', @(x) isempty(x) | ischar(x) ); % char or cell array p.parse; defaults_tcv2ids = p.Results; % to keep track of defaults @@ -30,14 +35,13 @@ if nargin==1 p.parse(shot); params = p.Results; elseif nargin>=2 - p.parse(shot,varargin{:}); + p.parse('shot',shot,varargin{:}); params = p.Results; else p.parse; p.Results return end - % replace empty inputs with defaults names = fieldnames(params); mask = structfun(@isempty,params); @@ -70,8 +74,8 @@ for i=1:length(params.ids_names) end end params.ids_names = ids_names_ok; - params_tcv2ids = params; +ids_from_tcv.params_tcv2ids = params_tcv2ids; if isempty(params_tcv2ids.ids_names) disp('no ids names available') @@ -80,7 +84,7 @@ end for i=1:length(params_tcv2ids.ids_names) ids_to_get = params_tcv2ids.ids_names{i}; - tmp = gdat(shot,'ids','source',ids_to_get,'machine','tcv','error_bar','added'); + tmp = gdat(shot,'ids','source',ids_to_get,'machine','tcv','error_bar',params_tcv2ids.error_bar); ids_from_tcv.(ids_to_get) = tmp.(ids_to_get); ids_from_tcv.([ids_to_get '_description']) = tmp.([ids_to_get '_description']); end diff --git a/crpptbx/TCV_IMAS/tcv2ids2database.m b/crpptbx/TCV_IMAS/tcv2ids2database.m index 791edd519dbda97ac0696ee1bf629880f6183568..861d42f8a839b19823083831f5d0e45d74e8cfb6 100644 --- a/crpptbx/TCV_IMAS/tcv2ids2database.m +++ b/crpptbx/TCV_IMAS/tcv2ids2database.m @@ -1,21 +1,92 @@ +function [ids_from_tcv,varargout] = tcv2ids2database(shot,run_out,varargin); +% +% [ids_from_tcv,varargout] = tcv2ids2database(shot,run_out,varargin) % % script to get TCV data as ids and then write them on the database % +% Uses function tcv2ids and ids2database +% Assumes you connected to the right port like: mdsconnect('localhost:5555'); (if not tries that one) +% +% varargin: 'occurence': occurence value +% varargin: 'ids_names': cell, ids to load, by default all defined so far (if empty or empty string or not given) +% {'equilibrium', 'magnetics', 'tf', 'pf_active','wall','core_profiles'} or a subset +% varargin: 'error_bar': type (string) +% 'delta' or empty (default): meaning difference in upper is set (standard error_bar +% 'added': errorbar is added: upper=data+delta and lower=data-delta +% 'delta_with_lower': as 'delta' but lower also set +% +% example: +% ids_from_tcv = tcv2ids2database(62745,9999,'ids_names',{'pf_active'},'error_bar','added'); % to test only one ids +% ids_from_tcv = tcv2ids2database(62745,9999,'error_bar','added'); % to get all default ids's and old errorbar type +% + +ids_from_tcv = []; -mdsconnect('localhost:5555'); +% mdsconnect('localhost:5555'); aa=mdsvalue('1+2'); -if aa ~= 3 - error('problem with mdsconnect?'); +if isempty(aa) || aa ~= 3 + mdsconnect('localhost:5555'); + aa=mdsvalue('1+2'); + if isempty(aa) || aa ~= 3 + error('problem with mdsconnect?'); + end end -shot=40000; -shot=62745; -run_out=2; -occurence=0; +% 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('run_out', [], @(x) (isnumeric(x) && isscalar(x) && (x == round(x)))); % integer +p.addOptional('occurence', 0, @(x) (isnumeric(x) && isscalar(x) && (x == round(x)))); % integer +p.addOptional('ids_names', {'equilibrium', 'magnetics', 'pf_active','wall', 'tf','core_profiles'}, @(x) isempty(x) | iscell(x)); % char or cell array +p.addOptional('error_bar', 'delta', @(x) isempty(x) | ischar(x) ); % char or cell array -ids2get = {'equilibrium', 'magnetics', 'pf_active','wall','core_profiles'}; % default will load all defined so far -[ids_from_tcv,idsok] = tcv2ids(shot,ids2get); +p.parse; +defaults_tcv2ids2database = p.Results; % to keep track of defaults +if nargin == 1 + p.parse(shot); + params = p.Results; +elseif nargin == 2 + p.parse(shot,run_out); + params = p.Results; +elseif nargin > 2 + p.parse(shot,run_out,varargin{:}); + params = p.Results; +else + p.parse; + p.Results + 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 + +ids_names_ok = params.ids_names; +for i=1:length(params.ids_names) + ij = strcmp(params.ids_names{i},defaults_tcv2ids2database.ids_names); + if ~any(ij) + disp(['ids name: ' params.ids_names{i} ' is not available yet, ask O. Sauter']) + ids_names_ok = setdiff(ids_names_ok,params.ids_names{i}); + end +end +params.ids_names = ids_names_ok; +params_tcv2ids2database = params; +params_not_in_tcv2ids = {'run_out','occurence'}; +params_tcv2ids = rmfield(params_tcv2ids2database,params_not_in_tcv2ids); +[ids_from_tcv,idsok] = tcv2ids(shot,params_tcv2ids); +ids_from_tcv.params_tcv2ids2database = params_tcv2ids2database; +ids_from_tcv.params_tcv2ids2database %% can plot with: [plotids_H] = plotids([],idsok.ids{1},idsok.ids{2}); if isfield(ids_from_tcv,'tf') % avoid present problem of not saving data if ids_from_tcv.tf.field_map{1}.time is not set @@ -25,8 +96,9 @@ if isfield(ids_from_tcv,'tf') end end %% -[ids_put_status] = ids2database(shot,run_out,occurence,ids_from_tcv); +[ids_put_status] = ids2database(shot,run_out,ids_from_tcv.params_tcv2ids2database.occurence,ids_from_tcv); +ids_from_tcv.ids_put_status = ids_put_status; % [plotids_H] = plotids([],idsok.ids); diff --git a/crpptbx/TCV_IMAS/tcv_get_ids_equilibrium.m b/crpptbx/TCV_IMAS/tcv_get_ids_equilibrium.m index c9bdb3dafadda2dcb416810cc51454f84ba1f282..8c8d55153f82052172bdfdea4b5ada1d0cbcba1e 100644 --- a/crpptbx/TCV_IMAS/tcv_get_ids_equilibrium.m +++ b/crpptbx/TCV_IMAS/tcv_get_ids_equilibrium.m @@ -245,8 +245,9 @@ ntime = numel(temp.psi_axis.data); for it=1:numel(ids_equilibrium.time) ids_equilibrium.time_slice{it}.profiles_1d.rho_tor_norm = ids_equilibrium.time_slice{it}.profiles_1d.rho_tor./ ... ids_equilibrium.time_slice{it}.profiles_1d.rho_tor(end); - ids_equilibrium.time_slice{it}.profiles_1d.psi = temp.psi_axis.data(it) + ... - profiles_1d.rho_tor.x.^2.*(global_quantities.psi_boundary.data(it)-temp.psi_axis.data(it)); + ids_equilibrium.time_slice{it}.profiles_1d.psi = ids_equilibrium.time_slice{it}.global_quantities.psi_axis + ... + profiles_1d.rho_tor.x.^2 .* ... + (ids_equilibrium.time_slice{it}.global_quantities.psi_boundary- ids_equilibrium.time_slice{it}.global_quantities.psi_axis); end % diff --git a/crpptbx/TCV_IMAS/tcv_get_ids_pf_active.m b/crpptbx/TCV_IMAS/tcv_get_ids_pf_active.m index 13edd4f99c819d7c8f74fc083eedbefd2d1bdbf0..045275b21f994de06def353ea089fb05013e85c1 100644 --- a/crpptbx/TCV_IMAS/tcv_get_ids_pf_active.m +++ b/crpptbx/TCV_IMAS/tcv_get_ids_pf_active.m @@ -1,4 +1,4 @@ -function [ids_pf_active,ids_description,varargout] = tcv_get_ids_pf_active(shot, ids_pf_active_empty, gdat_params, varargin) +function [ids_pf_active,ids_pf_active_description,varargout] = tcv_get_ids_pf_active(shot, ids_pf_active_empty, gdat_params, varargin) % % gdat_params: gdat_data.gdat_params to get all params passed from original call, in particular error_bar options % @@ -7,12 +7,10 @@ function [ids_pf_active,ids_description,varargout] = tcv_get_ids_pf_active(shot, [ids_pf_active, params] = tcv_ids_headpart(shot, ids_pf_active_empty,'pf_active','homogeneous_time',0,varargin{:}); % Get subfield -[ids_pf_active.coil]= tcv_ids_coil(params.shot, ids_pf_active.coil(1)); -[ids_pf_active.circuit]= tcv_ids_circuit(params.shot, ids_pf_active.circuit(1)); -[ids_pf_active.supply]= tcv_ids_supply(params.shot, ids_pf_active.supply(1)); +[ids_pf_active.coil,ids_pf_active_description.coil]= tcv_ids_coil(params.shot, ids_pf_active.coil(1),gdat_params); +[ids_pf_active.circuit,ids_pf_active_description.circuit]= tcv_ids_circuit(params.shot, ids_pf_active.circuit(1),gdat_params); +[ids_pf_active.supply,ids_pf_active_description.supply]= tcv_ids_supply(params.shot, ids_pf_active.supply(1),gdat_params); % make arrays not filled in empty: not the case for magnetics ids_pf_active.vertical_force = {}; -%% Temporarely -ids_description = struct(); diff --git a/crpptbx/TCV_IMAS/tcv_ids_bpol_probe.m b/crpptbx/TCV_IMAS/tcv_ids_bpol_probe.m index 16e07c445e75e6923b2ce1cb856f5e1706bbd928..6a00e2b670f7dec902a6ead862cf4d88065e0512 100644 --- a/crpptbx/TCV_IMAS/tcv_ids_bpol_probe.m +++ b/crpptbx/TCV_IMAS/tcv_ids_bpol_probe.m @@ -69,7 +69,3 @@ switch error_bar otherwise error(['tcv_ids_bpol_loop: error_bar option not known: ' error_bar]) end - - - - diff --git a/crpptbx/TCV_IMAS/tcv_ids_circuit.m b/crpptbx/TCV_IMAS/tcv_ids_circuit.m index 4bca17725cafc60454242f16ac66a2cfcc1074bc..f797b51fe87f1c92c111c80fe5387fe51f8c16ae 100644 --- a/crpptbx/TCV_IMAS/tcv_ids_circuit.m +++ b/crpptbx/TCV_IMAS/tcv_ids_circuit.m @@ -1,17 +1,69 @@ -function [ids_struct_out] = tcv_get_ids_circuit(shot, ids_structures) +function [ids_struct_out,ids_struct_out_description] = tcv_ids_circuit(shot, ids_structures, gdat_params, varargin) +% +% [ids_struct_out,ids_struct_out_description] = tcv_get_ids_circuit(shot, ids_structures, gdat_params, varargin); +% +% Get power supply/coils names for each circuit +% +% error_bar: from gdat_params.error_bar +% 'delta' (default): error_bar to be added inserted in "upper" only as mentioned in description +% 'delta_with_lower' : error_bar (abs) inserted in both lower and upper +% 'added': value already added to data: upper/lower = data +/- error_bar +% + +error_bar = 'delta'; +if exist('gdat_params') && isfield(gdat_params,'error_bar') && ~isempty(gdat_params.error_bar) + error_bar = gdat_params.error_bar; +end -mdsopen(shot) %% Get power supply/coils names for each circuit. [tcv_circuit_info] = tcv_ids_pf_active_definition(); % Preallocate memory and get data ids_struct_out(1:tcv_circuit_info.ntotcircuits) = ids_structures; for ii=1:tcv_circuit_info.ntotcircuits - tmpdata = tdi(tcv_circuit_info.mds_paths{ii}); % Get current - ids_struct_out{ii}.current.data = tmpdata.data; - ids_struct_out{ii}.current.time = tmpdata.dim{1}; - % ids_struct_out{ii}.current.data_error_upper = 0.03.*max(abs(ids_struct_out{ii}.current.data)).*ones(size(ids_struct_out{ii}.current.data)); - ids_struct_out{ii}.connections = tcv_circuit_info.connection_matrix{ii}; - ids_struct_out{ii}.name = tcv_circuit_info.circuit_names{ii}{1}; + tmpdata = gdat_tcv(shot,['' tcv_circuit_info.mds_paths{ii} '']); % Get current + ids_struct_out{ii}.current.data = tmpdata.data; + ids_struct_out_description{ii}.current = ['from ' tmpdata.data_fullpath]; + ids_struct_out{ii}.current.time = tmpdata.dim{1}; + ids_struct_out{ii}.connections = tcv_circuit_info.connection_matrix{ii}; + ids_struct_out_description{ii}.connections = ... + ['aa=tcv_ids_pf_active_definition, then from aa.connection_matrix{' num2str(ii) '}']; + ids_struct_out{ii}.name = tcv_circuit_info.circuit_names{ii}{1}; + ids_struct_out_description{ii}.name = ... + ['aa=tcv_ids_pf_active_definition, then from aa.circuit_names{' num2str(ii) '}{1}']; +end + +fixed_error_fraction = 0.03; +switch error_bar + case 'delta' + for ii=1:tcv_circuit_info.ntotcircuits + ids_struct_out{ii}.current.data_error_upper = fixed_error_fraction.*max(abs(ids_struct_out{ii}.current.data)) ... + .* ones(size(ids_struct_out{ii}.current.data)); + ids_struct_out_description{ii}.current_data_error_upper = ['from fixed_fraction (' num2str(fixed_error_fraction) ... + ') *max() in case: ' error_bar]; + ids_struct_out_description{ii}.current_data_error_lower = ['not provided since symmetric']; + end + case 'delta_with_lower' + for ii=1:tcv_circuit_info.ntotcircuits + ids_struct_out{ii}.current.data_error_upper = fixed_error_fraction.*max(abs(ids_struct_out{ii}.current.data)) ... + .* ones(size(ids_struct_out{ii}.current.data)); + ids_struct_out{ii}.current.data_error_lower = ids_struct_out{ii}.current.data_error_upper; + ids_struct_out_description{ii}.current_data_error_upper = ['from fixed_fraction (' num2str(fixed_error_fraction) ... + ') *max() in case: ' error_bar]; + ids_struct_out_description{ii}.current_data_error_lower = ids_struct_out_description{ii}.current_data_error_upper; + end + case 'added' + for ii=1:tcv_circuit_info.ntotcircuits + ids_struct_out{ii}.current.data_error_upper = ids_struct_out{ii}.current.data + ... + fixed_error_fraction.*max(abs(ids_struct_out{ii}.current.data)).*ones(size(ids_struct_out{ii}.current.data)); + ids_struct_out{ii}.current.data_error_lower = ids_struct_out{ii}.current.data - ... + fixed_error_fraction.*max(abs(ids_struct_out{ii}.current.data)).*ones(size(ids_struct_out{ii}.current.data)); + ids_struct_out_description{ii}.current_data_error_upper = ['from data + fixed_fraction (' num2str(fixed_error_fraction) ... + ') *max() in case: ' error_bar]; + ids_struct_out_description{ii}.current_data_error_lower = ['from data - fixed_fraction (' num2str(fixed_error_fraction) ... + ') *max() in case: ' error_bar]; + end + otherwise + error(['tcv_ids_bpol_loop: error_bar option not known: ' error_bar]) end diff --git a/crpptbx/TCV_IMAS/tcv_ids_coil.m b/crpptbx/TCV_IMAS/tcv_ids_coil.m index 29795881927c240db766c4db153b337d628bc409..f3b5ab97fe1f7d39c9fef2e5a3543718a707128c 100644 --- a/crpptbx/TCV_IMAS/tcv_ids_coil.m +++ b/crpptbx/TCV_IMAS/tcv_ids_coil.m @@ -1,7 +1,21 @@ -function [ids_struct_out] = tcv_get_ids_coil(shot, ids_structures) +function [ids_struct_out,ids_struct_out_description] = tcv_ids_coil(shot, ids_structures, gdat_params, varargin) +% +% [ids_struct_out,ids_struct_out_desccription] = tcv_get_ids_coil(shot, ids_structures, gdat_params, varargin) +% % pf_active coils +% +% error_bar: from gdat_params.error_bar +% 'delta' (default): error_bar to be added inserted in "upper" only as mentioned in description +% 'delta_with_lower' : error_bar (abs) inserted in both lower and upper +% 'added': value already added to data: upper/lower = data +/- error_bar +% -% TODO add logic to get the current in the coils only onces. +% TODO add logic to get the current in the coils only once. + +error_bar = 'delta'; +if exist('gdat_params') && isfield(gdat_params,'error_bar') && ~isempty(gdat_params.error_bar) + error_bar = gdat_params.error_bar; +end % Coils that can be characterized by R, Z and a % crosssectional area are described as distinct coils with a single element, this also corresponds to coils with distinct TCV names). @@ -56,28 +70,71 @@ for ii=1:ncircuits2ids ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit for jj = 1:ncoil2ids - ind_coil_ids = ind_coil_ids +1; - ids_struct_out{ind_coil_ids}.name = coil_names2ids{ii}{jj}; - - tmpdata = tdi(mds_paths2ids{ii}); - ids_struct_out{ind_coil_ids}.current.data = tmpdata.data; - ids_struct_out{ind_coil_ids}.current.time = tmpdata.dim{1}; - ids_struct_out{ind_coil_ids}.current.data_error_upper = 200.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); - % (leave empty when symmetric) ids_struct_out{ind_coil_ids}.current.data_error_lower = 200; - + ind_coil_ids = ind_coil_ids +1; + ids_struct_out{ind_coil_ids}.name = coil_names2ids{ii}{jj}; + ids_struct_out_description{ind_coil_ids}.name = ['through aa=tcv_ids_pf_active_definition from aa.coil_names ']; + tmpdata = tdi(mds_paths2ids{ii}); + ids_struct_out{ind_coil_ids}.current.data = tmpdata.data; + ids_struct_out_description{ind_coil_ids}.current.data = ['from ' mds_paths2ids{ii}]; + ids_struct_out{ind_coil_ids}.current.time = tmpdata.dim{1}; - % Find index on static tree - tmpind = find(strcmp(ids_struct_out{ii}.name, namepfc)); - ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.r = r_c(tmpind); - ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.z = z_c(tmpind); - ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.width = w_c(tmpind); - ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.height = h_c(tmpind); - ids_struct_out{ind_coil_ids}.element{1}.turns_with_sign = nt_c(tmpind); - ids_struct_out{ind_coil_ids}.element{1}.geometry.geometry_type = 2; % 1 outline, 2 rectangle, 4 arc of circle - % ids_struct_out{ind_coil_ids}.current.data_error_upper = % TO BE FOUND; - % (leave empty when symmetric) ids_struct_out{ind_coil_ids}.current.data_error_lower = % TO BE FOUND; + % Find index on static tree + tmpind = find(strcmp(ids_struct_out{ii}.name, namepfc)); + ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.r = r_c(tmpind); + ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_r = ['from static(''r_c'')']; + ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.z = z_c(tmpind); + ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_z = ['from static(''z_c'')']; + ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.width = w_c(tmpind); + ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_width = ['from static(''w_c'')']; + ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.height = h_c(tmpind); + ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_height = ['from static(''h_c'')']; + ids_struct_out{ind_coil_ids}.element{1}.turns_with_sign = nt_c(tmpind); + ids_struct_out_description{ind_coil_ids}.element{1}.turns_with_sign = ['from static(''nt_c'')']; + ids_struct_out{ind_coil_ids}.element{1}.geometry.geometry_type = 2; % 1 outline, 2 rectangle, 4 arc of circle + ids_struct_out_description{ind_coil_ids}.element{1}.geometry.geometry_type = 'rectangle'; end end +fixed_error = 200.; +ind_coil_ids = 0; +switch error_bar + case 'delta' + for ii=1:ncircuits2ids + ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit + for jj = 1:ncoil2ids + ind_coil_ids = ind_coil_ids +1; + ids_struct_out{ind_coil_ids}.current.data_error_upper = fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); + ids_struct_out_description{ind_coil_ids}.current_data_error_upper = fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); + ids_struct_out_description{ind_coil_ids}.current_data_error_lower = ['not provided since symmetric']; + end + end + case 'delta_with_lower' + for ii=1:ncircuits2ids + ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit + for jj = 1:ncoil2ids + ind_coil_ids = ind_coil_ids +1; + ids_struct_out{ind_coil_ids}.current.data_error_upper = fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); + ids_struct_out{ind_coil_ids}.current.data_error_lower = ids_struct_out{ind_coil_ids}.current.data_error_upper; + ids_struct_out_description{ind_coil_ids}.current_data_error_upper = ['from fixed error value in case ' error_bar]; + ids_struct_out_description{ind_coil_ids}.current_data_error_lower = ['from fixed error value in case ' error_bar]; + end + end + case 'added' + for ii=1:ncircuits2ids + ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit + for jj = 1:ncoil2ids + ind_coil_ids = ind_coil_ids +1; + ids_struct_out{ind_coil_ids}.current.data_error_upper = ids_struct_out{ind_coil_ids}.current.data ... + + fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); + ids_struct_out{ind_coil_ids}.current.data_error_lower = ids_struct_out{ind_coil_ids}.current.data ... + - fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); + ids_struct_out_description{ind_coil_ids}.current_data_error_upper = ['from data + fixed error value in case ' error_bar]; + ids_struct_out_description{ind_coil_ids}.current_data_error_lower = ['from data - fixed error value in case ' error_bar]; + end + end + otherwise + error(['tcv_ids_bpol_loop: error_bar option not known: ' error_bar]) +end + diff --git a/crpptbx/TCV_IMAS/tcv_ids_flux_loop.m b/crpptbx/TCV_IMAS/tcv_ids_flux_loop.m index 2949769a393075c62eb7627404d29f4df3a2c5ec..786c6b7a67f1bd1d5003c377c03523f4d9fbfa6a 100644 --- a/crpptbx/TCV_IMAS/tcv_ids_flux_loop.m +++ b/crpptbx/TCV_IMAS/tcv_ids_flux_loop.m @@ -39,17 +39,18 @@ for ii=1:Nprobes % sub_ids_struct_out{ii}.position.phi = 0; % TO BE FOUND end +fixed_error = 0.001200000056997; switch error_bar case 'delta' for ii=1:Nprobes - sub_ids_struct_out{ii}.flux.data_error_upper = 0.001200000056997.*ones(size(sub_ids_struct_out{ii}.flux.data)); + sub_ids_struct_out{ii}.flux.data_error_upper = fixed_error.*ones(size(sub_ids_struct_out{ii}.flux.data)); sub_ids_struct_out_description{ii}.flux_data_error_upper = ['from fixed error value in case ' error_bar]; sub_ids_struct_out_description{ii}.flux_data_error_lower = ['not provided since symmetric']; %(not filled if symmetric) sub_ids_struct_out{ii}.flux.data_error_lower = 0.0012;%.*ones(size(sub_ids_struct_out{ii}.flux.data)); end case 'delta_with_lower' for ii=1:Nprobes - sub_ids_struct_out{ii}.flux.data_error_upper = 0.001200000056997.*ones(size(sub_ids_struct_out{ii}.flux.data)); + sub_ids_struct_out{ii}.flux.data_error_upper = fixed_error.*ones(size(sub_ids_struct_out{ii}.flux.data)); sub_ids_struct_out{ii}.flux.data_error_lower = sub_ids_struct_out{ii}.flux.data_error_upper; sub_ids_struct_out_description{ii}.flux_data_error_upper = ['from fixed error value in case ' error_bar]; sub_ids_struct_out_description{ii}.flux_data_error_lower = ['from fixed error value in case ' error_bar]; @@ -57,8 +58,8 @@ switch error_bar end case 'added' for ii=1:Nprobes - sub_ids_struct_out{ii}.flux.data_error_upper = sub_ids_struct_out{ii}.flux.data + 0.001200000056997.*ones(size(sub_ids_struct_out{ii}.flux.data)); - sub_ids_struct_out{ii}.flux.data_error_lower = sub_ids_struct_out{ii}.flux.data - 0.001200000056997.*ones(size(sub_ids_struct_out{ii}.flux.data)); + sub_ids_struct_out{ii}.flux.data_error_upper = sub_ids_struct_out{ii}.flux.data + fixed_error.*ones(size(sub_ids_struct_out{ii}.flux.data)); + sub_ids_struct_out{ii}.flux.data_error_lower = sub_ids_struct_out{ii}.flux.data - fixed_error.*ones(size(sub_ids_struct_out{ii}.flux.data)); sub_ids_struct_out_description{ii}.flux.data_error_upper = ['from data + fixed error value in case ' error_bar]; sub_ids_struct_out_description{ii}.flux.data_error_lower = ['from data - fixed error value in case ' error_bar]; end diff --git a/crpptbx/TCV_IMAS/tcv_ids_ip.m b/crpptbx/TCV_IMAS/tcv_ids_ip.m index e53f5322b3e73eac8ca36ccfaa73f3b47acd5e39..b6210a3520d0a278b561df96d4296795f86611c0 100644 --- a/crpptbx/TCV_IMAS/tcv_ids_ip.m +++ b/crpptbx/TCV_IMAS/tcv_ids_ip.m @@ -19,6 +19,7 @@ end tmp = gdat_tcv( shot, 'ip_trapeze'); time = tmp.dim{1}; data = tmp.data; +tmpdml = gdat_tcv( shot, '\results::dmlcore'); % Preallocate dimension ids_struct_out = ids_structures; @@ -28,4 +29,38 @@ ids_struct_out{1}.ip.data = data; ids_struct_out_description{1}.ip = ['from ' tmp.data_fullpath]; ids_struct_out{1}.ip.time = time; +ids_struct_out{1}.diamagnetic_flux.data = tmpdml.data; +ids_struct_out_description{1}.diamagnetic_flux = ['from ' tmpdml.data_fullpath]; +ids_struct_out{1}.diamagnetic_flux.time = tmpdml.time; +fixed_error_ip = 2.4e3; +fixed_error_diamagnetic_flux = 0.1; +switch error_bar + case 'delta' + ids_struct_out{1}.ip.data_error_upper = fixed_error_ip.*ones(size(ids_struct_out{1}.ip.data)); + ids_struct_out_description{1}.ip_data_error_upper = ['from fixed error value in case ' error_bar]; + ids_struct_out_description{1}.ip_data_error_lower = ['not provided since symmetric']; + ids_struct_out{1}.diamagnetic_flux.data_error_upper = fixed_error_diamagnetic_flux.*ones(size(ids_struct_out{1}.diamagnetic_flux.data)); + ids_struct_out_description{1}.diamagnetic_flux_data_error_upper = ['from fixed error value in case ' error_bar]; + ids_struct_out_description{1}.diamagnetic_flux_data_error_lower = ['not provided since symmetric']; + case 'delta_with_lower' + ids_struct_out{1}.ip.data_error_upper = fixed_error_ip.*ones(size(ids_struct_out{1}.ip.data)); + ids_struct_out{1}.ip.data_error_lower = ids_struct_out{1}.ip.data_error_upper; + ids_struct_out_description{1}.ip_data_error_upper = ['from fixed error value in case ' error_bar]; + ids_struct_out_description{1}.ip_data_error_lower = ids_struct_out_description{1}.ip_data_error_upper; + ids_struct_out{1}.diamagnetic_flux.data_error_upper = fixed_error_diamagnetic_flux.*ones(size(ids_struct_out{1}.diamagnetic_flux.data)); + ids_struct_out{1}.diamagnetic_flux.data_error_lower = ids_struct_out{1}.diamagnetic_flux.data_error_upper; + ids_struct_out_description{1}.diamagnetic_flux_data_error_upper = ['from fixed error value in case ' error_bar]; + ids_struct_out_description{1}.diamagnetic_flux_data_error_lower = ids_struct_out_description{1}.diamagnetic_flux_data_error_upper; + case 'added' + ids_struct_out{1}.ip.data_error_upper = ids_struct_out{1}.ip.data + fixed_error_ip.*ones(size(ids_struct_out{1}.ip.data)); + ids_struct_out{1}.ip.data_error_lower = ids_struct_out{1}.ip.data - fixed_error_ip.*ones(size(ids_struct_out{1}.ip.data)); + ids_struct_out_description{1}.ip_data_error_upper = ['from data + fixed error value in case ' error_bar]; + ids_struct_out_description{1}.ip_data_error_lower = ['from data - fixed error value in case ' error_bar]; + ids_struct_out{1}.diamagnetic_flux.data_error_upper = ids_struct_out{1}.diamagnetic_flux.data + fixed_error_diamagnetic_flux.*ones(size(ids_struct_out{1}.diamagnetic_flux.data)); + ids_struct_out{1}.diamagnetic_flux.data_error_lower = ids_struct_out{1}.diamagnetic_flux.data - fixed_error_diamagnetic_flux.*ones(size(ids_struct_out{1}.diamagnetic_flux.data)); + ids_struct_out_description{1}.diamagnetic_flux_data_error_upper = ['from data + fixed error value in case ' error_bar]; + ids_struct_out_description{1}.diamagnetic_flux_data_error_lower = ['from data - fixed error value in case ' error_bar]; + otherwise + error(['tcv_ids_ip: error_bar option not known: ' error_bar]) +end diff --git a/crpptbx/TCV_IMAS/tcv_ids_pf_active_definition.m b/crpptbx/TCV_IMAS/tcv_ids_pf_active_definition.m index 7abb48627bce88672cdd96ba75077140d75612ec..a02ade3952d9094d56d09f368966755a03da42a6 100644 --- a/crpptbx/TCV_IMAS/tcv_ids_pf_active_definition.m +++ b/crpptbx/TCV_IMAS/tcv_ids_pf_active_definition.m @@ -25,7 +25,6 @@ coil_names_and_current_sign = {... {'G_001', 'G_002', 'G_003', 'G_004', 'G_005', 'G_006'}, [1,1,1,-1,-1,-1]; ... % Circuit 19 Lower coils connected in opposite direcetion {'T_001', 'T_002', 'T_003'}, [1,1,-1]; ...% Circuit 20 %T003 in opposite direction }; - power_supply_names_and_current_sign = {... {'OH1'}, [1];... % Circuit 1 {'OH2'}, [1];... % Circuit 2 @@ -92,8 +91,6 @@ combined_structure.power_supply_current_signs = power_supply_current_sign; combined_structure.circuit_names = circuit_names; combined_structure = get_circuiting(combined_structure); %Add circuiting information -end - %% Create the connection matrix from the previous information function circuit_struct = get_circuiting(circuit_struct) % Get dimension of the circuits @@ -151,8 +148,6 @@ for ii=1:circuit_struct.ntotcircuits end -end - %% Plot connection matrix function plot_connection_matrix(mat, psnames, cnames, circuitname, circuit ) % Plot the value of a matrix in separated block @@ -193,8 +188,3 @@ xlabel('Element name'); ylabel('Node'); set(ax,'Xtick', xti, 'Ytick', yti, 'XTickLabel', xlab, 'YTickLabel', ylab') -end - - - - diff --git a/crpptbx/TCV_IMAS/tcv_ids_supply.m b/crpptbx/TCV_IMAS/tcv_ids_supply.m index da4d3d2be944d936c712c1de8290e96499b05f84..7a7788b7d36e17dd327847d5c0789cb6140e41f2 100644 --- a/crpptbx/TCV_IMAS/tcv_ids_supply.m +++ b/crpptbx/TCV_IMAS/tcv_ids_supply.m @@ -1,15 +1,63 @@ -function [ids_struct_out] = tcv_get_ids_supply(shot, ids_structures) +function [ids_struct_out,ids_struct_out_description] = tcv_ids_supply(shot, ids_structures, gdat_params, varargin) +% +% [ids_struct_out,ids_struct_out_description] = tcv_get_ids_supply(shot, ids_structures, gdat_params, varargin); +% +% Get power supply/coils names for each circuit +% +% error_bar: from gdat_params.error_bar +% 'delta' (default): error_bar to be added inserted in "upper" only as mentioned in description +% 'delta_with_lower' : error_bar (abs) inserted in both lower and upper +% 'added': value already added to data: upper/lower = data +/- error_bar +% + +error_bar = 'delta'; +if exist('gdat_params') && isfield(gdat_params,'error_bar') && ~isempty(gdat_params.error_bar) + error_bar = gdat_params.error_bar; +end -mdsopen(shot) %% Get power supply/coils names for each circuit. [tcv_circuit_info] = tcv_ids_pf_active_definition(); % Preallocate memory and get data ids_struct_out(1:tcv_circuit_info.ntotpowersupplies) = ids_structures; for ii=1:tcv_circuit_info.ntotpowersupplies - tmpdata = tdi(tcv_circuit_info.mds_paths{ii}); % Get current - ids_struct_out{ii}.current.data = abs(tmpdata.data); - ids_struct_out{ii}.current.time = tmpdata.dim{1}; - % ids_struct_out{ii}.current.data_error_upper = 0.03.*max(abs(ids_struct_out{ii}.current.data)).*ones(size(ids_struct_out{ii}.current.data)); - ids_struct_out{ii}.name = tcv_circuit_info.power_supply_names{ii}; + tmpdata = gdat_tcv(shot,['' tcv_circuit_info.mds_paths{ii} '']); % Get current + ids_struct_out{ii}.current.data = abs(tmpdata.data); + ids_struct_out_description{ii}.current = ['abs value from ' tmpdata.data_fullpath]; + ids_struct_out{ii}.current.time = tmpdata.dim{1}; + ids_struct_out{ii}.name = tcv_circuit_info.power_supply_names{ii}; +end + +fixed_error_fraction = 0.03; +switch error_bar + case 'delta' + for ii=1:tcv_circuit_info.ntotpowersupplies + ids_struct_out{ii}.current.data_error_upper = fixed_error_fraction.*max(abs(ids_struct_out{ii}.current.data)) ... + .* ones(size(ids_struct_out{ii}.current.data)); + ids_struct_out_description{ii}.current_data_error_upper = ['from fixed_fraction (' num2str(fixed_error_fraction) ... + ') *max() in case: ' error_bar]; + ids_struct_out_description{ii}.current_data_error_lower = ['not provided since symmetric']; + end + case 'delta_with_lower' + for ii=1:tcv_circuit_info.ntotcircuits + ids_struct_out{ii}.current.data_error_upper = fixed_error_fraction.*max(abs(ids_struct_out{ii}.current.data)) ... + .* ones(size(ids_struct_out{ii}.current.data)); + ids_struct_out{ii}.current.data_error_lower = ids_struct_out{ii}.current.data_error_upper; + ids_struct_out_description{ii}.current_data_error_upper = ['from fixed_fraction (' num2str(fixed_error_fraction) ... + ') *max() in case: ' error_bar]; + ids_struct_out_description{ii}.current_data_error_lower = ids_struct_out_description{ii}.current_data_error_upper; + end + case 'added' + for ii=1:tcv_circuit_info.ntotcircuits + ids_struct_out{ii}.current.data_error_upper = ids_struct_out{ii}.current.data + ... + fixed_error_fraction.*max(abs(ids_struct_out{ii}.current.data)).*ones(size(ids_struct_out{ii}.current.data)); + ids_struct_out{ii}.current.data_error_lower = ids_struct_out{ii}.current.data - ... + fixed_error_fraction.*max(abs(ids_struct_out{ii}.current.data)).*ones(size(ids_struct_out{ii}.current.data)); + ids_struct_out_description{ii}.current_data_error_upper = ['from data + fixed_fraction (' num2str(fixed_error_fraction) ... + ') *max() in case: ' error_bar]; + ids_struct_out_description{ii}.current_data_error_lower = ['from data - fixed_fraction (' num2str(fixed_error_fraction) ... + ') *max() in case: ' error_bar]; + end + otherwise + error(['tcv_ids_bpol_loop: error_bar option not known: ' error_bar]) end