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