From 6d2a85fe035e85fb4709f48e6538cac70de1decf Mon Sep 17 00:00:00 2001 From: Olivier Sauter <olivier.sauter@epfl.ch> Date: Thu, 14 Mar 2019 13:05:54 +0000 Subject: [PATCH] formalize ec_data substructure for dimensions and units as well, ready for automated output of main .ec.data from .ec.ec_data:xxx.data git-svn-id: https://spcsvn.epfl.ch/repos/TCV/gdat/trunk@11575 d63d8f72-b253-0410-a779-e742ad2e26cf --- crpptbx/TCV/gdat_tcv.m | 154 +++++++++++++++++++++++++++++------------ 1 file changed, 111 insertions(+), 43 deletions(-) diff --git a/crpptbx/TCV/gdat_tcv.m b/crpptbx/TCV/gdat_tcv.m index 45efc732..e5c465ec 100644 --- a/crpptbx/TCV/gdat_tcv.m +++ b/crpptbx/TCV/gdat_tcv.m @@ -1186,6 +1186,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end mdsopen(shot); + field_for_main_data = 'cd_tot'; % add each source in main.data, on ohm time array gdat_data.units = 'A'; gdat_data.label=[]; % label was defined in tcv_mapping_request as char so replace to allow cells @@ -1200,37 +1201,102 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') else [pabs_gyro,icdtot,pow_dens,currentdrive_dens,rho_dep_pow,drho_pow,pmax,icdmax,currentdrive_dens_w2,rho_dep_icd,drho_icd] = astra_tcv_EC_exp(shot,[],[],[],[],[],gdat_data.gdat_params.trialindx); % centralized function for toray nodes end - data_fullpath = ['from toray nodes using astra_tcv_EC_exp(shot), total icd per gyrotron including effective absorbed power, jcd etc in .extra']; ec_help = 'from toray icdint with extracting of effective Icd for given launcher depending on nb rays used'; - % All EC related quantities + % 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 = {'1','2','3','4','5','6','7','8','9','tot'}; + launchers_grid = [1:10]'; % power deposition related: - ec_data.p_abs_plasma = pabs_gyro.data * 1e6; - ec_data.p_abs_plasma(end+1,:) = nansum(ec_data.p_abs_plasma,1); - ec_data.p_abs_plasma_label = [strrep(pabs_gyro.comment,'MW','W') ' ; last index is total']; - ec_data.p_dens = pow_dens.data * 1e6; - ec_data.p_dens(:,end+1,:) = nansum(ec_data.p_dens,2); - ec_data.p_dens_label = [strrep(pow_dens.comment,'MW','W') ' ; last index is total']; - ec_data.max_pow_dens = pmax.data * 1e6; - ec_data.max_pow_dens_label = strrep(pmax.comment,'MW','W'); - ec_data.rho_max_pow_dens = rho_dep_pow.data * 1e6; - ec_data.rho_max_pow_dens_label = strrep(rho_dep_pow.comment,'MW','W'); - ec_data.width_pow_dens = drho_pow.data; - ec_data.width_pow_dens_label = drho_pow.comment; + ec_data.p_abs_plasma.data = pabs_gyro.data * 1e6; + ec_data.p_abs_plasma.data(end+1,:) = nansum(ec_data.p_abs_plasma.data,1); + 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,:) = nansum(ec_data.p_dens.data,2); + 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.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 * 1e6; + ec_data.rho_max_pow_dens.label = strrep(rho_dep_pow.comment,'MW','W'); + 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 = icdtot.data * 1e6; - ec_data.cd_tot(end+1,:) = nansum(ec_data.cd_tot,1); - ec_data.cd_tot_label = [strrep(icdtot.comment,'MA','A') ' ; last index is total']; - ec_data.cd_dens = currentdrive_dens.data * 1e6; - ec_data.cd_dens(:,end+1,:) = nansum(ec_data.cd_dens,2); - ec_data.cd_dens_label = [strrep(currentdrive_dens.comment,'MA','A') ' ; last index is total']; - ec_data.max_cd_dens = icdmax.data * 1e6; - ec_data.max_cd_dens_label = strrep(icdmax.comment,'MA','A'); - ec_data.rho_max_cd_dens = rho_dep_icd.data; - ec_data.rho_max_cd_dens_label = rho_dep_icd.comment; - ec_data.width_cd_dens = drho_icd.data; - ec_data.width_cd_dens_label = drho_icd.comment; - ec_data.cd_dens_doublewidth = currentdrive_dens_w2.data * 1e6; - ec_data.cd_dens_doublewidth_label = [strrep(currentdrive_dens_w2.comment,'MA','A') ' ; last index is total']; + ec_data.cd_tot.data = icdtot.data * 1e6; + ec_data.cd_tot.data(end+1,:) = nansum(ec_data.cd_tot.data,1); + 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,:) = nansum(ec_data.cd_dens.data,2); + 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.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 else disp(['source_icd.ec = ' source_icd.ec ' not yet implemented, ask O. Sauter']) ec_data.p_abs_plasma = []; @@ -1260,6 +1326,9 @@ 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.t = []; + ec_data.launchers = []; gdat_data.ec.ec_data = ec_data; return end @@ -1270,21 +1339,20 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') ' for data_request= ' data_request_eff]); end else - gdat_data.ec.data = icdtot.data; - gdat_data.ec.units = 'A'; - gdat_data.ec.dim{1} = icdtot.tgrid; - gdat_data.ec.dim{2} = [1:size(gdat_data.ec.data,2)]; - gdat_data.ec.dimunits={'s','launcher i, total'}; - gdat_data.ec.t=gdat_data.ec.dim{1}; - gdat_data.ec.x=gdat_data.ec.dim{2}; + % 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.label='I_{cd}'; gdat_data.ec.help = ec_help; - % add to main, assume 1st one so just use this time base + % 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; - gdat_data.x(end+1) = 1; - gdat_data.label{end+1}=gdat_data.ec.label; % label was defined in tcv_mapping_request as char so replace 1st time + 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 % @@ -1311,12 +1379,12 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end % % add all to last index of .data(:,i) - gdat_data.data(end+1,:) = sum(gdat_data.data(:,:),1); - gdat_data.x(end+1) = size(gdat_data.data,1); - gdat_data.label{end+1}='total current'; + gdat_data.data(end+1,:) = nansum(gdat_data.data,1); + gdat_data.x = [1:size(gdat_data.data,1)]; + gdat_data.label{end+1}='total'; gdat_data.dim{1} = gdat_data.x; gdat_data.dim{2} = gdat_data.t; - gdat_data.dimunits = {'index for each source + total CD', 's'}; + gdat_data.dimunits = {['index for each main source + total ' field_for_main_data], 's'}; gdat_data.data_fullpath = 'see in individual source substructure'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- GitLab