diff --git a/matlab/TCV_IMAS/tcv_get_ids_soft_x_rays.m b/matlab/TCV_IMAS/tcv_get_ids_soft_x_rays.m
new file mode 100644
index 0000000000000000000000000000000000000000..0263b5437923df7ca178d0d3b6b5472091d52447
--- /dev/null
+++ b/matlab/TCV_IMAS/tcv_get_ids_soft_x_rays.m
@@ -0,0 +1,159 @@
+function [ids_soft_x_rays,ids_soft_x_rays_description] =  ...
+    tcv_get_ids_soft_x_rays(shot, ids_soft_x_rays_empty, gdat_params,varargin)
+%
+% [ids_soft_x_rays,ids_soft_x_rays_description] = ...
+%   tcv_get_ids_soft_x_rays(shot, ids_soft_x_rays_empty,varargin);
+%
+% Get the RADCAM Soft X-Ray (SXR) diagnostics data
+%
+% ids_soft_x_rays_empty should at least be the empty Soft X-Ray ids 
+% structure in input
+%
+% gdat_params: gdat_data.gdat_params to get all params passed from original
+% call, in particular error_bar options
+%
+% Date: 20/09/24
+% Author: L. Simons
+
+% Initialise structure with default ids_properties
+% shot=70777; gdat_params=[]; varargin={};
+% aa=gdat([],'ids','source','soft_x_rays');
+% ids_soft_x_rays_empty=aa.soft_x_rays;
+if exist('gdat_params')
+  [ids_soft_x_rays, ~] = tcv_ids_headpart(shot, ids_soft_x_rays_empty, ...
+    'soft_x_rays','homogeneous_time',1,'gdat_params',gdat_params, ...
+     varargin{:});
+else
+  [ids_soft_x_rays, ~] = tcv_ids_headpart(shot, ids_soft_x_rays_empty, ...
+      'soft_x_rays','homogeneous_time',0,varargin{:});
+end
+
+ids_soft_x_rays_description = struct();
+
+% Load the soft_x_rays geometry
+sxr_geom=sxr_load_geometry();
+sxr_data=rc_load_diodes(shot,'diag_name','sxr');
+status=numel(sxr_data.data)>0;
+if status
+  nchannel = sum(rc_n_chn(shot,'sxr'));
+  ids_soft_x_rays.channel(1:nchannel) = ids_soft_x_rays.channel(1);
+  for ii = 1:nchannel
+    
+    ids_soft_x_rays.channel{ii}.name = sxr_geom.channel{ii}.name;
+    ids_soft_x_rays_description.channel{ii}.name = ...
+        ['RADCAM Soft X-Ray (SXR) detector name, from camera labels and ' ...
+        'number VT: Vertical Top, UL: Upper Lateral, ML: Middle Lateral, ' ...
+        'DIV: Divertor, VB: Vertical bottom. Matches cabling.'];
+    
+    ids_soft_x_rays.channel{ii}.identifier = ...
+        sxr_geom.channel{ii}.identifier;
+    ids_soft_x_rays_description.channel{ii}.identifier = ...
+        ['RADCAM Soft X-Ray (SXR) system, global index from clock-wise ' ...
+        'ordering from inboard side'];
+    
+    ids_soft_x_rays.channel{ii}.detector.geometry_type= ...
+        sxr_geom.channel{ii}.detector.geometry_type;
+    ids_soft_x_rays.channel{ii}.detector.centre.phi= ...
+        sxr_geom.channel{ii}.detector.centre.phi;
+    ids_soft_x_rays.channel{ii}.detector.centre.r= ...
+        sxr_geom.channel{ii}.detector.centre.r;
+    ids_soft_x_rays.channel{ii}.detector.centre.z= ...
+        sxr_geom.channel{ii}.detector.centre.z;
+    ids_soft_x_rays.channel{ii}.detector.x1_unit_vector.x= ...
+        sxr_geom.channel{ii}.detector.x1_unit_vector.x;
+    ids_soft_x_rays.channel{ii}.detector.x1_unit_vector.y= ...
+        sxr_geom.channel{ii}.detector.x1_unit_vector.y;
+    ids_soft_x_rays.channel{ii}.detector.x1_unit_vector.z= ...
+        sxr_geom.channel{ii}.detector.x1_unit_vector.z;
+    ids_soft_x_rays.channel{ii}.detector.x2_unit_vector.x= ...
+        sxr_geom.channel{ii}.detector.x2_unit_vector.x;
+    ids_soft_x_rays.channel{ii}.detector.x2_unit_vector.y= ...
+        sxr_geom.channel{ii}.detector.x2_unit_vector.y;
+    ids_soft_x_rays.channel{ii}.detector.x2_unit_vector.z= ...
+        sxr_geom.channel{ii}.detector.x2_unit_vector.z;
+    ids_soft_x_rays.channel{ii}.detector.x3_unit_vector.x= ...
+        sxr_geom.channel{ii}.detector.x3_unit_vector.x;
+    ids_soft_x_rays.channel{ii}.detector.x3_unit_vector.y= ...
+        sxr_geom.channel{ii}.detector.x3_unit_vector.y;
+    ids_soft_x_rays.channel{ii}.detector.x3_unit_vector.z= ...
+        sxr_geom.channel{ii}.detector.x3_unit_vector.z;
+    ids_soft_x_rays.channel{ii}.detector.x1_width= ...
+        sxr_geom.channel{ii}.detector.x1_width;
+    ids_soft_x_rays.channel{ii}.detector.x2_width= ...
+        sxr_geom.channel{ii}.detector.x2_width;
+    ids_soft_x_rays.channel{ii}.detector.surface= ...
+        sxr_geom.channel{ii}.detector.surface;
+    
+    ids_soft_x_rays.channel{ii}.aperture{1}.geometry_type= ...
+        sxr_geom.channel{ii}.aperture{1}.geometry_type;
+    ids_soft_x_rays.channel{ii}.aperture{1}.centre.r= ...
+        sxr_geom.channel{ii}.aperture{1}.centre.r;
+    ids_soft_x_rays.channel{ii}.aperture{1}.centre.z= ...
+        sxr_geom.channel{ii}.aperture{1}.centre.z;
+    ids_soft_x_rays.channel{ii}.aperture{1}.x1_unit_vector.x= ...
+        sxr_geom.channel{ii}.aperture{1}.x1_unit_vector.x;
+    ids_soft_x_rays.channel{ii}.aperture{1}.x1_unit_vector.y= ...
+        sxr_geom.channel{ii}.aperture{1}.x1_unit_vector.y;
+    ids_soft_x_rays.channel{ii}.aperture{1}.x1_unit_vector.z= ...
+        sxr_geom.channel{ii}.aperture{1}.x1_unit_vector.z;
+    ids_soft_x_rays.channel{ii}.aperture{1}.x2_unit_vector.x= ...
+        sxr_geom.channel{ii}.aperture{1}.x2_unit_vector.x;
+    ids_soft_x_rays.channel{ii}.aperture{1}.x2_unit_vector.y= ...
+        sxr_geom.channel{ii}.aperture{1}.x2_unit_vector.y;
+    ids_soft_x_rays.channel{ii}.aperture{1}.x2_unit_vector.z= ...
+        sxr_geom.channel{ii}.aperture{1}.x2_unit_vector.z;
+    ids_soft_x_rays.channel{ii}.aperture{1}.x3_unit_vector.x= ...
+        sxr_geom.channel{ii}.aperture{1}.x3_unit_vector.x;
+    ids_soft_x_rays.channel{ii}.aperture{1}.x3_unit_vector.y= ...
+        sxr_geom.channel{ii}.aperture{1}.x3_unit_vector.y;
+    ids_soft_x_rays.channel{ii}.aperture{1}.x3_unit_vector.z= ...
+        sxr_geom.channel{ii}.aperture{1}.x3_unit_vector.z;
+    ids_soft_x_rays.channel{ii}.aperture{1}.x1_width= ...
+        sxr_geom.channel{ii}.aperture{1}.x1_width;
+    ids_soft_x_rays.channel{ii}.aperture{1}.x2_width= ...
+        sxr_geom.channel{ii}.aperture{1}.x2_width;
+    ids_soft_x_rays.channel{ii}.aperture{1}.surface= ...
+        sxr_geom.channel{ii}.aperture{1}.surface;
+    
+    ids_soft_x_rays.channel{ii}.etendue = sxr_geom.channel{ii}.etendue;
+    ids_soft_x_rays.channel{ii}.etendue_method.name = ...
+        sxr_geom.channel{ii}.etendue_method.name;
+    ids_soft_x_rays.channel{ii}.etendue_method.description = ...
+        sxr_geom.channel{ii}.etendue_method.description;
+    
+    ids_soft_x_rays.channel{ii}.filter_window{1}.identifier = 1;
+    ids_soft_x_rays.channel{ii}.filter_window{1}.material.name = 'Be';
+    ids_soft_x_rays.channel{ii}.filter_window{1}.material.index = 10;
+    ids_soft_x_rays.channel{ii}.filter_window{1}.material.description = '';
+    ids_soft_x_rays.channel{ii}.filter_window{1}.thickness = '47e-6';
+    
+    ids_soft_x_rays.channel{ii}.line_of_sight.first_point.phi = ...
+        sxr_geom.channel{ii}.line_of_sight.first_point.phi;
+    ids_soft_x_rays.channel{ii}.line_of_sight.first_point.r = ...
+        sxr_geom.channel{ii}.line_of_sight.first_point.r;
+    ids_soft_x_rays.channel{ii}.line_of_sight.first_point.z = ...
+        sxr_geom.channel{ii}.line_of_sight.first_point.z;
+    
+    ids_soft_x_rays.channel{ii}.line_of_sight.second_point.phi = ...
+        sxr_geom.channel{ii}.line_of_sight.second_point.phi;
+    ids_soft_x_rays.channel{ii}.line_of_sight.second_point.r = ...
+        sxr_geom.channel{ii}.line_of_sight.second_point.r;
+    ids_soft_x_rays.channel{ii}.line_of_sight.second_point.z = ...
+        sxr_geom.channel{ii}.line_of_sight.second_point.z;
+    
+    ids_soft_x_rays.channel{ii}.brightness.data = sxr_data.data(ii,:);
+    ids_soft_x_rays.channel{ii}.brightness.time = sxr_data.time;
+    ids_soft_x_rays_description.channel{ii}.brightness.data = ...
+        ['From ATLAS::SYSTEM:SXR:CHANNEL_ data, Radiance measured by ' ...
+        'Each SXR diode in arbitrary units of [counts]'];
+    
+    ids_soft_x_rays.channel{ii}.validity = 0; % FIXME: Always valid data
+    ids_soft_x_rays.channel{ii}.validity = 0*ones(1,nchannel);
+  end
+  
+  ids_soft_x_rays.time = sxr_data.time;
+else
+  warning('Failed to load data for shot %d',shot);
+end
+
+end