From 33070e9a2a3dc79bc08beba5ded2b4a4edd7ff25 Mon Sep 17 00:00:00 2001 From: Antonia Frank <antonia.frank@epfl.ch> Date: Wed, 3 Apr 2024 12:09:01 +0200 Subject: [PATCH] Change again, add try catch and flag to check if data retrieved completely --- matlab/TCV/gdat_tcv.m | 347 ++++++++++++++++++++++-------------------- 1 file changed, 182 insertions(+), 165 deletions(-) diff --git a/matlab/TCV/gdat_tcv.m b/matlab/TCV/gdat_tcv.m index 741c9726..bdd35efc 100644 --- a/matlab/TCV/gdat_tcv.m +++ b/matlab/TCV/gdat_tcv.m @@ -1600,154 +1600,193 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.ec.ec_inputs = ec_inputs; - % fill ec_data from TORAY via astra_tcv_exp outputs - if strcmp(lower(source_icd.ec),'toray') && check_nodes_filled(shot,'toray') - if isempty(gdat_data.gdat_params.trialindx) - % centralized function for toray nodes - [pabs_gyro,icdtot,pow_dens,currentdrive_dens,rho_dep_pow,drho_pow,... - pmax,icdmax,currentdrive_dens_w2,rho_dep_icd,drho_icd,~,power_integrated,currentdrive_integrated] = ... - astra_tcv_EC_exp(shot,[],[],[],[],[],[],1); - else - % centralized function for toray nodes - [pabs_gyro,icdtot,pow_dens,currentdrive_dens,rho_dep_pow,drho_pow,... - pmax,icdmax,currentdrive_dens_w2,rho_dep_icd,drho_icd,~,power_integrated,currentdrive_integrated] = ... - astra_tcv_EC_exp(shot,[],[],[],[],[],gdat_data.gdat_params.trialindx,1); - end - if gdat_data.mapping_for.tcv.gdat_timedim ==2 - tgrid_to_change = {'pabs_gyro','icdtot','pow_dens','currentdrive_dens','rho_dep_pow','drho_pow','pmax', ... - 'icdmax','currentdrive_dens_w2','rho_dep_icd','drho_icd'}; - for i=1:length(tgrid_to_change) - eval([tgrid_to_change{i} '.tgrid = reshape(' tgrid_to_change{i} '.tgrid,1,numel(' tgrid_to_change{i} '.tgrid));']); + % introduce flag to check whether ec_data could be retrieved + % successfully + filled_successfully = false; + + if strcmp(lower(source_icd.ec),'toray') + try % fill ec_data from TORAY via astra_tcv_exp outputs + if isempty(gdat_data.gdat_params.trialindx) + % centralized function for toray nodes + [pabs_gyro,icdtot,pow_dens,currentdrive_dens,rho_dep_pow,drho_pow,... + pmax,icdmax,currentdrive_dens_w2,rho_dep_icd,drho_icd,~,power_integrated,currentdrive_integrated] = ... + astra_tcv_EC_exp(shot,[],[],[],[],[],[],1); + else + % centralized function for toray nodes + [pabs_gyro,icdtot,pow_dens,currentdrive_dens,rho_dep_pow,drho_pow,... + pmax,icdmax,currentdrive_dens_w2,rho_dep_icd,drho_icd,~,power_integrated,currentdrive_integrated] = ... + astra_tcv_EC_exp(shot,[],[],[],[],[],gdat_data.gdat_params.trialindx,1); + end + if gdat_data.mapping_for.tcv.gdat_timedim ==2 + tgrid_to_change = {'pabs_gyro','icdtot','pow_dens','currentdrive_dens','rho_dep_pow','drho_pow','pmax', ... + 'icdmax','currentdrive_dens_w2','rho_dep_icd','drho_icd'}; + for i=1:length(tgrid_to_change) + eval([tgrid_to_change{i} '.tgrid = reshape(' tgrid_to_change{i} '.tgrid,1,numel(' tgrid_to_change{i} '.tgrid));']); + end + end + ec_help = 'from toray icdint with extracting of effective Icd for given launcher depending on nb rays used'; + % All EC related quantities, each substructure should have at least fields data,x,t,units,dim,dimunits,label to be copied onto gdat_data + + launchers_label = cellfun(@num2str, num2cell(1:size(pabs_gyro.data,1)),'UniformOutput',false); + launchers_label{end+1} = 'tot'; + launchers_grid = [1:size(pabs_gyro.data,1)+1]'; + + % power deposition related: + ec_data.p_abs_plasma.data = pabs_gyro.data * 1e6; + ec_data.p_abs_plasma.data(end+1,:) = sum(ec_data.p_abs_plasma.data,1,'omitnan'); + ec_data.p_abs_plasma.label = [strrep(pabs_gyro.comment,'MW','W') ' ; last index is total']; + ec_data.p_abs_plasma.units = 'W'; + ec_data.p_abs_plasma.x = launchers_grid; + ec_data.p_abs_plasma.t =pabs_gyro.tgrid; + ec_data.p_abs_plasma.dim = {ec_data.p_abs_plasma.x, ec_data.p_abs_plasma.t}; + ec_data.p_abs_plasma.dimunits = {launchers_label, 's'}; + % + ec_data.p_dens.data = pow_dens.data * 1e6; + ec_data.p_dens.data(:,end+1,:) = sum(ec_data.p_dens.data,2,'omitnan'); + ec_data.p_dens.label = [strrep(pow_dens.comment,'MW','W') ' ; last index is total']; + ec_data.p_dens.units = 'W/m^3'; + ec_data.p_dens.x = pow_dens.rgrid'; + ec_data.p_dens.rhotor_norm = ec_data.p_dens.x; + ec_data.p_dens.t = pow_dens.tgrid; + ec_data.p_dens.dim = {ec_data.p_dens.x, launchers_grid, ec_data.p_dens.t}; + ec_data.p_dens.dimunits = {'rhotor_norm', launchers_label, 's'}; + % + ec_data.p_integrated.data = power_integrated.data * 1e6; + ec_data.p_integrated.data(:,end+1,:) = sum(ec_data.p_integrated.data,2,'omitnan'); + ec_data.p_integrated.label = [strrep(power_integrated.comment,'MW','W') ' ; last index is total']; + ec_data.p_integrated.units = 'W'; + ec_data.p_integrated.x = power_integrated.rgrid'; + ec_data.p_integrated.rhotor_norm = ec_data.p_integrated.x; + ec_data.p_integrated.t = power_integrated.tgrid; + ec_data.p_integrated.dim = {ec_data.p_integrated.x, launchers_grid, ec_data.p_integrated.t}; + ec_data.p_integrated.dimunits = {'rhotor_norm', launchers_label, 's'}; + % + ec_data.max_pow_dens.data = pmax.data * 1e6; + ec_data.max_pow_dens.label = strrep(pmax.comment,'MW','W'); + ec_data.max_pow_dens.units = 'W/m^3'; + ec_data.max_pow_dens.x = []; + ec_data.max_pow_dens.t = pmax.tgrid; + ec_data.max_pow_dens.dim = {ec_data.max_pow_dens.t}; + ec_data.max_pow_dens.dimunits = {'s'}; + % + ec_data.rho_max_pow_dens.data = rho_dep_pow.data; + ec_data.rho_max_pow_dens.label = rho_dep_pow.comment; + ec_data.rho_max_pow_dens.units = 'rhotor_norm'; + ec_data.rho_max_pow_dens.x = []; + ec_data.rho_max_pow_dens.t = rho_dep_pow.tgrid; + ec_data.rho_max_pow_dens.dim = {ec_data.rho_max_pow_dens.t}; + ec_data.rho_max_pow_dens.dimunits = {'s'}; + % + ec_data.width_pow_dens.data = drho_pow.data; + ec_data.width_pow_dens.label = drho_pow.comment; + ec_data.width_pow_dens.units = 'rhotor_norm'; + ec_data.width_pow_dens.x = []; + ec_data.width_pow_dens.t = drho_pow.tgrid; + ec_data.width_pow_dens.dim = {ec_data.width_pow_dens.t}; + ec_data.width_pow_dens.dimunits = {'s'}; + + % current drive deposition related: + ec_data.cd_tot.data = icdtot.data * 1e6; + ec_data.cd_tot.data(end+1,:) = sum(ec_data.cd_tot.data,1,'omitnan'); + ec_data.cd_tot.label = [strrep(icdtot.comment,'MA','A') ' ; last index is total']; + ec_data.cd_tot.units = 'A'; + ec_data.cd_tot.x = launchers_grid; + ec_data.cd_tot.t = icdtot.tgrid; + ec_data.cd_tot.dim = {ec_data.cd_tot.x, ec_data.cd_tot.t}; + ec_data.cd_tot.dimunits = {launchers_label, 's'}; + % + ec_data.cd_dens.data = currentdrive_dens.data * 1e6; + ec_data.cd_dens.data(:,end+1,:) = sum(ec_data.cd_dens.data,2,'omitnan'); + ec_data.cd_dens.label = [strrep(currentdrive_dens.comment,'MA','A') ' ; last index is total']; + ec_data.cd_dens.units = 'A/m^2'; + ec_data.cd_dens.x = currentdrive_dens.rgrid'; + ec_data.cd_dens.rhotor_norm = ec_data.cd_dens.x; + ec_data.cd_dens.t = currentdrive_dens.tgrid; + ec_data.cd_dens.dim = {ec_data.cd_dens.x, launchers_grid, ec_data.cd_dens.t}; + ec_data.cd_dens.dimunits = {'rhotor_norm', launchers_label, 's'}; + % + ec_data.cd_integrated.data = currentdrive_integrated.data * 1e6; + ec_data.cd_integrated.data(:,end+1,:) = sum(ec_data.cd_integrated.data,2,'omitnan'); + ec_data.cd_integrated.label = [strrep(currentdrive_integrated.comment,'MA','A') ' ; last index is total']; + ec_data.cd_integrated.units = 'A'; + ec_data.cd_integrated.x = currentdrive_integrated.rgrid'; + ec_data.cd_integrated.rhotor_norm = ec_data.cd_integrated.x; + ec_data.cd_integrated.t = currentdrive_integrated.tgrid; + ec_data.cd_integrated.dim = {ec_data.cd_integrated.x, launchers_grid, ec_data.cd_integrated.t}; + ec_data.cd_integrated.dimunits = {'rhotor_norm', launchers_label, 's'}; + % + ec_data.max_cd_dens.data = icdmax.data * 1e6; + ec_data.max_cd_dens.label = strrep(icdmax.comment,'MA','A'); + ec_data.max_cd_dens.units = 'A/m^2'; + ec_data.max_cd_dens.x = []; + ec_data.max_cd_dens.t = icdmax.tgrid; + ec_data.max_cd_dens.dim = {ec_data.max_cd_dens.t}; + ec_data.max_cd_dens.dimunits = {'s'}; + % + ec_data.rho_max_cd_dens.data = rho_dep_icd.data; + ec_data.rho_max_cd_dens.label = rho_dep_icd.comment; + ec_data.rho_max_cd_dens.units = 'rhotor_norm'; + ec_data.rho_max_cd_dens.x = []; + ec_data.rho_max_cd_dens.t = rho_dep_icd.tgrid; + ec_data.rho_max_cd_dens.dim = {ec_data.rho_max_cd_dens.t}; + ec_data.rho_max_cd_dens.dimunits = {'s'}; + % + ec_data.width_cd_dens.data = drho_icd.data; + ec_data.width_cd_dens.label = drho_icd.comment; + ec_data.width_cd_dens.units = 'rhotor_norm'; + ec_data.width_cd_dens.x = []; + ec_data.width_cd_dens.t = drho_icd.tgrid; + ec_data.width_cd_dens.dim = {ec_data.width_cd_dens.t}; + ec_data.width_cd_dens.dimunits = {'s'}; + % + ec_data.cd_dens_doublewidth.data = currentdrive_dens_w2.data * 1e6; + ec_data.cd_dens_doublewidth.label = [strrep(currentdrive_dens_w2.comment,'MA','A') ' ; last index is total']; + for subfields={'x','rhotor_norm','t','dim','dimunits','units'} + ec_data.cd_dens_doublewidth.(subfields{1}) = ec_data.cd_dens.(subfields{1}); end + + gdat_data.ec.ec_data = ec_data; + filled_successfully = true; %set flag to true + catch ME + warning(ME.identifier,'Problem loding TORAY data. \nError message: %s',ME.message); end - ec_help = 'from toray icdint with extracting of effective Icd for given launcher depending on nb rays used'; - % All EC related quantities, each substructure should have at least fields data,x,t,units,dim,dimunits,label to be copied onto gdat_data - - launchers_label = cellfun(@num2str, num2cell(1:size(pabs_gyro.data,1)),'UniformOutput',false); - launchers_label{end+1} = 'tot'; - launchers_grid = [1:size(pabs_gyro.data,1)+1]'; - - % power deposition related: - ec_data.p_abs_plasma.data = pabs_gyro.data * 1e6; - ec_data.p_abs_plasma.data(end+1,:) = sum(ec_data.p_abs_plasma.data,1,'omitnan'); - ec_data.p_abs_plasma.label = [strrep(pabs_gyro.comment,'MW','W') ' ; last index is total']; - ec_data.p_abs_plasma.units = 'W'; - ec_data.p_abs_plasma.x = launchers_grid; - ec_data.p_abs_plasma.t =pabs_gyro.tgrid; - ec_data.p_abs_plasma.dim = {ec_data.p_abs_plasma.x, ec_data.p_abs_plasma.t}; - ec_data.p_abs_plasma.dimunits = {launchers_label, 's'}; - % - ec_data.p_dens.data = pow_dens.data * 1e6; - ec_data.p_dens.data(:,end+1,:) = sum(ec_data.p_dens.data,2,'omitnan'); - ec_data.p_dens.label = [strrep(pow_dens.comment,'MW','W') ' ; last index is total']; - ec_data.p_dens.units = 'W/m^3'; - ec_data.p_dens.x = pow_dens.rgrid'; - ec_data.p_dens.rhotor_norm = ec_data.p_dens.x; - ec_data.p_dens.t = pow_dens.tgrid; - ec_data.p_dens.dim = {ec_data.p_dens.x, launchers_grid, ec_data.p_dens.t}; - ec_data.p_dens.dimunits = {'rhotor_norm', launchers_label, 's'}; - % - ec_data.p_integrated.data = power_integrated.data * 1e6; - ec_data.p_integrated.data(:,end+1,:) = sum(ec_data.p_integrated.data,2,'omitnan'); - ec_data.p_integrated.label = [strrep(power_integrated.comment,'MW','W') ' ; last index is total']; - ec_data.p_integrated.units = 'W'; - ec_data.p_integrated.x = power_integrated.rgrid'; - ec_data.p_integrated.rhotor_norm = ec_data.p_integrated.x; - ec_data.p_integrated.t = power_integrated.tgrid; - ec_data.p_integrated.dim = {ec_data.p_integrated.x, launchers_grid, ec_data.p_integrated.t}; - ec_data.p_integrated.dimunits = {'rhotor_norm', launchers_label, 's'}; - % - ec_data.max_pow_dens.data = pmax.data * 1e6; - ec_data.max_pow_dens.label = strrep(pmax.comment,'MW','W'); - ec_data.max_pow_dens.units = 'W/m^3'; - ec_data.max_pow_dens.x = []; - ec_data.max_pow_dens.t = pmax.tgrid; - ec_data.max_pow_dens.dim = {ec_data.max_pow_dens.t}; - ec_data.max_pow_dens.dimunits = {'s'}; - % - ec_data.rho_max_pow_dens.data = rho_dep_pow.data; - ec_data.rho_max_pow_dens.label = rho_dep_pow.comment; - ec_data.rho_max_pow_dens.units = 'rhotor_norm'; - ec_data.rho_max_pow_dens.x = []; - ec_data.rho_max_pow_dens.t = rho_dep_pow.tgrid; - ec_data.rho_max_pow_dens.dim = {ec_data.rho_max_pow_dens.t}; - ec_data.rho_max_pow_dens.dimunits = {'s'}; - % - ec_data.width_pow_dens.data = drho_pow.data; - ec_data.width_pow_dens.label = drho_pow.comment; - ec_data.width_pow_dens.units = 'rhotor_norm'; - ec_data.width_pow_dens.x = []; - ec_data.width_pow_dens.t = drho_pow.tgrid; - ec_data.width_pow_dens.dim = {ec_data.width_pow_dens.t}; - ec_data.width_pow_dens.dimunits = {'s'}; - % current drive deposition related: - ec_data.cd_tot.data = icdtot.data * 1e6; - ec_data.cd_tot.data(end+1,:) = sum(ec_data.cd_tot.data,1,'omitnan'); - ec_data.cd_tot.label = [strrep(icdtot.comment,'MA','A') ' ; last index is total']; - ec_data.cd_tot.units = 'A'; - ec_data.cd_tot.x = launchers_grid; - ec_data.cd_tot.t = icdtot.tgrid; - ec_data.cd_tot.dim = {ec_data.cd_tot.x, ec_data.cd_tot.t}; - ec_data.cd_tot.dimunits = {launchers_label, 's'}; - % - ec_data.cd_dens.data = currentdrive_dens.data * 1e6; - ec_data.cd_dens.data(:,end+1,:) = sum(ec_data.cd_dens.data,2,'omitnan'); - ec_data.cd_dens.label = [strrep(currentdrive_dens.comment,'MA','A') ' ; last index is total']; - ec_data.cd_dens.units = 'A/m^2'; - ec_data.cd_dens.x = currentdrive_dens.rgrid'; - ec_data.cd_dens.rhotor_norm = ec_data.cd_dens.x; - ec_data.cd_dens.t = currentdrive_dens.tgrid; - ec_data.cd_dens.dim = {ec_data.cd_dens.x, launchers_grid, ec_data.cd_dens.t}; - ec_data.cd_dens.dimunits = {'rhotor_norm', launchers_label, 's'}; - % - ec_data.cd_integrated.data = currentdrive_integrated.data * 1e6; - ec_data.cd_integrated.data(:,end+1,:) = sum(ec_data.cd_integrated.data,2,'omitnan'); - ec_data.cd_integrated.label = [strrep(currentdrive_integrated.comment,'MA','A') ' ; last index is total']; - ec_data.cd_integrated.units = 'A'; - ec_data.cd_integrated.x = currentdrive_integrated.rgrid'; - ec_data.cd_integrated.rhotor_norm = ec_data.cd_integrated.x; - ec_data.cd_integrated.t = currentdrive_integrated.tgrid; - ec_data.cd_integrated.dim = {ec_data.cd_integrated.x, launchers_grid, ec_data.cd_integrated.t}; - ec_data.cd_integrated.dimunits = {'rhotor_norm', launchers_label, 's'}; - % - ec_data.max_cd_dens.data = icdmax.data * 1e6; - ec_data.max_cd_dens.label = strrep(icdmax.comment,'MA','A'); - ec_data.max_cd_dens.units = 'A/m^2'; - ec_data.max_cd_dens.x = []; - ec_data.max_cd_dens.t = icdmax.tgrid; - ec_data.max_cd_dens.dim = {ec_data.max_cd_dens.t}; - ec_data.max_cd_dens.dimunits = {'s'}; - % - ec_data.rho_max_cd_dens.data = rho_dep_icd.data; - ec_data.rho_max_cd_dens.label = rho_dep_icd.comment; - ec_data.rho_max_cd_dens.units = 'rhotor_norm'; - ec_data.rho_max_cd_dens.x = []; - ec_data.rho_max_cd_dens.t = rho_dep_icd.tgrid; - ec_data.rho_max_cd_dens.dim = {ec_data.rho_max_cd_dens.t}; - ec_data.rho_max_cd_dens.dimunits = {'s'}; - % - ec_data.width_cd_dens.data = drho_icd.data; - ec_data.width_cd_dens.label = drho_icd.comment; - ec_data.width_cd_dens.units = 'rhotor_norm'; - ec_data.width_cd_dens.x = []; - ec_data.width_cd_dens.t = drho_icd.tgrid; - ec_data.width_cd_dens.dim = {ec_data.width_cd_dens.t}; - ec_data.width_cd_dens.dimunits = {'s'}; - % - ec_data.cd_dens_doublewidth.data = currentdrive_dens_w2.data * 1e6; - ec_data.cd_dens_doublewidth.label = [strrep(currentdrive_dens_w2.comment,'MA','A') ' ; last index is total']; - for subfields={'x','rhotor_norm','t','dim','dimunits','units'} - ec_data.cd_dens_doublewidth.(subfields{1}) = ec_data.cd_dens.(subfields{1}); + else + disp(['source_icd.ec = ' source_icd.ec ' not yet implemented, ask O. Sauter']) + end + + % depending if ec_data could be completely retrieved, setup the final gdat output + if filled_successfully + if isempty(ec_data.cd_tot.data) || isempty(ec_data.cd_tot.t) || ischar(ec_data.cd_tot.data) + if (gdat_params.nverbose>=1) + warning(['problems loading data for ' source_icd.ec ... + ' for data_request= ' data_request_eff]); + end + else + % now default is icdtot, will depend on request and data_out param of some kind + data_fullpath = ['from toray nodes using astra_tcv_EC_exp(shot), all results in .ec_data, subfield=' field_for_main_data ... + 'in ec.data, .x, .t, .dim, .dimunits, .label, .units']; + for subfields={'data','x','t','units','dim','dimunits','label'} + gdat_data.ec.(subfields{1}) = gdat_data.ec.ec_data.(field_for_main_data).(subfields{1}); + end + gdat_data.ec.data_fullpath = data_fullpath; + gdat_data.ec.help = ec_help; + % add to main, assume 1st one so just use this time base and x base + % should find launcher tot index + gdat_data.data(end+1,:) = gdat_data.ec.data(end,:); + gdat_data.t = gdat_data.ec.t; + if ischar(gdat_data.label); gdat_data.label = []; end % label was defined in tcv_mapping_request as char so replace 1st time + gdat_data.label{end+1}=gdat_data.ec.label; end - else - if strcmp(lower(source_icd.ec),'toray') + else %~filled_successfully + % if reading toray data, check if there is data in the nodes - might be only one trial though + if strcmp(lower(source_icd.ec),'toray') && ~check_nodes_filled(shot,'toray') msg = 'Toray nodes were no filled, check hldsi(shot).'; warning(msg); gdat_data.ec.help = msg; - else - disp(['source_icd.ec = ' source_icd.ec ' not yet implemented, ask O. Sauter']) end + + % fill ec_data empty ec_data.p_abs_plasma = []; ec_data.p_abs_plasma_label = []; ec_data.p_dens = []; @@ -1775,34 +1814,12 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') ec_data.width_cd_dens_label = []; ec_data.cd_dens_doublewidth = []; ec_data.cd_dens_doublewidth_label = []; - ec_data.rho_tor_norm = []; + ec_data.rho_tor_norm = []; gdat_data.ec.ec_data = ec_data; return end - gdat_data.ec.ec_data = ec_data; - - if isempty(ec_data.cd_tot.data) || isempty(ec_data.cd_tot.tgrid) || ischar(icdtot.data) - if (gdat_params.nverbose>=1) - warning(['problems loading data for ' source_icd.ec ... - ' for data_request= ' data_request_eff]); - end - else - % now default is icdtot, will depend on request and data_out param of some kind - data_fullpath = ['from toray nodes using astra_tcv_EC_exp(shot), all results in .ec_data, subfield=' field_for_main_data ... - 'in ec.data, .x, .t, .dim, .dimunits, .label, .units']; - for subfields={'data','x','t','units','dim','dimunits','label'} - gdat_data.ec.(subfields{1}) = gdat_data.ec.ec_data.(field_for_main_data).(subfields{1}); - end - gdat_data.ec.data_fullpath = data_fullpath; - gdat_data.ec.help = ec_help; - % add to main, assume 1st one so just use this time base and x base - % should find launcher tot index - gdat_data.data(end+1,:) = gdat_data.ec.data(end,:); - gdat_data.t = gdat_data.ec.t; - if ischar(gdat_data.label); gdat_data.label = []; end; % label was defined in tcv_mapping_request as char so replace 1st time - gdat_data.label{end+1}=gdat_data.ec.label; - end - end + + end % end filling ec % if any(strmatch('nb',gdat_data.gdat_params.source)) NBH_in_TCV = 0; -- GitLab