diff --git a/matlab/TCV_IMAS/tcv2ids2database.m b/matlab/TCV_IMAS/tcv2ids2database.m
index 56191700b26f000722037c0c3c2e7b6227ea73f6..a95cf90ad9f09d02d7a1d52110ed0b5de6fddf45 100644
--- a/matlab/TCV_IMAS/tcv2ids2database.m
+++ b/matlab/TCV_IMAS/tcv2ids2database.m
@@ -98,7 +98,18 @@ params_not_in_tcv2ids = {'run_out','occurence','tree_user','tree_tokamak','tree_
 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
+
+% check that coreprofiles is ok, could mean anaprofs did not succeed
+if isfield(ids_from_tcv,'core_profiles')
+  if isempty(ids_from_tcv.core_profiles.time)
+    warning([char(10) '*************' char(10) ...
+           'core_profiles.time is empty, probably no data in CONF nodes for TCV, check with hldsi(shot) command on SPC-EPFL lacs computers' ...
+           char(10) '*************' char(10)]);
+    return
+  end
+end
+
+  
 %% 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
diff --git a/matlab/TCV_IMAS/tcv_get_ids_core_profiles.m b/matlab/TCV_IMAS/tcv_get_ids_core_profiles.m
index fab451e78777c16dd266f126a5a415624667d7e8..a3ddde2490987680f1566b787e7a72c3f701bd95 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_core_profiles.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_core_profiles.m
@@ -291,5 +291,5 @@ end
 % cocos automatic transform
 if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2
   [ids_core_profiles,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_core_profiles,'core_profiles',gdat_params.cocos_in, ...
-          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in);
+          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in,gdat_params.error_bar);
 end
diff --git a/matlab/TCV_IMAS/tcv_get_ids_ec_antennas.m b/matlab/TCV_IMAS/tcv_get_ids_ec_antennas.m
index 8203da416158472b12799698989ac8aa0b31a18b..b7a15132d0318a4b31cb5f23d800f140648c5a13 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_ec_antennas.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_ec_antennas.m
@@ -34,6 +34,8 @@ end
 % $$$ ids_ec_antennas_description.time = 'time from power';
 [r_phi0,z_phi0,r1,z1,rc,zc,thetphi_L,thetphi_tor,raysbylauncher,powers,fname,z_axis,launch_params] = ...
     toray_raygeom_TCV(shot,pow.ec.t(1:10:end));
+ids_ec_antennas_description.launch_params = launch_params;
+
 
 for iant=1:nb_antennas
   ids_ec_antennas.antenna{iant}.identifier = ['L' num2str(iant)];
@@ -74,17 +76,30 @@ for iant=1:nb_antennas
       ids_ec_antennas.antenna{iant}.launching_position.r.time(i) = time_launch;
       ids_ec_antennas.antenna{iant}.launching_position.z.time(i) = time_launch;
       ids_ec_antennas.antenna{iant}.launching_position.phi.time(i) = time_launch;
-      ids_ec_antennas.antenna{iant}.launching_angle_pol.data(i) = launch_params{iant}{it_ok{iant}(i)}.theta_toray * pi/180.;
+      kz = cos(launch_params{iant}{it_ok{iant}(i)}.theta_toray*pi/180.);
+      kmr = -sin(launch_params{iant}{it_ok{iant}(i)}.theta_toray*pi/180.).*cos(launch_params{iant}{it_ok{iant}(i)}.phi_toray*pi/180.);
+      kphi = sin(launch_params{iant}{it_ok{iant}(i)}.theta_toray*pi/180.).*sin(launch_params{iant}{it_ok{iant}(i)}.phi_toray*pi/180.); %*sigma_Rphiz (=+1 for TCV cocos=17)
+      if (kz==0 && kmr==0)
+        ids_ec_antennas.antenna{iant}.launching_angle_pol.data(i) = 0.;
+      else
+        ids_ec_antennas.antenna{iant}.launching_angle_pol.data(i) = atan2(-kz,kmr);
+      end
       ids_ec_antennas.antenna{iant}.launching_angle_pol.time(i) = time_launch;
-      ids_ec_antennas.antenna{iant}.launching_angle_tor.data(i) = launch_params{iant}{it_ok{iant}(i)}.phi_toray * pi/180.;
+      ids_ec_antennas.antenna{iant}.launching_angle_tor.data(i) = asin(kphi);
       ids_ec_antennas.antenna{iant}.launching_angle_tor.time(i) = time_launch;
-      ids_ec_antennas.antenna{iant}.beam.spot.size.data(i,1:2) = 0.05.*ones(size(time_launch));
+% $$$       ids_ec_antennas.antenna{iant}.beam.spot.size.data(i,1) = 0.023;
+% $$$       ids_ec_antennas.antenna{iant}.beam.spot.size.data(i,2) = 0.012;
+      ids_ec_antennas.antenna{iant}.beam.spot.size.data(1,i) = 0.023;
+      ids_ec_antennas.antenna{iant}.beam.spot.size.data(2,i) = 0.012;
       ids_ec_antennas.antenna{iant}.beam.spot.size.time(i) = time_launch;
-      ids_ec_antennas.antenna{iant}.beam.spot.angle.data(i,1:2) = 0.0.*ones(size(time_launch));
+      ids_ec_antennas.antenna{iant}.beam.spot.angle.data(i) = 0.0;
       ids_ec_antennas.antenna{iant}.beam.spot.angle.time(i) = time_launch;
-      ids_ec_antennas.antenna{iant}.beam.phase.angle.data(i,1:2) = 0.0.*ones(size(time_launch));
+% $$$       ids_ec_antennas.antenna{iant}.beam.phase.curvature.data(i,1) = 1./1.88;
+% $$$       ids_ec_antennas.antenna{iant}.beam.phase.curvature.data(i,2) = 1./-0.95; % negative in launch_params...
+      ids_ec_antennas.antenna{iant}.beam.phase.curvature.data(1,i) = 1./1.88;
+      ids_ec_antennas.antenna{iant}.beam.phase.curvature.data(2,i) = 1./-0.95; % negative in launch_params...
+      ids_ec_antennas.antenna{iant}.beam.phase.angle.data(i) = 0.0;
       ids_ec_antennas.antenna{iant}.beam.phase.angle.time(i) = time_launch;
-      ids_ec_antennas.antenna{iant}.beam.phase.curvature.data(i,1:2) = 1.0.*ones(size(time_launch));
       ids_ec_antennas.antenna{iant}.beam.phase.curvature.time(i) = time_launch;
     end
   end
@@ -93,5 +108,5 @@ end
 % cocos automatic transform
 if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2
   [ids_ec_antennas,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_ec_antennas,'ec_antennas',gdat_params.cocos_in, ...
-          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in);
+          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in,gdat_params.error_bar);
 end
diff --git a/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m b/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m
index 001d44a0ab6ea5f572c11b7c43dc666287a0e373..f283c6db2fc4f83ad4f61baee71d83d28055312c 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m
@@ -376,5 +376,5 @@ end
 % cocos automatic transform
 if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2
   [ids_equilibrium,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_equilibrium,'equilibrium',gdat_params.cocos_in, ...
-          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in);
+          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in,gdat_params.error_bar);
 end
diff --git a/matlab/TCV_IMAS/tcv_get_ids_magnetics.m b/matlab/TCV_IMAS/tcv_get_ids_magnetics.m
index 7af8b1c624706540ed2991359f78ae92af769e3d..cecb76c60ba8cc90f38bd7e31aa4d6a264ad6e6c 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_magnetics.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_magnetics.m
@@ -16,5 +16,5 @@ function [ids_magnetics,ids_magnetics_description,varargout] = tcv_get_ids_magne
 % cocos automatic transform
 if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2
   [ids_magnetics,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_magnetics,'magnetics',gdat_params.cocos_in, ...
-          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in);
+          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in,gdat_params.error_bar);
 end
diff --git a/matlab/TCV_IMAS/tcv_get_ids_nbi.m b/matlab/TCV_IMAS/tcv_get_ids_nbi.m
index 5515cf928901f1767c9f93d35dd3cb49f42f5c8a..b4c5e644df21a911fcac62a9a5f976c12a0adb62 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_nbi.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_nbi.m
@@ -15,6 +15,7 @@ ids_nbi_description='';
 
 
 nb_units = 2; % assume 2 units: 1st NBH and DNBI
+nb_units = 1; % assume 2 units: 1st NBH and DNBI
 ids_nbi.unit(1:nb_units) = ids_nbi.unit(1); % copy empty structure for all units, then fill in
 
 % create lists of what is different for each units so that can scan through units
@@ -51,11 +52,11 @@ beamlets_group.divergence(2).horizontal = 0.53 *pi/180.;
 %dcd_NBH = psitbxdcd(4.5889, 0.0, 211.9535*pi/180, 0.0, -9.2308*pi/180);
 beamlets_group.position(1:nb_units) = struct('phi',[],'r',[],'z',[]);
 beamlets_group.position(1).phi = 211.9535*pi/180.;
-beamlets_group.position(1).r = 4.5889*1e-2; % in [m]?? OS
-beamlets_group.position(1).z = 0.; % in [m]?? OS
+beamlets_group.position(1).r = 4.5889;
+beamlets_group.position(1).z = 0.;
 beamlets_group.position(2).phi = 295.2416*pi/180.;
-beamlets_group.position(2).r = 4.9274*1e-2; % in [m]?? OS
-beamlets_group.position(2).z = 0.; % in [m]?? OS
+beamlets_group.position(2).r = 4.9274; 
+beamlets_group.position(2).z = 0.;
 
 for iunit=1:nb_units
   ids_nbi.unit{iunit}.identifier = unit_identifier{iunit};
@@ -75,14 +76,14 @@ for iunit=1:nb_units
   ids_nbi.unit{iunit}.beam_power_fraction.time = p_frac.t;
   ids_nbi_description.unit{iunit}.beam_power_fraction = ['from \results::' results_subname{iunit} ':fraction'];
   if ~isempty(p_frac.data) && size(p_frac.data,2)>=3
-    ids_nbi.unit{iunit}.beam_power_fraction.data = p_frac.data(:,1:3)*0.01;
+    ids_nbi.unit{iunit}.beam_power_fraction.data = p_frac.data(:,1:3)'*0.01;
     i_frac = p_frac.data(:,1:3).*repmat([1 2 3],size(p_frac.data,1),1); % to be compatible with older matlab version .*[1 2 3] not ok
     i_frac = i_frac.*1./repmat(sum(i_frac),size(p_frac.data,1),1);
   else
     ids_nbi.unit{iunit}.beam_power_fraction.data = p_frac.data;
     i_frac = p_frac.data;
   end
-  ids_nbi.unit{iunit}.beam_current_fraction.data = i_frac;
+  ids_nbi.unit{iunit}.beam_current_fraction.data = i_frac';
   ids_nbi.unit{iunit}.beam_current_fraction.time = p_frac.t;
   %% species
   ids_nbi.unit{iunit}.species.a   = species.a(iunit);
@@ -124,5 +125,5 @@ end
 % cocos automatic transform
 if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2
   [ids_nbi,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_nbi,'nbi',gdat_params.cocos_in, ...
-          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in);
+          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in,gdat_params.error_bar);
 end
diff --git a/matlab/TCV_IMAS/tcv_get_ids_pf_active.m b/matlab/TCV_IMAS/tcv_get_ids_pf_active.m
index 13c95b450a779010163beedb7254d8d23d07381e..4ffa647cf27ac53292c1e347d2f052fae3a34d7b 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_pf_active.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_pf_active.m
@@ -17,5 +17,5 @@ ids_pf_active.vertical_force = {};
 % cocos automatic transform
 if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2
   [ids_pf_active,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_pf_active,'pf_active',gdat_params.cocos_in, ...
-          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in);
+          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in,gdat_params.error_bar);
 end
diff --git a/matlab/TCV_IMAS/tcv_get_ids_tf.m b/matlab/TCV_IMAS/tcv_get_ids_tf.m
index a25c054870685ca47d2d38befd016c2988a3d9bd..03650ac456ddda72224002ca71afb7ab3f808d6c 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_tf.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_tf.m
@@ -15,11 +15,11 @@ ids_tf = ids_tf_empty;
 
 tmp = gdat_tcv(shot, 'b0');
 if ~ischar(tmp.data)
-  ids_tf.b_field_tor_vacuum_r.data = tmp.data;
-  ids_tf.b_field_tor_vacuum_r.time = tmp.t;
   ids_tf.r0 = tmp.r0;
-  ids_tf_description.b_field_tor_vacuum_r.data = ' gdat_tcv(shot, ''b0'')';
   ids_tf_description.r0 = ' b0.r0 from gdat_tcv(shot, ''b0'')';
+  ids_tf.b_field_tor_vacuum_r.data = tmp.data .* ids_tf.r0;
+  ids_tf_description.b_field_tor_vacuum_r.data = ' gdat_tcv(shot, ''b0'') * .r0';
+  ids_tf.b_field_tor_vacuum_r.time = tmp.t;
 else
   % leave defaults
   ids_tf_description = struct([]);
@@ -31,7 +31,6 @@ ids_tf.field_map = {};
 
 % cocos automatic transform
 if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2
-  cocos_in=17;
-  cocos_out=11;
-  [ids_tf,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_tf,'tf',cocos_in,cocos_out);
+  [ids_tf,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_tf,'tf',gdat_params.cocos_in, ...
+          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in,gdat_params.error_bar);
 end
diff --git a/matlab/TCV_IMAS/tcv_get_ids_wall.m b/matlab/TCV_IMAS/tcv_get_ids_wall.m
index e78ced53cc404ae34b089c05791650249612d34c..506dc5c7e38fcc0216e2dc165aee550d7f84681c 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_wall.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_wall.m
@@ -22,5 +22,5 @@ ids_description = [];
 % cocos automatic transform (should have nothing to do for wall)
 if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2
   [ids_wall,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_wall,'wall',gdat_params.cocos_in, ...
-          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in);
+          gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in,gdat_params.error_bar);
 end