From b9a6cb229b7c976563f148d1393e483fc12fb389 Mon Sep 17 00:00:00 2001 From: Olivier Sauter <olivier.sauter@epfl.ch> Date: Wed, 9 Apr 2025 20:15:41 +0200 Subject: [PATCH 1/4] add new call to read/write from/to IMAS database including backend --- matlab/IMAS/gdat_imas.m | 13 +++++++-- matlab/{TCV_IMAS => IMAS}/ids2database.m | 34 +++++++++++++----------- 2 files changed, 29 insertions(+), 18 deletions(-) rename matlab/{TCV_IMAS => IMAS}/ids2database.m (79%) diff --git a/matlab/IMAS/gdat_imas.m b/matlab/IMAS/gdat_imas.m index d2b06fef..a65df0e9 100644 --- a/matlab/IMAS/gdat_imas.m +++ b/matlab/IMAS/gdat_imas.m @@ -7,7 +7,7 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_imas(shot,data_re % % If no inputs are provided, return the list of available pre-defined data_request in gdat_data and default parameters gdat_params % -% IMAS means assume access data from IDS database ala IMAS with run_number, database_user, tokamak_name, data_major_version and using imas_open_env and ids_get calls +% IMAS means assume access data from IDS database ala IMAS with run_number, database_user, tokamak_name, data_major_version and using imas_open_env and ids_get calls (added backend choice as well, default hdf5 (13), otherwise 12 for mdsplus) % Should be the same on ITER hpc and gateway, to be checked % % At first only "ids" request implemented, but keywords like ip etc should relate to specific IDS as for any machine @@ -270,6 +270,10 @@ if ~isfield(gdat_data.gdat_params,'data_major_version') gdat_data.gdat_params.data_major_version = '3'; if gdat_data.gdat_params.nverbose >= 3; disp('set data_major_version to ''3'' as default since not provided'); end end +if ~isfield(gdat_data.gdat_params,'backend') + gdat_data.gdat_params.backend = 13; + if gdat_data.gdat_params.nverbose >= 3; disp('set backend to 13 as default since not provided'); end +end error_status = 6; % at least reached this level gdat_params = gdat_data.gdat_params; @@ -285,8 +289,13 @@ if do_mdsopen_mdsclose return end try - gdat_data.gdat_params.idx_imas_open_env = imas_open_env('ids', shot, gdat_data.gdat_params.run,gdat_data.gdat_params.database_user, ... + if exist('imas_open_env_backend') > 0 + gdat_data.gdat_params.idx_imas_open_env = imas_open_env_backend(shot, gdat_data.gdat_params.run,gdat_data.gdat_params.database_user, ... + gdat_data.gdat_params.tokamak_name,gdat_data.gdat_params.data_major_version,gdat_data.gdat_params.backend); + else + gdat_data.gdat_params.idx_imas_open_env = imas_open_env('ids', shot, gdat_data.gdat_params.run,gdat_data.gdat_params.database_user, ... gdat_data.gdat_params.tokamak_name,gdat_data.gdat_params.data_major_version); + end disp('') catch ME warning('could not imas_open_env with following gdat_data.gdat_params:'); diff --git a/matlab/TCV_IMAS/ids2database.m b/matlab/IMAS/ids2database.m similarity index 79% rename from matlab/TCV_IMAS/ids2database.m rename to matlab/IMAS/ids2database.m index eb2c2ed7..75ccc26f 100644 --- a/matlab/TCV_IMAS/ids2database.m +++ b/matlab/IMAS/ids2database.m @@ -1,13 +1,13 @@ function [ids_put_status] = ids2database(shot,run,occurence,ids2put,tree_user,tree_tokamak,tree_majorversion,imas_backend,varargin); % -% [ids_put_status] = ids2database(shot,run,occurence,ids2put,varargin); +% [ids_put_status] = ids2database(shot,run,occurence,ids2put,tree_user,tree_tokamak,tree_majorversion,imas_backend,varargin); % % open/create shot,run and put the ids from ids2put.idsnames (names from fieldnames(ids2put) && within IDS_list) -% from new ..._env routines, now user/publi database name, tokamak name and major UAL version (3 or 4 at this stage) need to be specified +% from new ..._env routines, now user/public database name, tokamak name and major UAL version (3 or 4 at this stage) need to be specified % tree_name: getenv('USER') by default, can be 'public' -% tree_tokamak: 'tcv' by default +% tree_tokamak: '' no default, typically tcv, TCV, ITER, etc (case will appear in folder name) % tree_majorversion: '3' by default -% imas_backend: "MDSplus" or "HDF5" +% imas_backend: "MDSplus" or "HDF5" or 12 or 13 % % varargin{1}: tbd % @@ -15,9 +15,9 @@ function [ids_put_status] = ids2database(shot,run,occurence,ids2put,tree_user,tr ids_put_status = 0; tree_user_default = getenv('USER'); -tree_tokamak_default = 'tcv'; +tree_tokamak_default = ''; tree_majorversion_default = '3'; -imas_backend_default = 'MDSplus'; +imas_backend_default = 'HDF5'; % initialize input parser p = inputParser; @@ -28,9 +28,9 @@ p.addOptional('run', [], @(x) (isnumeric(x) && isscalar(x) && (x == round(x)))); p.addOptional('occurence', 0, @(x) isempty(x) || (isnumeric(x) && isscalar(x) && (x == round(x)))); % integer p.addOptional('ids2put', struct([]), @(x) (isstruct(x))); p.addOptional('tree_user', tree_user_default, @(x) (isempty(x) || ischar(x))); -p.addOptional('tree_tokamak', tree_tokamak_default, @(x) (isempty(x) || ischar(x))); +p.addOptional('tree_tokamak', tree_tokamak_default, @(x) (~isempty(x) && ischar(x))); p.addOptional('tree_majorversion', tree_majorversion_default, @(x) (ischar(x))); -p.addOptional('imas_backend', imas_backend_default, @(x) (isempty(x) || ischar(x))); +p.addOptional('imas_backend', imas_backend_default, @(x) (isempty(x) || ischar(x) || (isnumeric(x) && any(x==[12,13])))); p.parse; defaults_ids2database = p.Results; % to keep track of defaults @@ -86,9 +86,9 @@ end params_ids2database = params; % check ids_names ids_names=fieldnames(ids2put); -[dummy1]=which('ids_list'); +[dummy1]=which('IDS_list'); if isempty(dummy1) - ids_full_list = tcv_available_ids; + ids_full_list = eval([lower(tree_tokamak) '_available_ids']); warning(['IDS_list not available, quick fix introducing list of ids available for TCV: ' fprintf('%s ',ids_full_list{:}) char(10)]); else % get effective function between ids_list and IDS_list (which or exist not sufficient) @@ -106,17 +106,19 @@ if isempty(ids_names_ok) return end -if ~ismember(params_ids2database.imas_backend, {'MDSplus', 'HDF5'}) - warning(['Unknown imas_backend: ', imas_backend, ', selecting default: ',imas_backend_default]); - params_ids2database.imas_backend = imas_backend_default; +if ischar(params_ids2database.imas_backend) && ~ismember(params_ids2database.imas_backend, {'MDSplus', 'HDF5'}) + warning(['Unknown imas_backend: ', imas_backend, ', selecting default: ',imas_backend_default]); + params_ids2database.imas_backend = imas_backend_default; end % Get IMAS backend ID switch params_ids2database.imas_backend - case "HDF5" + case 'HDF5' backendid=13; - case "MDSplus" + case 'MDSplus' backendid=12; + otherwise + backendid = params_ids2database.imas_backend; end try @@ -128,7 +130,7 @@ try shot_is_new = 0; end if shot_is_new - idx = imas_create_env_backend(shot, run, params_ids2database.tree_user,params_ids2database.tree_tokamak, params_ids2database.tree_majorversion, backendid) + idx = imas_create_env_backend(shot, run, params_ids2database.tree_user,params_ids2database.tree_tokamak, params_ids2database.tree_majorversion, backendid); else idx = imas_open_env_backend(shot,run,params_ids2database.tree_user,params_ids2database.tree_tokamak,params_ids2database.tree_majorversion,backendid); % end -- GitLab From 7ffc93dcad66e62e7cbff7a9d6bb73ea603b253d Mon Sep 17 00:00:00 2001 From: Olivier Sauter <olivier.sauter@epfl.ch> Date: Wed, 9 Apr 2025 22:53:03 +0200 Subject: [PATCH 2/4] simplify getting IDS_list --- matlab/IMAS/ids2database.m | 17 +++++------------ matlab/TCV_IMAS/tcv2ids2database.m | 2 +- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/matlab/IMAS/ids2database.m b/matlab/IMAS/ids2database.m index 75ccc26f..deecfcb2 100644 --- a/matlab/IMAS/ids2database.m +++ b/matlab/IMAS/ids2database.m @@ -5,9 +5,9 @@ function [ids_put_status] = ids2database(shot,run,occurence,ids2put,tree_user,tr % open/create shot,run and put the ids from ids2put.idsnames (names from fieldnames(ids2put) && within IDS_list) % from new ..._env routines, now user/public database name, tokamak name and major UAL version (3 or 4 at this stage) need to be specified % tree_name: getenv('USER') by default, can be 'public' -% tree_tokamak: '' no default, typically tcv, TCV, ITER, etc (case will appear in folder name) +% tree_tokamak: 'tcv' by default, typically tcv, TCV, ITER, etc (case will appear in folder name) % tree_majorversion: '3' by default -% imas_backend: "MDSplus" or "HDF5" or 12 or 13 +% imas_backend: 'MDSplus' or 'HDF5' or 12 or 13 % % varargin{1}: tbd % @@ -15,7 +15,7 @@ function [ids_put_status] = ids2database(shot,run,occurence,ids2put,tree_user,tr ids_put_status = 0; tree_user_default = getenv('USER'); -tree_tokamak_default = ''; +tree_tokamak_default = 'tcv'; tree_majorversion_default = '3'; imas_backend_default = 'HDF5'; @@ -86,15 +86,8 @@ end params_ids2database = params; % check ids_names ids_names=fieldnames(ids2put); -[dummy1]=which('IDS_list'); -if isempty(dummy1) - ids_full_list = eval([lower(tree_tokamak) '_available_ids']); - warning(['IDS_list not available, quick fix introducing list of ids available for TCV: ' fprintf('%s ',ids_full_list{:}) char(10)]); -else - % get effective function between ids_list and IDS_list (which or exist not sufficient) - [dummy2,ids_list_eff]=fileparts(dummy1); - ids_full_list = feval(ids_list_eff); -end +aa=gdat([],'ids'); +ids_full_list = aa.gdat_params.sources_available; ids_names_notok = setdiff(ids_names,ids_full_list); if ~isempty(ids_names_notok) disp(['these subfields are not ids names, so not used: ' sprintf('%s ',ids_names_notok{:})]) diff --git a/matlab/TCV_IMAS/tcv2ids2database.m b/matlab/TCV_IMAS/tcv2ids2database.m index fd9b711a..916ec438 100644 --- a/matlab/TCV_IMAS/tcv2ids2database.m +++ b/matlab/TCV_IMAS/tcv2ids2database.m @@ -10,7 +10,7 @@ function [ids_from_tcv,varargout] = tcv2ids2database(shot,run_out,varargin); % 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) % see tcv_available_ids for the list of IDSs available for TCV -% varargin: 'imas_backend': "MDSplus" or "HDF5" +% varargin: 'imas_backend': 'MDSplus' or 'HDF5' % 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 -- GitLab From 88a314d5dac96b4ab69534777627417ac812d468 Mon Sep 17 00:00:00 2001 From: Luke Simons <luke.simons@epfl.ch> Date: Mon, 14 Apr 2025 13:27:56 +0000 Subject: [PATCH 3/4] Fixed comment about tcv imas in gdat_imas.m --- matlab/IMAS/gdat_imas.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matlab/IMAS/gdat_imas.m b/matlab/IMAS/gdat_imas.m index a65df0e9..f0190f2e 100644 --- a/matlab/IMAS/gdat_imas.m +++ b/matlab/IMAS/gdat_imas.m @@ -7,7 +7,7 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_imas(shot,data_re % % If no inputs are provided, return the list of available pre-defined data_request in gdat_data and default parameters gdat_params % -% IMAS means assume access data from IDS database ala IMAS with run_number, database_user, tokamak_name, data_major_version and using imas_open_env and ids_get calls (added backend choice as well, default hdf5 (13), otherwise 12 for mdsplus) +% IMAS assumes data access from IDS database ala IMAS with run_number, database_user, tokamak_name, data_major_version and using imas_open_env and ids_get calls (added backend choice as well, default hdf5 (13), otherwise 12 for mdsplus) % Should be the same on ITER hpc and gateway, to be checked % % At first only "ids" request implemented, but keywords like ip etc should relate to specific IDS as for any machine -- GitLab From 8867989de46a78f70515efdefa7b41214c98714d Mon Sep 17 00:00:00 2001 From: Luke Simons <luke.simons@epfl.ch> Date: Mon, 14 Apr 2025 13:42:14 +0000 Subject: [PATCH 4/4] Clarified comment on imas_backend in ids2database.m --- matlab/IMAS/ids2database.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matlab/IMAS/ids2database.m b/matlab/IMAS/ids2database.m index deecfcb2..b98deef0 100644 --- a/matlab/IMAS/ids2database.m +++ b/matlab/IMAS/ids2database.m @@ -7,7 +7,7 @@ function [ids_put_status] = ids2database(shot,run,occurence,ids2put,tree_user,tr % tree_name: getenv('USER') by default, can be 'public' % tree_tokamak: 'tcv' by default, typically tcv, TCV, ITER, etc (case will appear in folder name) % tree_majorversion: '3' by default -% imas_backend: 'MDSplus' or 'HDF5' or 12 or 13 +% imas_backend: string, numeric input for imas_backend data type. Can be 'MDSplus' (== 12) or 'HDF5' (== 13) % % varargin{1}: tbd % -- GitLab