diff --git a/matlab/TCV_IMAS/tcv_get_ids_nbi.m b/matlab/TCV_IMAS/tcv_get_ids_nbi.m
index c0ce563920b6ded3847d4c86b90b68aa28561115..b9e7cc3db959ee1005f723f158684166a39ab105 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_nbi.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_nbi.m
@@ -17,186 +17,101 @@ ids_nbi_description='';
 nb_units = 2; % 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
 
-for iunit=1:nb_units
-  switch iunit
-   case 1
-    ids_nbi.unit{iunit}.identifier = 'NBH1';
-    ids_nbi.unit{iunit}.name = '25keV 1st NBH source';
-    %% power
-    pow=gdat_tcv(shot,'powers');
-    ids_nbi.unit{iunit}.power_launched.time = pow.nbi.t;
-    ids_nbi.unit{iunit}.power_launched.data = pow.nbi.data;
-    %% energy
-    ids_nbi.unit{iunit}.energy.time = pow.nbi.t;
-    ids_nbi.unit{iunit}.energy.data = pow.nbi.energy;
-    %% power & current fractions
-    p_frac=gdat(shot,'\results::nbh:fraction');
-    ids_nbi.unit{iunit}.beam_power_fraction.data = p_frac.data(:,1:3)*0.01;
-    ids_nbi.unit{iunit}.beam_power_fraction.time = p_frac.t;
-    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./sum(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   = 2.;
-    ids_nbi.unit{iunit}.species.z_n = 1.;
-    ids_nbi.unit{iunit}.species.label = ['D'];
-    %% beamlets group, now only one single beamlet
-    % https://spcwiki.epfl.ch/wiki/NB_Model
-    ids_nbi.unit{iunit}.beamlets_group{1}.direction = -1; %clockwise
-    ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius = 736*1e-3; %736mm
-%     ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius_error_index: -999999999
-%     ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius_error_lower: -9.0000e+40
-%     ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius_error_upper: -9.0000e+40
-    ids_nbi.unit{iunit}.beamlets_group{1}.angle = 0.; %injection parallel to midplane
-%     ids_nbi.unit{iunit}.beamlets_group{1}.angle_error_index: -999999999
-%     ids_nbi.unit{iunit}.beamlets_group{1}.angle_error_lower: -9.0000e+40
-%     ids_nbi.unit{iunit}.beamlets_group{1}.angle_error_upper: -9.0000e+40
-    ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal = 250*1e-3;
-%     ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal_error_index: -999999999
-%     ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal_error_lower: -9.0000e+40
-%     ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal_error_upper: -9.0000e+40
-    ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical = 250*1e-3;
-%     ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical_error_index: -999999999
-%     ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical_error_lower: -9.0000e+40
-%     ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical_error_upper: -9.0000e+40
-    %% focus struct
-    focus  = struct();
-    focus.focal_length_horizontal = 3.76;
-%     focus.focal_length_horizontal_error_index = -999999999;
-%     focus.focal_length_horizontal_error_lower = -9.0000e+40;
-%     focus.focal_length_horizontal_error_upper = -9.0000e+40;
-    focus.focal_length_vertical = 3.98;
-%     focus.focal_length_vertical_error_index: -999999999;
-%     focus.focal_length_vertical_error_lower: -9.0000e+40;
-%     focus.focal_length_vertical_error_upper: -9.0000e+40;
-    focus.width_min_horizontal = 21.6*1e-2;
-%     focus.width_min_horizontal_error_index: -999999999;
-%     focus.width_min_horizontal_error_lower: -9.0000e+40;
-%     focus.width_min_horizontal_error_upper: -9.0000e+40;
-    focus.width_min_vertical = 9.4*1e-2;
-%     focus.width_min_vertical_error_index: -999999999;
-%     focus.width_min_vertical_error_lower: -9.0000e+40;
-%     focus.width_min_vertical_error_upper: -9.0000e+40;
-    ids_nbi.unit{iunit}.beamlets_group{1}.focus = focus;
-    %% divergence component struct
-    div = struct();
-    div.particle_fraction = 1.;
-    div.vertical = 10.3*1e-3; %rad, in deg it is 0.59
-    div.horizontal = 24.4*1e-3; %rad, in deg it is 1.4
-    ids_nbi.unit{iunit}.beamlets_group{1}.divergence_component{1} = div;
-    %% tilting
-    % it is fixed in time. what should we do about it?
+% create lists of what is different for each units so that can scan through units
+unit_identifier = {'NBH1', 'DNBI'};
+unit_name = {'25keV 1st NBH source', 'diagnostic NBI'};
+results_subname = {'nbh', 'dnbi'};
+species.a = [2., 1.];
+species.z_n = [1., 1.];
+species.label = {'D', 'H'};
+beamlets_group.direction = [-1, 1];
+beamlets_group.tangency_radius = [736, 235.3]*1e-3;
+beamlets_group.angle = [0., 0.];
+beamlets_group.width_horizontal = [250, 87.2]*1e-3;
+beamlets_group.width_vertical = [250, 87.2]*1e-3;
+
+beamlets_group.focus(1:nb_units)=struct('focal_length_horizontal',[],'focal_length_vertical',[],'width_min_horizontal',[],'width_min_vertical',[]);
+beamlets_group.focus(1).focal_length_horizontal = 3.76;
+beamlets_group.focus(1).focal_length_vertical = 3.98;
+beamlets_group.focus(1).width_min_horizontal = 21.6*1e-2;
+beamlets_group.focus(1).width_min_vertical = 9.4*1e-2;
+beamlets_group.focus(2).focal_length_horizontal = 1.8;
+beamlets_group.focus(2).focal_length_vertical = 1.8;
+beamlets_group.focus(2).width_min_horizontal = 12.1*1e-2;
+beamlets_group.focus(2).width_min_vertical = 12.1*1e-2;
+
+beamlets_group.divergence(1:nb_units) = struct('particle_fraction',[],'vertical',[],'horizontal',[]);
+beamlets_group.divergence(1).particle_fraction = 1.;
+beamlets_group.divergence(1).vertical = 0.59 *pi/180.;
+beamlets_group.divergence(1).horizontal = 1.4 *pi/180.;
+beamlets_group.divergence(2).particle_fraction = 1.;
+beamlets_group.divergence(2).vertical = 0.53 *pi/180.;
+beamlets_group.divergence(2).horizontal = 0.53 *pi/180.;
 
-    %% position
-    %dcd_NBH = psitbxdcd(4.5889, 0.0, 211.9535*pi/180, 0.0, -9.2308*pi/180);
-    pos = struct();
-    pos.phi= 211.9535*pi/180.;
-%     pos.phi_error_index= -999999999;
-%     pos.phi_error_lower= -9.0000e+40;
-%     pos.phi_error_upper= -9.0000e+40;
-    pos.r= 4.5889;
-%     pos.r_error_index= -999999999;
-%     pos.r_error_lower= -9.0000e+40;
-%     pos.r_error_upper= -9.0000e+40;
-    pos.z= 0.;
-%     pos.z_error_index= -999999999;
-%     pos.z_error_lower= -9.0000e+40;
-%     pos.z_error_upper= -9.0000e+40;
-    ids_nbi.unit{iunit}.beamlets_group{1}.position = pos;
-    %% beamlets
-    % M. Vallar thinks it is useless now
+%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(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
+
+for iunit=1:nb_units
+  ids_nbi.unit{iunit}.identifier = unit_identifier{iunit};
+  ids_nbi.unit{iunit}.name = unit_name{iunit};
+  %% power
+  pow=gdat_tcv(shot,['\results::' results_subname{iunit} ':powr_tcv']);
+  ids_nbi.unit{iunit}.power_launched.data = pow.data*1e6;
+  ids_nbi.unit{iunit}.power_launched.time = pow.t;
+  ids_nbi_description.unit{iunit}.power_launched = ['from \results::' results_subname{iunit} ':powr_tcv'];
+  %% energy
+  en=gdat_tcv(shot,['\results::' results_subname{iunit} ':energy']);
+  ids_nbi.unit{iunit}.energy.data = en.data*1e3;
+  ids_nbi.unit{iunit}.energy.time = en.t;
+  ids_nbi_description.unit{iunit}.energy = ['from \results::' results_subname{iunit} ':energy'];
+  %% power & current fractions
+  p_frac=gdat(shot,['\results::' results_subname{iunit} ':fraction']);
+  ids_nbi.unit{iunit}.beam_power_fraction.data = p_frac.data(:,1:3)*0.01;
+  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'];
+  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);
+  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);
+  ids_nbi.unit{iunit}.species.z_n = species.z_n(iunit);
+  ids_nbi.unit{iunit}.species.label = species.label{iunit};
+  %% beamlets group, now only one single beamlet
+  % https://spcwiki.epfl.ch/wiki/NB_Model
+  ids_nbi.unit{iunit}.beamlets_group{1}.direction = beamlets_group.direction(iunit); %clockwise
+  ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius = beamlets_group.tangency_radius(iunit);
+  %     ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius_error_index: -999999999
+  %     ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius_error_lower: -9.0000e+40
+  %     ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius_error_upper: -9.0000e+40
+  ids_nbi.unit{iunit}.beamlets_group{1}.angle = beamlets_group.angle(iunit); %injection parallel to midplane
+  %     ids_nbi.unit{iunit}.beamlets_group{1}.angle_error_index: -999999999
+  %     ids_nbi.unit{iunit}.beamlets_group{1}.angle_error_lower: -9.0000e+40
+  %     ids_nbi.unit{iunit}.beamlets_group{1}.angle_error_upper: -9.0000e+40
+  ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal = beamlets_group.width_horizontal(iunit);
+  %     ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal_error_index: -999999999
+  %     ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal_error_lower: -9.0000e+40
+  %     ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal_error_upper: -9.0000e+40
+  ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical = beamlets_group.width_vertical(iunit);
+  %     ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical_error_index: -999999999
+  %     ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical_error_lower: -9.0000e+40
+  %     ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical_error_upper: -9.0000e+40
+  ids_nbi.unit{iunit}.beamlets_group{1}.focus = beamlets_group.focus(iunit);
+  %% divergence component struct
+  ids_nbi.unit{iunit}.beamlets_group{1}.divergence_component{1} = beamlets_group.divergence(iunit);
+  %% tilting
+  % it is fixed in time. what should we do about it?
 
-   case 2
-    ids_nbi.unit{iunit}.identifier = 'DNBI';
-    ids_nbi.unit{iunit}.name = 'diagnostic NBI';
-    %% power
-    pow=gdat_tcv(shot,'\RESULTS::DNBI:POWR_TCV');
-    ids_nbi.unit{iunit}.power_launched.time = pow.t;
-    ids_nbi.unit{iunit}.power_launched.data = pow.data*1e6;
-    %% energy
-    en=gdat(shot,'\RESULTS::DNBI:ENERGY');
-    ids_nbi.unit{iunit}.energy.data = en.data*1e3;
-    ids_nbi.unit{iunit}.energy.time = en.t;
-    %% power & current fractions
-    p_frac=gdat(shot,'\results::dnbi:fraction');
-    ids_nbi.unit{iunit}.beam_power_fraction.data = p_frac.data(:,1:3)*0.01;
-    ids_nbi.unit{iunit}.beam_power_fraction.time = p_frac.t;
-    i_frac = p_frac.data(:,1:3).*[1 2 3];
-    i_frac = i_frac.*1./sum(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   = 1.;
-    ids_nbi.unit{iunit}.species.z_n = 1.;
-    ids_nbi.unit{iunit}.species.label = ['H'];
-    %% beamlets group, now only one single beamlet
-    % https://spcwiki.epfl.ch/wiki/NB_Model
-    ids_nbi.unit{iunit}.beamlets_group{1}.direction = 1; %ctr-clockwise
-    ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius = 235.3*1e-3; %736mm
-%     ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius_error_index: -999999999
-%     ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius_error_lower: -9.0000e+40
-%     ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius_error_upper: -9.0000e+40
-    ids_nbi.unit{iunit}.beamlets_group{1}.angle = 0.; %injection parallel to midplane
-%     ids_nbi.unit{iunit}.beamlets_group{1}.angle_error_index: -999999999
-%     ids_nbi.unit{iunit}.beamlets_group{1}.angle_error_lower: -9.0000e+40
-%     ids_nbi.unit{iunit}.beamlets_group{1}.angle_error_upper: -9.0000e+40
-    ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal = 87.2*1e-3;
-%     ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal_error_index: -999999999
-%     ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal_error_lower: -9.0000e+40
-%     ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal_error_upper: -9.0000e+40
-    ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical = 87.2*1e-3;
-%     ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical_error_index: -999999999
-%     ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical_error_lower: -9.0000e+40
-%     ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical_error_upper: -9.0000e+40
-    %% focus struct
-    focus  = struct();
-    focus.focal_length_horizontal = 1.8;
-%     focus.focal_length_horizontal_error_index = -999999999;
-%     focus.focal_length_horizontal_error_lower = -9.0000e+40;
-%     focus.focal_length_horizontal_error_upper = -9.0000e+40;
-    focus.focal_length_vertical = 1.8;
-%     focus.focal_length_vertical_error_index: -999999999;
-%     focus.focal_length_vertical_error_lower: -9.0000e+40;
-%     focus.focal_length_vertical_error_upper: -9.0000e+40;
-    focus.width_min_horizontal = 12.1*1e-2;
-%     focus.width_min_horizontal_error_index: -999999999;
-%     focus.width_min_horizontal_error_lower: -9.0000e+40;
-%     focus.width_min_horizontal_error_upper: -9.0000e+40;
-    focus.width_min_vertical = 12.1*1e-2;
-%     focus.width_min_vertical_error_index: -999999999;
-%     focus.width_min_vertical_error_lower: -9.0000e+40;
-%     focus.width_min_vertical_error_upper: -9.0000e+40;
-    ids_nbi.unit{iunit}.beamlets_group{1}.focus = focus;
-    %% divergence component struct
-    div = struct();
-    div.particle_fraction = 1.;
-    div.vertical = 9.2*1e-3; %rad, in deg it is 0.53
-    div.horizontal = 9.2*1e-3; %rad, in deg it is 0.53
-    ids_nbi.unit{iunit}.beamlets_group{1}.divergence_component{1} = div;
-    %% tilting
-    % it is fixed in time. what should we do about it?
+  %% position
+  ids_nbi.unit{iunit}.beamlets_group{1}.position = beamlets_group.position(iunit);
 
-    %% position
-    %dcd_NBH = psitbxdcd(4.5889, 0.0, 211.9535*pi/180, 0.0, -9.2308*pi/180);
-    pos = struct();
-    pos.phi= 295.2416*pi/180.;
-%     pos.phi_error_index= -999999999;
-%     pos.phi_error_lower= -9.0000e+40;
-%     pos.phi_error_upper= -9.0000e+40;
-    pos.r= 4.9274;
-%     pos.r_error_index= -999999999;
-%     pos.r_error_lower= -9.0000e+40;
-%     pos.r_error_upper= -9.0000e+40;
-    pos.z= 0.;
-%     pos.z_error_index= -999999999;
-%     pos.z_error_lower= -9.0000e+40;
-%     pos.z_error_upper= -9.0000e+40;
-    ids_nbi.unit{iunit}.beamlets_group{1}.position = pos;
-    %% beamlets
-    % M. Vallar thinks it is useless now
-   otherwise
-    warning(['iunit = ' num2str(iunit) ' not yet defined']);
-  end
+  %% beamlets
+  % M. Vallar thinks it is useless now
 
 end