Skip to content
Snippets Groups Projects
Commit 831dd3a1 authored by Olivier Sauter's avatar Olivier Sauter
Browse files

make function tcv2ids2database, add error_bar option, add error_bars, clean ctv_ids functions

git-svn-id: https://spcsvn.epfl.ch/repos/TCV/gdat/trunk@11928 d63d8f72-b253-0410-a779-e742ad2e26cf
parent c6090644
Branches
Tags
No related merge requests found
...@@ -10,9 +10,14 @@ function [ids_from_tcv,varargout] = tcv2ids(shot,varargin); ...@@ -10,9 +10,14 @@ function [ids_from_tcv,varargout] = tcv2ids(shot,varargin);
% addpath ~g2osaute/public/matlab9_11_2016 % addpath ~g2osaute/public/matlab9_11_2016
% mdsconnect('localhost:5555') % 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 % {'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 % 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; ...@@ -21,8 +26,8 @@ p = inputParser;
% no required inputs here so one can call with empty args and get defaults parameters % no required inputs here so one can call with empty args and get defaults parameters
% effectively required inputs should have defaults as empty % effectively required inputs should have defaults as empty
p.addOptional('shot', [], @(x) (isnumeric(x) && isscalar(x) && (x == round(x)))); % integer 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; p.parse;
defaults_tcv2ids = p.Results; % to keep track of defaults defaults_tcv2ids = p.Results; % to keep track of defaults
...@@ -30,14 +35,13 @@ if nargin==1 ...@@ -30,14 +35,13 @@ if nargin==1
p.parse(shot); p.parse(shot);
params = p.Results; params = p.Results;
elseif nargin>=2 elseif nargin>=2
p.parse(shot,varargin{:}); p.parse('shot',shot,varargin{:});
params = p.Results; params = p.Results;
else else
p.parse; p.parse;
p.Results p.Results
return return
end end
% replace empty inputs with defaults % replace empty inputs with defaults
names = fieldnames(params); names = fieldnames(params);
mask = structfun(@isempty,params); mask = structfun(@isempty,params);
...@@ -70,8 +74,8 @@ for i=1:length(params.ids_names) ...@@ -70,8 +74,8 @@ for i=1:length(params.ids_names)
end end
end end
params.ids_names = ids_names_ok; params.ids_names = ids_names_ok;
params_tcv2ids = params; params_tcv2ids = params;
ids_from_tcv.params_tcv2ids = params_tcv2ids;
if isempty(params_tcv2ids.ids_names) if isempty(params_tcv2ids.ids_names)
disp('no ids names available') disp('no ids names available')
...@@ -80,7 +84,7 @@ end ...@@ -80,7 +84,7 @@ end
for i=1:length(params_tcv2ids.ids_names) for i=1:length(params_tcv2ids.ids_names)
ids_to_get = params_tcv2ids.ids_names{i}; 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) = tmp.(ids_to_get);
ids_from_tcv.([ids_to_get '_description']) = tmp.([ids_to_get '_description']); ids_from_tcv.([ids_to_get '_description']) = tmp.([ids_to_get '_description']);
end end
......
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 % 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'); aa=mdsvalue('1+2');
if aa ~= 3 if isempty(aa) || aa ~= 3
error('problem with mdsconnect?'); mdsconnect('localhost:5555');
aa=mdsvalue('1+2');
if isempty(aa) || aa ~= 3
error('problem with mdsconnect?');
end
end end
shot=40000; % initialize input parser
shot=62745; p = inputParser;
run_out=2; % no required inputs here so one can call with empty args and get defaults parameters
occurence=0; % 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 p.parse;
[ids_from_tcv,idsok] = tcv2ids(shot,ids2get); 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}); %% can plot with: [plotids_H] = plotids([],idsok.ids{1},idsok.ids{2});
if isfield(ids_from_tcv,'tf') 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 % 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') ...@@ -25,8 +96,9 @@ if isfield(ids_from_tcv,'tf')
end end
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); % [plotids_H] = plotids([],idsok.ids);
......
...@@ -245,8 +245,9 @@ ntime = numel(temp.psi_axis.data); ...@@ -245,8 +245,9 @@ ntime = numel(temp.psi_axis.data);
for it=1:numel(ids_equilibrium.time) 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_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.rho_tor(end);
ids_equilibrium.time_slice{it}.profiles_1d.psi = 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.*(global_quantities.psi_boundary.data(it)-temp.psi_axis.data(it)); 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 end
% %
......
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 % 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, ...@@ -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{:}); [ids_pf_active, params] = tcv_ids_headpart(shot, ids_pf_active_empty,'pf_active','homogeneous_time',0,varargin{:});
% Get subfield % Get subfield
[ids_pf_active.coil]= tcv_ids_coil(params.shot, ids_pf_active.coil(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]= tcv_ids_circuit(params.shot, ids_pf_active.circuit(1)); [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]= tcv_ids_supply(params.shot, ids_pf_active.supply(1)); [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 % make arrays not filled in empty: not the case for magnetics
ids_pf_active.vertical_force = {}; ids_pf_active.vertical_force = {};
%% Temporarely
ids_description = struct();
...@@ -69,7 +69,3 @@ switch error_bar ...@@ -69,7 +69,3 @@ switch error_bar
otherwise otherwise
error(['tcv_ids_bpol_loop: error_bar option not known: ' error_bar]) error(['tcv_ids_bpol_loop: error_bar option not known: ' error_bar])
end end
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. %% Get power supply/coils names for each circuit.
[tcv_circuit_info] = tcv_ids_pf_active_definition(); [tcv_circuit_info] = tcv_ids_pf_active_definition();
% Preallocate memory and get data % Preallocate memory and get data
ids_struct_out(1:tcv_circuit_info.ntotcircuits) = ids_structures; ids_struct_out(1:tcv_circuit_info.ntotcircuits) = ids_structures;
for ii=1:tcv_circuit_info.ntotcircuits for ii=1:tcv_circuit_info.ntotcircuits
tmpdata = tdi(tcv_circuit_info.mds_paths{ii}); % Get current tmpdata = gdat_tcv(shot,['' tcv_circuit_info.mds_paths{ii} '']); % Get current
ids_struct_out{ii}.current.data = tmpdata.data; ids_struct_out{ii}.current.data = tmpdata.data;
ids_struct_out{ii}.current.time = tmpdata.dim{1}; ids_struct_out_description{ii}.current = ['from ' tmpdata.data_fullpath];
% 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}.current.time = tmpdata.dim{1};
ids_struct_out{ii}.connections = tcv_circuit_info.connection_matrix{ii}; ids_struct_out{ii}.connections = tcv_circuit_info.connection_matrix{ii};
ids_struct_out{ii}.name = tcv_circuit_info.circuit_names{ii}{1}; 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 end
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 % 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 % 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). % 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 ...@@ -56,28 +70,71 @@ for ii=1:ncircuits2ids
ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit
for jj = 1:ncoil2ids for jj = 1:ncoil2ids
ind_coil_ids = ind_coil_ids +1; ind_coil_ids = ind_coil_ids +1;
ids_struct_out{ind_coil_ids}.name = coil_names2ids{ii}{jj}; 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}); tmpdata = tdi(mds_paths2ids{ii});
ids_struct_out{ind_coil_ids}.current.data = tmpdata.data; ids_struct_out{ind_coil_ids}.current.data = tmpdata.data;
ids_struct_out{ind_coil_ids}.current.time = tmpdata.dim{1}; ids_struct_out_description{ind_coil_ids}.current.data = ['from ' mds_paths2ids{ii}];
ids_struct_out{ind_coil_ids}.current.data_error_upper = 200.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); ids_struct_out{ind_coil_ids}.current.time = tmpdata.dim{1};
% (leave empty when symmetric) ids_struct_out{ind_coil_ids}.current.data_error_lower = 200;
% Find index on static tree % Find index on static tree
tmpind = find(strcmp(ids_struct_out{ii}.name, namepfc)); 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.r = r_c(tmpind);
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_r = ['from static(''r_c'')'];
ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.width = w_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.height = h_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}.turns_with_sign = nt_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.geometry_type = 2; % 1 outline, 2 rectangle, 4 arc of circle ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_width = ['from static(''w_c'')'];
% ids_struct_out{ind_coil_ids}.current.data_error_upper = % TO BE FOUND; ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.height = h_c(tmpind);
% (leave empty when symmetric) ids_struct_out{ind_coil_ids}.current.data_error_lower = % TO BE FOUND; 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
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
...@@ -39,17 +39,18 @@ for ii=1:Nprobes ...@@ -39,17 +39,18 @@ for ii=1:Nprobes
% sub_ids_struct_out{ii}.position.phi = 0; % TO BE FOUND % sub_ids_struct_out{ii}.position.phi = 0; % TO BE FOUND
end end
fixed_error = 0.001200000056997;
switch error_bar switch error_bar
case 'delta' case 'delta'
for ii=1:Nprobes 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_upper = ['from fixed error value in case ' error_bar];
sub_ids_struct_out_description{ii}.flux_data_error_lower = ['not provided since symmetric']; 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)); %(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 end
case 'delta_with_lower' case 'delta_with_lower'
for ii=1:Nprobes 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{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_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]; 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 ...@@ -57,8 +58,8 @@ switch error_bar
end end
case 'added' case 'added'
for ii=1:Nprobes 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_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 - 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 - 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_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]; sub_ids_struct_out_description{ii}.flux.data_error_lower = ['from data - fixed error value in case ' error_bar];
end end
......
...@@ -19,6 +19,7 @@ end ...@@ -19,6 +19,7 @@ end
tmp = gdat_tcv( shot, 'ip_trapeze'); tmp = gdat_tcv( shot, 'ip_trapeze');
time = tmp.dim{1}; time = tmp.dim{1};
data = tmp.data; data = tmp.data;
tmpdml = gdat_tcv( shot, '\results::dmlcore');
% Preallocate dimension % Preallocate dimension
ids_struct_out = ids_structures; ids_struct_out = ids_structures;
...@@ -28,4 +29,38 @@ ids_struct_out{1}.ip.data = data; ...@@ -28,4 +29,38 @@ ids_struct_out{1}.ip.data = data;
ids_struct_out_description{1}.ip = ['from ' tmp.data_fullpath]; ids_struct_out_description{1}.ip = ['from ' tmp.data_fullpath];
ids_struct_out{1}.ip.time = time; 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
...@@ -25,7 +25,6 @@ coil_names_and_current_sign = {... ...@@ -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 {'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 {'T_001', 'T_002', 'T_003'}, [1,1,-1]; ...% Circuit 20 %T003 in opposite direction
}; };
power_supply_names_and_current_sign = {... power_supply_names_and_current_sign = {...
{'OH1'}, [1];... % Circuit 1 {'OH1'}, [1];... % Circuit 1
{'OH2'}, [1];... % Circuit 2 {'OH2'}, [1];... % Circuit 2
...@@ -92,8 +91,6 @@ combined_structure.power_supply_current_signs = power_supply_current_sign; ...@@ -92,8 +91,6 @@ combined_structure.power_supply_current_signs = power_supply_current_sign;
combined_structure.circuit_names = circuit_names; combined_structure.circuit_names = circuit_names;
combined_structure = get_circuiting(combined_structure); %Add circuiting information combined_structure = get_circuiting(combined_structure); %Add circuiting information
end
%% Create the connection matrix from the previous information %% Create the connection matrix from the previous information
function circuit_struct = get_circuiting(circuit_struct) function circuit_struct = get_circuiting(circuit_struct)
% Get dimension of the circuits % Get dimension of the circuits
...@@ -151,8 +148,6 @@ for ii=1:circuit_struct.ntotcircuits ...@@ -151,8 +148,6 @@ for ii=1:circuit_struct.ntotcircuits
end end
end
%% Plot connection matrix %% Plot connection matrix
function plot_connection_matrix(mat, psnames, cnames, circuitname, circuit ) function plot_connection_matrix(mat, psnames, cnames, circuitname, circuit )
% Plot the value of a matrix in separated block % Plot the value of a matrix in separated block
...@@ -193,8 +188,3 @@ xlabel('Element name'); ...@@ -193,8 +188,3 @@ xlabel('Element name');
ylabel('Node'); ylabel('Node');
set(ax,'Xtick', xti, 'Ytick', yti, 'XTickLabel', xlab, 'YTickLabel', ylab') set(ax,'Xtick', xti, 'Ytick', yti, 'XTickLabel', xlab, 'YTickLabel', ylab')
end
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. %% Get power supply/coils names for each circuit.
[tcv_circuit_info] = tcv_ids_pf_active_definition(); [tcv_circuit_info] = tcv_ids_pf_active_definition();
% Preallocate memory and get data % Preallocate memory and get data
ids_struct_out(1:tcv_circuit_info.ntotpowersupplies) = ids_structures; ids_struct_out(1:tcv_circuit_info.ntotpowersupplies) = ids_structures;
for ii=1:tcv_circuit_info.ntotpowersupplies for ii=1:tcv_circuit_info.ntotpowersupplies
tmpdata = tdi(tcv_circuit_info.mds_paths{ii}); % Get current tmpdata = gdat_tcv(shot,['' tcv_circuit_info.mds_paths{ii} '']); % Get current
ids_struct_out{ii}.current.data = abs(tmpdata.data); ids_struct_out{ii}.current.data = abs(tmpdata.data);
ids_struct_out{ii}.current.time = tmpdata.dim{1}; ids_struct_out_description{ii}.current = ['abs value from ' tmpdata.data_fullpath];
% 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}.current.time = tmpdata.dim{1};
ids_struct_out{ii}.name = tcv_circuit_info.power_supply_names{ii}; 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 end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment