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